diff --git a/.editorconfig b/.editorconfig index 0cdfc80277e88..5987f2667d470 100644 --- a/.editorconfig +++ b/.editorconfig @@ -13,6 +13,10 @@ insert_final_newline = true trim_trailing_whitespace = true indent_style = tab +[*.{yml,yaml}] +indent_style = space +indent_size = 2 + [*.{gradle,java,kt}] indent_style = space diff --git a/.eslintrc.js b/.eslintrc.js index 2563edaafd004..22c354394d00a 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -26,8 +26,8 @@ const majorMinorRegExp = */ const developmentFiles = [ '**/benchmark/**/*.js', - '**/@(__mocks__|__tests__|test)/**/*.js', - '**/@(storybook|stories)/**/*.js', + '**/@(__mocks__|__tests__|test)/**/*.[tj]s?(x)', + '**/@(storybook|stories)/**/*.[tj]s?(x)', 'packages/babel-preset-default/bin/**/*.js', ]; @@ -49,12 +49,13 @@ module.exports = { jsdoc: { mode: 'typescript', }, + 'import/internal-regex': null, 'import/resolver': require.resolve( './tools/eslint/import-resolver' ), }, rules: { 'jest/expect-expect': 'off', '@wordpress/dependency-group': 'error', - '@wordpress/gutenberg-phase': 'error', + '@wordpress/is-gutenberg-plugin': 'error', '@wordpress/react-no-unsafe-timeout': 'error', '@wordpress/i18n-text-domain': [ 'error', @@ -70,16 +71,16 @@ module.exports = { 'error', { paths: [ + { + name: 'framer-motion', + message: + 'Please use the Framer Motion API through `@wordpress/components` instead.', + }, { name: 'lodash', importNames: [ 'memoize' ], message: 'Please use `memize` instead.', }, - { - name: 'react', - message: - 'Please use React API through `@wordpress/element` instead.', - }, { name: 'reakit', message: @@ -99,7 +100,20 @@ module.exports = { { name: '@emotion/css', message: - 'Please use `@emotion/react` and `@emotion/styled` in order to maintain iframe support', + 'Please use `@emotion/react` and `@emotion/styled` in order to maintain iframe support. As a replacement for the `cx` function, please use the `useCx` hook defined in `@wordpress/components` instead.', + }, + ], + }, + ], + '@typescript-eslint/no-restricted-imports': [ + 'error', + { + paths: [ + { + name: 'react', + message: + 'Please use React API through `@wordpress/element` instead.', + allowTypeImports: true, }, ], }, @@ -115,12 +129,6 @@ module.exports = { message: 'Path access on WordPress dependencies is not allowed.', }, - { - selector: - 'ImportDeclaration[source.value=/^react-spring(?!\\u002Fweb.cjs)/]', - message: - 'The react-spring dependency must specify CommonJS bundle: react-spring/web.cjs', - }, { selector: 'CallExpression[callee.name="deprecated"] Property[key.name="version"][value.value=/' + @@ -176,6 +184,7 @@ module.exports = { ...developmentFiles, ], rules: { + 'import/default': 'off', 'import/no-extraneous-dependencies': 'off', 'import/no-unresolved': 'off', 'import/named': 'off', @@ -185,7 +194,7 @@ module.exports = { { files: [ 'packages/react-native-*/**/*.js' ], settings: { - 'import/ignore': [ 'react-native' ], // Workaround for https://github.com/facebook/react-native/issues/28549 + 'import/ignore': [ 'react-native' ], // Workaround for https://github.com/facebook/react-native/issues/28549. }, }, { @@ -216,16 +225,47 @@ module.exports = { }, }, { - files: [ 'packages/jest*/**/*.js' ], + files: [ 'packages/jest*/**/*.js', '**/test/**/*.js' ], + excludedFiles: [ 'test/e2e/**/*.js' ], extends: [ 'plugin:@wordpress/eslint-plugin/test-unit' ], }, { files: [ 'packages/e2e-test*/**/*.js' ], + excludedFiles: [ 'packages/e2e-test-utils-playwright/**/*.js' ], extends: [ 'plugin:@wordpress/eslint-plugin/test-e2e' ], rules: { 'jest/expect-expect': 'off', }, }, + { + files: [ + 'test/e2e/**/*.[tj]s', + 'packages/e2e-test-utils-playwright/**/*.[tj]s', + ], + extends: [ 'plugin:eslint-plugin-playwright/playwright-test' ], + rules: { + '@wordpress/no-global-active-element': 'off', + '@wordpress/no-global-get-selection': 'off', + 'no-restricted-syntax': [ + 'error', + { + selector: 'CallExpression[callee.property.name="$"]', + message: + '`$` is discouraged, please use `locator` instead', + }, + { + selector: 'CallExpression[callee.property.name="$$"]', + message: + '`$$` is discouraged, please use `locator` instead', + }, + { + selector: + 'CallExpression[callee.object.name="page"][callee.property.name="waitForTimeout"]', + message: 'Prefer page.locator instead.', + }, + ], + }, + }, { files: [ 'bin/**/*.js', 'packages/env/**' ], rules: { @@ -239,5 +279,16 @@ module.exports = { 'jsdoc/valid-types': 'off', }, }, + { + files: [ + '**/@(storybook|stories)/*', + 'packages/components/src/**/*.tsx', + ], + rules: { + // Useful to add story descriptions via JSDoc without specifying params, + // or in TypeScript files where params are likely already documented outside of the JSDoc. + 'jsdoc/require-param': 'off', + }, + }, ], }; diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs new file mode 100644 index 0000000000000..1f31dda7e1826 --- /dev/null +++ b/.git-blame-ignore-revs @@ -0,0 +1,5 @@ +# Set line width to 80. +4857ad58c1241b3d63d21a6880c989b85746c3dc + +# ESLint updates. +f63053cace3c02e284f00918e1854284c85b9132 diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index cd63087b8124c..2c588ae6adcc3 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1,20 +1,26 @@ # Documentation -/docs @chrisvanpatten @ajitbohra -/docs/designers-developers/developers @chrisvanpatten @mkaz @ajitbohra -/docs/designers-developers/designers @chrisvanpatten @mkaz @ajitbohra +/docs @ajitbohra @ryanwelcher @juanmaguitar @fabiankaegy + +# Schemas +/schemas/json @ajlende # Data /packages/api-fetch @nerrad @mmtr /packages/core-data @nerrad -/packages/data @nerrad @coderkevin +/packages/data @nerrad /packages/redux-routine @nerrad /packages/data-controls @nerrad # Blocks /packages/block-library @ajitbohra -/packages/block-library/src/gallery @mkevins -/packages/block-library/src/social-links @mkaz -/packages/block-library/src/social-link @mkaz +/packages/block-library/src/gallery @geriux +/packages/block-library/src/navigation @tellthemachines +/packages/block-library/src/navigation-link @tellthemachines +/packages/block-library/src/navigation-submenu @tellthemachines +/packages/block-library/src/page-list @tellthemachines +/packages/block-library/src/comment-template @michalczaplinski +/packages/block-library/src/comments @michalczaplinski +/packages/block-library/src/table-of-contents @ZebulanStanphill # Duotone /lib/block-supports/duotone.php @ajlende @@ -31,6 +37,7 @@ /packages/blocks /packages/edit-post /packages/editor +/packages/editor/src/components/post-title @alexstine /packages/list-reusable-blocks /packages/shortcode /packages/block-directory @@ -40,26 +47,28 @@ # Widgets /packages/edit-widgets @draganescu @talldan @noisysocks @tellthemachines @adamziel @kevin940726 +/packages/customize-widgets @noisysocks +/packages/widgets @noisysocks # Navigation -/packages/edit-navigation @draganescu @talldan @noisysocks @tellthemachines @adamziel @kevin940726 @getdave +/packages/edit-navigation @draganescu @talldan @tellthemachines @adamziel @kevin940726 @getdave # Full Site Editing /packages/edit-site # Tooling /bin @ntwb @nerrad @ajitbohra -/bin/api-docs @ntwb @nerrad @ajitbohra @nosolosw -/docs/tool @chrisvanpatten @ajitbohra @nosolosw +/bin/api-docs @ntwb @nerrad @ajitbohra +/docs/tool @ajitbohra /packages/babel-plugin-import-jsx-pragma @ntwb @nerrad @ajitbohra /packages/babel-plugin-makepot @ntwb @nerrad @ajitbohra /packages/babel-preset-default @gziolo @ntwb @nerrad @ajitbohra /packages/browserslist-config @ntwb @nerrad @ajitbohra -/packages/create-block @gziolo @mkaz -/packages/create-block-tutorial-template @gziolo +/packages/create-block @gziolo @ryanwelcher +/packages/create-block-tutorial-template @gziolo @ryanwelcher /packages/custom-templated-path-webpack-plugin @ntwb @nerrad @ajitbohra /packages/dependency-extraction-webpack-plugin @gziolo -/packages/docgen @nosolosw +/packages/docgen /packages/e2e-test-utils @ntwb @nerrad @ajitbohra /packages/e2e-tests @ntwb @nerrad @ajitbohra /packages/eslint-plugin @gziolo @ntwb @nerrad @ajitbohra @@ -70,16 +79,16 @@ /packages/npm-package-json-lint-config @gziolo @ntwb @nerrad @ajitbohra /packages/postcss-themes @ntwb @nerrad @ajitbohra /packages/prettier-config @ntwb @gziolo -/packages/scripts @gziolo @ntwb @nerrad @ajitbohra +/packages/scripts @gziolo @ntwb @nerrad @ajitbohra @ryanwelcher /packages/stylelint-config @ntwb # UI Components -/packages/components @ajitbohra @jaymanpandya @chrisvanpatten -/packages/compose @ajitbohra @jaymanpandya -/packages/element @ajitbohra @jaymanpandya -/packages/notices @ajitbohra @jaymanpandya -/packages/nux @ajitbohra @jaymanpandya -/packages/viewport @ajitbohra @jaymanpandya +/packages/components @ajitbohra +/packages/compose @ajitbohra +/packages/element @ajitbohra +/packages/notices @ajitbohra +/packages/nux @ajitbohra +/packages/viewport @ajitbohra /packages/base-styles /packages/icons /packages/primitives @@ -95,22 +104,23 @@ /packages/html-entities /packages/i18n @swissspidy /packages/is-shallow-equal +/packages/keyboard-shortcuts /packages/keycodes +/packages/preferences @talldan /packages/priority-queue /packages/token-list /packages/url /packages/wordcount /packages/warning -/packages/keyboard-shortcuts # Extensibility /packages/hooks @adamsilverstein /packages/plugins @gziolo @adamsilverstein # Rich Text -/packages/format-library @ellatrix @cameronvoell @guarani -/packages/rich-text @ellatrix @cameronvoell @guarani -/packages/block-editor/src/components/rich-text @ellatrix @cameronvoell @guarani +/packages/format-library @ellatrix @fluiddot +/packages/rich-text @ellatrix @fluiddot +/packages/block-editor/src/components/rich-text @ellatrix @fluiddot # Project Management /.github @@ -120,22 +130,16 @@ /packages/env @noahtallen # PHP -/lib @timothybjacobs @spacedmonkey -/lib/global-styles.php @timothybjabocs @spacedmonkey @nosolosw -/lib/experimental-default-theme.json @timothybjabocs @spacedmonkey @nosolosw -/lib/class-wp-theme-json-gutenberg.php @timothybjabocs @spacedmonkey @nosolosw -/lib/class-wp-theme-json-resolver-gutenberg.php @timothybjabocs @spacedmonkey @nosolosw -/phpunit/class-wp-theme-json-test.php @nosolosw - -# Web App -/packages/admin-manifest @ellatrix -/lib/pwa.php @ellatrix -/lib/service-worker.js @ellatrix +/lib @timothybjacobs @spacedmonkey +/lib/experimental/class-wp-rest-block-editor-settings-controller.php @timothybjacobs @spacedmonkey @geriux + +# Native +/packages/components/src/mobile/global-styles-context @geriux # Native (Unowned) -*.native.js @ghost -*.android.js @ghost -*.ios.js @ghost -*.native.scss @ghost -*.android.scss @ghost -*.ios.scss @ghost +*.native.js +*.android.js +*.ios.js +*.native.scss +*.android.scss +*.ios.scss diff --git a/.github/ISSUE_TEMPLATE/Bug_report.yml b/.github/ISSUE_TEMPLATE/Bug_report.yml index b116dbec7f06a..ab001b41ff793 100644 --- a/.github/ISSUE_TEMPLATE/Bug_report.yml +++ b/.github/ISSUE_TEMPLATE/Bug_report.yml @@ -1,127 +1,72 @@ name: Bug report description: Report a bug with the WordPress block editor or Gutenberg plugin -title: "" body: -- type: markdown - attributes: - value: | - Thanks for taking the time to fill out this bug report! If this is a security issue, please report it in HackerOne instead: https://hackerone.com/wordpress + - type: markdown + attributes: + value: | + Thanks for taking the time to fill out this bug report! If this is a security issue, please report it in HackerOne instead: https://hackerone.com/wordpress + - type: textarea + attributes: + label: Description + description: Please write a brief description of the bug, including what you expect to happen and what is currently happening. + placeholder: | + Feature '...' is not working properly. I expect '...' to happen, but '...' happens instead + validations: + required: true -- type: checkboxes - attributes: - label: Is there an existing issue for this? - description: Please check if the bug has already been reported by searching https://github.com/WordPress/gutenberg/issues. - options: - - label: I have searched the existing issues - required: true + - type: textarea + attributes: + label: Step-by-step reproduction instructions + description: Please write the steps needed to reproduce the bug. + placeholder: | + 1. Go to '...' + 2. Click on '...' + 3. Scroll down to '...' + validations: + required: true -- type: checkboxes - attributes: - label: Have you tried deactivating all plugins except Gutenberg? - description: Please make sure you have ruled out plugin conflicts before reporting. - options: - - label: I have tested with all plugins deactivated. - required: true + - type: textarea + attributes: + label: Screenshots, screen recording, code snippet + description: | + If possible, please upload a screenshot or screen recording which demonstrates the bug. You can use LIEcap to create a GIF screen recording: https://www.cockos.com/licecap/ + Tip: You can attach images or log files by clicking this area to highlight it and then dragging files in. + If this bug is to related to a developer API, please share a code snippet that demonstrates the issue. For small snippets paste it directly here, or you can use GitHub Gist to share multiple code files: https://gist.github.com + Please ensure the shared code can be used by a developer to reproduce the issue—ideally it can be copied into a local development environment or executed in a browser console to help debug the issue + validations: + required: false -- type: checkboxes - attributes: - label: Have you tried replicating the bug using a default theme e.g. Twenty Twenty? - description: Please make sure you have confirmed it's not a theme specific problem. - options: - - label: I have tested with a default theme. - required: true + - type: textarea + attributes: + label: Environment info + description: | + Please list what Gutenberg version you are using. If you aren't using Gutenberg, please note that it's not installed. + placeholder: | + - WordPress version, Gutenberg version, and active Theme you are using. + - Browser(s) are you seeing the problem on. + - Device you are using and operating system (e.g. "Desktop with Windows 10", "iPhone with iOS 14", etc.). + validations: + required: false -- type: textarea - attributes: - label: Description - description: Please write a brief description of the bug. - validations: - required: true + - type: dropdown + id: existing + attributes: + label: Please confirm that you have searched existing issues in the repo. + description: You can do this by searching https://github.com/WordPress/gutenberg/issues and making sure the bug is not related to another plugin. + multiple: true + options: + - 'Yes' + - 'No' + validations: + required: true -- type: textarea - attributes: - label: Step-by-step reproduction instructions - description: Please list the steps needed to reproduce the bug. - placeholder: | - 1. Go to '...' - 2. Click on '...' - 3. Scroll down to '...' - 4. See error... - validations: - required: true - -- type: textarea - attributes: - label: Expected Behavior - description: Please describe what you expected to happen. - validations: - required: true - -- type: textarea - attributes: - label: Current Behavior - description: A concise description of what you're experiencing. - validations: - required: true - -- type: textarea - attributes: - label: Screenshots or screen recording (optional) - description: | - If possible, please upload a screenshot or screen recording which demonstrates the bug. You can use LIEcap to create a GIF screen recording: https://www.cockos.com/licecap/ - Tip: You can attach images or log files by clicking this area to highlight it and then dragging files in. - validations: - required: false - -- type: textarea - attributes: - label: Code snippet (optional) - description: | - If this bug is to related to a developer API, please share a code snippet that demonstrates the issue. For small snippets paste it directly here, or you can use GitHub Gist to share multiple code files: https://gist.github.com - Please ensure the shared code can be used by a developer to reproduce the issue—ideally it can be copied into a local development environment or executed in a browser console to help debug the issue. - validations: - required: false - -- type: textarea - attributes: - label: WordPress Information - description: | - Please list what WordPress version you are using. You can find this information in Tools → Site Health → Info → WordPress - validations: - required: false - -- type: textarea - attributes: - label: Gutenberg Information - description: | - Please list what Gutenberg version you are using. If you aren't using Gutenberg, please note that it's not installed. - validations: - required: false - -- type: dropdown - id: browsers - attributes: - label: What browsers are you seeing the problem on? - multiple: true - options: - - Firefox - - Chrome - - Safari - - Microsoft Edge - - Other - -- type: textarea - attributes: - label: Device Information - description: | - Please list what device you are using e.g. "Desktop" or "iPhone 11". - validations: - required: false - -- type: textarea - attributes: - label: Operating System Information - description: | - Please list what operating system you are using e.g. "Windows 10" or "iOS 14" - validations: - required: false + - type: dropdown + id: plugins + attributes: + label: Please confirm that you have tested with all plugins deactivated except Gutenberg. + multiple: true + options: + - 'Yes' + - 'No' + validations: + required: true diff --git a/.github/ISSUE_TEMPLATE/Bug_report_mobile.md b/.github/ISSUE_TEMPLATE/Bug_report_mobile.md index 06b6fad1bb6bc..8347a6649ea8d 100644 --- a/.github/ISSUE_TEMPLATE/Bug_report_mobile.md +++ b/.github/ISSUE_TEMPLATE/Bug_report_mobile.md @@ -44,7 +44,7 @@ the bug. --> ## WordPress information -- WordPress version: <!-- e.g. "5.6.0". Find this in Tools → Site Health → Info → WordPress --> +- WordPress version: <!-- e.g. "5.8.0". Find this in Tools → Site Health → Info → WordPress --> - Gutenberg version: <!-- e.g. "9.4.0" or "Not installed" --> - Are all plugins except Gutenberg deactivated? <!-- "Yes" or "No" --> - Are you using a default theme (e.g. Twenty Twenty-One)? <!-- "Yes" or "No" --> diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 45bad9c0612a1..2ac98e4c82aef 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,28 +1,19 @@ -<!-- Learn the overall process and best practices for pull requests at https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/repository-management.md#pull-requests. --> +<!-- Thanks for contributing to Gutenberg! Please follow the Gutenberg Contributing Guidelines: +https://github.com/WordPress/gutenberg/blob/trunk/CONTRIBUTING.md --> -<!-- Gutenberg's license is in the process of updating to be dual-licensed under the GPL and MPL. As part of that transition, all new contributions are dual-licensed. For more information, see: https://github.com/WordPress/gutenberg/blob/trunk/LICENSE.md --> +## What? +<!-- In a few words, what is the PR actually doing? --> -## Description -<!-- Please describe what you have changed or added --> +## Why? +<!-- Why is this PR necessary? What problem is it solving? Reference any existing previous issue(s) or PR(s), but please add a short summary here, too --> -## How has this been tested? -<!-- Please describe in detail how you tested your changes. --> -<!-- Include details of your testing environment, tests ran to see how --> -<!-- your change affects other areas of the code, etc. --> +## How? +<!-- How is your PR addressing the issue at hand? What are the implementation details? --> -## Screenshots <!-- if applicable --> +## Testing Instructions +<!-- Please include step by step instructions on how to test this PR. --> +<!-- 1. Open a Post or Page. --> +<!-- 2. Insert a Heading Block. --> +<!-- 3. etc. --> -## Types of changes -<!-- What types of changes does your code introduce? --> -<!-- Bug fix (non-breaking change which fixes an issue) --> -<!-- New feature (non-breaking change which adds functionality) --> -<!-- Breaking change (fix or feature that would cause existing functionality to not work as expected) --> - -## Checklist: -- [ ] My code is tested. -- [ ] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ --> -- [ ] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ --> -- [ ] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md --> -- [ ] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ --> -- [ ] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ --> -- [ ] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md --> +## Screenshots or screencast <!-- if applicable --> diff --git a/.github/report-flaky-tests/action.yml b/.github/report-flaky-tests/action.yml new file mode 100644 index 0000000000000..65e303c6fe59a --- /dev/null +++ b/.github/report-flaky-tests/action.yml @@ -0,0 +1,17 @@ +name: 'Report flaky tests' +description: 'Report flaky tests to GitHub issues' +inputs: + repo-token: + description: 'GitHub token' + required: true + label: + description: 'The flaky-test label name' + required: true + default: 'flaky-test' + artifact-name-prefix: + description: 'The prefix name of the uploaded artifact' + required: true + default: 'flaky-tests-report' +runs: + using: 'node12' + main: 'index.js' diff --git a/.github/report-flaky-tests/index.js b/.github/report-flaky-tests/index.js new file mode 100644 index 0000000000000..2fef1a9da4f31 --- /dev/null +++ b/.github/report-flaky-tests/index.js @@ -0,0 +1,334 @@ +/** + * External dependencies + */ +const path = require( 'path' ); +const github = require( '@actions/github' ); +const core = require( '@actions/core' ); +const unzipper = require( 'unzipper' ); +const { formatResultsErrors } = require( 'jest-message-util' ); + +const TEST_RESULTS_LIST = { + open: `<!-- __TEST_RESULTS_LIST__ -->`, + close: `<!-- /__TEST_RESULTS_LIST__ -->`, +}; +const TEST_RESULT = { + open: '<!-- __TEST_RESULT__ -->', + close: '<!-- /__TEST_RESULT__ -->', +}; + +const metaData = { + render: ( json ) => `<!-- __META_DATA__:${ JSON.stringify( json ) } -->`, + get: ( str ) => { + const matched = str.match( /<!-- __META_DATA__:(.*) -->/ ); + if ( matched ) { + return JSON.parse( matched[ 1 ] ); + } + }, +}; + +( async function run() { + const token = core.getInput( 'repo-token', { required: true } ); + const label = core.getInput( 'label', { required: true } ); + const artifactNamePrefix = core.getInput( 'artifact-name-prefix', { + required: true, + } ); + + const octokit = github.getOctokit( token ); + + const flakyTests = await downloadReportFromArtifact( + octokit, + artifactNamePrefix + ); + + if ( ! flakyTests ) { + return; + } + + const issues = await fetchAllIssuesLabeledFlaky( octokit, label ); + + for ( const flakyTest of flakyTests ) { + const { + runner: testRunner = 'jest-circus', + title: testTitle, + path: testPath, + results: testResults, + } = flakyTest; + const issueTitle = getIssueTitle( testTitle ); + const reportedIssue = issues.find( + ( issue ) => issue.title === issueTitle + ); + const isTrunk = getHeadBranch() === 'trunk'; + let issue; + + if ( reportedIssue ) { + const body = reportedIssue.body; + const meta = metaData.get( body ); + + if ( isTrunk ) { + const headCommit = github.context.sha; + const baseCommit = meta.baseCommit || github.context.sha; + meta.baseCommit = baseCommit; + + try { + const { data } = await octokit.rest.repos.compareCommits( { + ...github.context.repo, + base: baseCommit, + head: headCommit, + per_page: 1, + } ); + + meta.failedTimes += testResults.length; + meta.totalCommits = data.total_commits + 1; + } catch ( err ) { + // It might be a deleted commit, + // treat the current commit as the base commit. + meta.baseCommit = headCommit; + meta.failedTimes = testResults.length; + meta.totalCommits = 1; + } + } + + let testResultsList = + body.includes( TEST_RESULTS_LIST.open ) && + body.includes( TEST_RESULTS_LIST.close ) + ? body + .slice( + body.indexOf( TEST_RESULTS_LIST.open ) + + TEST_RESULTS_LIST.open.length, + body.indexOf( TEST_RESULTS_LIST.close ) + ) + /** + * Split the text from: + * ``` + * <!-- __TEST_RESULT__ --> Test result 1 <!-- /__TEST_RESULT__ --> + * ... + * <!-- __TEST_RESULT__ --> Test result 2 <!-- /__TEST_RESULT__ --> + * <!-- __TEST_RESULT__ --> Test result 3 <!-- /__TEST_RESULT__ --> + * ``` + * + * into: + * ``` + * [ + * '<!-- __TEST_RESULT__ --> Test result 1 <!-- /__TEST_RESULT__ -->', + * '<!-- __TEST_RESULT__ --> Test result 2 <!-- /__TEST_RESULT__ -->', + * '<!-- __TEST_RESULT__ --> Test result 3 <!-- /__TEST_RESULT__ -->', + * ] + * ``` + */ + .split( + new RegExp( + `(?<=${ TEST_RESULT.close })\n+(?:\.\.\.\n+)?(?=${ TEST_RESULT.open })` + ) + ) + : []; + // GitHub issues has character limits on issue's body, + // so we only preserve the first and the 9 latest results. + if ( testResultsList.length > 10 ) { + testResultsList = [ + testResultsList[ 0 ], + '...', + ...testResultsList.slice( -9 ), + ]; + } + + // Concat the test results list with the latest test results. + const formattedTestResults = [ + ...testResultsList, + formatTestResults( { + testRunner, + testPath, + testResults, + } ), + ].join( '\n' ); + + const response = await octokit.rest.issues.update( { + ...github.context.repo, + issue_number: reportedIssue.number, + state: 'open', + body: renderIssueBody( { + meta, + testTitle, + testPath, + formattedTestResults, + } ), + } ); + + issue = response.data; + } else { + const meta = isTrunk + ? { + failedTimes: testResults.length, + totalCommits: 1, + baseCommit: github.context.sha, + } + : { + failedTimes: 0, + totalCommits: 0, + }; + + const response = await octokit.rest.issues.create( { + ...github.context.repo, + title: issueTitle, + body: renderIssueBody( { + meta, + testTitle, + testPath, + formattedTestResults: formatTestResults( testResults ), + } ), + labels: [ label ], + } ); + + issue = response.data; + } + + core.info( `Reported flaky test to ${ issue.html_url }` ); + } +} )().catch( ( err ) => { + core.error( err ); +} ); + +async function fetchAllIssuesLabeledFlaky( octokit, label ) { + const issues = await octokit.paginate( 'GET /repos/{owner}/{repo}/issues', { + ...github.context.repo, + state: 'all', + labels: label, + } ); + + return issues; +} + +async function downloadReportFromArtifact( octokit, artifactNamePrefix ) { + const { + data: { artifacts }, + } = await octokit.rest.actions.listWorkflowRunArtifacts( { + ...github.context.repo, + run_id: github.context.payload.workflow_run.id, + } ); + + const matchArtifact = artifacts.find( ( artifact ) => + artifact.name.startsWith( artifactNamePrefix ) + ); + + if ( ! matchArtifact ) { + // No flaky tests reported in this run. + return; + } + + const download = await octokit.rest.actions.downloadArtifact( { + ...github.context.repo, + artifact_id: matchArtifact.id, + archive_format: 'zip', + } ); + + const { files } = await unzipper.Open.buffer( + Buffer.from( download.data ) + ); + const fileBuffers = await Promise.all( + files.map( ( file ) => file.buffer() ) + ); + const parsedFiles = fileBuffers.map( ( buffer ) => + JSON.parse( buffer.toString() ) + ); + + return parsedFiles; +} + +function getIssueTitle( testTitle ) { + return `[Flaky Test] ${ testTitle }`; +} + +function renderIssueBody( { + meta, + testTitle, + testPath, + formattedTestResults, +} ) { + return `${ metaData.render( meta ) } +**Flaky test detected. This is an auto-generated issue by GitHub Actions. Please do NOT edit this manually.** + +## Test title +${ testTitle } + +## Test path +\`${ testPath }\` + +## Flaky rate (_estimated_) +\`${ meta.failedTimes } / ${ meta.totalCommits + meta.failedTimes }\` runs + +## Errors +${ TEST_RESULTS_LIST.open } +${ formattedTestResults } +${ TEST_RESULTS_LIST.close } +`; +} + +function formatTestErrorMessage( { testRunner, testResults, testPath } ) { + switch ( testRunner ) { + case '@playwright/test': { + // Could do a slightly better formatting than this. + return stripAnsi( + testResults.map( ( result ) => result.error.stack ).join( '\n' ) + ); + } + case 'jest-circus': + default: { + return stripAnsi( + formatResultsErrors( + testResults, + { + rootDir: path.join( + process.cwd(), + 'packages/e2e-tests' + ), + }, + {}, + testPath + ) + ); + } + } +} + +function formatTestResults( { testRunner, testPath, testResults } ) { + const date = new Date().toISOString(); + // It will look something like this without formatting: + // ▶ [2021-08-31T16:15:19.875Z] Test passed after 2 failed attempts on trunk + return `${ TEST_RESULT.open }<details> +<summary> + <time datetime="${ date }"><code>[${ date }]</code></time> + Test passed after ${ testResults.length } failed ${ + testResults.length === 0 ? 'attempt' : 'attempts' + } on <a href="${ getRunURL() }"><code>${ getHeadBranch() }</code></a>. +</summary> + +\`\`\` +${ formatTestErrorMessage( { testRunner, testPath, testResults } ) } +\`\`\` +</details>${ TEST_RESULT.close }`; +} + +function getHeadBranch() { + return github.context.payload.workflow_run.head_branch; +} + +function getRunURL() { + return github.context.payload.workflow_run.html_url; +} + +/** + * Copied pasted from `strip-ansi` to use without ESM. + * @see https://github.com/chalk/strip-ansi + * Licensed under MIT license. + */ +function stripAnsi( string ) { + return string.replace( + new RegExp( + [ + '[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:[a-zA-Z\\d]*(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)', + '(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))', + ].join( '|' ), + 'g' + ), + '' + ); +} diff --git a/.github/workflows/build-plugin-zip.yml b/.github/workflows/build-plugin-zip.yml index df11d86f673f8..8bd14acdff60c 100644 --- a/.github/workflows/build-plugin-zip.yml +++ b/.github/workflows/build-plugin-zip.yml @@ -64,6 +64,8 @@ jobs: old_version: ${{ steps.get_version.outputs.old_version }} new_version: ${{ steps.get_version.outputs.new_version }} release_branch: ${{ steps.get_version.outputs.release_branch }} + release_branch_commit: ${{ steps.commit_version_bump_to_release_branch.outputs.version_bump_commit }} + trunk_commit: ${{ steps.commit_version_bump_to_trunk.outputs.version_bump_commit }} steps: - name: Checkout code @@ -122,19 +124,21 @@ jobs: cat <<< $(jq --tab --arg version "${VERSION}" '.version = $version' package.json) > package.json cat <<< $(jq --tab --arg version "${VERSION}" '.version = $version' package-lock.json) > package-lock.json sed -i "s/${{ steps.get_version.outputs.old_version }}/${VERSION}/g" gutenberg.php - sed -i "s/${{ steps.get_version.outputs.old_version }}/${VERSION}/g" readme.txt - name: Commit the version bump to the release branch + id: commit_version_bump_to_release_branch run: | - git add gutenberg.php package.json package-lock.json readme.txt + git add gutenberg.php package.json package-lock.json git commit -m "Bump plugin version to ${{ steps.get_version.outputs.new_version }}" git push --set-upstream origin "${{ steps.get_version.outputs.release_branch }}" + echo "::set-output name=version_bump_commit::$(git rev-parse --verify --short HEAD)" - name: Fetch trunk if: ${{ github.ref != 'refs/heads/trunk' }} run: git fetch --depth=1 origin trunk - name: Cherry-pick the version bump commit to trunk + id: commit_version_bump_to_trunk run: | git checkout trunk git pull @@ -142,6 +146,7 @@ jobs: if [[ ${{ steps.get_version.outputs.old_version }} == "$TRUNK_VERSION" ]]; then git cherry-pick "${{ steps.get_version.outputs.release_branch }}" git push + echo "::set-output name=version_bump_commit::$(git rev-parse --verify --short HEAD)" fi build: @@ -154,6 +159,8 @@ jobs: github.event_name == 'workflow_dispatch' || github.repository == 'WordPress/gutenberg' ) + outputs: + job_status: ${{ job.status }} steps: - name: Checkout code @@ -162,9 +169,9 @@ jobs: ref: ${{ needs.bump-version.outputs.release_branch || github.ref }} - name: Use desired version of NodeJS - uses: actions/setup-node@38d90ce44d5275ad62cc48384b3d8a58c500bb5f # v2.2.2 + uses: actions/setup-node@5b52f097d36d4b0b2f94ed6de710023fbb8b2236 # v3.1.0 with: - node-version: 14 + node-version-file: '.nvmrc' cache: npm - name: Build Gutenberg plugin ZIP file @@ -201,6 +208,51 @@ jobs: name: release-notes path: ./release-notes.txt + revert-version-bump: + name: Revert version bump if build failed + needs: [bump-version, build] + runs-on: ubuntu-latest + if: | + always() && + ( needs.build.outputs.job_status == 'failure' ) && + needs.bump-version.outputs.release_branch_commit + + steps: + - name: Checkout code + uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f # v2.3.4 + with: + fetch-depth: 2 + ref: ${{ needs.bump-version.outputs.release_branch }} + token: ${{ secrets.GUTENBERG_TOKEN }} + + - name: Configure git user name and email + run: | + git config user.name "Gutenberg Repository Automation" + git config user.email gutenberg@wordpress.org + + - name: Revert version bump commit on release branch + if: | + github.event.inputs.version == 'stable' || + contains( needs.bump-version.outputs.old_version, 'rc' ) + run: | + git revert --no-edit ${{ needs.bump-version.outputs.release_branch_commit }} + git push --set-upstream origin "${{ needs.bump-version.outputs.release_branch }}" + + - name: Delete release branch if it was only just created for the RC + if: | + github.event.inputs.version == 'rc' && + ! contains( needs.bump-version.outputs.old_version, 'rc' ) + run: | + git push origin :"${{ needs.bump-version.outputs.release_branch }}" + + - name: Revert version bump on trunk + if: ${{ needs.bump-version.outputs.trunk_commit }} + run: | + git fetch --depth=2 origin trunk + git checkout trunk + git revert --no-edit ${{ needs.bump-version.outputs.trunk_commit }} + git push --set-upstream origin trunk + create-release: name: Create Release Draft and Attach Asset needs: [bump-version, build] @@ -246,3 +298,44 @@ jobs: asset_path: ./gutenberg.zip asset_name: gutenberg.zip asset_content_type: application/zip + + npm-publish: + name: Publish WordPress packages to npm + runs-on: ubuntu-latest + environment: WordPress packages + needs: [bump-version, build] + if: ${{ endsWith( needs.bump-version.outputs.new_version, '-rc.1' ) }} + steps: + - name: Checkout (for CLI) + uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f # v2.3.4 + with: + path: main + ref: trunk + + - name: Checkout (for publishing) + uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f # v2.3.4 + with: + path: publish + # Later, we switch this branch in the script that publishes packages. + ref: trunk + token: ${{ secrets.GUTENBERG_TOKEN }} + + - name: Configure git user name and email (for publishing) + run: | + cd publish + git config user.name "Gutenberg Repository Automation" + git config user.email gutenberg@wordpress.org + + - name: Setup Node (for CLI) + uses: actions/setup-node@5b52f097d36d4b0b2f94ed6de710023fbb8b2236 # v3.1.0 + with: + node-version-file: 'main/.nvmrc' + registry-url: 'https://registry.npmjs.org' + + - name: Publish packages to npm ("latest" dist-tag) + run: | + cd main + npm ci + ./bin/plugin/cli.js npm-latest --semver minor --ci --repository-path ../publish + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} diff --git a/.github/workflows/bundle-size.yml b/.github/workflows/bundle-size.yml index 507bec367f621..d2b1298e484bb 100644 --- a/.github/workflows/bundle-size.yml +++ b/.github/workflows/bundle-size.yml @@ -35,9 +35,6 @@ jobs: build: name: Check runs-on: ubuntu-latest - strategy: - matrix: - node: ['14'] steps: - uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f # v2.3.4 @@ -45,9 +42,9 @@ jobs: fetch-depth: 1 - name: Use desired version of NodeJS - uses: actions/setup-node@38d90ce44d5275ad62cc48384b3d8a58c500bb5f # v2.2.2 + uses: actions/setup-node@5b52f097d36d4b0b2f94ed6de710023fbb8b2236 # v3.1.0 with: - node-version: ${{ matrix.node }} + node-version-file: '.nvmrc' cache: npm - uses: preactjs/compressed-size-action@df6e03e187079aef959a2878311639c77b95ee2e # v2.2.0 diff --git a/.github/workflows/create-block.yml b/.github/workflows/create-block.yml index 7c3b7fcad3ab8..012ada8d05f14 100644 --- a/.github/workflows/create-block.yml +++ b/.github/workflows/create-block.yml @@ -3,7 +3,7 @@ name: Create Block on: pull_request: push: - branches: [trunk, wp/trunk] + branches: [trunk, wp/latest] # Cancels all previous workflow runs for pull requests that have not completed. concurrency: @@ -15,23 +15,28 @@ concurrency: jobs: checks: name: Checks - runs-on: ubuntu-latest + runs-on: ${{ matrix.os }} if: ${{ github.repository == 'WordPress/gutenberg' || github.event_name == 'pull_request' }} strategy: fail-fast: false matrix: - node: ['12', '14'] + node: [14] + os: [macos-latest, ubuntu-latest, windows-latest] + include: + - node: 12 + os: ubuntu-latest steps: - uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f # v2.3.4 - name: Use desired version of NodeJS - uses: actions/setup-node@38d90ce44d5275ad62cc48384b3d8a58c500bb5f # v2.2.2 + uses: actions/setup-node@5b52f097d36d4b0b2f94ed6de710023fbb8b2236 # v3.1.0 with: node-version: ${{ matrix.node }} cache: npm - name: npm install, build, format and lint + shell: bash run: | npm ci - npm run test:create-block + bash ./bin/test-create-block.sh diff --git a/.github/workflows/end2end-test-playwright.yml b/.github/workflows/end2end-test-playwright.yml new file mode 100644 index 0000000000000..8ab3b9a22966f --- /dev/null +++ b/.github/workflows/end2end-test-playwright.yml @@ -0,0 +1,66 @@ +name: End-to-End Tests Playwright + +on: + pull_request: + push: + branches: + - trunk + - 'release/**' + - 'wp/**' + +# Cancels all previous workflow runs for pull requests that have not completed. +concurrency: + # The concurrency group contains the workflow name and the branch name for pull requests + # or the commit hash for any other events. + group: ${{ github.workflow }}-${{ github.event_name == 'pull_request' && github.head_ref || github.sha }} + cancel-in-progress: true + +jobs: + e2e: + name: E2E Tests + runs-on: ubuntu-latest + if: ${{ github.repository == 'WordPress/gutenberg' || github.event_name == 'pull_request' }} + strategy: + fail-fast: false + + steps: + - uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f # v2.3.4 + + - name: Use desired version of NodeJS + uses: actions/setup-node@5b52f097d36d4b0b2f94ed6de710023fbb8b2236 # v3.1.0 + with: + node-version-file: '.nvmrc' + cache: npm + + - name: Npm install and build + run: | + npm ci + npm run build + + - name: Install Playwright dependencies + run: | + npx playwright install chromium --with-deps + + - name: Install WordPress and start the server + run: | + npm run wp-env start + + - name: Run the tests + run: | + npm run test-e2e:playwright + + - name: Archive debug artifacts (screenshots, traces) + uses: actions/upload-artifact@e448a9b857ee2131e752b06002bf0e093c65e571 # v2.2.2 + if: always() + with: + name: failures-artifacts + path: artifacts + if-no-files-found: ignore + + - name: Archive flaky tests report + uses: actions/upload-artifact@e448a9b857ee2131e752b06002bf0e093c65e571 # v2.2.2 + if: always() + with: + name: flaky-tests-report-playwright + path: flaky-tests + if-no-files-found: ignore diff --git a/.github/workflows/end2end-test.yml b/.github/workflows/end2end-test.yml index d8e822c2576c3..e8e140bcd0e77 100644 --- a/.github/workflows/end2end-test.yml +++ b/.github/workflows/end2end-test.yml @@ -24,21 +24,20 @@ jobs: fail-fast: false matrix: part: [1, 2, 3, 4] - node: ['14'] steps: - uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f # v2.3.4 - name: Use desired version of NodeJS - uses: actions/setup-node@38d90ce44d5275ad62cc48384b3d8a58c500bb5f # v2.2.2 + uses: actions/setup-node@5b52f097d36d4b0b2f94ed6de710023fbb8b2236 # v3.1.0 with: - node-version: ${{ matrix.node }} + node-version-file: '.nvmrc' cache: npm - name: Npm install and build run: | npm ci - FORCE_REDUCED_MOTION=true npm run build + npm run build - name: Install WordPress run: | @@ -55,3 +54,12 @@ jobs: with: name: failures-artifacts path: artifacts + if-no-files-found: ignore + + - name: Archive flaky tests report + uses: actions/upload-artifact@e448a9b857ee2131e752b06002bf0e093c65e571 # v2.2.2 + if: always() + with: + name: flaky-tests-report-${{ matrix.part }} + path: flaky-tests + if-no-files-found: ignore diff --git a/.github/workflows/flaky-tests.yml b/.github/workflows/flaky-tests.yml new file mode 100644 index 0000000000000..1efe37a3d72ae --- /dev/null +++ b/.github/workflows/flaky-tests.yml @@ -0,0 +1,32 @@ +name: Report Flaky Tests + +on: + workflow_run: + workflows: ['End-to-End Tests', 'End-to-End Tests Playwright'] + types: + - completed + +jobs: + report-to-issues: + name: Report to GitHub issues + runs-on: ubuntu-latest + if: ${{ github.event.workflow_run.conclusion == 'success' }} + steps: + - uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f # v2.3.4 + + - name: Use desired version of NodeJS + uses: actions/setup-node@5b52f097d36d4b0b2f94ed6de710023fbb8b2236 # v3.1.0 + with: + node-version-file: '.nvmrc' + cache: npm + + - name: Npm install + run: | + npm ci + + - name: Report flaky tests + uses: ./.github/report-flaky-tests + with: + repo-token: '${{ secrets.GITHUB_TOKEN }}' + label: '[Type] Flaky Test' + artifact-name-prefix: flaky-tests-report diff --git a/.github/workflows/performance.yml b/.github/workflows/performance.yml index ecec05d742044..2efa28a0fb736 100644 --- a/.github/workflows/performance.yml +++ b/.github/workflows/performance.yml @@ -24,9 +24,9 @@ jobs: - uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f # v2.3.4 - name: Use desired version of NodeJS - uses: actions/setup-node@38d90ce44d5275ad62cc48384b3d8a58c500bb5f # v2.2.2 + uses: actions/setup-node@5b52f097d36d4b0b2f94ed6de710023fbb8b2236 # v3.1.0 with: - node-version: 14 + node-version-file: '.nvmrc' cache: npm - name: Npm install @@ -54,7 +54,14 @@ jobs: - name: Compare performance with base branch if: github.event_name == 'push' - run: ./bin/plugin/cli.js perf --ci $GITHUB_SHA wp/5.8 --tests-branch $GITHUB_SHA + # The base hash used here need to be a commit that is compatible with the current WP version + # The current one is debd225d007f4e441ceec80fbd6fa96653f94737 and it needs to be updated every WP major release. + # It is used as a base comparison point to avoid fluctuation in the performance metrics. + run: | + WP_VERSION=$(awk -F ': ' '/^Tested up to/{print $2}' readme.txt) + IFS=. read -ra WP_VERSION_ARRAY <<< "$WP_VERSION" + WP_MAJOR="${WP_VERSION_ARRAY[0]}.${WP_VERSION_ARRAY[1]}" + ./bin/plugin/cli.js perf --ci $GITHUB_SHA debd225d007f4e441ceec80fbd6fa96653f94737 --tests-branch $GITHUB_SHA --wp-version "$WP_MAJOR" - uses: actions/github-script@0.3.0 if: github.event_name == 'push' @@ -69,4 +76,5 @@ jobs: if: github.event_name == 'push' env: COMMITTED_AT: ${{ steps.commit-timestamp.outputs.result }} - run: ./bin/log-perormance-results.js trunk $GITHUB_SHA wp/5.8 $COMMITTED_AT + CODEHEALTH_PROJECT_TOKEN: ${{ secrets.CODEHEALTH_PROJECT_TOKEN }} + run: ./bin/log-perormance-results.js $CODEHEALTH_PROJECT_TOKEN trunk $GITHUB_SHA debd225d007f4e441ceec80fbd6fa96653f94737 $COMMITTED_AT diff --git a/.github/workflows/publish-npm-packages.yml b/.github/workflows/publish-npm-packages.yml new file mode 100644 index 0000000000000..b0644c7368e63 --- /dev/null +++ b/.github/workflows/publish-npm-packages.yml @@ -0,0 +1,83 @@ +name: Publish npm packages + +on: + workflow_dispatch: + inputs: + release_type: + description: 'Release type' + required: true + type: choice + default: 'development' + options: + - development + - bugfix + - wp + wp_version: + description: 'WordPress major version (`wp` only)' + type: string + +# Cancels all previous workflow runs for pull requests that have not completed. +concurrency: + # The concurrency group contains the workflow name and the branch name for pull requests + # or the commit hash for any other events. + group: ${{ github.workflow }}-${{ github.event_name == 'pull_request' && github.head_ref || github.sha }} + cancel-in-progress: true + +jobs: + release: + name: Release - ${{ github.event.inputs.release_type }} + runs-on: ubuntu-latest + environment: WordPress packages + steps: + - name: Checkout (for CLI) + uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f # v2.3.4 + with: + path: main + ref: trunk + + - name: Checkout (for publishing) + uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f # v2.3.4 + with: + path: publish + # Later, we switch this branch in the script that publishes packages. + ref: trunk + token: ${{ secrets.GUTENBERG_TOKEN }} + + - name: Configure git user name and email (for publishing) + run: | + cd publish + git config user.name "Gutenberg Repository Automation" + git config user.email gutenberg@wordpress.org + + - name: Setup Node (for CLI) + uses: actions/setup-node@5b52f097d36d4b0b2f94ed6de710023fbb8b2236 # v3.1.0 + with: + node-version-file: 'main/.nvmrc' + registry-url: 'https://registry.npmjs.org' + + - name: Publish development packages to npm ("next" dist-tag) + if: ${{ github.event.inputs.release_type == 'development' }} + run: | + cd main + npm ci + ./bin/plugin/cli.js npm-next --ci --repository-path ../publish + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + + - name: Publish packages to npm with bug fixes ("latest" dist-tag) + if: ${{ github.event.inputs.release_type == 'bugfix' }} + run: | + cd main + npm ci + ./bin/plugin/cli.js npm-bugfix --ci --repository-path ../publish + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + + - name: Publish packages to npm for WP major ("wp/${{ github.event.inputs.wp_version || 'X.Y' }}" dist-tag) + if: ${{ github.event.inputs.release_type == 'wp' && github.event.inputs.wp_version }} + run: | + cd main + npm ci + ./bin/plugin/cli.js npm-wp --wp-version=${{ github.event.inputs.wp_version }} --ci --repository-path ../publish + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} diff --git a/.github/workflows/pull-request-automation.yml b/.github/workflows/pull-request-automation.yml index 064a4380707db..5337acc848134 100644 --- a/.github/workflows/pull-request-automation.yml +++ b/.github/workflows/pull-request-automation.yml @@ -20,7 +20,7 @@ jobs: ref: trunk - name: Use desired version of NodeJS - uses: actions/setup-node@38d90ce44d5275ad62cc48384b3d8a58c500bb5f # v2.2.2 + uses: actions/setup-node@5b52f097d36d4b0b2f94ed6de710023fbb8b2236 # v3.1.0 with: node-version: ${{ matrix.node }} diff --git a/.github/workflows/rnmobile-android-runner.yml b/.github/workflows/rnmobile-android-runner.yml index 18eda2ad1ef5a..226ed1a1ba864 100644 --- a/.github/workflows/rnmobile-android-runner.yml +++ b/.github/workflows/rnmobile-android-runner.yml @@ -15,22 +15,26 @@ concurrency: jobs: test: runs-on: macos-latest - # The false value below disables the test while we investigate a - # foundational error causing failures - if: ${{ false && (github.repository == 'WordPress/gutenberg' || github.event_name == 'pull_request') }} + if: ${{ github.repository == 'WordPress/gutenberg' || github.event_name == 'pull_request' }} strategy: matrix: native-test-name: [gutenberg-editor-initial-html] - node: ['14'] steps: - name: checkout uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f # v2.3.4 + - name: Use desired version of Java + uses: actions/setup-java@v2 + with: + distribution: 'temurin' + java-version: '11' + cache: 'gradle' + - name: Use desired version of NodeJS - uses: actions/setup-node@38d90ce44d5275ad62cc48384b3d8a58c500bb5f # v2.2.2 + uses: actions/setup-node@5b52f097d36d4b0b2f94ed6de710023fbb8b2236 # v3.1.0 with: - node-version: ${{ matrix.node }} + node-version-file: '.nvmrc' cache: npm - run: npm ci @@ -41,9 +45,10 @@ jobs: path: ~/.gradle/caches key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }} - - uses: reactivecircus/android-emulator-runner@d2799957d660add41c61a5103e2fbb9e2889eb73 # v2.15.0 + - uses: reactivecircus/android-emulator-runner@5de26e4bd23bf523e8a4b7f077df8bfb8e52b50e # v2.19.1 with: api-level: 28 + emulator-build: 7425822 # https://github.com/ReactiveCircus/android-emulator-runner/issues/160#issuecomment-868615730 profile: pixel_xl script: npm run native test:e2e:android:local ${{ matrix.native-test-name }} diff --git a/.github/workflows/rnmobile-ios-runner.yml b/.github/workflows/rnmobile-ios-runner.yml index 4de60b55130c9..09f623766fb29 100644 --- a/.github/workflows/rnmobile-ios-runner.yml +++ b/.github/workflows/rnmobile-ios-runner.yml @@ -14,21 +14,21 @@ concurrency: jobs: test: - runs-on: macos-latest + runs-on: macos-11 if: ${{ github.repository == 'WordPress/gutenberg' || github.event_name == 'pull_request' }} strategy: matrix: - xcode: [12.2] + xcode: ['13.0'] + device: ['iPhone 11'] native-test-name: [gutenberg-editor-initial-html] - node: ['14'] steps: - uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f # v2.3.4 - name: Use desired version of NodeJS - uses: actions/setup-node@38d90ce44d5275ad62cc48384b3d8a58c500bb5f # v2.2.2 + uses: actions/setup-node@5b52f097d36d4b0b2f94ed6de710023fbb8b2236 # v3.1.0 with: - node-version: ${{ matrix.node }} + node-version-file: '.nvmrc' cache: npm - run: npm ci @@ -42,7 +42,7 @@ jobs: path: | packages/react-native-editor/ios/build/GutenbergDemo/Build/Products/Release-iphonesimulator/GutenbergDemo.app packages/react-native-editor/ios/build/WDA - key: ${{ runner.os }}-ios-build-${{ matrix.xcode }}-${{ hashFiles('ios-checksums.txt') }} + key: ${{ runner.os }}-ios-build-${{ matrix.xcode }}-${{ matrix.device }}-${{ hashFiles('ios-checksums.txt') }} - name: Restore pods cache uses: actions/cache@c64c572235d810460d0d6876e9c705ad5002b353 # v2.1.6 @@ -66,6 +66,9 @@ jobs: - name: Build Web Driver Agent (if needed) run: test -d packages/react-native-editor/ios/build/WDA || npm run native test:e2e:build-wda + - name: Force update Launch Database to prevent issues when opening the Simulator app + run: /System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -f /Applications/Xcode_${{ matrix.xcode }}.app/Contents/Developer/Applications/Simulator.app + - name: Run iOS Device Tests run: TEST_RN_PLATFORM=ios npm run native device-tests:local ${{ matrix.native-test-name }} diff --git a/.github/workflows/static-checks.yml b/.github/workflows/static-checks.yml index 299c3656a25ed..e6aaaeaa06bfa 100644 --- a/.github/workflows/static-checks.yml +++ b/.github/workflows/static-checks.yml @@ -25,16 +25,18 @@ jobs: - uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f # v2.3.4 - name: Use desired version of NodeJS - uses: actions/setup-node@38d90ce44d5275ad62cc48384b3d8a58c500bb5f # v2.2.2 + uses: actions/setup-node@5b52f097d36d4b0b2f94ed6de710023fbb8b2236 # v3.1.0 with: - node-version: 14 + node-version-file: '.nvmrc' cache: npm - name: Npm install # A "full" install is executed, since `npm ci` does not always exit - # with an error status code if the lock file is inaccurate. + # with an error status code if the lock file is inaccurate. This also + # helps to catch dependencies not being installed with exact version. # # See: https://github.com/WordPress/gutenberg/issues/16157 + # See: https://github.com/WordPress/gutenberg/pull/39865 run: npm install - name: Lint JavaScript and Styles diff --git a/.github/workflows/storybook-pages.yml b/.github/workflows/storybook-pages.yml index f0f27589660a0..6efe56a8891f6 100644 --- a/.github/workflows/storybook-pages.yml +++ b/.github/workflows/storybook-pages.yml @@ -9,9 +9,6 @@ jobs: deploy: runs-on: ubuntu-latest if: ${{ github.repository == 'WordPress/gutenberg' }} - strategy: - matrix: - node: ['14'] steps: - name: Checkout @@ -20,9 +17,9 @@ jobs: ref: trunk - name: Use desired version of NodeJS - uses: actions/setup-node@38d90ce44d5275ad62cc48384b3d8a58c500bb5f # v2.2.2 + uses: actions/setup-node@5b52f097d36d4b0b2f94ed6de710023fbb8b2236 # v3.1.0 with: - node-version: ${{ matrix.node }} + node-version-file: '.nvmrc' cache: npm - name: Install Dependencies diff --git a/.github/workflows/unit-test.yml b/.github/workflows/unit-test.yml index 3247d439f2aa8..786272b4e29e4 100644 --- a/.github/workflows/unit-test.yml +++ b/.github/workflows/unit-test.yml @@ -32,7 +32,7 @@ jobs: - uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f # v2.3.4 - name: Use desired version of NodeJS - uses: actions/setup-node@38d90ce44d5275ad62cc48384b3d8a58c500bb5f # v2.2.2 + uses: actions/setup-node@5b52f097d36d4b0b2f94ed6de710023fbb8b2236 # v3.1.0 with: node-version: ${{ matrix.node }} cache: npm @@ -60,9 +60,9 @@ jobs: - uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f # v2.3.4 - name: Use desired version of NodeJS - uses: actions/setup-node@38d90ce44d5275ad62cc48384b3d8a58c500bb5f # v2.2.2 + uses: actions/setup-node@5b52f097d36d4b0b2f94ed6de710023fbb8b2236 # v3.1.0 with: - node-version: 14 + node-version-file: '.nvmrc' cache: npm - name: Npm install and build @@ -94,9 +94,9 @@ jobs: - uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f # v2.3.4 - name: Use desired version of NodeJS - uses: actions/setup-node@38d90ce44d5275ad62cc48384b3d8a58c500bb5f # v2.2.2 + uses: actions/setup-node@5b52f097d36d4b0b2f94ed6de710023fbb8b2236 # v3.1.0 with: - node-version: 14 + node-version-file: '.nvmrc' cache: npm - name: Npm install and build @@ -108,4 +108,4 @@ jobs: npx lerna run build - name: Running the tests - run: npm run test-unit:native -- --ci --maxWorkers=2 --cacheDirectory="$HOME/.jest-cache" + run: npm run native test -- --ci --maxWorkers=2 --cacheDirectory="$HOME/.jest-cache" diff --git a/.github/workflows/upload-release-to-plugin-repo.yml b/.github/workflows/upload-release-to-plugin-repo.yml index d7561fe3b296f..59cfed85c1b8f 100644 --- a/.github/workflows/upload-release-to-plugin-repo.yml +++ b/.github/workflows/upload-release-to-plugin-repo.yml @@ -79,8 +79,14 @@ jobs: - name: Commit the Changelog update run: | git add changelog.txt - git commit -m "Update Changelog for ${TAG#v}" - git push --set-upstream origin "${{ matrix.branch }}" + # Remove files that are not meant to be commited + # ie. release_notes.txt created on the previous step. + git clean -fd + # Only attempt to commit changelog if it has been modified. + if ! git diff-index --quiet HEAD --; then + git commit -m "Update Changelog for ${TAG#v}" + git push --set-upstream origin "${{ matrix.branch }}" + fi - name: Upload Changelog artifact uses: actions/upload-artifact@e448a9b857ee2131e752b06002bf0e093c65e571 # v2.2.2 diff --git a/.gitignore b/.gitignore index 48cca7fcb886a..9f45133fb8bd1 100644 --- a/.gitignore +++ b/.gitignore @@ -12,6 +12,7 @@ coverage *.log yarn.lock /artifacts +/perf-envs .cache *.tsbuildinfo @@ -28,3 +29,4 @@ test/native/junit.xml phpcs.xml phpunit.xml phpunit-watcher.yml +.tool-versions diff --git a/.npmpackagejsonlintrc.json b/.npmpackagejsonlintrc.json index daab51fa30d45..5c240bf5c3bf4 100644 --- a/.npmpackagejsonlintrc.json +++ b/.npmpackagejsonlintrc.json @@ -11,12 +11,7 @@ "prefer-no-devDependencies": "error", "require-publishConfig": "error", "require-repository-directory": "error", - "valid-values-author": [ - "error", - [ - "The WordPress Contributors" - ] - ], + "valid-values-author": [ "error", [ "The WordPress Contributors" ] ], "valid-values-publishConfig": [ "error", [ diff --git a/.nvmrc b/.nvmrc index b009dfb9d9f98..8351c19397f4f 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -lts/* +14 diff --git a/.prettierignore b/.prettierignore index 39d3acb571b21..0b73d70681dbb 100644 --- a/.prettierignore +++ b/.prettierignore @@ -5,4 +5,5 @@ build-types packages/block-serialization-spec-parser/parser.js packages/e2e-tests/plugins packages/react-native-editor/bundle +packages/url/src/test/fixtures vendor diff --git a/.stylelintignore b/.stylelintignore new file mode 100644 index 0000000000000..06bb87c852b4a --- /dev/null +++ b/.stylelintignore @@ -0,0 +1 @@ +packages/stylelint-config/test diff --git a/.stylelintrc.json b/.stylelintrc.json index 3d4ff66523fe3..c7a2d1db18a46 100644 --- a/.stylelintrc.json +++ b/.stylelintrc.json @@ -1,5 +1,5 @@ { - "extends": "@wordpress/stylelint-config", + "extends": "@wordpress/stylelint-config/scss", "rules": { "at-rule-empty-line-before": null, "at-rule-no-unknown": null, @@ -9,6 +9,17 @@ "no-descending-specificity": null, "rule-empty-line-before": null, "selector-class-pattern": null, - "value-keyword-case": null + "value-keyword-case": null, + "scss/operator-no-unspaced": null, + "scss/selector-no-redundant-nesting-selector": null, + "scss/at-import-partial-extension": null, + "scss/no-global-function-names": null, + "scss/comment-no-empty": null, + "scss/at-extend-no-missing-placeholder": null, + "scss/operator-no-newline-after": null, + "scss/at-if-closing-brace-newline-after": null, + "scss/at-else-empty-line-before": null, + "scss/at-if-closing-brace-space-after": null, + "no-invalid-position-at-import-rule": null } } diff --git a/.vscode/launch-example.json b/.vscode/launch-example.json index 3e333f450a001..1a24f4e8bd767 100644 --- a/.vscode/launch-example.json +++ b/.vscode/launch-example.json @@ -7,8 +7,25 @@ "request": "launch", "port": 9003, "pathMappings": { - "/var/www/html/wp-content/plugins/gutenberg": "${workspaceRoot}/" + "/var/www/html/wp-content/plugins/gutenberg": "${workspaceFolder}" } + }, + { + "type": "node", + "request": "launch", + "name": "Debug current e2e test", + "program": "${workspaceFolder}/node_modules/@wordpress/scripts/bin/wp-scripts.js", + "args": [ + "test-e2e", + "--config=${workspaceFolder}/packages/e2e-tests/jest.config.js", + "--verbose=true", + "--runInBand", + "--watch", + "${file}" + ], + "console": "integratedTerminal", + "internalConsoleOptions": "neverOpen", + "trace": "all" } ] -} \ No newline at end of file +} diff --git a/.wp-env.json b/.wp-env.json index a684b91dfb76c..86e72e0964232 100644 --- a/.wp-env.json +++ b/.wp-env.json @@ -1,12 +1,14 @@ { "core": "WordPress/WordPress", "plugins": [ "." ], - "themes": [ "WordPress/theme-experiments/tt1-blocks#tt1-blocks@0.4.7" ], + "themes": [ "./test/emptytheme" ], "env": { "tests": { "mappings": { + "wp-content/plugins/gutenberg": ".", "wp-content/mu-plugins": "./packages/e2e-tests/mu-plugins", - "wp-content/plugins/gutenberg-test-plugins": "./packages/e2e-tests/plugins" + "wp-content/plugins/gutenberg-test-plugins": "./packages/e2e-tests/plugins", + "wp-content/themes/gutenberg-test-themes": "./packages/e2e-tests/themes" } } } diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 116622a9c0a86..cd137ea37201c 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -18,7 +18,13 @@ To learn all about contributing to the Gutenberg project, see the [Contributor G - As with all WordPress projects, we want to ensure a welcoming environment for everyone. With that in mind, all contributors are expected to follow our [Code of Conduct](/CODE_OF_CONDUCT.md). -- All WordPress projects are [licensed under the GPLv2+](/LICENSE.md), and all contributions to Gutenberg will be released under the GPLv2+ license. You maintain copyright over any contribution you make, and by submitting a pull request, you are agreeing to release that contribution under the GPLv2+ license. +- Contributors should review the [overall process and best practices for pull requests](https://github.com/WordPress/gutenberg/blob/trunk/docs/contributors/repository-management.md#pull-requests), adhering to WordPress' [JavaScript coding standards](https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/) and [accessibility coding standards](https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/). + +- Accessibility should be top of mind and thoroughly tested by following the [accessibility testing instructions](https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md). + +- Verify that any changes in your PR that affect function/class/variable names are mirrored in the corresponding `.native.js` versions of the files to avoid introducing breaking changes in the [React Native Mobile Editor](https://github.com/WordPress/gutenberg/tree/trunk/docs/contributors/code/react-native). + +- You maintain copyright over any contribution you make. By submitting a pull request you agree to release that code under [Gutenberg's License](/LICENSE.md). ## Reporting Security Issues diff --git a/LICENSE.md b/LICENSE.md index 6e7143b3c561e..89ae0ff923d46 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,6 +1,6 @@ ## Gutenberg - Copyright 2016-2021 by the contributors + Copyright 2016-2022 by the contributors **License for Contributions (on and after April 15, 2021)** diff --git a/README.md b/README.md index aec379107a6ff..126368cb20774 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,8 @@ The block editor introduces a modular approach to pages and posts: each piece of The block editor first became available in December 2018, and we're still hard at work refining the experience, creating more and better blocks, and laying the groundwork for the next three phases of work. The Gutenberg plugin gives you the latest version of the block editor so you can join us in testing bleeding-edge features, start playing with blocks, and maybe get inspired to build your own. +Check out the [Ways to keep up with Gutenberg & Full Site Editing (FSE)](https://make.wordpress.org/core/2020/05/20/ways-to-keep-up-with-full-site-editing-fse/) + ## Getting Started Get hands on: check out the [block editor live demo](https://wordpress.org/gutenberg/) to play with a test instance of the editor. @@ -35,13 +37,17 @@ Get hands on: check out the [block editor live demo](https://wordpress.org/guten Extending and customizing is at the heart of the WordPress platform, this is no different for the Gutenberg project. The editor and future products can be extended by third-party developers using plugins. -Review the [Create a Block tutorial](/docs/getting-started/tutorials/create-block/README.md) for the fastest way to get started extending the block editor. See the [Developer Documentation](https://developer.wordpress.org/block-editor/#develop-for-the-block-editor) for extensive tutorials, documentation, and API references. +Review the [Create a Block tutorial](/docs/getting-started/create-block/README.md) for the fastest way to get started extending the block editor. See the [Developer Documentation](https://developer.wordpress.org/block-editor/#develop-for-the-block-editor) for extensive tutorials, documentation, and API references. ### Contribute to Gutenberg -Gutenberg is an open-source project and welcomes all contributors from code to design, from documentation to triage. The project is built by many contributors and volunteers and we'd love your help building it. +Gutenberg is an open-source project and welcomes all contributors from code to design, and from documentation to triage. The project is built by many contributors and volunteers and we'd love your help building it. + +See the [Contributors Handbook](https://developer.wordpress.org/block-editor/contributors/) for all the details on how you can contribute. + +To get up and running quickly with **code contribution** see [Getting Started With Code Contribution](/docs/contributors/code/getting-started-with-code-contribution.md). Also check out the other resources available on the [Code Contributions](/docs/contributors/code/README.md) page. -See the [Contributors Handbook](https://developer.wordpress.org/block-editor/contributors/) for all the details on how you can contribute. See [CONTRIBUTING.md](https://github.com/WordPress/gutenberg/blob/HEAD/CONTRIBUTING.md) for the contributing guidelines. +In whichever way you wish to contribute please be sure to read the [Contributing Guidelines](https://github.com/WordPress/gutenberg/blob/HEAD/CONTRIBUTING.md) first. As with all WordPress projects, we want to ensure a welcoming environment for everyone. With that in mind, all contributors are expected to follow our [Code of Conduct](https://github.com/WordPress/gutenberg/blob/HEAD/CODE_OF_CONDUCT.md). @@ -49,7 +55,7 @@ As with all WordPress projects, we want to ensure a welcoming environment for ev You can join us in the `#core-editor` channel in Slack, see the [WordPress Slack page](https://make.wordpress.org/chat/) for signup information; it is free to join. -**Weekly meetings** The Editor Team meets weekly on Wednesdays at 14:00 UTC in Slack. If you can not join the meeting, agenda and notes are posted to the [Make WordPress Blog](https://make.wordpress.org/core/). +**Weekly meetings** The Editor Team meets weekly on Wednesdays at 14:00 UTC in Slack. If you can not join the meeting, [agenda](https://make.wordpress.org/core/tag/core-editor-agenda/) and [notes](https://make.wordpress.org/core/tag/core-editor-summary/) are posted to the [Make WordPress Blog](https://make.wordpress.org/core/). ## License diff --git a/babel.config.js b/babel.config.js index 4ccd819ebd0fc..236c5afa943d7 100644 --- a/babel.config.js +++ b/babel.config.js @@ -4,5 +4,13 @@ module.exports = ( api ) => { return { presets: [ '@wordpress/babel-preset-default' ], plugins: [ '@emotion/babel-plugin', 'babel-plugin-inline-json-import' ], + overrides: [ + { + test: 'packages/block-library/src/index.js', + plugins: [ + require.resolve( '@wordpress/block-library/babel-plugin' ), + ], + }, + ], }; }; diff --git a/bin/api-docs/gen-block-lib-list.js b/bin/api-docs/gen-block-lib-list.js new file mode 100644 index 0000000000000..fdd0dc094740d --- /dev/null +++ b/bin/api-docs/gen-block-lib-list.js @@ -0,0 +1,191 @@ +/** + * Generates core block documentation using block.json files. + * Reads from : packages/block-library/src + * Publishes to: docs/reference-guides/core-blocks.ms + */ + +/** + * External dependencies + */ +const path = require( 'path' ); +const glob = require( 'fast-glob' ); +const fs = require( 'fs' ); +const { keys } = require( 'lodash' ); +/** + * Path to root project directory. + * + * @type {string} + */ +const ROOT_DIR = path.resolve( __dirname, '../..' ); + +/** + * Path to packages directory. + * + * @type {string} + */ +const BLOCK_LIBRARY_DIR = path.resolve( + ROOT_DIR, + 'packages/block-library/src' +); + +/** + * Path to docs file. + * + * @type {string} + */ +const BLOCK_LIBRARY_DOCS_FILE = path.resolve( + ROOT_DIR, + 'docs/reference-guides/core-blocks.md' +); + +/** + * Start token for matching string in doc file. + * + * @type {string} + */ +const START_TOKEN = '<!-- START TOKEN Autogenerated - DO NOT EDIT -->'; + +/** + * Start token for matching string in doc file. + * + * @type {string} + */ +const END_TOKEN = '<!-- END TOKEN Autogenerated - DO NOT EDIT -->'; + +/** + * Regular expression using tokens for matching in doc file. + * Note: `.` does not match new lines, so [^] is used. + * + * @type {RegExp} + */ +const TOKEN_PATTERN = new RegExp( START_TOKEN + '[^]*' + END_TOKEN ); + +/** + * Returns list of keys, filtering out any experimental + * and wrapping keys with ~~ to strikeout false values. + * + * @type {Object} obj + * @return {string[]} Array of truthy keys + */ +function getTruthyKeys( obj ) { + return keys( obj ) + .filter( ( key ) => ! key.startsWith( '__exp' ) ) + .map( ( key ) => ( obj[ key ] ? key : `~~${ key }~~` ) ); +} + +/** + * Process list of object that may contain inner keys. + * For example: spacing( margin, padding ). + * + * @param {Object} obj + * @return {string[]} Array of keys (inner keys) + */ +function processObjWithInnerKeys( obj ) { + const rtn = []; + + const kvs = getTruthyKeys( obj ); + + kvs.forEach( ( key ) => { + if ( Array.isArray( obj[ key ] ) ) { + rtn.push( `${ key } (${ obj[ key ].sort().join( ', ' ) })` ); + } else if ( typeof obj[ key ] === 'object' ) { + const innerKeys = getTruthyKeys( obj[ key ] ); + rtn.push( `${ key } (${ innerKeys.sort().join( ', ' ) })` ); + } else { + rtn.push( key ); + } + } ); + return rtn; +} + +/** + * Augment supports with additional default props. + * + * The color support if specified defaults background and text, if + * not disabled. So adding { color: 'link' } support also brings along + * background and text. + * + * @param {Object} supports - keys supported by blokc + * @return {Object} supports augmented with defaults + */ +function augmentSupports( supports ) { + if ( 'color' in supports ) { + // If backgroud or text is not specified (true or false) + // then add it as true.a + if ( ! ( 'background' in supports.color ) ) { + supports.color.background = true; + } + if ( ! ( 'text' in supports.color ) ) { + supports.color.text = true; + } + } + return supports; +} + +/** + * Returns URL to the block directory source. + * + * @param {string} filename + * + * @return {string} URL + */ +function getSourceFromFile( filename ) { + const pkgdir = + 'https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/'; + const blockdir = path.basename( path.dirname( filename ) ); + return pkgdir + blockdir; +} + +/** + * Reads block.json file and returns markdown formatted entry. + * + * @param {string} filename + * + * @return {string} markdown + */ +function readBlockJSON( filename ) { + const blockjson = require( filename ); + + const sourcefile = getSourceFromFile( filename ); + const supportsList = + blockjson.supports !== undefined + ? processObjWithInnerKeys( augmentSupports( blockjson.supports ) ) + : []; + const attributes = getTruthyKeys( blockjson.attributes ); + + return ` +## ${ blockjson.title } + +${ blockjson.description } ([Source](${ sourcefile })) + +- **Name:** ${ blockjson.name } +- **Category:** ${ blockjson.category } +- **Supports:** ${ supportsList.sort().join( ', ' ) } +- **Attributes:** ${ attributes.sort().join( ', ' ) } +`; +} + +// Generate block docs. +// Note: The replace() is to translate Windows back to Unix for fast-glob. +const files = glob.sync( + path.join( BLOCK_LIBRARY_DIR, '*', 'block.json' ).replace( /\\/g, '/' ) +); + +let autogen = ''; + +files.forEach( ( file ) => { + const markup = readBlockJSON( file ); + autogen += markup; +} ); + +let docsContent = fs.readFileSync( BLOCK_LIBRARY_DOCS_FILE, { + encoding: 'utf8', + flag: 'r', +} ); + +// Add delimiters back. +autogen = START_TOKEN + '\n' + autogen + '\n' + END_TOKEN; +docsContent = docsContent.replace( TOKEN_PATTERN, autogen ); + +// write back out +fs.writeFileSync( BLOCK_LIBRARY_DOCS_FILE, docsContent, { encoding: 'utf8' } ); diff --git a/bin/api-docs/gen-theme-reference.js b/bin/api-docs/gen-theme-reference.js new file mode 100644 index 0000000000000..e07566863420c --- /dev/null +++ b/bin/api-docs/gen-theme-reference.js @@ -0,0 +1,185 @@ +/** + * Generates core block documentation using block.json files. + * Reads from : packages/block-library/src + * Publishes to: docs/reference-guides/core-blocks.ms + */ + +/** + * External dependencies + */ +const path = require( 'path' ); +const fs = require( 'fs' ); +const { keys } = require( 'lodash' ); +/** + * Path to root project directory. + * + * @type {string} + */ +const ROOT_DIR = path.resolve( __dirname, '../..' ); + +/** + * Path to theme json schema file. + * + * @type {string} + */ +const THEME_JSON_SCHEMA_FILE = path.resolve( + ROOT_DIR, + path.join( 'schemas', 'json', 'theme.json' ) +); + +/** + * Path to docs file. + * + * @type {string} + */ +const THEME_JSON_REF_DOC = path.resolve( + ROOT_DIR, + 'docs/reference-guides/theme-json-reference/theme-json-living.md' +); + +/** + * Start token for matching string in doc file. + * + * @type {string} + */ +const START_TOKEN = '<!-- START TOKEN Autogenerated - DO NOT EDIT -->'; + +/** + * Start token for matching string in doc file. + * + * @type {string} + */ +const END_TOKEN = '<!-- END TOKEN Autogenerated - DO NOT EDIT -->'; + +/** + * Regular expression using tokens for matching in doc file. + * Note: `.` does not match new lines, so [^] is used. + * + * @type {RegExp} + */ +const TOKEN_PATTERN = new RegExp( START_TOKEN + '[^]*' + END_TOKEN ); + +const themejson = require( THEME_JSON_SCHEMA_FILE ); + +/** + * Convert settings properties to markup. + * + * @param {Object} struct + * @return {string} markup + */ +const getSettingsPropertiesMarkup = ( struct ) => { + if ( ! ( 'properties' in struct ) ) { + return ''; + } + const props = struct.properties; + const ks = keys( props ); + if ( ks.length < 1 ) { + return ''; + } + + let markup = '| Property | Type | Default | Props |\n'; + markup += '| --- | --- | --- |--- |\n'; + ks.forEach( ( key ) => { + const def = 'default' in props[ key ] ? props[ key ].default : ''; + const ps = + props[ key ].type === 'array' + ? keys( props[ key ].items.properties ).sort().join( ', ' ) + : ''; + markup += `| ${ key } | ${ props[ key ].type } | ${ def } | ${ ps } |\n`; + } ); + + return markup; +}; + +/** + * Convert style properties to markup. + * + * @param {Object} struct + * @return {string} markup + */ +const getStylePropertiesMarkup = ( struct ) => { + if ( ! ( 'properties' in struct ) ) { + return ''; + } + const props = struct.properties; + const ks = keys( props ); + if ( ks.length < 1 ) { + return ''; + } + + let markup = '| Property | Type | Props |\n'; + markup += '| --- | --- |--- |\n'; + ks.forEach( ( key ) => { + const ps = + props[ key ].type === 'object' + ? keys( props[ key ].properties ).sort().join( ', ' ) + : ''; + markup += `| ${ key } | ${ props[ key ].type } | ${ ps } |\n`; + } ); + + return markup; +}; + +/** + * Parses a section for description and properties and + * returns a marked up version. + * + * @param {string} title + * @param {Object} data + * @param {string} type settings|style + * @return {string} markup + */ +const getSectionMarkup = ( title, data, type ) => { + const markupFn = + type === 'settings' + ? getSettingsPropertiesMarkup + : getStylePropertiesMarkup; + + return ` +### ${ title } + +${ data.description } + +${ markupFn( data ) } +--- +`; +}; + +let autogen = ''; + +// Settings +const settings = Object.entries( themejson.definitions ) + .filter( ( [ settingsKey ] ) => + /^settingsProperties(?!Complete)\w+$/.test( settingsKey ) + ) + .reduce( + ( settingsObj, [ , { properties } ] ) => + Object.assign( settingsObj, properties ), + {} + ); +const settingSections = keys( settings ); +autogen += '## Settings' + '\n\n'; +settingSections.forEach( ( section ) => { + autogen += getSectionMarkup( section, settings[ section ], 'settings' ); +} ); + +// Styles +const styles = themejson.definitions.stylesProperties.properties; +const styleSections = keys( styles ); +autogen += '## Styles' + '\n\n'; +styleSections.forEach( ( section ) => { + autogen += getSectionMarkup( section, styles[ section ], 'styles' ); +} ); + +// Read existing file to wrap auto generated content. +let docsContent = fs.readFileSync( THEME_JSON_REF_DOC, { + encoding: 'utf8', + flag: 'r', +} ); + +// Replace auto generated part with new generated docs. +autogen = START_TOKEN + '\n' + autogen + '\n' + END_TOKEN; +docsContent = docsContent.replace( TOKEN_PATTERN, autogen ); + +// Write back out. +fs.writeFileSync( THEME_JSON_REF_DOC, docsContent, { encoding: 'utf8' } ); diff --git a/bin/api-docs/update-api-docs.js b/bin/api-docs/update-api-docs.js index 3fc1e6da297e0..77052709d85d2 100755 --- a/bin/api-docs/update-api-docs.js +++ b/bin/api-docs/update-api-docs.js @@ -24,21 +24,24 @@ const { readFile } = require( 'fs' ).promises; * * @type {string} */ -const ROOT_DIR = resolve( __dirname, '../..' ); +const ROOT_DIR = resolve( __dirname, '../..' ).replace( /\\/g, '/' ); /** * Path to packages directory. * * @type {string} */ -const PACKAGES_DIR = resolve( ROOT_DIR, 'packages' ); +const PACKAGES_DIR = resolve( ROOT_DIR, 'packages' ).replace( /\\/g, '/' ); /** * Path to data documentation directory. * * @type {string} */ -const DATA_DOCS_DIR = resolve( ROOT_DIR, 'docs/reference-guides/data' ); +const DATA_DOCS_DIR = resolve( ROOT_DIR, 'docs/reference-guides/data' ).replace( + /\\/g, + '/' +); /** * Pattern matching start token of a README file. diff --git a/bin/build-plugin-zip.sh b/bin/build-plugin-zip.sh index 77c4a244d4ca3..4ba931c4a4aeb 100755 --- a/bin/build-plugin-zip.sh +++ b/bin/build-plugin-zip.sh @@ -30,8 +30,7 @@ status "💃 Time to build the Gutenberg plugin ZIP file 🕺" if [ -z "$NO_CHECKS" ]; then # Make sure there are no changes in the working tree. Release builds should be - # traceable to a particular commit and reliably reproducible. (This is not - # totally true at the moment because we download nightly vendor scripts). + # traceable to a particular commit and reliably reproducible. changed= if ! git diff --exit-code > /dev/null; then changed="file(s) modified" @@ -66,39 +65,9 @@ if [ -z "$NO_CHECKS" ]; then fi fi -# Download all vendor scripts -status "Downloading remote vendor scripts... 🛵" -vendor_scripts="" -# Using `command | while read...` is more typical, but the inside of the `while` -# loop will run under a separate process this way, meaning that it cannot -# modify $vendor_scripts. See: https://stackoverflow.com/a/16855194 -exec 3< <( - # Get minified versions of vendor scripts. - php bin/get-vendor-scripts.php - # Get non-minified versions of vendor scripts (for SCRIPT_DEBUG). - php bin/get-vendor-scripts.php debug -) -while IFS='|' read -u 3 url filename; do - echo "$url" - echo -n " > vendor/$filename ... " - http_status=$( curl \ - --location \ - --silent \ - "$url" \ - --output "vendor/_download.tmp.js" \ - --write-out "%{http_code}" - ) - if [ "$http_status" != 200 ]; then - error "HTTP $http_status" - exit 1 - fi - mv -f "vendor/_download.tmp.js" "vendor/$filename" - echo -e "${GREEN_BOLD}done!${COLOR_RESET}" - vendor_scripts="$vendor_scripts vendor/$filename" -done - # Run the build. status "Installing dependencies... 📦" +npm cache verify npm ci status "Generating build... 👷‍♀️" npm run build @@ -110,14 +79,14 @@ php bin/generate-gutenberg-php.php > gutenberg.tmp.php mv gutenberg.tmp.php gutenberg.php build_files=$( - ls build/*/*.{js,css,asset.php} \ + ls build/*/*.{js,js.map,css,asset.php} \ build/block-library/blocks/*.php \ build/block-library/blocks/*/block.json \ - build/block-library/blocks/*/*.css \ - build/block-library/blocks/*/*.js \ + build/block-library/blocks/*/*.{js,js.map,css,asset.php} \ build/edit-widgets/blocks/*/block.json \ build/widgets/blocks/*.php \ build/widgets/blocks/*/block.json \ + build/style-engine/*.php \ ) @@ -128,7 +97,6 @@ zip -r gutenberg.zip \ lib \ packages/block-serialization-default-parser/*.php \ post-content.php \ - $vendor_scripts \ $build_files \ readme.txt \ changelog.txt \ diff --git a/bin/get-vendor-scripts.php b/bin/get-vendor-scripts.php deleted file mode 100755 index 9db830d564e3c..0000000000000 --- a/bin/get-vendor-scripts.php +++ /dev/null @@ -1,44 +0,0 @@ -#!/usr/bin/env php -<?php -/** - * Loads the minimum amount of the Gutenberg PHP code possible and lists vendor - * JavaScript URLs and filenames. - * - * @package gutenberg-build - */ - -define( 'SCRIPT_DEBUG', $argc > 1 && 'debug' === strtolower( $argv[1] ) ); - -// Hacks to get lib/client-assets.php to load. -define( 'ABSPATH', dirname( __DIR__ ) ); - -/** - * Hi, phpcs - */ -function add_action() {} - -/** - * Hi, phpcs - */ -function add_filter() {} - -/** - * Hi, phpcs - */ -function wp_add_inline_script() {} - -// Instead of loading script files, just show how they need to be loaded. -define( 'GUTENBERG_LIST_VENDOR_ASSETS', true ); - -require_once dirname( __DIR__ ) . '/lib/client-assets.php'; - -/** - * Hi, phpcs - */ -function run_gutenberg_register_vendor_scripts() { - global $wp_scripts; - - gutenberg_register_vendor_scripts( $wp_scripts ); -} - -run_gutenberg_register_vendor_scripts(); diff --git a/bin/log-perormance-results.js b/bin/log-perormance-results.js index bfa7cdd59b357..0405b69791bdd 100755 --- a/bin/log-perormance-results.js +++ b/bin/log-perormance-results.js @@ -6,7 +6,7 @@ const fs = require( 'fs' ); const path = require( 'path' ); const https = require( 'https' ); -const [ branch, hash, baseHash, timestamp ] = process.argv.slice( 2 ); +const [ token, branch, hash, baseHash, timestamp ] = process.argv.slice( 2 ); const performanceResults = JSON.parse( fs.readFileSync( @@ -27,9 +27,9 @@ const data = new TextEncoder().encode( ); const options = { - hostname: 'codehealth-riad.vercel.app', + hostname: 'codehealth.vercel.app', port: 443, - path: '/api/log', + path: '/api/log?token=' + token, method: 'POST', headers: { 'Content-Type': 'application/json', diff --git a/bin/packages/build-worker.js b/bin/packages/build-worker.js index c6a32c959bcee..e82091ff84374 100644 --- a/bin/packages/build-worker.js +++ b/bin/packages/build-worker.js @@ -18,7 +18,9 @@ const getBabelConfig = require( './get-babel-config' ); * * @type {string} */ -const PACKAGES_DIR = path.resolve( __dirname, '../../packages' ); +const PACKAGES_DIR = path + .resolve( __dirname, '../../packages' ) + .replace( /\\/g, '/' ); /** * Mapping of JavaScript environments to corresponding build output. @@ -113,7 +115,6 @@ async function buildCSS( file ) { const builtSass = await renderSass( { file, includePaths: [ path.join( PACKAGES_DIR, 'base-styles' ) ], - // data: ''.concat( '@use "sass:math";', importLists, contents ), } ); diff --git a/bin/packages/build.js b/bin/packages/build.js index eff2fcd732020..94db7f63eadee 100755 --- a/bin/packages/build.js +++ b/bin/packages/build.js @@ -15,7 +15,9 @@ const files = process.argv.slice( 2 ); * * @type {string} */ -const PACKAGES_DIR = path.resolve( __dirname, '../../packages' ); +const PACKAGES_DIR = path + .resolve( __dirname, '../../packages' ) + .replace( /\\/g, '/' ); const stylesheetEntryPoints = glob.sync( path.resolve( PACKAGES_DIR, '*/src/*.scss' ) @@ -132,10 +134,10 @@ function createStyleEntryTransform() { entries.forEach( ( entry ) => this.push( entry ) ); // Find other stylesheets that need to be rebuilt because - // they import the styles that are being transformed + // they import the styles that are being transformed. const styleEntries = findStyleEntriesThatImportFile( file ); - // Rebuild stylesheets that import the styles being transformed + // Rebuild stylesheets that import the styles being transformed. if ( styleEntries.length ) { styleEntries.forEach( ( entry ) => stream.push( entry ) ); } @@ -222,6 +224,7 @@ if ( files.length ) { `**/benchmark/**`, `**/{__mocks__,__tests__,test}/**`, `**/{storybook,stories}/**`, + `**/e2e-test-utils-playwright/**`, ], onlyFiles: true, } @@ -263,7 +266,8 @@ stream console.error( error ); } - if ( ended && ++complete === files.length ) { + ++complete; + if ( ended && complete === files.length ) { workerFarm.end( worker ); } } ) diff --git a/bin/packages/get-babel-config.js b/bin/packages/get-babel-config.js index 114dd41fb1e6e..91fe4b07d325e 100644 --- a/bin/packages/get-babel-config.js +++ b/bin/packages/get-babel-config.js @@ -13,21 +13,21 @@ module.exports = ( environment = '', file ) => { }; switch ( environment ) { case 'main': - // to be merged as a presetEnv option + // To be merged as a presetEnv option. callerOpts.caller.modules = 'commonjs'; break; case 'module': - // to be merged as a presetEnv option + // To be merged as a presetEnv option. callerOpts.caller.modules = false; - // to be merged as a pluginTransformRuntime option + // To be merged as a pluginTransformRuntime option. callerOpts.caller.useESModules = true; break; default: - // preventing measure, this shouldn't happen ever + // Preventing measure, this shouldn't happen ever. delete callerOpts.caller; } - // Sourcemaps options + // Sourcemaps options. const sourceMapsOpts = { sourceMaps: true, sourceFileName: file, diff --git a/bin/packages/lint-staged-typecheck.js b/bin/packages/lint-staged-typecheck.js index 21d56bbe7354e..30c513ec983c5 100644 --- a/bin/packages/lint-staged-typecheck.js +++ b/bin/packages/lint-staged-typecheck.js @@ -17,7 +17,7 @@ const tscPath = path.join( repoRoot, 'node_modules', '.bin', 'tsc' ); // lint-staged passes full paths to staged changes const changedFiles = process.argv.slice( 2 ); -// Transform changed files to package directories containing tsconfig.json +// Transform changed files to package directories containing tsconfig.json. const changedPackages = _.uniq( changedFiles.map( ( fullPath ) => { const relativePath = path.relative( repoRoot, fullPath ); diff --git a/bin/packages/watch.js b/bin/packages/watch.js index 6ca600a994cff..ec5c504c0202f 100644 --- a/bin/packages/watch.js +++ b/bin/packages/watch.js @@ -59,12 +59,14 @@ function isDirectory( pathname ) { function isSourceFile( filename ) { // Only run this regex on the relative path, otherwise we might run // into some false positives when eg. the project directory contains `src` - const relativePath = path.relative( process.cwd(), filename ); + const relativePath = path + .relative( process.cwd(), filename ) + .replace( /\\/g, '/' ); return ( - /\/src\/.+\.(js|json|scss)$/.test( relativePath ) && + /\/src\/.+\.(js|json|scss|ts|tsx)$/.test( relativePath ) && ! [ - /\/(benchmark|__mocks__|__tests__|test|storybook|stories)\/.+/, + /\/(benchmark|__mocks__|__tests__|test|storybook|stories|e2e-test-utils-playwright)\/.+/, /.\.(spec|test)\.js$/, ].some( ( regex ) => regex.test( relativePath ) ) ); @@ -98,6 +100,7 @@ function isWatchableFile( filename, skip ) { // Recursive file watching is not available on a Linux-based OS. If this is the case, // the watcher library falls back to watching changes in the subdirectories // and passes the directories to this filter callback instead. + if ( isDirectory( filename ) ) { return true; } @@ -117,8 +120,9 @@ function isWatchableFile( filename, skip ) { function getBuildFile( srcFile ) { // Could just use string.replace, but the user might have the project // checked out and nested under another src folder. - const packageDir = srcFile.substr( 0, srcFile.lastIndexOf( '/src/' ) ); - const filePath = srcFile.substr( srcFile.lastIndexOf( '/src/' ) + 5 ); + const srcDir = `${ path.sep }src${ path.sep }`; + const packageDir = srcFile.substr( 0, srcFile.lastIndexOf( srcDir ) ); + const filePath = srcFile.substr( srcFile.lastIndexOf( srcDir ) + 5 ); return path.resolve( packageDir, 'build', filePath ); } diff --git a/bin/plugin/cli.js b/bin/plugin/cli.js index 7e65d1cf147db..ed2fef4a5b05f 100755 --- a/bin/plugin/cli.js +++ b/bin/plugin/cli.js @@ -20,42 +20,69 @@ const catchException = ( command ) => { * Internal dependencies */ const { - publishNpmLatestDistTag, - publishNpmBugfixLatestDistTag, - publishNpmNextDistTag, + publishNpmGutenbergPlugin, + publishNpmBugfixLatest, + publishNpmBugfixWordPressCore, + publishNpmNext, } = require( './commands/packages' ); const { getReleaseChangelog } = require( './commands/changelog' ); const { runPerformanceTests } = require( './commands/performance' ); +const semverOption = [ '--semver <semver>', 'Semantic Versioning', 'patch' ]; +const ciOption = [ '-c, --ci', 'Run in CI (non interactive)' ]; +const repositoryPathOption = [ + '--repository-path <repository-path>', + 'Relative path to the git repository.', +]; + program .command( 'publish-npm-packages-latest' ) .alias( 'npm-latest' ) + .option( ...semverOption ) + .option( ...ciOption ) + .option( ...repositoryPathOption ) .description( - 'Publishes packages to npm (latest dist-tag, production version)' + 'Publishes to npm packages synced from the Gutenberg plugin (latest dist-tag, production version)' ) - .action( catchException( publishNpmLatestDistTag ) ); + .action( catchException( publishNpmGutenbergPlugin ) ); program .command( 'publish-npm-packages-bugfix-latest' ) .alias( 'npm-bugfix' ) + .option( ...ciOption ) + .option( ...repositoryPathOption ) + .description( + 'Publishes to npm bugfixes for packages (latest dist-tag, production version)' + ) + .action( catchException( publishNpmBugfixLatest ) ); + +program + .command( 'publish-npm-packages-wordpress-core' ) + .alias( 'npm-wp' ) + .requiredOption( '--wp-version <wpVersion>', 'WordPress version' ) + .option( ...ciOption ) + .option( ...repositoryPathOption ) .description( - 'Publishes bugfixes for packages to npm (latest dist-tag, production version)' + 'Publishes to npm bugfixes targeting WordPress core (wp-X.Y dist-tag, production version)' ) - .action( catchException( publishNpmBugfixLatestDistTag ) ); + .action( catchException( publishNpmBugfixWordPressCore ) ); program .command( 'publish-npm-packages-next' ) .alias( 'npm-next' ) + .option( ...semverOption ) + .option( ...ciOption ) + .option( ...repositoryPathOption ) .description( - 'Publishes packages to npm (next dist-tag, prerelease version)' + 'Publishes to npm development version of packages (next dist-tag, prerelease version)' ) - .action( catchException( publishNpmNextDistTag ) ); + .action( catchException( publishNpmNext ) ); program .command( 'release-plugin-changelog' ) .alias( 'changelog' ) .option( '-m, --milestone <milestone>', 'Milestone' ) - .option( '-t, --token <token>', 'Github token' ) + .option( '-t, --token <token>', 'GitHub token' ) .option( '-u, --unreleased', "Only include PRs that haven't been included in a release yet" @@ -66,7 +93,7 @@ program program .command( 'performance-tests [branches...]' ) .alias( 'perf' ) - .option( '-c, --ci', 'Run in CI (non interactive)' ) + .option( ...ciOption ) .option( '--tests-branch <branch>', "Use this branch's performance test files" diff --git a/bin/plugin/commands/changelog.js b/bin/plugin/commands/changelog.js index 3443a548606c2..bd5b7c1e61176 100644 --- a/bin/plugin/commands/changelog.js +++ b/bin/plugin/commands/changelog.js @@ -1,7 +1,15 @@ /** * External dependencies */ -const { countBy, groupBy, escapeRegExp, uniq } = require( 'lodash' ); +const { + countBy, + groupBy, + escapeRegExp, + uniq, + flow, + sortBy, + uniqBy, +} = require( 'lodash' ); const Octokit = require( '@octokit/rest' ); const { sprintf } = require( 'sprintf-js' ); const semver = require( 'semver' ); @@ -62,13 +70,6 @@ const UNKNOWN_FEATURE_FALLBACK_NAME = 'Uncategorized'; * @type {Record<string,string>} */ const LABEL_TYPE_MAPPING = { - '[Block] Navigation': 'Experiments', - '[Block] Post Comments Count': 'Experiments', - '[Block] Post Comments Form': 'Experiments', - '[Block] Post Comments': 'Experiments', - '[Block] Post Hierarchical Terms': 'Experiments', - '[Feature] Full Site Editing': 'Experiments', - 'Global Styles': 'Experiments', '[Feature] Navigation Screen': 'Experiments', '[Package] Dependency Extraction Webpack Plugin': 'Tools', '[Package] Jest Puppeteer aXe': 'Tools', @@ -123,7 +124,7 @@ const LABEL_FEATURE_MAPPING = { '[Package] Icons': 'Icons', '[Package] Block Editor': 'Block Editor', '[Package] Block library': 'Block Library', - '[Package] Editor': 'Editor', + '[Package] Editor': 'Post Editor', '[Package] Edit Widgets': 'Widgets Editor', '[Package] Widgets Customizer': 'Widgets Editor', '[Package] Components': 'Components', @@ -283,6 +284,12 @@ function getIssueType( issue ) { ...getTypesByTitle( issue.title ), ]; + // Force all tasks identified as Documentation tasks + // to appear under the main "Documentation" section. + if ( candidates.includes( 'Documentation' ) ) { + return 'Documentation'; + } + return candidates.length ? candidates.sort( sortType )[ 0 ] : 'Various'; } @@ -313,7 +320,7 @@ function getIssueFeature( issue ) { return rankedFeatures[ 0 ]; } - // 2. `[Feature]` labels + // 2. `[Feature]` labels. const featureSpecificLabel = getFeatureSpecificLabels( labels ); if ( featureSpecificLabel ) { @@ -517,7 +524,7 @@ function getNormalizedTitle( title, issue ) { } /** - * Returns a formatted changelog entry for a given issue object, or undefined + * Returns a formatted changelog list item entry for a given issue object, or undefined * if entry should be omitted. * * @param {IssuesListForRepoResponseItem} issue Issue object. @@ -529,7 +536,46 @@ function getEntry( issue ) { return title === undefined ? title - : `- ${ title } ([${ issue.number }](${ issue.html_url }))`; + : '- ' + + getFormattedItemDescription( + title, + issue.number, + issue.html_url + ); +} + +/** + * Builds a formatted string of the Issue/PR title with a link + * to the Github URL for that item. + * + * @param {string} title the title of the Issue/PR. + * @param {number} number the ID/number of the Issue/PR. + * @param {string} url the URL of the Github Issue/PR. + * @return {string} the formatted item + */ +function getFormattedItemDescription( title, number, url ) { + return `${ title } ([${ number }](${ url }))`; +} + +/** + * Returns a formatted changelog entry for a given issue object and matching feature name, or undefined + * if entry should be omitted. + * + * @param {IssuesListForRepoResponseItem} issue Issue object. + * @param {string} featureName Feature name. + * + * @return {string=} Formatted changelog entry, or undefined to omit. + */ +function getFeatureEntry( issue, featureName ) { + return getEntry( issue ) + ?.replace( + new RegExp( `\\[${ featureName.toLowerCase() } \- `, 'i' ), + '[' + ) + .replace( + new RegExp( `(?<=^- )${ featureName.toLowerCase() }: `, 'i' ), + '' + ); } /** @@ -600,6 +646,7 @@ async function fetchAllPullRequests( octokit, settings ) { : undefined; const { number } = milestone; + const issues = await getIssuesByMilestone( octokit, owner, @@ -608,23 +655,8 @@ async function fetchAllPullRequests( octokit, settings ) { 'closed', latestReleaseInSeries ? latestReleaseInSeries.published_at : undefined ); - return issues.filter( ( issue ) => issue.pull_request ); -} -/** - * Returns a promise resolving to the changelog string for given settings. - * - * @param {WPChangelogSettings} settings Changelog settings. - * - * @return {Promise<string>} Promise resolving to changelog. - */ -async function getChangelog( settings ) { - const octokit = new Octokit( { - auth: settings.token, - } ); - - const pullRequests = await fetchAllPullRequests( octokit, settings ); - if ( ! pullRequests.length ) { + if ( ! issues.length ) { if ( settings.unreleased ) { throw new Error( 'There are no unreleased pull requests associated with the milestone.' @@ -636,9 +668,23 @@ async function getChangelog( settings ) { } } - let changelog = ''; + return issues.filter( ( issue ) => issue.pull_request ); +} - const groupedPullRequests = groupBy( pullRequests, getIssueType ); +/** + * Formats the changelog string for a given list of pull requests. + * + * @param {IssuesListForRepoResponseItem[]} pullRequests List of pull requests. + * + * @return {string} The formatted changelog string. + */ +function getChangelog( pullRequests ) { + let changelog = '## Changelog\n\n'; + + const groupedPullRequests = groupBy( + skipCreatedByBots( pullRequests ), + getIssueType + ); const sortedGroups = Object.keys( groupedPullRequests ).sort( sortGroup ); @@ -665,8 +711,9 @@ async function getChangelog( settings ) { const featureGroupPRs = featureGroups[ featureName ]; const featureGroupEntries = featureGroupPRs - .map( getEntry ) - .filter( Boolean ); + .map( ( issue ) => getFeatureEntry( issue, featureName ) ) + .filter( Boolean ) + .sort(); // Don't create feature sections when there are no PRs. if ( ! featureGroupEntries.length ) { @@ -675,18 +722,18 @@ async function getChangelog( settings ) { // Avoids double nesting such as "Documentation" feature under // the "Documentation" section. - if ( group !== featureName ) { + if ( + group !== featureName && + featureName !== UNKNOWN_FEATURE_FALLBACK_NAME + ) { // Start new <ul> for the Feature group. - changelog += '- ' + featureName + '\n'; + changelog += '#### ' + featureName + '\n'; } // Add a <li> for each PR in the Feature. featureGroupEntries.forEach( ( entry ) => { - // Strip feature name from entry if present. - entry = entry && entry.replace( `[${ featureName } - `, '[' ); - // Add a new bullet point to the list. - changelog += ` ${ entry }\n`; + changelog += `${ entry }\n`; } ); // Close the <ul> for the Feature group. @@ -709,11 +756,11 @@ async function getChangelog( settings ) { function sortFeatureGroups( featureGroups ) { return Object.keys( featureGroups ).sort( ( featureAName, featureBName ) => { - // Sort "Unknown" to always be at the end + // Sort "uncategorized" items to *always* be at the top of the section. if ( featureAName === UNKNOWN_FEATURE_FALLBACK_NAME ) { - return 1; - } else if ( featureBName === UNKNOWN_FEATURE_FALLBACK_NAME ) { return -1; + } else if ( featureBName === UNKNOWN_FEATURE_FALLBACK_NAME ) { + return 1; } // Sort by greatest number of PRs in the group first. @@ -725,6 +772,144 @@ function sortFeatureGroups( featureGroups ) { ); } +/** + * Returns a list of PRs created by first time contributors based on the Github + * label associated with the PR. Also filters out any "bots". + * + * @param {IssuesListForRepoResponseItem[]} pullRequests List of pull requests. + * + * @return {IssuesListForRepoResponseItem[]} pullRequests List of first time contributor PRs. + */ +function getFirstTimeContributorPRs( pullRequests ) { + return pullRequests.filter( ( pr ) => { + return pr.labels.find( + ( { name } ) => name.toLowerCase() === 'first-time contributor' + ); + } ); +} + +/** + * Creates a set of markdown formatted list items for each first time contributor + * and their associated PR. + * + * @param {IssuesListForRepoResponseItem[]} ftcPRs List of first time contributor PRs. + * + * @return {string} The formatted markdown list of contributors and their PRs. + */ +function getContributorPropsMarkdownList( ftcPRs ) { + return ftcPRs.reduce( ( markdownList, pr ) => { + const title = getNormalizedTitle( pr.title, pr ) || ''; + + const formattedTitle = getFormattedItemDescription( + title, + pr.number, + pr.pull_request.html_url + ); + + markdownList += + '- ' + '@' + pr.user.login + ': ' + formattedTitle + '\n'; + return markdownList; + }, '' ); +} + +/** + * Sorts a given Issue/PR by the username of the user who created. + * + * @param {IssuesListForRepoResponseItem[]} items List of pull requests. + * @return {IssuesListForRepoResponseItem[]} The sorted list of pull requests. + */ +function sortByUsername( items ) { + return sortBy( items, ( item ) => item.user.login.toLowerCase() ); +} + +/** + * Removes duplicate PRs by the username of the user who created. + * + * @param {IssuesListForRepoResponseItem[]} items List of pull requests. + * @return {IssuesListForRepoResponseItem[]} The list of pull requests unique per user. + */ +function getUniqueByUsername( items ) { + return uniqBy( items, ( item ) => item.user.login ); +} + +/** + * Excludes users who should not be included in the changelog. + * Typically this is "bot" users. + * + * @param {IssuesListForRepoResponseItem[]} pullRequests List of pull requests. + * @return {IssuesListForRepoResponseItem[]} The list of filtered pull requests. + */ +function skipCreatedByBots( pullRequests ) { + return pullRequests.filter( + ( pr ) => pr.user.type.toLowerCase() !== 'bot' + ); +} + +/** + * Produces the formatted markdown for the contributor props seciton. + * + * @param {IssuesListForRepoResponseItem[]} pullRequests List of pull requests. + * + * @return {string} The formatted props section. + */ +function getContributorProps( pullRequests ) { + const contributorsList = flow( [ + skipCreatedByBots, + getFirstTimeContributorPRs, + getUniqueByUsername, + sortByUsername, + getContributorPropsMarkdownList, + ] )( pullRequests ); + + return ( + '## First time contributors' + + '\n\n' + + 'The following PRs were merged by first time contributors:' + + '\n\n' + + contributorsList + ); +} + +/** + * + * @param {IssuesListForRepoResponseItem[]} pullRequests List of first time contributor PRs. + * @return {string} The formatted markdown list of contributor usernames. + */ +function getContributorsMarkdownList( pullRequests ) { + return pullRequests + .reduce( ( markdownList = '', pr ) => { + markdownList += ` @${ pr.user.login }`; + return markdownList; + }, '' ) + .trim(); +} + +/** + * Produces the formatted markdown for the full time contributors section of + * the changelog output. + * + * @param {IssuesListForRepoResponseItem[]} pullRequests List of pull requests. + * + * @return {string} The formatted contributors section. + */ +function getContributorsList( pullRequests ) { + const contributorsList = flow( [ + skipCreatedByBots, + getUniqueByUsername, + sortByUsername, + getContributorsMarkdownList, + ] )( pullRequests ); + + return ( + '\n\n' + + '## Contributors' + + '\n\n' + + 'The following contributors merged PRs in this release:' + + '\n\n' + + contributorsList + ); +} + /** * Generates and logs changelog for a milestone. * @@ -737,14 +922,31 @@ async function createChangelog( settings ) { ) ); - let changelog; + const octokit = new Octokit( { + auth: settings.token, + } ); + + let releaselog = ''; + try { - changelog = await getChangelog( settings ); + const pullRequests = await fetchAllPullRequests( octokit, settings ); + + const changelog = getChangelog( pullRequests ); + const contributorProps = getContributorProps( pullRequests ); + const contributorsList = getContributorsList( pullRequests ); + + releaselog = releaselog.concat( + changelog, + contributorProps, + contributorsList + ); } catch ( error ) { - changelog = formats.error( error.stack ); + if ( error instanceof Error ) { + releaselog = formats.error( error.stack ); + } } - log( changelog ); + log( releaselog ); } /** @@ -774,7 +976,7 @@ async function getReleaseChangelog( options ) { } ); } -/** @type {NodeJS.Module} */ ( module ).exports = { +/** @type {NodeJS.Module} */ module.exports = { reword, capitalizeAfterColonSeparatedPrefix, createOmitByTitlePrefix, @@ -787,4 +989,10 @@ async function getReleaseChangelog( options ) { sortGroup, getTypesByLabels, getTypesByTitle, + getFormattedItemDescription, + getContributorProps, + getContributorsList, + getChangelog, + getUniqueByUsername, + skipCreatedByBots, }; diff --git a/bin/plugin/commands/common.js b/bin/plugin/commands/common.js index c9a3eda27c54d..fc540b073a1ff 100644 --- a/bin/plugin/commands/common.js +++ b/bin/plugin/commands/common.js @@ -21,7 +21,7 @@ const config = require( '../config' ); * @return {Promise<string>} Repository local path. */ async function runGitRepositoryCloneStep( abortMessage ) { - // Cloning the repository + // Cloning the repository. let gitWorkingDirectoryPath; await runStep( 'Cloning the Git repository', abortMessage, async () => { log( '>> Cloning the Git repository' ); @@ -58,14 +58,17 @@ async function runCleanLocalFoldersStep( folders, abortMessage ) { } /** - * Finds the name of the current release branch based on the version in + * Finds the name of the current plugin release branch based on the version in * the package.json file. * - * @param {string} packageJsonPath Path to the package.json file. + * @param {string} gitWorkingDirectoryPath Path to the project's working directory. * - * @return {string} Name of the release branch. + * @return {string} Name of the plugin release branch. */ -function findReleaseBranchName( packageJsonPath ) { +async function findPluginReleaseBranchName( gitWorkingDirectoryPath ) { + await git.checkoutRemoteBranch( gitWorkingDirectoryPath, 'trunk' ); + + const packageJsonPath = gitWorkingDirectoryPath + '/package.json'; const mainPackageJson = readJSONFile( packageJsonPath ); const mainParsedVersion = semver.parse( mainPackageJson.version ); @@ -137,7 +140,7 @@ function calculateVersionBumpFromChangelog( module.exports = { calculateVersionBumpFromChangelog, - findReleaseBranchName, + findPluginReleaseBranchName, runGitRepositoryCloneStep, runCleanLocalFoldersStep, }; diff --git a/bin/plugin/commands/packages.js b/bin/plugin/commands/packages.js index fe421c2c1d25b..b9581fc5318fe 100644 --- a/bin/plugin/commands/packages.js +++ b/bin/plugin/commands/packages.js @@ -5,9 +5,8 @@ const { command } = require( 'execa' ); const path = require( 'path' ); const glob = require( 'fast-glob' ); const fs = require( 'fs' ); -const semver = require( 'semver' ); +const { inc: semverInc } = require( 'semver' ); const readline = require( 'readline' ); -const { prompt } = require( 'inquirer' ); /** * Internal dependencies @@ -16,11 +15,12 @@ const { log, formats } = require( '../lib/logger' ); const { askForConfirmation, runStep, readJSONFile } = require( '../lib/utils' ); const { calculateVersionBumpFromChangelog, - findReleaseBranchName, + findPluginReleaseBranchName, runGitRepositoryCloneStep, runCleanLocalFoldersStep, } = require( './common' ); const git = require( '../lib/git' ); +const { join } = require( 'path' ); /** * Release type names. @@ -35,89 +35,122 @@ const git = require( '../lib/git' ); */ /** - * Checks out the WordPress release branch and syncs it with the changes from - * the last plugin release. + * @typedef WPPackagesCommandOptions + * + * @property {boolean} [ci] Disables interactive mode when executed in CI mode. + * @property {string} [repositoryPath] Relative path to the git repository. + * @property {SemVer} [semver] The selected semantic versioning. Defaults to `patch`. + * @property {string} [wpVersion] The major WordPress version number, example: `6.0`. + */ + +/** + * @typedef WPPackagesConfig * - * @param {string} gitWorkingDirectoryPath Git working directory path. - * @param {ReleaseType} releaseType Release type selected from CLI. - * @param {string} abortMessage Abort Message. + * @property {string} abortMessage Abort Message. + * @property {string} distTag The dist-tag used for npm publishing. + * @property {string} gitWorkingDirectoryPath Git working directory path. + * @property {boolean} interactive Whether to run in interactive mode. + * @property {SemVer} minimumVersionBump The selected minimum version bump. + * @property {string} npmReleaseBranch The selected branch for npm release. + * @property {ReleaseType} releaseType The selected release type. + */ + +/** + * Checks out the npm release branch. * - * @return {Promise<Object>} WordPress release branch. + * @param {WPPackagesConfig} options The config object. */ -async function runWordPressReleaseBranchSyncStep( +async function checkoutNpmReleaseBranch( { gitWorkingDirectoryPath, - releaseType, - abortMessage -) { - const wordpressReleaseBranch = - releaseType === 'next' ? 'wp/next' : 'wp/trunk'; - await runStep( - 'Getting into the WordPress release branch', + npmReleaseBranch, +} ) { + // Creating the release branch. + await git.checkoutRemoteBranch( gitWorkingDirectoryPath, npmReleaseBranch ); + await git.fetch( gitWorkingDirectoryPath, [ '--depth=100' ] ); + log( + '>> The local npm release branch ' + + formats.success( npmReleaseBranch ) + + ' has been successfully checked out.' + ); +} + +/** + * Checks out the npm release branch and syncs it with the changes from + * the last plugin release. + * + * @param {string} pluginReleaseBranch The plugin release branch name. + * @param {WPPackagesConfig} config The config object. + * + * @return {?string} The optional commit's hash when branch synced. + */ +async function runNpmReleaseBranchSyncStep( pluginReleaseBranch, config ) { + const { abortMessage, - async () => { - const packageJsonPath = gitWorkingDirectoryPath + '/package.json'; - const pluginReleaseBranch = findReleaseBranchName( - packageJsonPath - ); + interactive, + gitWorkingDirectoryPath, + npmReleaseBranch, + } = config; + await runStep( 'Syncing the npm release branch', abortMessage, async () => { + await checkoutNpmReleaseBranch( config ); - // Creating the release branch - await git.checkoutRemoteBranch( - gitWorkingDirectoryPath, - wordpressReleaseBranch - ); - await git.fetch( gitWorkingDirectoryPath, [ '--depth=100' ] ); - log( - '>> The local release branch ' + - formats.success( wordpressReleaseBranch ) + - ' has been successfully checked out.' + if ( interactive ) { + await askForConfirmation( + `The branch is ready for sync with the latest plugin release changes applied to "${ pluginReleaseBranch }". Proceed?`, + true, + abortMessage ); + } - if ( [ 'latest', 'next' ].includes( releaseType ) ) { - await askForConfirmation( - `The branch is ready for sync with the latest plugin release changes applied to "${ pluginReleaseBranch }". Proceed?`, - true, - abortMessage - ); + log( + `>> Syncing the latest plugin release to "${ pluginReleaseBranch }".` + ); - await git.replaceContentFromRemoteBranch( - gitWorkingDirectoryPath, - pluginReleaseBranch - ); + await git.replaceContentFromRemoteBranch( + gitWorkingDirectoryPath, + pluginReleaseBranch + ); - await git.commit( - gitWorkingDirectoryPath, - `Merge changes published in the Gutenberg plugin "${ pluginReleaseBranch }" branch` - ); + const commitHash = await git.commit( + gitWorkingDirectoryPath, + `Merge changes published in the Gutenberg plugin "${ pluginReleaseBranch }" branch` + ); - log( - '>> The local WordPress release branch ' + - formats.success( wordpressReleaseBranch ) + - ' has been successfully synced.' - ); - } + if ( commitHash ) { + await runPushGitChangesStep( config ); } - ); - return { - releaseBranch: wordpressReleaseBranch, - }; + log( + '>> The local npm release branch ' + + formats.success( npmReleaseBranch ) + + ' has been successfully synced.' + ); + } ); } /** * Update CHANGELOG files with the new version number for those packages that * contain new entries. * - * @param {string} gitWorkingDirectoryPath Git working directory path. - * @param {SemVer} minimumVersionBump Minimum version bump for the packages. - * @param {ReleaseType} releaseType Release type selected from CLI. - * @param {string} abortMessage Abort Message. + * @param {WPPackagesConfig} config Command config. + * + * @return {?string} The optional commit's hash when changelog files updated. */ -async function updatePackages( - gitWorkingDirectoryPath, - minimumVersionBump, - releaseType, - abortMessage -) { +async function updatePackages( config ) { + const { + abortMessage, + gitWorkingDirectoryPath, + interactive, + minimumVersionBump, + releaseType, + } = config; + + if ( releaseType === 'wp' ) { + log( + '>> Skipping CHANGELOG files processing when targeting WordPress core.' + ); + return; + } + const changelogFiles = await glob( path.resolve( gitWorkingDirectoryPath, 'packages/*/CHANGELOG.md' ) ); @@ -170,9 +203,7 @@ async function updatePackages( ); const { version } = readJSONFile( packageJSONPath ); const nextVersion = - versionBump !== null - ? semver.inc( version, versionBump ) - : null; + versionBump !== null ? semverInc( version, versionBump ) : null; return { changelogPath, @@ -207,7 +238,7 @@ async function updatePackages( nextVersion, version, } ) => { - // Update changelog + // Update changelog. const content = await fs.promises.readFile( changelogPath, 'utf8' @@ -224,7 +255,7 @@ async function updatePackages( ) ); - // Update package.json + // Update package.json. const packageJson = readJSONFile( packageJSONPath ); const newPackageJson = { ...packageJson, @@ -246,69 +277,92 @@ async function updatePackages( ) ); - await askForConfirmation( - `All corresponding files were updated. Commit the changes?`, - true, - abortMessage + if ( interactive ) { + await askForConfirmation( + `All corresponding files were updated. Commit the changes?`, + true, + abortMessage + ); + } + + const commitHash = await git.commit( + gitWorkingDirectoryPath, + 'Update changelog files', + [ './*' ] ); - git.commit( gitWorkingDirectoryPath, 'Update changelog files', [ './*' ] ); - log( '>> Changelog files changes have been committed successfully.' ); + if ( commitHash ) { + await runPushGitChangesStep( config ); + } + + log( '>> Changelog files have been updated successfully.' ); + + return commitHash; } /** - * Push the local Git Changes and Tags to the remote repository. + * Push the local Git Changes the remote repository. * - * @param {string} gitWorkingDirectoryPath Git working directory path. - * @param {string} releaseBranch Release branch name. - * @param {string} abortMessage Abort message. + * @param {WPPackagesConfig} config Command config. */ -async function runPushGitChangesStep( +async function runPushGitChangesStep( { gitWorkingDirectoryPath, - releaseBranch, - abortMessage -) { - await runStep( - 'Pushing the release branch and the tag', - abortMessage, - async () => { + interactive, + npmReleaseBranch, +} ) { + const abortMessage = `Aborting! Make sure to push changes applied to npm release branch "${ npmReleaseBranch }" manually.`; + await runStep( 'Pushing the release branch', abortMessage, async () => { + if ( interactive ) { await askForConfirmation( - 'The release branch and the tag are going to be pushed to the remote repository. Continue?', + 'The release branch is going to be pushed to the remote repository. Continue?', true, abortMessage ); - await git.pushBranchToOrigin( - gitWorkingDirectoryPath, - releaseBranch - ); - await git.pushTagsToOrigin(); } - ); + await git.pushBranchToOrigin( + gitWorkingDirectoryPath, + npmReleaseBranch + ); + } ); } /** * Publishes all changed packages to npm. * - * @param {string} gitWorkingDirectoryPath Git working directory path. - * @param {SemVer} minimumVersionBump Minimum version bump for the packages. - * @param {ReleaseType} releaseType Release type selected from CLI. + * @param {WPPackagesConfig} config Command config. + * + * @return {?string} The optional commit's hash when packages published to npm. */ -async function publishPackagesToNpm( +async function publishPackagesToNpm( { + distTag, gitWorkingDirectoryPath, + interactive, minimumVersionBump, - releaseType -) { + releaseType, +} ) { log( '>> Installing npm packages.' ); await command( 'npm ci', { cwd: gitWorkingDirectoryPath, } ); + log( '>> Current npm user:' ); + await command( 'npm whoami', { + cwd: gitWorkingDirectoryPath, + stdio: 'inherit', + } ); + + const beforeCommitHash = await git.getLastCommitHash( + gitWorkingDirectoryPath + ); + + const yesFlag = interactive ? '' : '--yes'; + const noVerifyAccessFlag = interactive ? '' : '--no-verify-access'; if ( releaseType === 'next' ) { log( '>> Bumping version of public packages changed since the last release.' ); - const { stdout: sha } = await command( 'git rev-parse --short HEAD' ); + await command( - `npx lerna version pre${ minimumVersionBump } --preid next.${ sha } --no-private`, + `npx lerna version pre${ minimumVersionBump } --preid next.${ beforeCommitHash } --no-private ${ yesFlag }`, { cwd: gitWorkingDirectoryPath, stdio: 'inherit', @@ -316,22 +370,28 @@ async function publishPackagesToNpm( ); log( '>> Publishing modified packages to npm.' ); - await command( 'npx lerna publish from-package --dist-tag next', { - cwd: gitWorkingDirectoryPath, - stdio: 'inherit', - } ); - } else if ( releaseType === 'bugfix' ) { + await command( + `npx lerna publish from-package --dist-tag ${ distTag } ${ yesFlag } ${ noVerifyAccessFlag }`, + { + cwd: gitWorkingDirectoryPath, + stdio: 'inherit', + } + ); + } else if ( [ 'bugfix', 'wp' ].includes( releaseType ) ) { log( '>> Publishing modified packages to npm.' ); - await command( `npm run publish:latest`, { - cwd: gitWorkingDirectoryPath, - stdio: 'inherit', - } ); + await command( + `npx lerna publish ${ minimumVersionBump } --dist-tag ${ distTag } --no-private ${ yesFlag } ${ noVerifyAccessFlag }`, + { + cwd: gitWorkingDirectoryPath, + stdio: 'inherit', + } + ); } else { log( '>> Bumping version of public packages changed since the last release.' ); await command( - `npx lerna version ${ minimumVersionBump } --no-private`, + `npx lerna version ${ minimumVersionBump } --no-private ${ yesFlag }`, { cwd: gitWorkingDirectoryPath, stdio: 'inherit', @@ -339,148 +399,221 @@ async function publishPackagesToNpm( ); log( '>> Publishing modified packages to npm.' ); - await command( `npx lerna publish from-package`, { - cwd: gitWorkingDirectoryPath, - stdio: 'inherit', - } ); + await command( + `npx lerna publish from-package ${ yesFlag } ${ noVerifyAccessFlag }`, + { + cwd: gitWorkingDirectoryPath, + stdio: 'inherit', + } + ); + } + + const afterCommitHash = await git.getLastCommitHash( + gitWorkingDirectoryPath + ); + if ( afterCommitHash === beforeCommitHash ) { + return; } + + return afterCommitHash; } /** - * Prepare everything to publish WordPress packages to npm. + * Backports commits from the release branch to the selected branch. * - * @param {ReleaseType} releaseType Release type selected from CLI. - * @param {SemVer} [minimumVersionBump] Minimum version bump for the packages. Default: `true`. - * @param {string} [confirmationMessage] Confirmation message to show at first. - * - * @return {Promise<Object>} Github release object. + * @param {string} branchName Selected branch name. + * @param {string[]} commits The list of commits to backport. + * @param {WPPackagesConfig} config Command config. */ -async function prepareForPackageRelease( - releaseType, - minimumVersionBump = 'patch', - confirmationMessage = 'Ready to go?' +async function backportCommitsToBranch( + branchName, + commits, + { abortMessage, gitWorkingDirectoryPath, interactive } ) { - await askForConfirmation( confirmationMessage ); - - // Cloning the Git repository. - const abortMessage = 'Aborting!'; - const gitWorkingDirectoryPath = await runGitRepositoryCloneStep( - abortMessage - ); - const temporaryFolders = []; - temporaryFolders.push( gitWorkingDirectoryPath ); - - // Checking out the WordPress release branch and doing sync with the last plugin release. - const { releaseBranch } = await runWordPressReleaseBranchSyncStep( - gitWorkingDirectoryPath, - releaseType, - abortMessage - ); + if ( commits.length === 0 ) { + return; + } - await updatePackages( - gitWorkingDirectoryPath, - minimumVersionBump, - releaseType, - abortMessage - ); + if ( interactive ) { + await askForConfirmation( + `Commits are going to be backported to "${ branchName }". Continue?`, + true, + abortMessage + ); + } - await runPushGitChangesStep( - gitWorkingDirectoryPath, - releaseBranch, - `Aborting! Make sure to push changes applied to WordPress release branch "${ releaseBranch }" manually.` - ); + log( `>> Backporting commits to "${ branchName }".` ); - await publishPackagesToNpm( + await git.resetLocalBranchAgainstOrigin( gitWorkingDirectoryPath, - minimumVersionBump, - releaseType + branchName ); + for ( const commitHash of commits ) { + await git.cherrypickCommitIntoBranch( + gitWorkingDirectoryPath, + branchName, + commitHash + ); + } + await git.pushBranchToOrigin( gitWorkingDirectoryPath, branchName ); - await runCleanLocalFoldersStep( temporaryFolders, 'Cleaning failed.' ); + log( `>> Backporting successfully finished.` ); } /** - * Publishes a new latest version of WordPress packages. + * Runs WordPress packages release. + * + * @param {WPPackagesConfig} config Command config. + * @param {string[]} customMessages Custom messages to print in the terminal. + * + * @return {Promise<Object>} GitHub release object. */ -async function publishNpmLatestDistTag() { +async function runPackagesRelease( config, customMessages ) { log( formats.title( '\n💃 Time to publish WordPress packages to npm 🕺\n\n' ), - 'Welcome! This tool is going to help you with publishing a new latest version of WordPress packages.\n', - "To perform a release you'll have to be a member of the WordPress Team on npm.\n" + "To perform a release you'll have to be a member of the WordPress Team on npm.\n", + ...customMessages ); - const { minimumVersionBump } = await prompt( [ - { - type: 'list', - name: 'minimumVersionBump', - message: 'Select the minimum version bump for packages:', - default: 'patch', - choices: [ 'patch', 'minor', 'major' ], - }, - ] ); + if ( config.interactive ) { + await askForConfirmation( 'Ready to go?' ); + } - await prepareForPackageRelease( 'latest', minimumVersionBump ); + const temporaryFolders = []; + if ( ! config.gitWorkingDirectoryPath ) { + // Cloning the Git repository. + config.gitWorkingDirectoryPath = await runGitRepositoryCloneStep( + config.abortMessage + ); + temporaryFolders.push( config.gitWorkingDirectoryPath ); + } + + let pluginReleaseBranch; + if ( [ 'latest', 'next' ].includes( config.releaseType ) ) { + pluginReleaseBranch = + config.releaseType === 'next' + ? 'trunk' + : await findPluginReleaseBranchName( + config.gitWorkingDirectoryPath + ); + await runNpmReleaseBranchSyncStep( pluginReleaseBranch, config ); + } else { + await checkoutNpmReleaseBranch( config ); + } + + const commitHashChangelogUpdates = await updatePackages( config ); + + const commitHashNpmPublish = await publishPackagesToNpm( config ); + + if ( [ 'latest', 'bugfix' ].includes( config.releaseType ) ) { + const commits = [ + commitHashChangelogUpdates, + commitHashNpmPublish, + ].filter( Boolean ); + await backportCommitsToBranch( 'trunk', commits, config ); + + if ( config.releaseType === 'latest' && pluginReleaseBranch ) { + await backportCommitsToBranch( + pluginReleaseBranch, + commits, + config + ); + } + } + + await runCleanLocalFoldersStep( temporaryFolders, 'Cleaning failed.' ); log( '\n>> 🎉 WordPress packages are now published!\n\n', - 'Please remember to run `git cherry-pick` in the `trunk` branch for the newly created commits during the release with labels:\n', - ' - Update changelog files (if exists)\n', - ' - chore(release): publish\n\n', - 'Finally, let also people know on WordPress Slack and celebrate together.' + 'Let also people know on WordPress Slack and celebrate together.' ); } /** - * Publishes a new latest version of WordPress packages. + * Gets config object. + * + * @param {ReleaseType} releaseType The selected release type. + * @param {WPPackagesCommandOptions} options Command options. + * + * @return {WPPackagesConfig} The config object. */ -async function publishNpmBugfixLatestDistTag() { - log( - formats.title( - '\n💃 Time to publish WordPress packages to npm 🕺\n\n' - ), - 'Welcome! This tool is going to help you with publishing a new bugfix version of WordPress packages with the latest dist tag.\n', - "To perform a release you'll have to be a member of the WordPress Team on npm.\n" - ); +function getConfig( + releaseType, + { ci, repositoryPath, semver = 'patch', wpVersion } +) { + let distTag = 'latest'; + let npmReleaseBranch = 'wp/latest'; + if ( releaseType === 'next' ) { + distTag = 'next'; + npmReleaseBranch = 'wp/next'; + } else if ( releaseType === 'wp' ) { + distTag = `wp-${ wpVersion }`; + npmReleaseBranch = `wp/${ wpVersion }`; + } - await prepareForPackageRelease( - 'bugfix', - 'patch', - 'Before we proceed, can you confirm that all required changes have beed already cherry-picked to the release branch?' - ); + return { + abortMessage: 'Aborting!', + distTag, + gitWorkingDirectoryPath: + repositoryPath && join( process.cwd(), repositoryPath ), + interactive: ! ci, + minimumVersionBump: semver, + npmReleaseBranch, + releaseType, + }; +} - log( - '\n>> 🎉 WordPress packages are now published!\n\n', - 'Please remember to run `git cherry-pick` in the `trunk` branch for the newly created commits during the release with labels:\n', - ' - Update changelog files (if exists)\n', - ' - chore(release): publish\n\n', - 'Finally, let also people know on WordPress Slack and celebrate together.' - ); +/** + * Publishes to npm packages synced from the Gutenberg plugin (latest dist-tag, production version). + * + * @param {WPPackagesCommandOptions} options Command options. + */ +async function publishNpmGutenbergPlugin( options ) { + await runPackagesRelease( getConfig( 'latest', options ), [ + 'Welcome! This tool helps with npm publishing a new latest version of WordPress packages synced from the Gutenberg plugin.\n', + ] ); } /** - * Publishes a new next version of WordPress packages. + * Publishes to npm bugfixes for packages (latest dist-tag, production version). + * + * @param {WPPackagesCommandOptions} options Command options. */ -async function publishNpmNextDistTag() { - log( - formats.title( - '\n💃 Time to publish WordPress packages to npm 🕺\n\n' - ), - 'Welcome! This tool is going to help you with publishing a new next version of WordPress packages.\n', - "To perform a release you'll have to be a member of the WordPress Team on npm.\n" - ); +async function publishNpmBugfixLatest( options ) { + await runPackagesRelease( getConfig( 'bugfix', options ), [ + 'Welcome! This tool helps with npm publishing a new bugfix version of WordPress packages.\n', + 'Make sure that all required changes have been already cherry-picked to the `wp/latest` release branch.\n', + ] ); +} - await prepareForPackageRelease( 'next' ); +/** + * Publishes to npm bugfixes targeting WordPress core (wp-X.Y dist-tag, production version). + * + * @param {WPPackagesCommandOptions} options Command options. + */ +async function publishNpmBugfixWordPressCore( options ) { + await runPackagesRelease( getConfig( 'wp', options ), [ + 'Welcome! This tool helps with npm publishing a new bugfix version of WordPress packages targeting WordPress core.\n', + 'Make sure that all required changes have been already cherry-picked to the `wp/X.Y` release branch.\n', + ] ); +} - log( - '\n>> 🎉 WordPress packages are now published!\n', - 'Let also people know on WordPress Slack.\n' - ); +/** + * Publishes to npm development version of packages (next dist-tag, prerelease version). + * + * @param {WPPackagesCommandOptions} options Command options. + */ +async function publishNpmNext( options ) { + await runPackagesRelease( getConfig( 'next', options ), [ + 'Welcome! This tool helps with npm publishing a development version of WordPress packages.\n', + ] ); } module.exports = { - publishNpmLatestDistTag, - publishNpmBugfixLatestDistTag, - publishNpmNextDistTag, + publishNpmGutenbergPlugin, + publishNpmBugfixLatest, + publishNpmBugfixWordPressCore, + publishNpmNext, }; diff --git a/bin/plugin/commands/performance.js b/bin/plugin/commands/performance.js index 5870d909a255b..4c7faf0180a16 100644 --- a/bin/plugin/commands/performance.js +++ b/bin/plugin/commands/performance.js @@ -3,7 +3,7 @@ */ const fs = require( 'fs' ); const path = require( 'path' ); -const { mapValues } = require( 'lodash' ); +const { mapValues, kebabCase } = require( 'lodash' ); /** * Internal dependencies @@ -29,29 +29,47 @@ const config = require( '../config' ); /** * @typedef WPRawPerformanceResults * - * @property {number[]} load Load Time. - * @property {number[]} type Average type time. - * @property {number[]} focus Average block selection time. - * @property {number[]} inserterOpen Average time to open global inserter. - * @property {number[]} inserterHover Average time to move mouse between two block item in the inserter. + * @property {number[]} serverResponse Represents the time the server takes to respond. + * @property {number[]} firstPaint Represents the time when the user agent first rendered after navigation. + * @property {number[]} domContentLoaded Represents the time immediately after the document's DOMContentLoaded event completes. + * @property {number[]} loaded Represents the time when the load event of the current document is completed. + * @property {number[]} firstContentfulPaint Represents the time when the browser first renders any text or media. + * @property {number[]} firstBlock Represents the time when Puppeteer first sees a block selector in the DOM. + * @property {number[]} type Average type time. + * @property {number[]} focus Average block selection time. + * @property {number[]} inserterOpen Average time to open global inserter. + * @property {number[]} inserterSearch Average time to search the inserter. + * @property {number[]} inserterHover Average time to move mouse between two block item in the inserter. + * @property {number[]} listViewOpen Average time to open listView */ /** * @typedef WPPerformanceResults * - * @property {number=} load Load Time. - * @property {number=} type Average type time. - * @property {number=} minType Minium type time. - * @property {number=} maxType Maximum type time. - * @property {number=} focus Average block selection time. - * @property {number=} minFocus Min block selection time. - * @property {number=} maxFocus Max block selection time. - * @property {number=} inserterOpen Average time to open global inserter. - * @property {number=} minInserterOpen Min time to open global inserter. - * @property {number=} maxInserterOpen Max time to open global inserter. - * @property {number=} inserterHover Average time to move mouse between two block item in the inserter. - * @property {number=} minInserterHover Min time to move mouse between two block item in the inserter. - * @property {number=} maxInserterHover Max time to move mouse between two block item in the inserter. + * @property {number=} serverResponse Represents the time the server takes to respond. + * @property {number=} firstPaint Represents the time when the user agent first rendered after navigation. + * @property {number=} domContentLoaded Represents the time immediately after the document's DOMContentLoaded event completes. + * @property {number=} loaded Represents the time when the load event of the current document is completed. + * @property {number=} firstContentfulPaint Represents the time when the browser first renders any text or media. + * @property {number=} firstBlock Represents the time when Puppeteer first sees a block selector in the DOM. + * @property {number=} type Average type time. + * @property {number=} minType Minimum type time. + * @property {number=} maxType Maximum type time. + * @property {number=} focus Average block selection time. + * @property {number=} minFocus Min block selection time. + * @property {number=} maxFocus Max block selection time. + * @property {number=} inserterOpen Average time to open global inserter. + * @property {number=} minInserterOpen Min time to open global inserter. + * @property {number=} maxInserterOpen Max time to open global inserter. + * @property {number=} inserterSearch Average time to open global inserter. + * @property {number=} minInserterSearch Min time to open global inserter. + * @property {number=} maxInserterSearch Max time to open global inserter. + * @property {number=} inserterHover Average time to move mouse between two block item in the inserter. + * @property {number=} minInserterHover Min time to move mouse between two block item in the inserter. + * @property {number=} maxInserterHover Max time to move mouse between two block item in the inserter. + * @property {number=} listViewOpen Average time to open list view. + * @property {number=} minListViewOpen Min time to open list view. + * @property {number=} maxListViewOpen Max time to open list view. */ /** @@ -101,7 +119,12 @@ function formatTime( number ) { */ function curateResults( results ) { return { - load: average( results.load ), + serverResponse: average( results.serverResponse ), + firstPaint: average( results.firstPaint ), + domContentLoaded: average( results.domContentLoaded ), + loaded: average( results.loaded ), + firstContentfulPaint: average( results.firstContentfulPaint ), + firstBlock: average( results.firstBlock ), type: average( results.type ), minType: Math.min( ...results.type ), maxType: Math.max( ...results.type ), @@ -111,9 +134,15 @@ function curateResults( results ) { inserterOpen: average( results.inserterOpen ), minInserterOpen: Math.min( ...results.inserterOpen ), maxInserterOpen: Math.max( ...results.inserterOpen ), + inserterSearch: average( results.inserterSearch ), + minInserterSearch: Math.min( ...results.inserterSearch ), + maxInserterSearch: Math.max( ...results.inserterSearch ), inserterHover: average( results.inserterHover ), minInserterHover: Math.min( ...results.inserterHover ), maxInserterHover: Math.max( ...results.inserterHover ), + listViewOpen: average( results.listViewOpen ), + minListViewOpen: Math.min( ...results.listViewOpen ), + maxListViewOpen: Math.max( ...results.listViewOpen ), }; } @@ -184,10 +213,12 @@ async function runPerformanceTests( branches, options ) { } // 1- Preparing the tests directory. - log( '\n>> Preparing the tests directory' ); + log( '\n>> Preparing the tests directories' ); log( ' >> Cloning the repository' ); const baseDirectory = await git.clone( config.gitRepositoryURL ); - const performanceTestDirectory = getRandomTemporaryPath(); + const rootDirectory = getRandomTemporaryPath(); + const performanceTestDirectory = rootDirectory + '/tests'; + await runShellScript( 'mkdir -p ' + rootDirectory ); await runShellScript( 'cp -R ' + baseDirectory + ' ' + performanceTestDirectory ); @@ -207,19 +238,33 @@ async function runPerformanceTests( branches, options ) { 'npm install && npm run build:packages', performanceTestDirectory ); + log( ' >> Creating the environment folders' ); + await runShellScript( 'mkdir -p ' + rootDirectory + '/envs' ); // 2- Preparing the environment directories per branch. log( '\n>> Preparing an environment directory per branch' ); const branchDirectories = {}; for ( const branch of branches ) { log( ' >> Branch: ' + branch ); - const environmentDirectory = getRandomTemporaryPath(); + const environmentDirectory = + rootDirectory + '/envs/' + kebabCase( branch ); // @ts-ignore branchDirectories[ branch ] = environmentDirectory; + await runShellScript( 'mkdir ' + environmentDirectory ); await runShellScript( - 'cp -R ' + baseDirectory + ' ' + environmentDirectory + 'cp -R ' + baseDirectory + ' ' + environmentDirectory + '/plugin' + ); + await setUpGitBranch( branch, environmentDirectory + '/plugin' ); + await runShellScript( + 'cp ' + + path.resolve( + performanceTestDirectory, + 'bin/plugin/utils/.wp-env.performance.json' + ) + + ' ' + + environmentDirectory + + '/.wp-env.json' ); - await setUpGitBranch( branch, environmentDirectory ); if ( options.wpVersion ) { // In order to match the topology of ZIP files at wp.org, remap .0 @@ -278,7 +323,7 @@ async function runPerformanceTests( branches, options ) { results[ testSuite ] = {}; /** @type {Array<Record<string, WPPerformanceResults>>} */ const rawResults = []; - // Alternate three times between branches + // Alternate three times between branches. for ( let i = 0; i < 3; i++ ) { rawResults[ i ] = {}; for ( const branch of branches ) { @@ -287,7 +332,7 @@ async function runPerformanceTests( branches, options ) { log( ' >> Branch: ' + branch + ', Suite: ' + testSuite ); log( ' >> Starting the environment.' ); await runShellScript( - 'npm run wp-env start', + '../../tests/node_modules/.bin/wp-env start', environmentDirectory ); log( ' >> Running the test.' ); @@ -297,7 +342,7 @@ async function runPerformanceTests( branches, options ) { ); log( ' >> Stopping the environment' ); await runShellScript( - 'npm run wp-env stop', + '../../tests/node_modules/.bin/wp-env stop', environmentDirectory ); } @@ -307,7 +352,22 @@ async function runPerformanceTests( branches, options ) { for ( const branch of branches ) { const medians = mapValues( { - load: rawResults.map( ( r ) => r[ branch ].load ), + serverResponse: rawResults.map( + ( r ) => r[ branch ].serverResponse + ), + firstPaint: rawResults.map( + ( r ) => r[ branch ].firstPaint + ), + domContentLoaded: rawResults.map( + ( r ) => r[ branch ].domContentLoaded + ), + loaded: rawResults.map( ( r ) => r[ branch ].loaded ), + firstContentfulPaint: rawResults.map( + ( r ) => r[ branch ].firstContentfulPaint + ), + firstBlock: rawResults.map( + ( r ) => r[ branch ].firstBlock + ), type: rawResults.map( ( r ) => r[ branch ].type ), minType: rawResults.map( ( r ) => r[ branch ].minType ), maxType: rawResults.map( ( r ) => r[ branch ].maxType ), @@ -323,6 +383,15 @@ async function runPerformanceTests( branches, options ) { maxInserterOpen: rawResults.map( ( r ) => r[ branch ].maxInserterOpen ), + inserterSearch: rawResults.map( + ( r ) => r[ branch ].inserterSearch + ), + minInserterSearch: rawResults.map( + ( r ) => r[ branch ].minInserterSearch + ), + maxInserterSearch: rawResults.map( + ( r ) => r[ branch ].maxInserterSearch + ), inserterHover: rawResults.map( ( r ) => r[ branch ].inserterHover ), @@ -332,6 +401,15 @@ async function runPerformanceTests( branches, options ) { maxInserterHover: rawResults.map( ( r ) => r[ branch ].maxInserterHover ), + listViewOpen: rawResults.map( + ( r ) => r[ branch ].listViewOpen + ), + minListViewOpen: rawResults.map( + ( r ) => r[ branch ].minListViewOpen + ), + maxListViewOpen: rawResults.map( + ( r ) => r[ branch ].maxListViewOpen + ), }, median ); @@ -343,6 +421,11 @@ async function runPerformanceTests( branches, options ) { // 5- Formatting the results. log( '\n>> 🎉 Results.\n' ); + + log( + '\nPlease note that client side metrics EXCLUDE the server response time.\n' + ); + for ( const testSuite of testSuites ) { log( `\n>> ${ testSuite }\n` ); diff --git a/bin/plugin/commands/test/__snapshots__/changelog.js.snap b/bin/plugin/commands/test/__snapshots__/changelog.js.snap new file mode 100644 index 0000000000000..ccdbb8e712cd1 --- /dev/null +++ b/bin/plugin/commands/test/__snapshots__/changelog.js.snap @@ -0,0 +1,233 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`getChangelog verify that the changelog is properly formatted 1`] = ` +"## Changelog + +### Enhancements + +- Scripts: Use cssnano to minimize CSS files with build. ([33750](https://github.com/WordPress/gutenberg/pull/33750)) +- Scripts: Webpack configuration update to minimize CSS. ([33676](https://github.com/WordPress/gutenberg/pull/33676)) + +#### Components +- Add new ColorPicker. ([33714](https://github.com/WordPress/gutenberg/pull/33714)) +- Promote \`ItemGroup\`. ([33701](https://github.com/WordPress/gutenberg/pull/33701)) +- Update snackbar to use framer motion instead of react spring. ([33717](https://github.com/WordPress/gutenberg/pull/33717)) +- Use updated range styles. ([33824](https://github.com/WordPress/gutenberg/pull/33824)) + +#### Block Library +- [Post Featured Image]: Add basic dimension controls. ([31634](https://github.com/WordPress/gutenberg/pull/31634)) + +#### Site Editor +- Add error boundary. ([33921](https://github.com/WordPress/gutenberg/pull/33921)) + +#### Widgets Editor +- Add error boundaries to widget screens. ([33771](https://github.com/WordPress/gutenberg/pull/33771)) + +#### Patterns +- Block patterns: Add translation context on titles. ([33734](https://github.com/WordPress/gutenberg/pull/33734)) + +#### Document Settings +- Disable spellcheck and autocomplete in permalink slug field. ([33708](https://github.com/WordPress/gutenberg/pull/33708)) + +#### Template Editor +- Template Mode: Add busy state to template creation modal. ([33076](https://github.com/WordPress/gutenberg/pull/33076)) + +#### Global Styles +- Dimensions Panel: Add new ToolsPanel component and update spacing supports. ([32392](https://github.com/WordPress/gutenberg/pull/32392)) + + +### Bug Fixes + +- Correct \`function_exists()\` check typo introduced in #33331. ([33513](https://github.com/WordPress/gutenberg/pull/33513)) +- ESLint Plugin: Include .jsx extenstion when linting import statements. ([33746](https://github.com/WordPress/gutenberg/pull/33746)) +- Fix block appender position in classic themes. ([33895](https://github.com/WordPress/gutenberg/pull/33895)) +- Fix misspelling of \\"queries\\" in filter documentation. ([33799](https://github.com/WordPress/gutenberg/pull/33799)) +- Fix positioning discrepancy with draggable chip. ([33893](https://github.com/WordPress/gutenberg/pull/33893)) + +#### Block Library +- Fix justification for button block when selected. ([33739](https://github.com/WordPress/gutenberg/pull/33739)) +- Fix navigation block appender invalid html. ([33964](https://github.com/WordPress/gutenberg/pull/33964)) +- Fix navigation margin collapsing. ([33021](https://github.com/WordPress/gutenberg/pull/33021)) +- Image Block: Fix issue with canInsertCover not being set to false for empty arrays. ([33863](https://github.com/WordPress/gutenberg/pull/33863)) +- [Query Pagination Numbers]: Fix first page's link. ([33629](https://github.com/WordPress/gutenberg/pull/33629)) + +#### Components +- Fix RTL on custom gradient picker. ([33831](https://github.com/WordPress/gutenberg/pull/33831)) +- FontSizePicker: Use number values when the initial value is a number. ([33679](https://github.com/WordPress/gutenberg/pull/33679)) +- FormTokenField: Avoid error when maxLength value is hit. ([33623](https://github.com/WordPress/gutenberg/pull/33623)) +- \`useBreakpointIndex\`: Attach \`resize\` event listener to \`window\` instead of \`document\`. ([33902](https://github.com/WordPress/gutenberg/pull/33902)) + +#### Block Editor +- Force link text to wrap in the Link UI when encountering extra long link text. ([33753](https://github.com/WordPress/gutenberg/pull/33753)) +- Improve display of LinkURL menu and fix spacing. ([33652](https://github.com/WordPress/gutenberg/pull/33652)) +- Only show rich preview for image and description if data is available. ([33660](https://github.com/WordPress/gutenberg/pull/33660)) +- URL Details: Avoid PHP notice when parsing protocol-relative icon URLs. ([33779](https://github.com/WordPress/gutenberg/pull/33779)) + +#### Global Styles +- Avoid rendering duplicate elements stylesheet. ([33680](https://github.com/WordPress/gutenberg/pull/33680)) +- Fix Global Styles transient key clash. ([33844](https://github.com/WordPress/gutenberg/pull/33844)) +- Site editor: Fix presets for blocks with multiple selectors. ([33951](https://github.com/WordPress/gutenberg/pull/33951)) + +#### CSS & Styling +- Fix navigation block placeholder preview markup. ([33963](https://github.com/WordPress/gutenberg/pull/33963)) + +#### Navigation Screen +- Fix regressed menu selection dropdown placeholder value for Nav Editor menu locations UI. ([33748](https://github.com/WordPress/gutenberg/pull/33748)) +- Navigation Editor: Avoid React warning when creating a new menu. ([33843](https://github.com/WordPress/gutenberg/pull/33843)) + +#### Site Editor +- Fix the site editor breaking in firefox. ([33896](https://github.com/WordPress/gutenberg/pull/33896)) + +#### Post Editor +- Editor: Safer isPreviewingPost check. ([33840](https://github.com/WordPress/gutenberg/pull/33840)) + +#### Meta Boxes +- Fix Safari 13 metaboxes from overlapping the content. ([33817](https://github.com/WordPress/gutenberg/pull/33817)) + +#### Build Tooling +- Readable JS assets Plugin: Fix webpack 5 support. ([33785](https://github.com/WordPress/gutenberg/pull/33785)) + +#### Accessibility +- Fix some JAWS bugs. ([33627](https://github.com/WordPress/gutenberg/pull/33627)) + +#### Template Editor +- Template: Only show post template actions to users with correct capabilities. ([33392](https://github.com/WordPress/gutenberg/pull/33392)) + + +### Performance + +- Avoid double parsing the content when loading the editor. ([33727](https://github.com/WordPress/gutenberg/pull/33727)) + +#### Block Library +- Do not add to the block-library CSS bundle the colors that come from \`theme.json\`. ([33924](https://github.com/WordPress/gutenberg/pull/33924)) +- Improve the rendering/update performance of the image block. ([33974](https://github.com/WordPress/gutenberg/pull/33974)) + +#### Block Editor +- Lazy render block types in the inserter. ([33749](https://github.com/WordPress/gutenberg/pull/33749)) +- Lazy render the inserter search results. ([33868](https://github.com/WordPress/gutenberg/pull/33868)) + +#### Parsing +- Improve the performance of the parser by removing the automatic custom classnames handling. ([33903](https://github.com/WordPress/gutenberg/pull/33903)) + +#### Template Editor +- Template Mode: Remove 'per_page' argument from the template data selector. ([33742](https://github.com/WordPress/gutenberg/pull/33742)) + +#### Post Editor +- Refactor the HierarchicalTermSelector so that it does not cause unnecessary loading of terms. ([33418](https://github.com/WordPress/gutenberg/pull/33418)) + + +### Documentation + +- Add documentation to disable remote calls for block patterns. ([33930](https://github.com/WordPress/gutenberg/pull/33930)) +- Add missing comma. ([33764](https://github.com/WordPress/gutenberg/pull/33764)) +- Add spaces in add_theme_support documentation code. ([33796](https://github.com/WordPress/gutenberg/pull/33796)) +- Correct spelling and grammar in documentation. ([33860](https://github.com/WordPress/gutenberg/pull/33860)) +- Docs: Add more details about block attributes. ([33880](https://github.com/WordPress/gutenberg/pull/33880)) +- Example for rest_endpoints filter in PHP. ([33738](https://github.com/WordPress/gutenberg/pull/33738)) +- Fix gutenberg_resolve_template() return documentation. ([33800](https://github.com/WordPress/gutenberg/pull/33800)) +- Update documentation to reflect new automated process for feature grouping. ([33573](https://github.com/WordPress/gutenberg/pull/33573)) +- [docs] fix: \`supports.color.gradients\` is plural. ([33781](https://github.com/WordPress/gutenberg/pull/33781)) +- fix: Broken link in documentation to block support mechanism. ([33780](https://github.com/WordPress/gutenberg/pull/33780)) +- link fix: Block editor Sidebar Tutorial. ([33308](https://github.com/WordPress/gutenberg/pull/33308)) + + +### Code Quality + +- Scripts: Fix typo in format change message. ([33945](https://github.com/WordPress/gutenberg/pull/33945)) + +#### Components +- Components utils: \`rtl()\` return type, \`rtl.watch()\` utility. ([33882](https://github.com/WordPress/gutenberg/pull/33882)) +- InputControl to TypeScript. ([33696](https://github.com/WordPress/gutenberg/pull/33696)) +- Use the \`__unsafe_useEmotionCache\` in the \`useCx\` hook. ([33982](https://github.com/WordPress/gutenberg/pull/33982)) + +#### Block Library +- Featured Image: Use getMedia shorthand. ([33943](https://github.com/WordPress/gutenberg/pull/33943)) +- Site Logo: Use getMedia shorthand. ([33992](https://github.com/WordPress/gutenberg/pull/33992)) + +#### Global Styles +- No longer read from \`experimental-theme.json\`. ([33904](https://github.com/WordPress/gutenberg/pull/33904)) +- Remove the experimental prefix and rename \`theme.json\` files. ([33925](https://github.com/WordPress/gutenberg/pull/33925)) + +#### Plugin +- Fix \`jsdoc/check-line-alignment\` ESLint warnings. ([33901](https://github.com/WordPress/gutenberg/pull/33901)) + +#### Post Editor +- Refactor MetaBoxesArea to to functional components using hooks. ([30542](https://github.com/WordPress/gutenberg/pull/30542)) + + +### Tools + +- GitHub Templates: Fix spacing in bug report template. ([33761](https://github.com/WordPress/gutenberg/pull/33761)) +- GitHub Templates: Format bug report template. ([33786](https://github.com/WordPress/gutenberg/pull/33786)) +- Update bug issue template to use forms. ([33713](https://github.com/WordPress/gutenberg/pull/33713)) + +#### Testing +- Add search performance measure and make other measures more stable. ([33848](https://github.com/WordPress/gutenberg/pull/33848)) +- E2E: Block Hierarchy Navigation wait for the column to be highlighted. ([33721](https://github.com/WordPress/gutenberg/pull/33721)) + +#### Build Tooling +- Scripts: Update webpack to v5 (try 2). ([33818](https://github.com/WordPress/gutenberg/pull/33818)) + + +### Various + +- Core Data: Deprecate \`getAuthors\` in favor of \`getUsers\`. ([33725](https://github.com/WordPress/gutenberg/pull/33725)) +- RNMobile: Add integration test guide. ([33833](https://github.com/WordPress/gutenberg/pull/33833)) +- RNMobile: Try unifying the unit test command on mobile. ([33657](https://github.com/WordPress/gutenberg/pull/33657)) +- Tune appender margin. ([33866](https://github.com/WordPress/gutenberg/pull/33866)) + +#### Block Library +- Enable ability to remove a link from the Nav Link block in the Nav Block. ([33777](https://github.com/WordPress/gutenberg/pull/33777)) +- Search Block: Removed components class from icon button and polished css. ([33961](https://github.com/WordPress/gutenberg/pull/33961)) +- [Button Block]: Add padding block support. ([31774](https://github.com/WordPress/gutenberg/pull/31774)) + +#### Full Site Editing +- Site Editor: Implement a settings object filter. ([33737](https://github.com/WordPress/gutenberg/pull/33737)) +- Template Part placeholder - Add title step to creation flow. ([33703](https://github.com/WordPress/gutenberg/pull/33703)) +- Template part selection popover - minor style updates for visiblity. ([33733](https://github.com/WordPress/gutenberg/pull/33733)) + +#### Widgets Editor +- Try to fix flaky customizer inspector test 2nd try. ([33965](https://github.com/WordPress/gutenberg/pull/33965)) +- Try to fix flaky customizer inspector test. ([33890](https://github.com/WordPress/gutenberg/pull/33890)) + +#### Block Editor +- Closing the block inserter decrements block type impressions. ([33906](https://github.com/WordPress/gutenberg/pull/33906)) +- Enable rich previews for internal links. ([33086](https://github.com/WordPress/gutenberg/pull/33086)) + +#### Icons +- Try new icons for reusable blocks and template parts. ([34002](https://github.com/WordPress/gutenberg/pull/34002)) + +#### Components +- Polish the focus style for the segmented control. ([33842](https://github.com/WordPress/gutenberg/pull/33842)) + +#### REST API +- Improve likelihood of getting rich link previews by modifying UA string for URL Details REST API endpoint. ([33747](https://github.com/WordPress/gutenberg/pull/33747)) + +#### CSS & Styling +- Try: Reduce specificity of reset & classic styles. ([32659](https://github.com/WordPress/gutenberg/pull/32659)) + + +" +`; + +exports[`getContributorList verify that the contributors list is properly formatted 1`] = ` +" + +## Contributors + +The following contributors merged PRs in this release: + +@aaronrobertshaw @Addison-Stavlo @alexstine @amir2mi @annezazu @antonis @ceyhun @christianztamayo @chrisvanpatten @ciampo @dcalhoun @desrosj @fluiddot @geriux @getdave @glendaviesnz @guarani @gwwar @gziolo @hypest @jasmussen @jeremyfelt @jeyip @jhnstn @johngodley @kapilpaul @kevin940726 @MaggieCabrera @Mamaduka @mkaz @mrleemon @mtias @nosolosw @ntsekouras @rbrishabh @RhnSharma @ryelle @sarayourfriend @scruffian @SiobhyB @stacimc @StevenDufresne @talldan @torounit @walbo @youknowriad" +`; + +exports[`getContributorProps verify that the contributors props are properly formatted 1`] = ` +"## First time contributors + +The following PRs were merged by first time contributors: + +- @alexstine: Fix some JAWS bugs. ([33627](https://github.com/WordPress/gutenberg/pull/33627)) +- @amir2mi: Example for rest_endpoints filter in PHP. ([33738](https://github.com/WordPress/gutenberg/pull/33738)) +- @christianztamayo: Scripts: Webpack configuration update to minimize CSS. ([33676](https://github.com/WordPress/gutenberg/pull/33676)) +- @kapilpaul: Add spaces in add_theme_support documentation code. ([33796](https://github.com/WordPress/gutenberg/pull/33796)) +" +`; diff --git a/bin/plugin/commands/test/changelog.js b/bin/plugin/commands/test/changelog.js index 773609949873b..321a86da8b156 100644 --- a/bin/plugin/commands/test/changelog.js +++ b/bin/plugin/commands/test/changelog.js @@ -10,10 +10,27 @@ import { capitalizeAfterColonSeparatedPrefix, getIssueType, sortGroup, + skipCreatedByBots, getTypesByLabels, getTypesByTitle, getIssueFeature, + getFormattedItemDescription, + getUniqueByUsername, + getChangelog, + getContributorProps, + getContributorsList, } from '../changelog'; +import _pullRequests from './fixtures/pull-requests.json'; +import botPullRequestFixture from './fixtures/bot-pull-requests.json'; + +/** + * pull-requests.json is a static snapshot of real data from the Github API. + * We merge this with dummy fixture data for a "bot" pull request so as to + * ensure future updates to the pull-requests.json doesn't reduce test coverage + * of filtering out of bot PRs. + * See: https://github.com/WordPress/gutenberg/pull/38777#discussion_r808992346. + */ +const pullRequests = _pullRequests.concat( botPullRequestFixture ); describe( 'getNormalizedTitle', () => { const DEFAULT_ISSUE = { @@ -187,7 +204,7 @@ describe( 'getIssueFeature', () => { name: 'Some Label', }, { - name: '[Package] Example Package', // 1. has explicit mapping + name: '[Package] Example Package', // 1. has explicit mapping. }, { name: '[Package] Another One', @@ -202,10 +219,10 @@ describe( 'getIssueFeature', () => { const result = getIssueFeature( { labels: [ { - name: '[Block] Some Block', // 3. Block-specific label + name: '[Block] Some Block', // 3. Block-specific label. }, { - name: '[Package] Edit Widgets', // 1. has explicit mapping + name: '[Package] Edit Widgets', // 1. has explicit mapping. }, { name: '[Feature] Some Feature', // 2. Feature label. @@ -225,13 +242,13 @@ describe( 'getIssueFeature', () => { const result = getIssueFeature( { labels: [ { - name: '[Block] Some Block', // block specific label + name: '[Block] Some Block', // Block specific label. }, { name: '[Package] This package', }, { - name: '[Feature] Cool Feature', // should have priority despite prescence of block specific label + name: '[Feature] Cool Feature', // Should have priority despite prescence of block specific label. }, { name: '[Package] Another One', @@ -312,3 +329,157 @@ describe( 'getTypesByTitle', () => { expect( result ).toEqual( [ 'Bug Fixes' ] ); } ); } ); + +describe( 'getUniqueByUsername', () => { + it( 'removes duplicate entries by username', () => { + const entries = [ + { + user: { + login: '@user1', + }, + }, + { + user: { + login: '@user1', + }, + }, + { + user: { + login: '@user2', + }, + }, + { + user: { + login: '@user3', + }, + }, + { + user: { + login: '@user4', + }, + }, + ]; + + const expected = [ + { + user: { + login: '@user1', + }, + }, + { + user: { + login: '@user2', + }, + }, + { + user: { + login: '@user3', + }, + }, + { + user: { + login: '@user4', + }, + }, + ]; + expect( getUniqueByUsername( entries ) ).toEqual( expected ); + } ); +} ); + +describe( 'skipCreatedByBots', () => { + it( 'removes entries created by bots', () => { + const entries = [ + { + user: { + login: '@user1', + type: 'User', + }, + }, + { + user: { + login: '@dependabot[bot]', + type: 'Bot', + }, + }, + { + user: { + login: '@user2', + type: 'User', + }, + }, + { + user: { + login: '@someotherrandombotusername', + type: 'Bot', + }, + }, + { + user: { + login: '@user3', + type: 'User', + }, + }, + ]; + + const expected = [ + { + user: { + login: '@user1', + type: 'User', + }, + }, + { + user: { + login: '@user2', + type: 'User', + }, + }, + { + user: { + login: '@user3', + type: 'User', + }, + }, + ]; + expect( skipCreatedByBots( entries ) ).toEqual( expected ); + } ); +} ); + +describe( 'getFormattedItemDescription', () => { + it( 'creates a markdown formatted description', () => { + const expected = + 'This is a test title and should have a link. ([123456](https://github.com/123456))'; + expect( + getFormattedItemDescription( + 'This is a test title and should have a link.', + 123456, + 'https://github.com/123456' + ) + ).toEqual( expected ); + } ); +} ); + +describe( 'getChangelog', () => { + test( 'verify that the changelog is properly formatted', () => { + // The fixture with the list of pull requests was generated by running the following command: + // npm run changelog -- --milestone="Gutenberg 11.3" + // The response from the `fetchAllPullRequests` call in the `getChangelog` method was stored in the JSON file. + expect( getChangelog( pullRequests ) ).toMatchSnapshot(); + } ); +} ); + +describe( 'getContributorProps', () => { + test( 'verify that the contributors props are properly formatted', () => { + // The fixture with the list of pull requests was generated by running the following command: + // npm run changelog -- --milestone="Gutenberg 11.3" + expect( getContributorProps( pullRequests ) ).toMatchSnapshot(); + } ); +} ); + +describe( 'getContributorList', () => { + test( 'verify that the contributors list is properly formatted', () => { + // The fixture with the list of pull requests was generated by running the following command: + // npm run changelog -- --milestone="Gutenberg 11.3" + expect( getContributorsList( pullRequests ) ).toMatchSnapshot(); + } ); +} ); diff --git a/bin/plugin/commands/test/fixtures/bot-pull-requests.json b/bin/plugin/commands/test/fixtures/bot-pull-requests.json new file mode 100644 index 0000000000000..c5e268a04f1d5 --- /dev/null +++ b/bin/plugin/commands/test/fixtures/bot-pull-requests.json @@ -0,0 +1,109 @@ +[ + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/XXXX", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/XXXX/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/XXXX/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/XXXX/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/XXXX", + "id": 123456, + "node_id": "123456", + "number": 123456, + "title": "Placeholder to test that PRs by bots are removed.", + "user": { + "login": "@dependabot[bot]", + "id": 123456, + "node_id": "123456", + "avatar_url": "https://avatars.githubusercontent.com/u/123456?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/torounit", + "html_url": "https://github.com/torounit", + "followers_url": "https://api.github.com/users/torounit/followers", + "following_url": "https://api.github.com/users/torounit/following{/other_user}", + "gists_url": "https://api.github.com/users/torounit/gists{/gist_id}", + "starred_url": "https://api.github.com/users/torounit/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/torounit/subscriptions", + "organizations_url": "https://api.github.com/users/torounit/orgs", + "repos_url": "https://api.github.com/users/torounit/repos", + "events_url": "https://api.github.com/users/torounit/events{/privacy}", + "received_events_url": "https://api.github.com/users/torounit/received_events", + "type": "bot", + "site_admin": false + }, + "labels": [ + { + "id": 930001208, + "node_id": "MDU6TGFiZWw5MzAwMDEyMDg=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Code%20Quality", + "name": "[Type] Code Quality", + "color": "e5e04b", + "default": false, + "description": "Gotta shave those yaks." + }, + { + "id": 1298994603, + "node_id": "MDU6TGFiZWwxMjk4OTk0NjAz", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Package]%20Edit%20Post", + "name": "[Package] Edit Post", + "color": "ed2572", + "default": false, + "description": "packages/edit-post" + } + ], + "state": "closed", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 7, + "created_at": "2021-04-06T16:55:51Z", + "updated_at": "2021-08-02T16:23:34Z", + "closed_at": "2021-08-02T16:23:07Z", + "author_association": "MEMBER", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/XXXX", + "html_url": "https://github.com/WordPress/gutenberg/pull/XXXX", + "diff_url": "https://github.com/WordPress/gutenberg/pull/XXXX.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/XXXX.patch" + }, + "body": "<!-- Learn the overall process and best practices for pull requests at https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/repository-management.md#pull-requests. -->\r\n\r\n## Description\r\n<!-- Please describe what you have changed or added -->\r\n\r\nRelated: #22890 his PR refactors the `MetaBoxesArea` component into a function component using React hooks.\r\n\r\n## How has this been tested?\r\n<!-- Please describe in detail how you tested your changes. -->\r\n<!-- Include details of your testing environment, tests ran to see how -->\r\n<!-- your change affects other areas of the code, etc. -->\r\n\r\nShow block editor and check custom field metabox and others.\r\n\r\n## Checklist:\r\n- [x] My code is tested.\r\n- [x] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [x] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [x] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [ ] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [ ] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [ ] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + } +] diff --git a/bin/plugin/commands/test/fixtures/pull-requests.json b/bin/plugin/commands/test/fixtures/pull-requests.json new file mode 100644 index 0000000000000..5eeed9ebe3186 --- /dev/null +++ b/bin/plugin/commands/test/fixtures/pull-requests.json @@ -0,0 +1,15269 @@ +[ + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/34002", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/34002/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/34002/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/34002/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/34002", + "id": 966290882, + "node_id": "MDExOlB1bGxSZXF1ZXN0NzA4NTQ3NjEw", + "number": 34002, + "title": "Try new icons for reusable blocks and template parts.", + "user": { + "login": "jasmussen", + "id": 1204802, + "node_id": "MDQ6VXNlcjEyMDQ4MDI=", + "avatar_url": "https://avatars.githubusercontent.com/u/1204802?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jasmussen", + "html_url": "https://github.com/jasmussen", + "followers_url": "https://api.github.com/users/jasmussen/followers", + "following_url": "https://api.github.com/users/jasmussen/following{/other_user}", + "gists_url": "https://api.github.com/users/jasmussen/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jasmussen/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jasmussen/subscriptions", + "organizations_url": "https://api.github.com/users/jasmussen/orgs", + "repos_url": "https://api.github.com/users/jasmussen/repos", + "events_url": "https://api.github.com/users/jasmussen/events{/privacy}", + "received_events_url": "https://api.github.com/users/jasmussen/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 783337752, + "node_id": "MDU6TGFiZWw3ODMzMzc3NTI=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Feature]%20Reusable%20Blocks", + "name": "[Feature] Reusable Blocks", + "color": "fbca04", + "default": false, + "description": "" + }, + { + "id": 1988226925, + "node_id": "MDU6TGFiZWwxOTg4MjI2OTI1", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Package]%20Icons", + "name": "[Package] Icons", + "color": "ed2572", + "default": false, + "description": "/packages/icons" + }, + { + "id": 2373088071, + "node_id": "MDU6TGFiZWwyMzczMDg4MDcx", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Block]%20Template-Part", + "name": "[Block] Template-Part", + "color": "6767e5", + "default": false, + "description": "" + } + ], + "state": "closed", + "locked": false, + "assignee": { + "login": "jasmussen", + "id": 1204802, + "node_id": "MDQ6VXNlcjEyMDQ4MDI=", + "avatar_url": "https://avatars.githubusercontent.com/u/1204802?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jasmussen", + "html_url": "https://github.com/jasmussen", + "followers_url": "https://api.github.com/users/jasmussen/followers", + "following_url": "https://api.github.com/users/jasmussen/following{/other_user}", + "gists_url": "https://api.github.com/users/jasmussen/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jasmussen/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jasmussen/subscriptions", + "organizations_url": "https://api.github.com/users/jasmussen/orgs", + "repos_url": "https://api.github.com/users/jasmussen/repos", + "events_url": "https://api.github.com/users/jasmussen/events{/privacy}", + "received_events_url": "https://api.github.com/users/jasmussen/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "jasmussen", + "id": 1204802, + "node_id": "MDQ6VXNlcjEyMDQ4MDI=", + "avatar_url": "https://avatars.githubusercontent.com/u/1204802?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jasmussen", + "html_url": "https://github.com/jasmussen", + "followers_url": "https://api.github.com/users/jasmussen/followers", + "following_url": "https://api.github.com/users/jasmussen/following{/other_user}", + "gists_url": "https://api.github.com/users/jasmussen/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jasmussen/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jasmussen/subscriptions", + "organizations_url": "https://api.github.com/users/jasmussen/orgs", + "repos_url": "https://api.github.com/users/jasmussen/repos", + "events_url": "https://api.github.com/users/jasmussen/events{/privacy}", + "received_events_url": "https://api.github.com/users/jasmussen/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 5, + "created_at": "2021-08-11T09:06:57Z", + "updated_at": "2021-08-12T07:30:40Z", + "closed_at": "2021-08-11T11:26:22Z", + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/34002", + "html_url": "https://github.com/WordPress/gutenberg/pull/34002", + "diff_url": "https://github.com/WordPress/gutenberg/pull/34002.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/34002.patch" + }, + "body": "## Description\r\n\r\nStarts work on #33897 by adding new generic icons for template parts and reusable blocks.\r\n\r\nFor now, the PR adds the two new icons, and applies them to template parts and partially, reusable blocks:\r\n\r\n<img width=\"1270\" alt=\"Screenshot 2021-08-11 at 11 01 42\" src=\"https://user-images.githubusercontent.com/1204802/129001474-efc59606-2b05-4335-86e6-ddadc4d963cb.png\">\r\n\r\nAs shown above, there's still some logic in the Reusable Block system that falls back to the `defaultBlock` icon, as shown above:\r\n\r\n- In the List View\r\n- In the Inspector description\r\n\r\nAdditionally, the `defaultBlock` is used for select mode:\r\n\r\n<img width=\"305\" alt=\"Screenshot 2021-08-11 at 11 01 54\" src=\"https://user-images.githubusercontent.com/1204802/129001687-513ee6bf-102d-4970-9ed4-fa45c03d915d.png\">\r\n\r\nIf you're familiar with the reusable blocks codebase, I'd appreciate your help in applying the new icon in those remaining place. \r\n\r\n## How has this been tested?\r\n\r\nTemplate Parts and Reusable blocks, when used in the canvas, list view, and inspector, should leverage the new icons.\r\n\r\n## Checklist:\r\n- [x] My code is tested.\r\n- [x] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [x] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [x] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [x] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [x] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [ ] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/34000", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/34000/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/34000/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/34000/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/34000", + "id": 966213667, + "node_id": "MDExOlB1bGxSZXF1ZXN0NzA4NDc2NzQy", + "number": 34000, + "title": "[Mobile] - Global styles - Add color to the block styles filter list", + "user": { + "login": "geriux", + "id": 4885740, + "node_id": "MDQ6VXNlcjQ4ODU3NDA=", + "avatar_url": "https://avatars.githubusercontent.com/u/4885740?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/geriux", + "html_url": "https://github.com/geriux", + "followers_url": "https://api.github.com/users/geriux/followers", + "following_url": "https://api.github.com/users/geriux/following{/other_user}", + "gists_url": "https://api.github.com/users/geriux/gists{/gist_id}", + "starred_url": "https://api.github.com/users/geriux/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/geriux/subscriptions", + "organizations_url": "https://api.github.com/users/geriux/orgs", + "repos_url": "https://api.github.com/users/geriux/repos", + "events_url": "https://api.github.com/users/geriux/events{/privacy}", + "received_events_url": "https://api.github.com/users/geriux/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 982506020, + "node_id": "MDU6TGFiZWw5ODI1MDYwMjA=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/Mobile%20App%20-%20i.e.%20Android%20or%20iOS", + "name": "Mobile App - i.e. Android or iOS", + "color": "a3ef7a", + "default": false, + "description": "Native mobile impl of the block editor. (Note: used in scripts, ping mobile folks to change)" + } + ], + "state": "closed", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 1, + "created_at": "2021-08-11T08:20:47Z", + "updated_at": "2021-08-11T14:18:41Z", + "closed_at": "2021-08-11T14:18:15Z", + "author_association": "MEMBER", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/34000", + "html_url": "https://github.com/WordPress/gutenberg/pull/34000", + "diff_url": "https://github.com/WordPress/gutenberg/pull/34000.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/34000.patch" + }, + "body": "`Gutenberg Mobile PR` -> https://github.com/wordpress-mobile/gutenberg-mobile/pull/3822\r\n\r\n## Description\r\nWe [recently added](https://github.com/WordPress/gutenberg/pull/33782) some filtering to prevent passing block style attributes that mobile doesn't support yet, by doing this the `color` styles were being filtered out. This PR adds `color` to the style attributes we support.\r\n\r\n## How has this been tested?\r\n- Open the app\r\n- Add a block that supports text color customization, like `Paragraph`\r\n- Open the settings of the block\r\n- Tap on `Text color`\r\n- Go to the end of the list and select `CUSTOM`\r\n- Change the color\r\n- **Expect** to see the text color changing in the block\r\n\r\n## Screenshots <!-- if applicable -->\r\nBefore|After\r\n-|-\r\n<kbd><img src=\"https://user-images.githubusercontent.com/4885740/128993918-3ce21e36-4f67-4abe-bd63-fc0760e7a84f.gif\" width=\"200\" /></kbd> | <kbd><img src=\"https://user-images.githubusercontent.com/4885740/128993930-25e1e76e-1d21-4961-9011-4130f6db57ac.gif\" width=\"200\" /></kbd>\r\n\r\n## Types of changes\r\nBug fix\r\n\r\n## Checklist:\r\n- [x] My code is tested.\r\n- [x] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [x] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [x] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [x] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [x] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [x] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33992", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33992/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33992/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33992/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33992", + "id": 965954789, + "node_id": "MDExOlB1bGxSZXF1ZXN0NzA4MjM0OTc3", + "number": 33992, + "title": "Site Logo: Use getMedia shorthand", + "user": { + "login": "Mamaduka", + "id": 240569, + "node_id": "MDQ6VXNlcjI0MDU2OQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/240569?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Mamaduka", + "html_url": "https://github.com/Mamaduka", + "followers_url": "https://api.github.com/users/Mamaduka/followers", + "following_url": "https://api.github.com/users/Mamaduka/following{/other_user}", + "gists_url": "https://api.github.com/users/Mamaduka/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Mamaduka/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Mamaduka/subscriptions", + "organizations_url": "https://api.github.com/users/Mamaduka/orgs", + "repos_url": "https://api.github.com/users/Mamaduka/repos", + "events_url": "https://api.github.com/users/Mamaduka/events{/privacy}", + "received_events_url": "https://api.github.com/users/Mamaduka/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 930001208, + "node_id": "MDU6TGFiZWw5MzAwMDEyMDg=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Code%20Quality", + "name": "[Type] Code Quality", + "color": "e5e04b", + "default": false, + "description": "Gotta shave those yaks." + }, + { + "id": 2347193850, + "node_id": "MDU6TGFiZWwyMzQ3MTkzODUw", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Block]%20Site%20Logo", + "name": "[Block] Site Logo", + "color": "6767e5", + "default": false, + "description": "" + } + ], + "state": "closed", + "locked": false, + "assignee": { + "login": "Mamaduka", + "id": 240569, + "node_id": "MDQ6VXNlcjI0MDU2OQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/240569?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Mamaduka", + "html_url": "https://github.com/Mamaduka", + "followers_url": "https://api.github.com/users/Mamaduka/followers", + "following_url": "https://api.github.com/users/Mamaduka/following{/other_user}", + "gists_url": "https://api.github.com/users/Mamaduka/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Mamaduka/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Mamaduka/subscriptions", + "organizations_url": "https://api.github.com/users/Mamaduka/orgs", + "repos_url": "https://api.github.com/users/Mamaduka/repos", + "events_url": "https://api.github.com/users/Mamaduka/events{/privacy}", + "received_events_url": "https://api.github.com/users/Mamaduka/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "Mamaduka", + "id": 240569, + "node_id": "MDQ6VXNlcjI0MDU2OQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/240569?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Mamaduka", + "html_url": "https://github.com/Mamaduka", + "followers_url": "https://api.github.com/users/Mamaduka/followers", + "following_url": "https://api.github.com/users/Mamaduka/following{/other_user}", + "gists_url": "https://api.github.com/users/Mamaduka/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Mamaduka/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Mamaduka/subscriptions", + "organizations_url": "https://api.github.com/users/Mamaduka/orgs", + "repos_url": "https://api.github.com/users/Mamaduka/repos", + "events_url": "https://api.github.com/users/Mamaduka/events{/privacy}", + "received_events_url": "https://api.github.com/users/Mamaduka/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 1, + "created_at": "2021-08-11T05:29:30Z", + "updated_at": "2021-08-11T07:35:13Z", + "closed_at": "2021-08-11T07:34:49Z", + "author_association": "MEMBER", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33992", + "html_url": "https://github.com/WordPress/gutenberg/pull/33992", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33992.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33992.patch" + }, + "body": "## Description\r\nPR replaces `getEntityRecord` with `getMedia` shorthand for simplicity.\r\n\r\nSimilar PR: #33943.\r\n\r\n## How has this been tested?\r\nThis is a non-breaking change. Tested that the \"Site Logo\" block works as expected.\r\n\r\n## Types of changes\r\nCode Quality\r\n\r\n## Checklist:\r\n- [x] My code is tested.\r\n- [x] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [ ] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [ ] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [x] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [x] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [ ] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33982", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33982/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33982/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33982/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33982", + "id": 965187245, + "node_id": "MDExOlB1bGxSZXF1ZXN0NzA3NTI4ODcz", + "number": 33982, + "title": "Components: use the `__unsafe_useEmotionCache` in the `useCx` hook", + "user": { + "login": "ciampo", + "id": 1083581, + "node_id": "MDQ6VXNlcjEwODM1ODE=", + "avatar_url": "https://avatars.githubusercontent.com/u/1083581?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/ciampo", + "html_url": "https://github.com/ciampo", + "followers_url": "https://api.github.com/users/ciampo/followers", + "following_url": "https://api.github.com/users/ciampo/following{/other_user}", + "gists_url": "https://api.github.com/users/ciampo/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ciampo/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ciampo/subscriptions", + "organizations_url": "https://api.github.com/users/ciampo/orgs", + "repos_url": "https://api.github.com/users/ciampo/repos", + "events_url": "https://api.github.com/users/ciampo/events{/privacy}", + "received_events_url": "https://api.github.com/users/ciampo/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 930001208, + "node_id": "MDU6TGFiZWw5MzAwMDEyMDg=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Code%20Quality", + "name": "[Type] Code Quality", + "color": "e5e04b", + "default": false, + "description": "Gotta shave those yaks." + }, + { + "id": 997392122, + "node_id": "MDU6TGFiZWw5OTczOTIxMjI=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Package]%20Components", + "name": "[Package] Components", + "color": "ed2572", + "default": false, + "description": "/packages/components" + }, + { + "id": 2555015900, + "node_id": "MDU6TGFiZWwyNTU1MDE1OTAw", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Feature]%20Component%20System", + "name": "[Feature] Component System", + "color": "fbca04", + "default": false, + "description": "The next iteration on WordPress Components." + } + ], + "state": "closed", + "locked": false, + "assignee": { + "login": "ciampo", + "id": 1083581, + "node_id": "MDQ6VXNlcjEwODM1ODE=", + "avatar_url": "https://avatars.githubusercontent.com/u/1083581?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/ciampo", + "html_url": "https://github.com/ciampo", + "followers_url": "https://api.github.com/users/ciampo/followers", + "following_url": "https://api.github.com/users/ciampo/following{/other_user}", + "gists_url": "https://api.github.com/users/ciampo/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ciampo/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ciampo/subscriptions", + "organizations_url": "https://api.github.com/users/ciampo/orgs", + "repos_url": "https://api.github.com/users/ciampo/repos", + "events_url": "https://api.github.com/users/ciampo/events{/privacy}", + "received_events_url": "https://api.github.com/users/ciampo/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "ciampo", + "id": 1083581, + "node_id": "MDQ6VXNlcjEwODM1ODE=", + "avatar_url": "https://avatars.githubusercontent.com/u/1083581?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/ciampo", + "html_url": "https://github.com/ciampo", + "followers_url": "https://api.github.com/users/ciampo/followers", + "following_url": "https://api.github.com/users/ciampo/following{/other_user}", + "gists_url": "https://api.github.com/users/ciampo/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ciampo/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ciampo/subscriptions", + "organizations_url": "https://api.github.com/users/ciampo/orgs", + "repos_url": "https://api.github.com/users/ciampo/repos", + "events_url": "https://api.github.com/users/ciampo/events{/privacy}", + "received_events_url": "https://api.github.com/users/ciampo/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 1, + "created_at": "2021-08-10T17:43:01Z", + "updated_at": "2021-08-11T08:16:06Z", + "closed_at": "2021-08-11T08:15:38Z", + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33982", + "html_url": "https://github.com/WordPress/gutenberg/pull/33982", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33982.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33982.patch" + }, + "body": "<!-- Learn the overall process and best practices for pull requests at https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/repository-management.md#pull-requests. -->\r\n\r\n<!-- Gutenberg's license is in the process of updating to be dual-licensed under the GPL and MPL. As part of that transition, all new contributions are dual-licensed. For more information, see: https://github.com/WordPress/gutenberg/blob/trunk/LICENSE.md -->\r\n\r\n## Description\r\n<!-- Please describe what you have changed or added -->\r\n\r\nA [recent change](https://github.com/emotion-js/emotion/pull/2441) in Emotion exposed the `__unsafe_useEmotionCache()` hook.\r\n\r\nThis PR updates the package versions of `@emotion/react` and `@emotion/cache` and uses this newly exposed function in the `useCx` hook, instead of exposing the private `CacheProvider._context` variable directly.\r\n\r\n## How has this been tested?\r\n<!-- Please describe in detail how you tested your changes. -->\r\n<!-- Include details of your testing environment, tests ran to see how -->\r\n<!-- your change affects other areas of the code, etc. -->\r\n\r\n- Project builds, tests pass\r\n- Components in Storybook work as expected (in particular, the `useCx` Storybook story)\r\n\r\n## Screenshots <!-- if applicable -->\r\n\r\nN/A\r\n\r\n## Types of changes\r\n<!-- What types of changes does your code introduce? -->\r\n<!-- Bug fix (non-breaking change which fixes an issue) -->\r\n<!-- New feature (non-breaking change which adds functionality) -->\r\n<!-- Breaking change (fix or feature that would cause existing functionality to not work as expected) -->\r\n\r\nRefactor\r\n\r\n## Checklist:\r\n- [x] My code is tested.\r\n- [x] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [x] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [x] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [x] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [x] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- N/A I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33974", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33974/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33974/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33974/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33974", + "id": 964956517, + "node_id": "MDExOlB1bGxSZXF1ZXN0NzA3MzMxNDYw", + "number": 33974, + "title": "Improve the rendering/update performance of the image block", + "user": { + "login": "youknowriad", + "id": 272444, + "node_id": "MDQ6VXNlcjI3MjQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/272444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/youknowriad", + "html_url": "https://github.com/youknowriad", + "followers_url": "https://api.github.com/users/youknowriad/followers", + "following_url": "https://api.github.com/users/youknowriad/following{/other_user}", + "gists_url": "https://api.github.com/users/youknowriad/gists{/gist_id}", + "starred_url": "https://api.github.com/users/youknowriad/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/youknowriad/subscriptions", + "organizations_url": "https://api.github.com/users/youknowriad/orgs", + "repos_url": "https://api.github.com/users/youknowriad/repos", + "events_url": "https://api.github.com/users/youknowriad/events{/privacy}", + "received_events_url": "https://api.github.com/users/youknowriad/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 731693674, + "node_id": "MDU6TGFiZWw3MzE2OTM2NzQ=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Performance", + "name": "[Type] Performance", + "color": "f3f4fe", + "default": false, + "description": "" + }, + { + "id": 1101518360, + "node_id": "MDU6TGFiZWwxMTAxNTE4MzYw", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Block]%20Image", + "name": "[Block] Image", + "color": "6767e5", + "default": false, + "description": "" + } + ], + "state": "closed", + "locked": false, + "assignee": { + "login": "youknowriad", + "id": 272444, + "node_id": "MDQ6VXNlcjI3MjQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/272444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/youknowriad", + "html_url": "https://github.com/youknowriad", + "followers_url": "https://api.github.com/users/youknowriad/followers", + "following_url": "https://api.github.com/users/youknowriad/following{/other_user}", + "gists_url": "https://api.github.com/users/youknowriad/gists{/gist_id}", + "starred_url": "https://api.github.com/users/youknowriad/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/youknowriad/subscriptions", + "organizations_url": "https://api.github.com/users/youknowriad/orgs", + "repos_url": "https://api.github.com/users/youknowriad/repos", + "events_url": "https://api.github.com/users/youknowriad/events{/privacy}", + "received_events_url": "https://api.github.com/users/youknowriad/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "youknowriad", + "id": 272444, + "node_id": "MDQ6VXNlcjI3MjQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/272444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/youknowriad", + "html_url": "https://github.com/youknowriad", + "followers_url": "https://api.github.com/users/youknowriad/followers", + "following_url": "https://api.github.com/users/youknowriad/following{/other_user}", + "gists_url": "https://api.github.com/users/youknowriad/gists{/gist_id}", + "starred_url": "https://api.github.com/users/youknowriad/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/youknowriad/subscriptions", + "organizations_url": "https://api.github.com/users/youknowriad/orgs", + "repos_url": "https://api.github.com/users/youknowriad/repos", + "events_url": "https://api.github.com/users/youknowriad/events{/privacy}", + "received_events_url": "https://api.github.com/users/youknowriad/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 2, + "created_at": "2021-08-10T12:59:50Z", + "updated_at": "2021-08-10T14:07:42Z", + "closed_at": "2021-08-10T14:07:18Z", + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33974", + "html_url": "https://github.com/WordPress/gutenberg/pull/33974", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33974.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33974.patch" + }, + "body": "While navigating the performance trace when typing the editor, I noticed some wasted milliseconds in the rendering of image blocks. This PR refactors the useSelect call of the image block a bit to improve the situation.\r\n\r\nI'm not really certain whether the impact will be visible in any of our performance metrics, we'll see.", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33965", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33965/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33965/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33965/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33965", + "id": 964611940, + "node_id": "MDExOlB1bGxSZXF1ZXN0NzA3MDQyODk0", + "number": 33965, + "title": "Try to fix flaky customizer inspector test 2nd try", + "user": { + "login": "kevin940726", + "id": 7753001, + "node_id": "MDQ6VXNlcjc3NTMwMDE=", + "avatar_url": "https://avatars.githubusercontent.com/u/7753001?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/kevin940726", + "html_url": "https://github.com/kevin940726", + "followers_url": "https://api.github.com/users/kevin940726/followers", + "following_url": "https://api.github.com/users/kevin940726/following{/other_user}", + "gists_url": "https://api.github.com/users/kevin940726/gists{/gist_id}", + "starred_url": "https://api.github.com/users/kevin940726/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/kevin940726/subscriptions", + "organizations_url": "https://api.github.com/users/kevin940726/orgs", + "repos_url": "https://api.github.com/users/kevin940726/repos", + "events_url": "https://api.github.com/users/kevin940726/events{/privacy}", + "received_events_url": "https://api.github.com/users/kevin940726/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 2632875097, + "node_id": "MDU6TGFiZWwyNjMyODc1MDk3", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Feature]%20Widgets%20Customizer", + "name": "[Feature] Widgets Customizer", + "color": "fbca04", + "default": false, + "description": "Ability to add and edit blocks in Customize → Widgets." + } + ], + "state": "closed", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 4, + "created_at": "2021-08-10T05:34:22Z", + "updated_at": "2021-08-10T08:10:07Z", + "closed_at": "2021-08-10T08:09:21Z", + "author_association": "MEMBER", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33965", + "html_url": "https://github.com/WordPress/gutenberg/pull/33965", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33965.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33965.patch" + }, + "body": "<!-- Learn the overall process and best practices for pull requests at https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/repository-management.md#pull-requests. -->\r\n\r\n<!-- Gutenberg's license is in the process of updating to be dual-licensed under the GPL and MPL. As part of that transition, all new contributions are dual-licensed. For more information, see: https://github.com/WordPress/gutenberg/blob/trunk/LICENSE.md -->\r\n\r\n## Description\r\n<!-- Please describe what you have changed or added -->\r\nContinue from #33890. Second try to fix flaky e2e tests.\r\n\r\n#33890 had the right call, but the fix didn't work. This PR instead try to disable the intermediate transition to prevent the block toolbar from moving to the wrong position. Hopefully this time it'll fix it.\r\n\r\n## How has this been tested?\r\n<!-- Please describe in detail how you tested your changes. -->\r\n<!-- Include details of your testing environment, tests ran to see how -->\r\n<!-- your change affects other areas of the code, etc. -->\r\n\r\nNot yet found a reliable way to reproduce the issue, so maybe we just have to merge this and monitor it on trunk.\r\n\r\n## Types of changes\r\n<!-- What types of changes does your code introduce? -->\r\n<!-- Bug fix (non-breaking change which fixes an issue) -->\r\n<!-- New feature (non-breaking change which adds functionality) -->\r\n<!-- Breaking change (fix or feature that would cause existing functionality to not work as expected) -->\r\nBug fix\r\n\r\n## Checklist:\r\n- [ ] My code is tested.\r\n- [ ] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [ ] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [ ] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [ ] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [ ] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [ ] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33964", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33964/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33964/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33964/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33964", + "id": 964604344, + "node_id": "MDExOlB1bGxSZXF1ZXN0NzA3MDM2NDUw", + "number": 33964, + "title": "Fix navigation block appender invalid html", + "user": { + "login": "talldan", + "id": 677833, + "node_id": "MDQ6VXNlcjY3NzgzMw==", + "avatar_url": "https://avatars.githubusercontent.com/u/677833?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/talldan", + "html_url": "https://github.com/talldan", + "followers_url": "https://api.github.com/users/talldan/followers", + "following_url": "https://api.github.com/users/talldan/following{/other_user}", + "gists_url": "https://api.github.com/users/talldan/gists{/gist_id}", + "starred_url": "https://api.github.com/users/talldan/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/talldan/subscriptions", + "organizations_url": "https://api.github.com/users/talldan/orgs", + "repos_url": "https://api.github.com/users/talldan/repos", + "events_url": "https://api.github.com/users/talldan/events{/privacy}", + "received_events_url": "https://api.github.com/users/talldan/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 531680823, + "node_id": "MDU6TGFiZWw1MzE2ODA4MjM=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Bug", + "name": "[Type] Bug", + "color": "d93f0b", + "default": false, + "description": "An existing feature is broken." + }, + { + "id": 1225853227, + "node_id": "MDU6TGFiZWwxMjI1ODUzMjI3", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Block]%20Navigation", + "name": "[Block] Navigation", + "color": "6767e5", + "default": false, + "description": "" + } + ], + "state": "closed", + "locked": false, + "assignee": { + "login": "talldan", + "id": 677833, + "node_id": "MDQ6VXNlcjY3NzgzMw==", + "avatar_url": "https://avatars.githubusercontent.com/u/677833?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/talldan", + "html_url": "https://github.com/talldan", + "followers_url": "https://api.github.com/users/talldan/followers", + "following_url": "https://api.github.com/users/talldan/following{/other_user}", + "gists_url": "https://api.github.com/users/talldan/gists{/gist_id}", + "starred_url": "https://api.github.com/users/talldan/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/talldan/subscriptions", + "organizations_url": "https://api.github.com/users/talldan/orgs", + "repos_url": "https://api.github.com/users/talldan/repos", + "events_url": "https://api.github.com/users/talldan/events{/privacy}", + "received_events_url": "https://api.github.com/users/talldan/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "talldan", + "id": 677833, + "node_id": "MDQ6VXNlcjY3NzgzMw==", + "avatar_url": "https://avatars.githubusercontent.com/u/677833?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/talldan", + "html_url": "https://github.com/talldan", + "followers_url": "https://api.github.com/users/talldan/followers", + "following_url": "https://api.github.com/users/talldan/following{/other_user}", + "gists_url": "https://api.github.com/users/talldan/gists{/gist_id}", + "starred_url": "https://api.github.com/users/talldan/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/talldan/subscriptions", + "organizations_url": "https://api.github.com/users/talldan/orgs", + "repos_url": "https://api.github.com/users/talldan/repos", + "events_url": "https://api.github.com/users/talldan/events{/privacy}", + "received_events_url": "https://api.github.com/users/talldan/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 1, + "created_at": "2021-08-10T05:15:26Z", + "updated_at": "2021-08-10T06:09:20Z", + "closed_at": "2021-08-10T06:08:55Z", + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33964", + "html_url": "https://github.com/WordPress/gutenberg/pull/33964", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33964.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33964.patch" + }, + "body": "## Description\r\nThe navigation block's appender is currently an `li` within a `div`. This changes it to a `div` within a `div` by deleting one line of code 😄 \r\n\r\n## How has this been tested?\r\n1. Add a navigation block\r\n2. Choose 'Start empty'\r\n3. Inspect the HTML of the appender.\r\n\r\n## Types of changes\r\n<!-- What types of changes does your code introduce? -->\r\nBug fix (non-breaking change which fixes an issue)\r\n<!-- New feature (non-breaking change which adds functionality) -->\r\n<!-- Breaking change (fix or feature that would cause existing functionality to not work as expected) -->\r\n\r\n## Checklist:\r\n- [x] My code is tested.\r\n- [x] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [x] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [x] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [x] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [x] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [x] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33963", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33963/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33963/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33963/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33963", + "id": 964599701, + "node_id": "MDExOlB1bGxSZXF1ZXN0NzA3MDMyMzg4", + "number": 33963, + "title": "Fix navigation block placeholder preview markup", + "user": { + "login": "talldan", + "id": 677833, + "node_id": "MDQ6VXNlcjY3NzgzMw==", + "avatar_url": "https://avatars.githubusercontent.com/u/677833?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/talldan", + "html_url": "https://github.com/talldan", + "followers_url": "https://api.github.com/users/talldan/followers", + "following_url": "https://api.github.com/users/talldan/following{/other_user}", + "gists_url": "https://api.github.com/users/talldan/gists{/gist_id}", + "starred_url": "https://api.github.com/users/talldan/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/talldan/subscriptions", + "organizations_url": "https://api.github.com/users/talldan/orgs", + "repos_url": "https://api.github.com/users/talldan/repos", + "events_url": "https://api.github.com/users/talldan/events{/privacy}", + "received_events_url": "https://api.github.com/users/talldan/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 531680823, + "node_id": "MDU6TGFiZWw1MzE2ODA4MjM=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Bug", + "name": "[Type] Bug", + "color": "d93f0b", + "default": false, + "description": "An existing feature is broken." + }, + { + "id": 1225853227, + "node_id": "MDU6TGFiZWwxMjI1ODUzMjI3", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Block]%20Navigation", + "name": "[Block] Navigation", + "color": "6767e5", + "default": false, + "description": "" + }, + { + "id": 1999059055, + "node_id": "MDU6TGFiZWwxOTk5MDU5MDU1", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/CSS%20Styling", + "name": "CSS Styling", + "color": "63e2d2", + "default": false, + "description": "Related to editor and front end styles, CSS-specific issues." + } + ], + "state": "closed", + "locked": false, + "assignee": { + "login": "talldan", + "id": 677833, + "node_id": "MDQ6VXNlcjY3NzgzMw==", + "avatar_url": "https://avatars.githubusercontent.com/u/677833?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/talldan", + "html_url": "https://github.com/talldan", + "followers_url": "https://api.github.com/users/talldan/followers", + "following_url": "https://api.github.com/users/talldan/following{/other_user}", + "gists_url": "https://api.github.com/users/talldan/gists{/gist_id}", + "starred_url": "https://api.github.com/users/talldan/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/talldan/subscriptions", + "organizations_url": "https://api.github.com/users/talldan/orgs", + "repos_url": "https://api.github.com/users/talldan/repos", + "events_url": "https://api.github.com/users/talldan/events{/privacy}", + "received_events_url": "https://api.github.com/users/talldan/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "talldan", + "id": 677833, + "node_id": "MDQ6VXNlcjY3NzgzMw==", + "avatar_url": "https://avatars.githubusercontent.com/u/677833?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/talldan", + "html_url": "https://github.com/talldan", + "followers_url": "https://api.github.com/users/talldan/followers", + "following_url": "https://api.github.com/users/talldan/following{/other_user}", + "gists_url": "https://api.github.com/users/talldan/gists{/gist_id}", + "starred_url": "https://api.github.com/users/talldan/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/talldan/subscriptions", + "organizations_url": "https://api.github.com/users/talldan/orgs", + "repos_url": "https://api.github.com/users/talldan/repos", + "events_url": "https://api.github.com/users/talldan/events{/privacy}", + "received_events_url": "https://api.github.com/users/talldan/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 4, + "created_at": "2021-08-10T05:05:53Z", + "updated_at": "2021-08-10T06:10:45Z", + "closed_at": "2021-08-10T05:42:26Z", + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33963", + "html_url": "https://github.com/WordPress/gutenberg/pull/33963", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33963.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33963.patch" + }, + "body": "## Description\r\nFixes two separate issues with the navigation block placeholder preview.\r\n\r\nFirst, the preview has invalid html, nesting an `svg` element in a `ul` element:\r\n<img width=\"383\" alt=\"Screenshot 2021-08-10 at 12 29 33 pm\" src=\"https://user-images.githubusercontent.com/677833/128810526-82eb10ee-cee2-4aa0-9201-e434be6de75e.png\">\r\n\r\nSecondly, when using a vertical navigation block, the invisible placeholder was taking up height, leading to this situation after selecting 'Start empty':\r\n<img width=\"545\" alt=\"Screenshot 2021-08-10 at 12 59 27 pm\" src=\"https://user-images.githubusercontent.com/677833/128810682-1793d2a3-2997-4e6b-8d4e-61316dc34bec.png\">\r\n\r\n## How has this been tested?\r\n1. Add both horizontal and vertical nav block, click start empty for both, and deselect the blocks\r\n2. The preview placeholders should look the same\r\n3. Inspect the markup, the svg should now be in a list item.\r\n4. Select the vertical list block and select 'Start empty', there should be no empty space in the nav block above the appender\r\n\r\n## Types of changes\r\n<!-- What types of changes does your code introduce? -->\r\nBug fix (non-breaking change which fixes an issue)\r\n<!-- New feature (non-breaking change which adds functionality) -->\r\n<!-- Breaking change (fix or feature that would cause existing functionality to not work as expected) -->\r\n\r\n## Checklist:\r\n- [x] My code is tested.\r\n- [x] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [x] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [x] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [x] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [x] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [x] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33961", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33961/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33961/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33961/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33961", + "id": 964264228, + "node_id": "MDExOlB1bGxSZXF1ZXN0NzA2NzQ4ODYx", + "number": 33961, + "title": "Search Block: Removed components class from icon button and polished css", + "user": { + "login": "MaggieCabrera", + "id": 3593343, + "node_id": "MDQ6VXNlcjM1OTMzNDM=", + "avatar_url": "https://avatars.githubusercontent.com/u/3593343?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/MaggieCabrera", + "html_url": "https://github.com/MaggieCabrera", + "followers_url": "https://api.github.com/users/MaggieCabrera/followers", + "following_url": "https://api.github.com/users/MaggieCabrera/following{/other_user}", + "gists_url": "https://api.github.com/users/MaggieCabrera/gists{/gist_id}", + "starred_url": "https://api.github.com/users/MaggieCabrera/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/MaggieCabrera/subscriptions", + "organizations_url": "https://api.github.com/users/MaggieCabrera/orgs", + "repos_url": "https://api.github.com/users/MaggieCabrera/repos", + "events_url": "https://api.github.com/users/MaggieCabrera/events{/privacy}", + "received_events_url": "https://api.github.com/users/MaggieCabrera/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 1539734701, + "node_id": "MDU6TGFiZWwxNTM5NzM0NzAx", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Block]%20Search", + "name": "[Block] Search", + "color": "6767e5", + "default": false, + "description": "" + } + ], + "state": "closed", + "locked": false, + "assignee": { + "login": "MaggieCabrera", + "id": 3593343, + "node_id": "MDQ6VXNlcjM1OTMzNDM=", + "avatar_url": "https://avatars.githubusercontent.com/u/3593343?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/MaggieCabrera", + "html_url": "https://github.com/MaggieCabrera", + "followers_url": "https://api.github.com/users/MaggieCabrera/followers", + "following_url": "https://api.github.com/users/MaggieCabrera/following{/other_user}", + "gists_url": "https://api.github.com/users/MaggieCabrera/gists{/gist_id}", + "starred_url": "https://api.github.com/users/MaggieCabrera/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/MaggieCabrera/subscriptions", + "organizations_url": "https://api.github.com/users/MaggieCabrera/orgs", + "repos_url": "https://api.github.com/users/MaggieCabrera/repos", + "events_url": "https://api.github.com/users/MaggieCabrera/events{/privacy}", + "received_events_url": "https://api.github.com/users/MaggieCabrera/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "MaggieCabrera", + "id": 3593343, + "node_id": "MDQ6VXNlcjM1OTMzNDM=", + "avatar_url": "https://avatars.githubusercontent.com/u/3593343?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/MaggieCabrera", + "html_url": "https://github.com/MaggieCabrera", + "followers_url": "https://api.github.com/users/MaggieCabrera/followers", + "following_url": "https://api.github.com/users/MaggieCabrera/following{/other_user}", + "gists_url": "https://api.github.com/users/MaggieCabrera/gists{/gist_id}", + "starred_url": "https://api.github.com/users/MaggieCabrera/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/MaggieCabrera/subscriptions", + "organizations_url": "https://api.github.com/users/MaggieCabrera/orgs", + "repos_url": "https://api.github.com/users/MaggieCabrera/repos", + "events_url": "https://api.github.com/users/MaggieCabrera/events{/privacy}", + "received_events_url": "https://api.github.com/users/MaggieCabrera/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 4, + "created_at": "2021-08-09T18:37:32Z", + "updated_at": "2021-08-10T08:54:14Z", + "closed_at": "2021-08-10T08:53:46Z", + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33961", + "html_url": "https://github.com/WordPress/gutenberg/pull/33961", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33961.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33961.patch" + }, + "body": "<!-- Learn the overall process and best practices for pull requests at https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/repository-management.md#pull-requests. -->\r\n\r\n<!-- Gutenberg's license is in the process of updating to be dual-licensed under the GPL and MPL. As part of that transition, all new contributions are dual-licensed. For more information, see: https://github.com/WordPress/gutenberg/blob/trunk/LICENSE.md -->\r\n\r\n## Description\r\n<!-- Please describe what you have changed or added -->\r\nAfter #26446 was merged there was a level of specificity in the CSS created to bring inline the editor and frontend styles that is being caused by the components classes present on the icon button. This PR refactors the button to use the regular button tag instead and removes the extra specificity from the CSS. I also went ahead and refactored the styles that were no longer needed after this change and that were causing mismatches between the editor and the frontend. \r\n\r\n## How has this been tested?\r\n<!-- Please describe in detail how you tested your changes. -->\r\n<!-- Include details of your testing environment, tests ran to see how -->\r\n<!-- your change affects other areas of the code, etc. -->\r\nI tested on Emptytheme using the following markup:\r\n\r\n```\r\n<!-- wp:search {\"label\":\"Search\",\"placeholder\":\"Placeholder text...\",\"buttonText\":\"Search\"} /-->\r\n\r\n<!-- wp:search {\"label\":\"Search\",\"showLabel\":false,\"placeholder\":\"Placeholder text...\",\"buttonText\":\"Search\"} /-->\r\n\r\n<!-- wp:separator {\"className\":\"is-style-default\"} -->\r\n<hr class=\"wp-block-separator is-style-default\"/>\r\n<!-- /wp:separator -->\r\n\r\n<!-- wp:search {\"label\":\"Search\",\"placeholder\":\"Placeholder text...\",\"buttonText\":\"Search\",\"buttonPosition\":\"button-inside\"} /-->\r\n\r\n<!-- wp:search {\"label\":\"Search\",\"showLabel\":false,\"placeholder\":\"Placeholder text...\",\"buttonText\":\"Search\",\"buttonPosition\":\"button-inside\"} /-->\r\n\r\n<!-- wp:separator -->\r\n<hr class=\"wp-block-separator\"/>\r\n<!-- /wp:separator -->\r\n\r\n<!-- wp:search {\"label\":\"Search\",\"placeholder\":\"Placeholder text...\",\"buttonText\":\"Search\",\"buttonUseIcon\":true} /-->\r\n\r\n<!-- wp:search {\"label\":\"Search\",\"showLabel\":false,\"placeholder\":\"Placeholder text...\",\"buttonText\":\"Search\",\"buttonUseIcon\":true} /-->\r\n\r\n<!-- wp:separator -->\r\n<hr class=\"wp-block-separator\"/>\r\n<!-- /wp:separator -->\r\n\r\n<!-- wp:search {\"label\":\"Search\",\"placeholder\":\"Placeholder text...\",\"buttonText\":\"Search\",\"buttonPosition\":\"button-inside\",\"buttonUseIcon\":true} /-->\r\n\r\n<!-- wp:search {\"label\":\"Search\",\"showLabel\":false,\"placeholder\":\"Placeholder text...\",\"buttonText\":\"Search\",\"buttonPosition\":\"button-inside\",\"buttonUseIcon\":true} /-->\r\n\r\n<!-- wp:separator -->\r\n<hr class=\"wp-block-separator\"/>\r\n<!-- /wp:separator -->\r\n\r\n<!-- wp:search {\"label\":\"Search\",\"placeholder\":\"Placeholder text...\",\"buttonText\":\"Search\",\"buttonPosition\":\"no-button\"} /-->\r\n\r\n<!-- wp:search {\"label\":\"Search\",\"showLabel\":false,\"placeholder\":\"Placeholder text...\",\"buttonText\":\"Search\",\"buttonPosition\":\"no-button\"} /-->\r\n\r\n```\r\n\r\n## Screenshots <!-- if applicable -->\r\n\r\nThe differences in sizes between editor and frontend are caused by Emptytheme not defining font-family or font-size while the editor does (and tries to reset it with little success). I'd love to improve this so we can have the same on the frontend and the editor but I'm unsure as to what's the correct approach for this.\r\n\r\n**Before:**\r\n\r\nFrontent | Editor\r\n--- | ---\r\n<img width=\"935\" alt=\"Screenshot 2021-08-09 at 20 36 26\" src=\"https://user-images.githubusercontent.com/3593343/128756689-690f8c8f-dfca-4a77-b81c-611f11787cab.png\"> | <img width=\"947\" alt=\"Screenshot 2021-08-09 at 20 36 40\" src=\"https://user-images.githubusercontent.com/3593343/128756686-2b3d6b65-2442-4ec2-90ad-ac5c443f9a37.png\">\r\n\r\n\r\n**After:**\r\n\r\nFrontent | Editor\r\n--- | ---\r\n<img width=\"1020\" alt=\"Screenshot 2021-08-09 at 20 28 02\" src=\"https://user-images.githubusercontent.com/3593343/128756553-4c4771f8-9333-444b-8243-43df15ab17c6.png\"> | <img width=\"926\" alt=\"Screenshot 2021-08-09 at 20 27 59\" src=\"https://user-images.githubusercontent.com/3593343/128756559-218a1bd8-5d92-4940-85e3-fd5e739cad5c.png\">\r\n\r\n## Types of changes\r\n<!-- What types of changes does your code introduce? -->\r\n<!-- Bug fix (non-breaking change which fixes an issue) -->\r\n<!-- New feature (non-breaking change which adds functionality) -->\r\n<!-- Breaking change (fix or feature that would cause existing functionality to not work as expected) -->\r\n\r\n## Checklist:\r\n- [ ] My code is tested.\r\n- [ ] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [ ] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [ ] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [ ] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [ ] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [ ] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33951", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33951/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33951/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33951/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33951", + "id": 963902794, + "node_id": "MDExOlB1bGxSZXF1ZXN0NzA2NDQwNTIx", + "number": 33951, + "title": "Site editor: fix presets for blocks with multiple selectors", + "user": { + "login": "nosolosw", + "id": 583546, + "node_id": "MDQ6VXNlcjU4MzU0Ng==", + "avatar_url": "https://avatars.githubusercontent.com/u/583546?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/nosolosw", + "html_url": "https://github.com/nosolosw", + "followers_url": "https://api.github.com/users/nosolosw/followers", + "following_url": "https://api.github.com/users/nosolosw/following{/other_user}", + "gists_url": "https://api.github.com/users/nosolosw/gists{/gist_id}", + "starred_url": "https://api.github.com/users/nosolosw/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/nosolosw/subscriptions", + "organizations_url": "https://api.github.com/users/nosolosw/orgs", + "repos_url": "https://api.github.com/users/nosolosw/repos", + "events_url": "https://api.github.com/users/nosolosw/events{/privacy}", + "received_events_url": "https://api.github.com/users/nosolosw/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 531680823, + "node_id": "MDU6TGFiZWw1MzE2ODA4MjM=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Bug", + "name": "[Type] Bug", + "color": "d93f0b", + "default": false, + "description": "An existing feature is broken." + }, + { + "id": 1800807983, + "node_id": "MDU6TGFiZWwxODAwODA3OTgz", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/Global%20Styles", + "name": "Global Styles", + "color": "2100b7", + "default": false, + "description": "" + }, + { + "id": 2706102777, + "node_id": "MDU6TGFiZWwyNzA2MTAyNzc3", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Feature]%20Site%20Editor", + "name": "[Feature] Site Editor", + "color": "fbca04", + "default": false, + "description": "" + } + ], + "state": "closed", + "locked": false, + "assignee": { + "login": "nosolosw", + "id": 583546, + "node_id": "MDQ6VXNlcjU4MzU0Ng==", + "avatar_url": "https://avatars.githubusercontent.com/u/583546?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/nosolosw", + "html_url": "https://github.com/nosolosw", + "followers_url": "https://api.github.com/users/nosolosw/followers", + "following_url": "https://api.github.com/users/nosolosw/following{/other_user}", + "gists_url": "https://api.github.com/users/nosolosw/gists{/gist_id}", + "starred_url": "https://api.github.com/users/nosolosw/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/nosolosw/subscriptions", + "organizations_url": "https://api.github.com/users/nosolosw/orgs", + "repos_url": "https://api.github.com/users/nosolosw/repos", + "events_url": "https://api.github.com/users/nosolosw/events{/privacy}", + "received_events_url": "https://api.github.com/users/nosolosw/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "nosolosw", + "id": 583546, + "node_id": "MDQ6VXNlcjU4MzU0Ng==", + "avatar_url": "https://avatars.githubusercontent.com/u/583546?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/nosolosw", + "html_url": "https://github.com/nosolosw", + "followers_url": "https://api.github.com/users/nosolosw/followers", + "following_url": "https://api.github.com/users/nosolosw/following{/other_user}", + "gists_url": "https://api.github.com/users/nosolosw/gists{/gist_id}", + "starred_url": "https://api.github.com/users/nosolosw/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/nosolosw/subscriptions", + "organizations_url": "https://api.github.com/users/nosolosw/orgs", + "repos_url": "https://api.github.com/users/nosolosw/repos", + "events_url": "https://api.github.com/users/nosolosw/events{/privacy}", + "received_events_url": "https://api.github.com/users/nosolosw/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 1, + "created_at": "2021-08-09T11:32:27Z", + "updated_at": "2021-08-09T16:04:15Z", + "closed_at": "2021-08-09T16:03:48Z", + "author_association": "MEMBER", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33951", + "html_url": "https://github.com/WordPress/gutenberg/pull/33951", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33951.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33951.patch" + }, + "body": "Fixes https://github.com/WordPress/gutenberg/issues/31660", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33945", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33945/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33945/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33945/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33945", + "id": 963666305, + "node_id": "MDExOlB1bGxSZXF1ZXN0NzA2MjM2MjEx", + "number": 33945, + "title": "Scripts: Fix typo in format change message.", + "user": { + "login": "StevenDufresne", + "id": 1657336, + "node_id": "MDQ6VXNlcjE2NTczMzY=", + "avatar_url": "https://avatars.githubusercontent.com/u/1657336?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/StevenDufresne", + "html_url": "https://github.com/StevenDufresne", + "followers_url": "https://api.github.com/users/StevenDufresne/followers", + "following_url": "https://api.github.com/users/StevenDufresne/following{/other_user}", + "gists_url": "https://api.github.com/users/StevenDufresne/gists{/gist_id}", + "starred_url": "https://api.github.com/users/StevenDufresne/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/StevenDufresne/subscriptions", + "organizations_url": "https://api.github.com/users/StevenDufresne/orgs", + "repos_url": "https://api.github.com/users/StevenDufresne/repos", + "events_url": "https://api.github.com/users/StevenDufresne/events{/privacy}", + "received_events_url": "https://api.github.com/users/StevenDufresne/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 930001208, + "node_id": "MDU6TGFiZWw5MzAwMDEyMDg=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Code%20Quality", + "name": "[Type] Code Quality", + "color": "e5e04b", + "default": false, + "description": "Gotta shave those yaks." + }, + { + "id": 978007737, + "node_id": "MDU6TGFiZWw5NzgwMDc3Mzc=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Package]%20Scripts", + "name": "[Package] Scripts", + "color": "ed2572", + "default": false, + "description": "/packages/scripts" + } + ], + "state": "closed", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 1, + "created_at": "2021-08-09T05:48:44Z", + "updated_at": "2021-08-09T08:08:59Z", + "closed_at": "2021-08-09T08:08:38Z", + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33945", + "html_url": "https://github.com/WordPress/gutenberg/pull/33945", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33945.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33945.patch" + }, + "body": "## Description\r\nFixes a small typo introduced in #30240.\r\n\r\n`continiue` -> `continue`\r\n\r\n## How has this been tested?\r\nRan locally.\r\n\r\n## Screenshots <!-- if applicable -->\r\nN/A\r\n\r\n## Types of changes\r\nText update.\r\n\r\n## Checklist:\r\n- [ ] My code is tested.\r\n- [ ] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [ ] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [ ] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [ ] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [ ] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [ ] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33943", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33943/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33943/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33943/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33943", + "id": 963654820, + "node_id": "MDExOlB1bGxSZXF1ZXN0NzA2MjI2Mjkw", + "number": 33943, + "title": "Featured Image: Use getMedia shorthand", + "user": { + "login": "Mamaduka", + "id": 240569, + "node_id": "MDQ6VXNlcjI0MDU2OQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/240569?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Mamaduka", + "html_url": "https://github.com/Mamaduka", + "followers_url": "https://api.github.com/users/Mamaduka/followers", + "following_url": "https://api.github.com/users/Mamaduka/following{/other_user}", + "gists_url": "https://api.github.com/users/Mamaduka/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Mamaduka/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Mamaduka/subscriptions", + "organizations_url": "https://api.github.com/users/Mamaduka/orgs", + "repos_url": "https://api.github.com/users/Mamaduka/repos", + "events_url": "https://api.github.com/users/Mamaduka/events{/privacy}", + "received_events_url": "https://api.github.com/users/Mamaduka/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 596964332, + "node_id": "MDU6TGFiZWw1OTY5NjQzMzI=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/General%20Interface", + "name": "General Interface", + "color": "bfdadc", + "default": false, + "description": "Parts of the UI which don't fall neatly under other labels." + }, + { + "id": 930001208, + "node_id": "MDU6TGFiZWw5MzAwMDEyMDg=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Code%20Quality", + "name": "[Type] Code Quality", + "color": "e5e04b", + "default": false, + "description": "Gotta shave those yaks." + }, + { + "id": 2085610453, + "node_id": "MDU6TGFiZWwyMDg1NjEwNDUz", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Block]%20Post%20Featured%20Image", + "name": "[Block] Post Featured Image", + "color": "6767e5", + "default": false, + "description": "" + } + ], + "state": "closed", + "locked": false, + "assignee": { + "login": "Mamaduka", + "id": 240569, + "node_id": "MDQ6VXNlcjI0MDU2OQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/240569?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Mamaduka", + "html_url": "https://github.com/Mamaduka", + "followers_url": "https://api.github.com/users/Mamaduka/followers", + "following_url": "https://api.github.com/users/Mamaduka/following{/other_user}", + "gists_url": "https://api.github.com/users/Mamaduka/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Mamaduka/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Mamaduka/subscriptions", + "organizations_url": "https://api.github.com/users/Mamaduka/orgs", + "repos_url": "https://api.github.com/users/Mamaduka/repos", + "events_url": "https://api.github.com/users/Mamaduka/events{/privacy}", + "received_events_url": "https://api.github.com/users/Mamaduka/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "Mamaduka", + "id": 240569, + "node_id": "MDQ6VXNlcjI0MDU2OQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/240569?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Mamaduka", + "html_url": "https://github.com/Mamaduka", + "followers_url": "https://api.github.com/users/Mamaduka/followers", + "following_url": "https://api.github.com/users/Mamaduka/following{/other_user}", + "gists_url": "https://api.github.com/users/Mamaduka/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Mamaduka/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Mamaduka/subscriptions", + "organizations_url": "https://api.github.com/users/Mamaduka/orgs", + "repos_url": "https://api.github.com/users/Mamaduka/repos", + "events_url": "https://api.github.com/users/Mamaduka/events{/privacy}", + "received_events_url": "https://api.github.com/users/Mamaduka/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 2, + "created_at": "2021-08-09T05:16:56Z", + "updated_at": "2021-08-09T08:52:36Z", + "closed_at": "2021-08-09T08:52:07Z", + "author_association": "MEMBER", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33943", + "html_url": "https://github.com/WordPress/gutenberg/pull/33943", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33943.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33943.patch" + }, + "body": "## Description\r\nSince #33689, it's possible to pass query arguments to the code data shorthands. PR update code to use `getMedia` instead of `getEntityRecord` for simplicity, see - https://github.com/WordPress/gutenberg/pull/33567#discussion_r683975606\r\n\r\n## How has this been tested?\r\n1. Upload an image using an Administrator user account.\r\n2. Switch to a user with an Author role.\r\n3. Create a post.\r\n4. Select the uploaded image using the \"Post Featured Image\" block or \"Feature image\" panel in the sidebar.\r\n5. See that feature image is displayed.\r\n6. DevTools has no 403 requests in the Networks panel.\r\n\r\n## Types of changes\r\nCode Quality\r\n\r\n## Checklist:\r\n- [x] My code is tested.\r\n- [x] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [ ] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [ ] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [x] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [x] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [ ] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33930", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33930/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33930/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33930/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33930", + "id": 962762985, + "node_id": "MDExOlB1bGxSZXF1ZXN0NzA1NTA2NDAw", + "number": 33930, + "title": "Add documentation to disable remote calls for block patterns", + "user": { + "login": "mkaz", + "id": 45363, + "node_id": "MDQ6VXNlcjQ1MzYz", + "avatar_url": "https://avatars.githubusercontent.com/u/45363?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/mkaz", + "html_url": "https://github.com/mkaz", + "followers_url": "https://api.github.com/users/mkaz/followers", + "following_url": "https://api.github.com/users/mkaz/following{/other_user}", + "gists_url": "https://api.github.com/users/mkaz/gists{/gist_id}", + "starred_url": "https://api.github.com/users/mkaz/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/mkaz/subscriptions", + "organizations_url": "https://api.github.com/users/mkaz/orgs", + "repos_url": "https://api.github.com/users/mkaz/repos", + "events_url": "https://api.github.com/users/mkaz/events{/privacy}", + "received_events_url": "https://api.github.com/users/mkaz/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 567484057, + "node_id": "MDU6TGFiZWw1Njc0ODQwNTc=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Documentation", + "name": "[Type] Documentation", + "color": "bfd4f2", + "default": false, + "description": "" + }, + { + "id": 2697301145, + "node_id": "MDU6TGFiZWwyNjk3MzAxMTQ1", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Feature]%20Pattern%20Directory", + "name": "[Feature] Pattern Directory", + "color": "FBCA04", + "default": false, + "description": "The Pattern Directory, a place to find patterns" + } + ], + "state": "closed", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 0, + "created_at": "2021-08-06T13:58:48Z", + "updated_at": "2021-08-06T15:34:14Z", + "closed_at": "2021-08-06T15:09:46Z", + "author_association": "MEMBER", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33930", + "html_url": "https://github.com/WordPress/gutenberg/pull/33930", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33930.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33930.patch" + }, + "body": "\n## Description\n\nAdds a new section to the editor filters documentation\nfor the filter `should_load_remote_block_patterns`\n\nFixes #32591\n\n\n## How has this been tested?\n\nConfirm documentation works as expected.\n\n1. Add filter to a plugin or theme\n2. Confirm remote block patterns are not loaded\n\n\n## Types of changes\n\nDocumentation\n\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33925", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33925/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33925/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33925/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33925", + "id": 962628315, + "node_id": "MDExOlB1bGxSZXF1ZXN0NzA1Mzg5NzE3", + "number": 33925, + "title": "Remove the experimental prefix and rename `theme.json` files", + "user": { + "login": "nosolosw", + "id": 583546, + "node_id": "MDQ6VXNlcjU4MzU0Ng==", + "avatar_url": "https://avatars.githubusercontent.com/u/583546?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/nosolosw", + "html_url": "https://github.com/nosolosw", + "followers_url": "https://api.github.com/users/nosolosw/followers", + "following_url": "https://api.github.com/users/nosolosw/following{/other_user}", + "gists_url": "https://api.github.com/users/nosolosw/gists{/gist_id}", + "starred_url": "https://api.github.com/users/nosolosw/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/nosolosw/subscriptions", + "organizations_url": "https://api.github.com/users/nosolosw/orgs", + "repos_url": "https://api.github.com/users/nosolosw/repos", + "events_url": "https://api.github.com/users/nosolosw/events{/privacy}", + "received_events_url": "https://api.github.com/users/nosolosw/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 930001208, + "node_id": "MDU6TGFiZWw5MzAwMDEyMDg=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Code%20Quality", + "name": "[Type] Code Quality", + "color": "e5e04b", + "default": false, + "description": "Gotta shave those yaks." + }, + { + "id": 1800807983, + "node_id": "MDU6TGFiZWwxODAwODA3OTgz", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/Global%20Styles", + "name": "Global Styles", + "color": "2100b7", + "default": false, + "description": "" + } + ], + "state": "closed", + "locked": false, + "assignee": { + "login": "nosolosw", + "id": 583546, + "node_id": "MDQ6VXNlcjU4MzU0Ng==", + "avatar_url": "https://avatars.githubusercontent.com/u/583546?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/nosolosw", + "html_url": "https://github.com/nosolosw", + "followers_url": "https://api.github.com/users/nosolosw/followers", + "following_url": "https://api.github.com/users/nosolosw/following{/other_user}", + "gists_url": "https://api.github.com/users/nosolosw/gists{/gist_id}", + "starred_url": "https://api.github.com/users/nosolosw/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/nosolosw/subscriptions", + "organizations_url": "https://api.github.com/users/nosolosw/orgs", + "repos_url": "https://api.github.com/users/nosolosw/repos", + "events_url": "https://api.github.com/users/nosolosw/events{/privacy}", + "received_events_url": "https://api.github.com/users/nosolosw/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "nosolosw", + "id": 583546, + "node_id": "MDQ6VXNlcjU4MzU0Ng==", + "avatar_url": "https://avatars.githubusercontent.com/u/583546?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/nosolosw", + "html_url": "https://github.com/nosolosw", + "followers_url": "https://api.github.com/users/nosolosw/followers", + "following_url": "https://api.github.com/users/nosolosw/following{/other_user}", + "gists_url": "https://api.github.com/users/nosolosw/gists{/gist_id}", + "starred_url": "https://api.github.com/users/nosolosw/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/nosolosw/subscriptions", + "organizations_url": "https://api.github.com/users/nosolosw/orgs", + "repos_url": "https://api.github.com/users/nosolosw/repos", + "events_url": "https://api.github.com/users/nosolosw/events{/privacy}", + "received_events_url": "https://api.github.com/users/nosolosw/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 0, + "created_at": "2021-08-06T10:54:15Z", + "updated_at": "2021-08-06T12:31:12Z", + "closed_at": "2021-08-06T12:30:44Z", + "author_association": "MEMBER", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33925", + "html_url": "https://github.com/WordPress/gutenberg/pull/33925", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33925.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33925.patch" + }, + "body": "This PR renames:\r\n\r\n- `experimental-default-theme.json` to `theme.json`\r\n- `experimental-i18n-theme.json` to `theme-i18n.json`\r\n\r\nso it follows WordPress core names ([see](https://github.com/WordPress/wordpress-develop/tree/master/src/wp-includes)).", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33924", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33924/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33924/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33924/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33924", + "id": 962620740, + "node_id": "MDExOlB1bGxSZXF1ZXN0NzA1MzgzMjAx", + "number": 33924, + "title": "Do not add to the block-library CSS bundle the colors that come from `theme.json`", + "user": { + "login": "nosolosw", + "id": 583546, + "node_id": "MDQ6VXNlcjU4MzU0Ng==", + "avatar_url": "https://avatars.githubusercontent.com/u/583546?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/nosolosw", + "html_url": "https://github.com/nosolosw", + "followers_url": "https://api.github.com/users/nosolosw/followers", + "following_url": "https://api.github.com/users/nosolosw/following{/other_user}", + "gists_url": "https://api.github.com/users/nosolosw/gists{/gist_id}", + "starred_url": "https://api.github.com/users/nosolosw/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/nosolosw/subscriptions", + "organizations_url": "https://api.github.com/users/nosolosw/orgs", + "repos_url": "https://api.github.com/users/nosolosw/repos", + "events_url": "https://api.github.com/users/nosolosw/events{/privacy}", + "received_events_url": "https://api.github.com/users/nosolosw/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 731693674, + "node_id": "MDU6TGFiZWw3MzE2OTM2NzQ=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Performance", + "name": "[Type] Performance", + "color": "f3f4fe", + "default": false, + "description": "" + }, + { + "id": 1022744205, + "node_id": "MDU6TGFiZWwxMDIyNzQ0MjA1", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Package]%20Block%20library", + "name": "[Package] Block library", + "color": "ed2572", + "default": false, + "description": "/packages/block-library" + }, + { + "id": 2424704665, + "node_id": "MDU6TGFiZWwyNDI0NzA0NjY1", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Package]%20Base%20styles", + "name": "[Package] Base styles", + "color": "ed2572", + "default": false, + "description": "/packages/base-styles" + } + ], + "state": "closed", + "locked": false, + "assignee": { + "login": "nosolosw", + "id": 583546, + "node_id": "MDQ6VXNlcjU4MzU0Ng==", + "avatar_url": "https://avatars.githubusercontent.com/u/583546?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/nosolosw", + "html_url": "https://github.com/nosolosw", + "followers_url": "https://api.github.com/users/nosolosw/followers", + "following_url": "https://api.github.com/users/nosolosw/following{/other_user}", + "gists_url": "https://api.github.com/users/nosolosw/gists{/gist_id}", + "starred_url": "https://api.github.com/users/nosolosw/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/nosolosw/subscriptions", + "organizations_url": "https://api.github.com/users/nosolosw/orgs", + "repos_url": "https://api.github.com/users/nosolosw/repos", + "events_url": "https://api.github.com/users/nosolosw/events{/privacy}", + "received_events_url": "https://api.github.com/users/nosolosw/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "nosolosw", + "id": 583546, + "node_id": "MDQ6VXNlcjU4MzU0Ng==", + "avatar_url": "https://avatars.githubusercontent.com/u/583546?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/nosolosw", + "html_url": "https://github.com/nosolosw", + "followers_url": "https://api.github.com/users/nosolosw/followers", + "following_url": "https://api.github.com/users/nosolosw/following{/other_user}", + "gists_url": "https://api.github.com/users/nosolosw/gists{/gist_id}", + "starred_url": "https://api.github.com/users/nosolosw/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/nosolosw/subscriptions", + "organizations_url": "https://api.github.com/users/nosolosw/orgs", + "repos_url": "https://api.github.com/users/nosolosw/repos", + "events_url": "https://api.github.com/users/nosolosw/events{/privacy}", + "received_events_url": "https://api.github.com/users/nosolosw/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 11, + "created_at": "2021-08-06T10:42:47Z", + "updated_at": "2021-08-12T10:17:53Z", + "closed_at": "2021-08-11T12:09:56Z", + "author_association": "MEMBER", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33924", + "html_url": "https://github.com/WordPress/gutenberg/pull/33924", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33924.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33924.patch" + }, + "body": "This PR reduces the amount of CSS imported by the `block-library` package, to only the ones that are not defined by `theme.json` defaults.\r\n\r\n~Alternatives I've considered: remove the mixins `background-colors`, `foreground-colors`, `gradient-colors`. The reason I discarded this approach is that I understand it may be an API others use and we don't want to keep them in the `base-styles` package. Happy to reconsider if others think differently.~ Updated: they were removed as per [this convo](https://github.com/WordPress/gutenberg/pull/33924#discussion_r685996672).\r\n\r\n## Test instructions\r\n\r\nI'm using the `emptytheme` for this testing.\r\n\r\nThe following instructions work for both the front-end and the editor:\r\n\r\n- Go and inspect the contents of the `wp-block-library-css` stylesheet.\r\n- You should find that the deprecated colors & gradients are still availablet. For example, you should find the following CSS for the `very-light-gray` color:\r\n\r\n```css\r\n:root .has-very-light-gray-background-color { background-color: #eee; }\r\n:root .has-very-light-gray-color { color: #eee; }\r\n```\r\n\r\n- The removed colors shouldn't be available. For example, in `trunk`, if you inspected the same stylesheet you should also find the CSS for the `black` color:\r\n\r\n```css\r\n:root .has-black-background-color { background-color: #000; }\r\n:root .has-black-color { color: #000; }\r\n```\r\n\r\n## Follow-ups\r\n\r\n- https://github.com/WordPress/gutenberg/issues/34006\r\n- https://github.com/WordPress/gutenberg/issues/34005\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33921", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33921/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33921/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33921/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33921", + "id": 962596488, + "node_id": "MDExOlB1bGxSZXF1ZXN0NzA1MzYyMDY1", + "number": 33921, + "title": "Site Editor: Add error boundary", + "user": { + "login": "Mamaduka", + "id": 240569, + "node_id": "MDQ6VXNlcjI0MDU2OQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/240569?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Mamaduka", + "html_url": "https://github.com/Mamaduka", + "followers_url": "https://api.github.com/users/Mamaduka/followers", + "following_url": "https://api.github.com/users/Mamaduka/following{/other_user}", + "gists_url": "https://api.github.com/users/Mamaduka/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Mamaduka/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Mamaduka/subscriptions", + "organizations_url": "https://api.github.com/users/Mamaduka/orgs", + "repos_url": "https://api.github.com/users/Mamaduka/repos", + "events_url": "https://api.github.com/users/Mamaduka/events{/privacy}", + "received_events_url": "https://api.github.com/users/Mamaduka/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 531680825, + "node_id": "MDU6TGFiZWw1MzE2ODA4MjU=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Enhancement", + "name": "[Type] Enhancement", + "color": "3993a3", + "default": false, + "description": "A suggestion for improvement." + }, + { + "id": 2706102777, + "node_id": "MDU6TGFiZWwyNzA2MTAyNzc3", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Feature]%20Site%20Editor", + "name": "[Feature] Site Editor", + "color": "fbca04", + "default": false, + "description": "" + } + ], + "state": "closed", + "locked": false, + "assignee": { + "login": "Mamaduka", + "id": 240569, + "node_id": "MDQ6VXNlcjI0MDU2OQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/240569?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Mamaduka", + "html_url": "https://github.com/Mamaduka", + "followers_url": "https://api.github.com/users/Mamaduka/followers", + "following_url": "https://api.github.com/users/Mamaduka/following{/other_user}", + "gists_url": "https://api.github.com/users/Mamaduka/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Mamaduka/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Mamaduka/subscriptions", + "organizations_url": "https://api.github.com/users/Mamaduka/orgs", + "repos_url": "https://api.github.com/users/Mamaduka/repos", + "events_url": "https://api.github.com/users/Mamaduka/events{/privacy}", + "received_events_url": "https://api.github.com/users/Mamaduka/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "Mamaduka", + "id": 240569, + "node_id": "MDQ6VXNlcjI0MDU2OQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/240569?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Mamaduka", + "html_url": "https://github.com/Mamaduka", + "followers_url": "https://api.github.com/users/Mamaduka/followers", + "following_url": "https://api.github.com/users/Mamaduka/following{/other_user}", + "gists_url": "https://api.github.com/users/Mamaduka/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Mamaduka/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Mamaduka/subscriptions", + "organizations_url": "https://api.github.com/users/Mamaduka/orgs", + "repos_url": "https://api.github.com/users/Mamaduka/repos", + "events_url": "https://api.github.com/users/Mamaduka/events{/privacy}", + "received_events_url": "https://api.github.com/users/Mamaduka/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 3, + "created_at": "2021-08-06T10:08:08Z", + "updated_at": "2021-08-09T14:44:46Z", + "closed_at": "2021-08-09T14:44:16Z", + "author_association": "MEMBER", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33921", + "html_url": "https://github.com/WordPress/gutenberg/pull/33921", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33921.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33921.patch" + }, + "body": "## Description\r\nPR adds error boundary to the Site Editor. The fallback will render a warning message with actions to \"Attempt Recovery\" or \"Copy Error.\" It's similar to other editor error boundaries.\r\n\r\nInitially, I was planning to reuse the `ErrorBoundary` component from the editor package, but the \"Copy Post Text\" doesn't make sense in the context of site editing.\r\n\r\nI also moved the following components near the InterfaceSkeleton - `URLQueryController`, `FullscreenMode` and `UnsavedChangesWarning`.\r\n\r\nFixes #33899.\r\n\r\n## How has this been tested?\r\n1. Enable TT1 Blocks theme.\r\n2. Go to the Site Editor screen.\r\n3. Run following code in console to trigger error in the editor:\r\n\r\n```js\r\nwp.plugins.registerPlugin( 'error-boundary-test', {\r\n render() {\r\n throw new Error( 'Test' );\r\n },\r\n} );\r\n```\r\n\r\n## Screenshots <!-- if applicable -->\r\n![CleanShot 2021-08-06 at 13 57 48](https://user-images.githubusercontent.com/240569/128494025-5be726e8-ed4c-490f-bcc2-61e7925c4ed9.png)\r\n\r\n## Types of changes\r\nEnhancement\r\n\r\n## Checklist:\r\n- [x] My code is tested.\r\n- [x] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [ ] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [ ] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [x] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [x] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [ ] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33913", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33913/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33913/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33913/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33913", + "id": 962143664, + "node_id": "MDExOlB1bGxSZXF1ZXN0NzA0OTc3NTgz", + "number": 33913, + "title": "Mobile Release v1.59.0", + "user": { + "login": "jhnstn", + "id": 744755, + "node_id": "MDQ6VXNlcjc0NDc1NQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/744755?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jhnstn", + "html_url": "https://github.com/jhnstn", + "followers_url": "https://api.github.com/users/jhnstn/followers", + "following_url": "https://api.github.com/users/jhnstn/following{/other_user}", + "gists_url": "https://api.github.com/users/jhnstn/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jhnstn/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jhnstn/subscriptions", + "organizations_url": "https://api.github.com/users/jhnstn/orgs", + "repos_url": "https://api.github.com/users/jhnstn/repos", + "events_url": "https://api.github.com/users/jhnstn/events{/privacy}", + "received_events_url": "https://api.github.com/users/jhnstn/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 982506020, + "node_id": "MDU6TGFiZWw5ODI1MDYwMjA=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/Mobile%20App%20-%20i.e.%20Android%20or%20iOS", + "name": "Mobile App - i.e. Android or iOS", + "color": "a3ef7a", + "default": false, + "description": "Native mobile impl of the block editor. (Note: used in scripts, ping mobile folks to change)" + } + ], + "state": "closed", + "locked": false, + "assignee": { + "login": "dcalhoun", + "id": 438664, + "node_id": "MDQ6VXNlcjQzODY2NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/438664?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/dcalhoun", + "html_url": "https://github.com/dcalhoun", + "followers_url": "https://api.github.com/users/dcalhoun/followers", + "following_url": "https://api.github.com/users/dcalhoun/following{/other_user}", + "gists_url": "https://api.github.com/users/dcalhoun/gists{/gist_id}", + "starred_url": "https://api.github.com/users/dcalhoun/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/dcalhoun/subscriptions", + "organizations_url": "https://api.github.com/users/dcalhoun/orgs", + "repos_url": "https://api.github.com/users/dcalhoun/repos", + "events_url": "https://api.github.com/users/dcalhoun/events{/privacy}", + "received_events_url": "https://api.github.com/users/dcalhoun/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "dcalhoun", + "id": 438664, + "node_id": "MDQ6VXNlcjQzODY2NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/438664?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/dcalhoun", + "html_url": "https://github.com/dcalhoun", + "followers_url": "https://api.github.com/users/dcalhoun/followers", + "following_url": "https://api.github.com/users/dcalhoun/following{/other_user}", + "gists_url": "https://api.github.com/users/dcalhoun/gists{/gist_id}", + "starred_url": "https://api.github.com/users/dcalhoun/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/dcalhoun/subscriptions", + "organizations_url": "https://api.github.com/users/dcalhoun/orgs", + "repos_url": "https://api.github.com/users/dcalhoun/repos", + "events_url": "https://api.github.com/users/dcalhoun/events{/privacy}", + "received_events_url": "https://api.github.com/users/dcalhoun/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 1, + "created_at": "2021-08-05T19:46:50Z", + "updated_at": "2021-08-06T15:38:52Z", + "closed_at": "2021-08-06T15:14:20Z", + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33913", + "html_url": "https://github.com/WordPress/gutenberg/pull/33913", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33913.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33913.patch" + }, + "body": "## Description\nRelease 1.59.0 of the react-native-editor and Gutenberg-Mobile.\n\nFor more information about this release and testing instructions, please see the related Gutenberg-Mobile PR: https://github.com/wordpress-mobile/gutenberg-mobile/pull/3805\n\n## Checklist:\n- [x] My code is tested.\n- [x] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\n- [x] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\n- [ ] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\n- [x] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\n- [x] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\n- [x] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33906", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33906/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33906/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33906/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33906", + "id": 962026946, + "node_id": "MDExOlB1bGxSZXF1ZXN0NzA0ODc4MDA0", + "number": 33906, + "title": "Closing the block inserter decrements block type impressions", + "user": { + "login": "dcalhoun", + "id": 438664, + "node_id": "MDQ6VXNlcjQzODY2NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/438664?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/dcalhoun", + "html_url": "https://github.com/dcalhoun", + "followers_url": "https://api.github.com/users/dcalhoun/followers", + "following_url": "https://api.github.com/users/dcalhoun/following{/other_user}", + "gists_url": "https://api.github.com/users/dcalhoun/gists{/gist_id}", + "starred_url": "https://api.github.com/users/dcalhoun/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/dcalhoun/subscriptions", + "organizations_url": "https://api.github.com/users/dcalhoun/orgs", + "repos_url": "https://api.github.com/users/dcalhoun/repos", + "events_url": "https://api.github.com/users/dcalhoun/events{/privacy}", + "received_events_url": "https://api.github.com/users/dcalhoun/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 596962434, + "node_id": "MDU6TGFiZWw1OTY5NjI0MzQ=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Feature]%20Inserter", + "name": "[Feature] Inserter", + "color": "fbca04", + "default": false, + "description": "" + }, + { + "id": 982506020, + "node_id": "MDU6TGFiZWw5ODI1MDYwMjA=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/Mobile%20App%20-%20i.e.%20Android%20or%20iOS", + "name": "Mobile App - i.e. Android or iOS", + "color": "a3ef7a", + "default": false, + "description": "Native mobile impl of the block editor. (Note: used in scripts, ping mobile folks to change)" + } + ], + "state": "closed", + "locked": false, + "assignee": { + "login": "dcalhoun", + "id": 438664, + "node_id": "MDQ6VXNlcjQzODY2NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/438664?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/dcalhoun", + "html_url": "https://github.com/dcalhoun", + "followers_url": "https://api.github.com/users/dcalhoun/followers", + "following_url": "https://api.github.com/users/dcalhoun/following{/other_user}", + "gists_url": "https://api.github.com/users/dcalhoun/gists{/gist_id}", + "starred_url": "https://api.github.com/users/dcalhoun/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/dcalhoun/subscriptions", + "organizations_url": "https://api.github.com/users/dcalhoun/orgs", + "repos_url": "https://api.github.com/users/dcalhoun/repos", + "events_url": "https://api.github.com/users/dcalhoun/events{/privacy}", + "received_events_url": "https://api.github.com/users/dcalhoun/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "dcalhoun", + "id": 438664, + "node_id": "MDQ6VXNlcjQzODY2NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/438664?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/dcalhoun", + "html_url": "https://github.com/dcalhoun", + "followers_url": "https://api.github.com/users/dcalhoun/followers", + "following_url": "https://api.github.com/users/dcalhoun/following{/other_user}", + "gists_url": "https://api.github.com/users/dcalhoun/gists{/gist_id}", + "starred_url": "https://api.github.com/users/dcalhoun/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/dcalhoun/subscriptions", + "organizations_url": "https://api.github.com/users/dcalhoun/orgs", + "repos_url": "https://api.github.com/users/dcalhoun/repos", + "events_url": "https://api.github.com/users/dcalhoun/events{/privacy}", + "received_events_url": "https://api.github.com/users/dcalhoun/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 1, + "created_at": "2021-08-05T17:08:51Z", + "updated_at": "2021-08-06T18:25:03Z", + "closed_at": "2021-08-06T18:24:35Z", + "author_association": "MEMBER", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33906", + "html_url": "https://github.com/WordPress/gutenberg/pull/33906", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33906.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33906.patch" + }, + "body": "* **Gutenberg:** Self\r\n* **Gutenberg Mobile:** https://github.com/wordpress-mobile/gutenberg-mobile/pull/3802\r\n\r\n## Description\r\nFixes #33907. Closing the block inserter will decrement the block type impression counts. This results in blocks that are marked as \"new\" to slowly lose the designation as a user utilizes the block inserter over time. \r\n\r\n## How has this been tested?\r\n1. Clone this branch. \r\n2. Apply the below diff. \r\n\t<details><summary>Patch Enabling New Badge</summary>\r\n\r\n\t```diff\r\n\tdiff --git a/packages/block-editor/src/components/inserter/hooks/use-block-type-impressions.native.js b/packages/block-editor/src/components/inserter/hooks/use-block-type-impressions.native.js\r\n\tindex 2fcd6dc1c9..7bd08a2594 100644\r\n\t--- a/packages/block-editor/src/components/inserter/hooks/use-block-type-impressions.native.js\r\n\t+++ b/packages/block-editor/src/components/inserter/hooks/use-block-type-impressions.native.js\r\n\t@@ -19,7 +19,7 @@ function useBlockTypeImpressions( blockTypes ) {\r\n\t\r\n\t\t\t\treturn {\r\n\t\t\t\t\tblockTypeImpressions: impressions,\r\n\t-\t\t\t\tenableEditorOnboarding: editorOnboarding,\r\n\t+\t\t\t\tenableEditorOnboarding: true,\r\n\t\t\t\t};\r\n\t\t\t},\r\n\t\t\t[]\r\n\t```\r\n\r\n\t</details>\r\n3. Start the server and build the Demo app to an emulator/device. \r\n4. Open the block inserter, note the new \"sparkles\" badge on the Search, Embed, and Audio block buttons. \r\n5. Insert one of the aforementioned blocks. \r\n6. Open the block inserter, note the new \"sparkles\" badge should only be present on two of the aforementioned blocks _not_ inserted. \r\n7. Close the block inserter. \r\n8. Repeat steps 6-7 9 more times. \r\n9. ℹ️ **Expected:** the new \"sparkles\" badge is _no longer present_ on any block buttons. \r\n\r\n## Screenshots <!-- if applicable -->\r\n<img width=\"285\" alt=\"new-block-sparkles-badge\" src=\"https://user-images.githubusercontent.com/438664/128391944-51323d2e-bf29-46b3-9c92-8fbb338079d8.png\">\r\n\r\n## Types of changes\r\nNew feature\r\n\r\n## Checklist:\r\n- [x] My code is tested.\r\n- [x] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [x] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [ ] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [x] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [x] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [x] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33904", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33904/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33904/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33904/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33904", + "id": 961934875, + "node_id": "MDExOlB1bGxSZXF1ZXN0NzA0ODAwNzEz", + "number": 33904, + "title": "No longer read from `experimental-theme.json`", + "user": { + "login": "nosolosw", + "id": 583546, + "node_id": "MDQ6VXNlcjU4MzU0Ng==", + "avatar_url": "https://avatars.githubusercontent.com/u/583546?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/nosolosw", + "html_url": "https://github.com/nosolosw", + "followers_url": "https://api.github.com/users/nosolosw/followers", + "following_url": "https://api.github.com/users/nosolosw/following{/other_user}", + "gists_url": "https://api.github.com/users/nosolosw/gists{/gist_id}", + "starred_url": "https://api.github.com/users/nosolosw/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/nosolosw/subscriptions", + "organizations_url": "https://api.github.com/users/nosolosw/orgs", + "repos_url": "https://api.github.com/users/nosolosw/repos", + "events_url": "https://api.github.com/users/nosolosw/events{/privacy}", + "received_events_url": "https://api.github.com/users/nosolosw/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 930001208, + "node_id": "MDU6TGFiZWw5MzAwMDEyMDg=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Code%20Quality", + "name": "[Type] Code Quality", + "color": "e5e04b", + "default": false, + "description": "Gotta shave those yaks." + }, + { + "id": 1800807983, + "node_id": "MDU6TGFiZWwxODAwODA3OTgz", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/Global%20Styles", + "name": "Global Styles", + "color": "2100b7", + "default": false, + "description": "" + } + ], + "state": "closed", + "locked": false, + "assignee": { + "login": "nosolosw", + "id": 583546, + "node_id": "MDQ6VXNlcjU4MzU0Ng==", + "avatar_url": "https://avatars.githubusercontent.com/u/583546?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/nosolosw", + "html_url": "https://github.com/nosolosw", + "followers_url": "https://api.github.com/users/nosolosw/followers", + "following_url": "https://api.github.com/users/nosolosw/following{/other_user}", + "gists_url": "https://api.github.com/users/nosolosw/gists{/gist_id}", + "starred_url": "https://api.github.com/users/nosolosw/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/nosolosw/subscriptions", + "organizations_url": "https://api.github.com/users/nosolosw/orgs", + "repos_url": "https://api.github.com/users/nosolosw/repos", + "events_url": "https://api.github.com/users/nosolosw/events{/privacy}", + "received_events_url": "https://api.github.com/users/nosolosw/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "nosolosw", + "id": 583546, + "node_id": "MDQ6VXNlcjU4MzU0Ng==", + "avatar_url": "https://avatars.githubusercontent.com/u/583546?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/nosolosw", + "html_url": "https://github.com/nosolosw", + "followers_url": "https://api.github.com/users/nosolosw/followers", + "following_url": "https://api.github.com/users/nosolosw/following{/other_user}", + "gists_url": "https://api.github.com/users/nosolosw/gists{/gist_id}", + "starred_url": "https://api.github.com/users/nosolosw/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/nosolosw/subscriptions", + "organizations_url": "https://api.github.com/users/nosolosw/orgs", + "repos_url": "https://api.github.com/users/nosolosw/repos", + "events_url": "https://api.github.com/users/nosolosw/events{/privacy}", + "received_events_url": "https://api.github.com/users/nosolosw/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 2, + "created_at": "2021-08-05T15:18:03Z", + "updated_at": "2021-08-09T10:13:39Z", + "closed_at": "2021-08-09T10:13:13Z", + "author_association": "MEMBER", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33904", + "html_url": "https://github.com/WordPress/gutenberg/pull/33904", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33904.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33904.patch" + }, + "body": "We used `experimental-theme.json` as a name for the file that holds the settings & styles while it was experimental. When the feature was stabilized the file was renamed to `theme.json` but we also kept a fallback to the previous name in the plugin, so themes had some time to rename it. We can get rid of this fallback now that WordPress 5.8 is released and bundles `theme.json` by default.", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33903", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33903/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33903/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33903/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33903", + "id": 961929642, + "node_id": "MDExOlB1bGxSZXF1ZXN0NzA0Nzk2MTYy", + "number": 33903, + "title": "Improve the performance of the parser by removing the automatic custom classnames handling.", + "user": { + "login": "youknowriad", + "id": 272444, + "node_id": "MDQ6VXNlcjI3MjQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/272444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/youknowriad", + "html_url": "https://github.com/youknowriad", + "followers_url": "https://api.github.com/users/youknowriad/followers", + "following_url": "https://api.github.com/users/youknowriad/following{/other_user}", + "gists_url": "https://api.github.com/users/youknowriad/gists{/gist_id}", + "starred_url": "https://api.github.com/users/youknowriad/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/youknowriad/subscriptions", + "organizations_url": "https://api.github.com/users/youknowriad/orgs", + "repos_url": "https://api.github.com/users/youknowriad/repos", + "events_url": "https://api.github.com/users/youknowriad/events{/privacy}", + "received_events_url": "https://api.github.com/users/youknowriad/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 596962405, + "node_id": "MDU6TGFiZWw1OTY5NjI0MDU=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Feature]%20Parsing", + "name": "[Feature] Parsing", + "color": "fbca04", + "default": false, + "description": "" + }, + { + "id": 731693674, + "node_id": "MDU6TGFiZWw3MzE2OTM2NzQ=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Performance", + "name": "[Type] Performance", + "color": "f3f4fe", + "default": false, + "description": "" + } + ], + "state": "closed", + "locked": false, + "assignee": { + "login": "youknowriad", + "id": 272444, + "node_id": "MDQ6VXNlcjI3MjQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/272444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/youknowriad", + "html_url": "https://github.com/youknowriad", + "followers_url": "https://api.github.com/users/youknowriad/followers", + "following_url": "https://api.github.com/users/youknowriad/following{/other_user}", + "gists_url": "https://api.github.com/users/youknowriad/gists{/gist_id}", + "starred_url": "https://api.github.com/users/youknowriad/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/youknowriad/subscriptions", + "organizations_url": "https://api.github.com/users/youknowriad/orgs", + "repos_url": "https://api.github.com/users/youknowriad/repos", + "events_url": "https://api.github.com/users/youknowriad/events{/privacy}", + "received_events_url": "https://api.github.com/users/youknowriad/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "youknowriad", + "id": 272444, + "node_id": "MDQ6VXNlcjI3MjQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/272444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/youknowriad", + "html_url": "https://github.com/youknowriad", + "followers_url": "https://api.github.com/users/youknowriad/followers", + "following_url": "https://api.github.com/users/youknowriad/following{/other_user}", + "gists_url": "https://api.github.com/users/youknowriad/gists{/gist_id}", + "starred_url": "https://api.github.com/users/youknowriad/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/youknowriad/subscriptions", + "organizations_url": "https://api.github.com/users/youknowriad/orgs", + "repos_url": "https://api.github.com/users/youknowriad/repos", + "events_url": "https://api.github.com/users/youknowriad/events{/privacy}", + "received_events_url": "https://api.github.com/users/youknowriad/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 3, + "created_at": "2021-08-05T15:12:34Z", + "updated_at": "2021-08-10T10:12:15Z", + "closed_at": "2021-08-10T10:11:54Z", + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33903", + "html_url": "https://github.com/WordPress/gutenberg/pull/33903", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33903.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33903.patch" + }, + "body": "When parsing post content, I noticed that the `addParsedDifference` function used to fix the custom classnames in case of invalidation takes half of the parsing time for a long post it takes `300ms` out of `600ms` on my machine. \r\n\r\nThe solution in this PR is to move this behavior to the \"validation\" stage, meaning, only fix the custom classname attribute if the block is invalid (which in most cases is not).\r\n\r\nThe parser code base is a bit complex though, I think there's still ways we could improve the quality and the maintenability of that code,", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33902", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33902/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33902/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33902/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33902", + "id": 961845951, + "node_id": "MDExOlB1bGxSZXF1ZXN0NzA0NzIzNDUz", + "number": 33902, + "title": "`useBreakpointIndex`: attach `resize` event listener to `window` instead of `document`", + "user": { + "login": "ciampo", + "id": 1083581, + "node_id": "MDQ6VXNlcjEwODM1ODE=", + "avatar_url": "https://avatars.githubusercontent.com/u/1083581?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/ciampo", + "html_url": "https://github.com/ciampo", + "followers_url": "https://api.github.com/users/ciampo/followers", + "following_url": "https://api.github.com/users/ciampo/following{/other_user}", + "gists_url": "https://api.github.com/users/ciampo/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ciampo/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ciampo/subscriptions", + "organizations_url": "https://api.github.com/users/ciampo/orgs", + "repos_url": "https://api.github.com/users/ciampo/repos", + "events_url": "https://api.github.com/users/ciampo/events{/privacy}", + "received_events_url": "https://api.github.com/users/ciampo/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 531680823, + "node_id": "MDU6TGFiZWw1MzE2ODA4MjM=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Bug", + "name": "[Type] Bug", + "color": "d93f0b", + "default": false, + "description": "An existing feature is broken." + }, + { + "id": 997392122, + "node_id": "MDU6TGFiZWw5OTczOTIxMjI=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Package]%20Components", + "name": "[Package] Components", + "color": "ed2572", + "default": false, + "description": "/packages/components" + }, + { + "id": 2555015900, + "node_id": "MDU6TGFiZWwyNTU1MDE1OTAw", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Feature]%20Component%20System", + "name": "[Feature] Component System", + "color": "fbca04", + "default": false, + "description": "The next iteration on WordPress Components." + } + ], + "state": "closed", + "locked": false, + "assignee": { + "login": "ciampo", + "id": 1083581, + "node_id": "MDQ6VXNlcjEwODM1ODE=", + "avatar_url": "https://avatars.githubusercontent.com/u/1083581?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/ciampo", + "html_url": "https://github.com/ciampo", + "followers_url": "https://api.github.com/users/ciampo/followers", + "following_url": "https://api.github.com/users/ciampo/following{/other_user}", + "gists_url": "https://api.github.com/users/ciampo/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ciampo/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ciampo/subscriptions", + "organizations_url": "https://api.github.com/users/ciampo/orgs", + "repos_url": "https://api.github.com/users/ciampo/repos", + "events_url": "https://api.github.com/users/ciampo/events{/privacy}", + "received_events_url": "https://api.github.com/users/ciampo/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "ciampo", + "id": 1083581, + "node_id": "MDQ6VXNlcjEwODM1ODE=", + "avatar_url": "https://avatars.githubusercontent.com/u/1083581?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/ciampo", + "html_url": "https://github.com/ciampo", + "followers_url": "https://api.github.com/users/ciampo/followers", + "following_url": "https://api.github.com/users/ciampo/following{/other_user}", + "gists_url": "https://api.github.com/users/ciampo/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ciampo/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ciampo/subscriptions", + "organizations_url": "https://api.github.com/users/ciampo/orgs", + "repos_url": "https://api.github.com/users/ciampo/repos", + "events_url": "https://api.github.com/users/ciampo/events{/privacy}", + "received_events_url": "https://api.github.com/users/ciampo/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 1, + "created_at": "2021-08-05T13:46:44Z", + "updated_at": "2021-08-06T09:21:11Z", + "closed_at": "2021-08-06T09:20:41Z", + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33902", + "html_url": "https://github.com/WordPress/gutenberg/pull/33902", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33902.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33902.patch" + }, + "body": "<!-- Learn the overall process and best practices for pull requests at https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/repository-management.md#pull-requests. -->\r\n\r\n<!-- Gutenberg's license is in the process of updating to be dual-licensed under the GPL and MPL. As part of that transition, all new contributions are dual-licensed. For more information, see: https://github.com/WordPress/gutenberg/blob/trunk/LICENSE.md -->\r\n\r\n## Description\r\n<!-- Please describe what you have changed or added -->\r\n\r\nFix a bug in the `useBreakpointIndex` component utility hook, where the `resize` event listener was previously attached to the `document` object.\r\n\r\nThis was resulting in the event listener function never being called, since [the `resize` event only gets fired on the `window` object](https://developer.mozilla.org/en-US/docs/Web/API/Window/resize_event).\r\n\r\nThe fix is quite simple — change `document` to `window`.\r\n\r\n## How has this been tested?\r\n<!-- Please describe in detail how you tested your changes. -->\r\n<!-- Include details of your testing environment, tests ran to see how -->\r\n<!-- your change affects other areas of the code, etc. -->\r\n\r\nOne way to test this is to check the `Flex` component's Storybook example:\r\n\r\n- in [production](https://wordpress.github.io/gutenberg/?path=/story/g2-components-experimental-flex--default), notice how resizing the window doesn't cause the second row of items to switch from `row` to `column` (and viceversa)\r\n- When running Storybook on this PR branch, notice how the behaviour just described above is fixed\r\n\r\n## Screenshots <!-- if applicable -->\r\n\r\n**Before**\r\n\r\nhttps://user-images.githubusercontent.com/1083581/128360451-048af45b-6728-4298-8fac-19990f0f9ebd.mp4\r\n\r\n**After**\r\n\r\nhttps://user-images.githubusercontent.com/1083581/128360624-3dd7263e-ee91-44b3-83fe-c6cee342f61d.mp4\r\n\r\n## Types of changes\r\n<!-- What types of changes does your code introduce? -->\r\n<!-- Bug fix (non-breaking change which fixes an issue) -->\r\n<!-- New feature (non-breaking change which adds functionality) -->\r\n<!-- Breaking change (fix or feature that would cause existing functionality to not work as expected) -->\r\n\r\nBug fix\r\n\r\n## Checklist:\r\n- [x] My code is tested.\r\n- [x] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [x] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [x] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [x] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [x] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- N/A I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33901", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33901/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33901/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33901/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33901", + "id": 961792869, + "node_id": "MDExOlB1bGxSZXF1ZXN0NzA0Njc4MzIx", + "number": 33901, + "title": "Plugin: Fix `jsdoc/check-line-alignment` ESLint warnings", + "user": { + "login": "gziolo", + "id": 699132, + "node_id": "MDQ6VXNlcjY5OTEzMg==", + "avatar_url": "https://avatars.githubusercontent.com/u/699132?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/gziolo", + "html_url": "https://github.com/gziolo", + "followers_url": "https://api.github.com/users/gziolo/followers", + "following_url": "https://api.github.com/users/gziolo/following{/other_user}", + "gists_url": "https://api.github.com/users/gziolo/gists{/gist_id}", + "starred_url": "https://api.github.com/users/gziolo/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/gziolo/subscriptions", + "organizations_url": "https://api.github.com/users/gziolo/orgs", + "repos_url": "https://api.github.com/users/gziolo/repos", + "events_url": "https://api.github.com/users/gziolo/events{/privacy}", + "received_events_url": "https://api.github.com/users/gziolo/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 616662898, + "node_id": "MDU6TGFiZWw2MTY2NjI4OTg=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/Gutenberg%20Plugin", + "name": "Gutenberg Plugin", + "color": "578eed", + "default": false, + "description": "" + }, + { + "id": 930001208, + "node_id": "MDU6TGFiZWw5MzAwMDEyMDg=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Code%20Quality", + "name": "[Type] Code Quality", + "color": "e5e04b", + "default": false, + "description": "Gotta shave those yaks." + } + ], + "state": "closed", + "locked": false, + "assignee": { + "login": "gziolo", + "id": 699132, + "node_id": "MDQ6VXNlcjY5OTEzMg==", + "avatar_url": "https://avatars.githubusercontent.com/u/699132?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/gziolo", + "html_url": "https://github.com/gziolo", + "followers_url": "https://api.github.com/users/gziolo/followers", + "following_url": "https://api.github.com/users/gziolo/following{/other_user}", + "gists_url": "https://api.github.com/users/gziolo/gists{/gist_id}", + "starred_url": "https://api.github.com/users/gziolo/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/gziolo/subscriptions", + "organizations_url": "https://api.github.com/users/gziolo/orgs", + "repos_url": "https://api.github.com/users/gziolo/repos", + "events_url": "https://api.github.com/users/gziolo/events{/privacy}", + "received_events_url": "https://api.github.com/users/gziolo/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "gziolo", + "id": 699132, + "node_id": "MDQ6VXNlcjY5OTEzMg==", + "avatar_url": "https://avatars.githubusercontent.com/u/699132?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/gziolo", + "html_url": "https://github.com/gziolo", + "followers_url": "https://api.github.com/users/gziolo/followers", + "following_url": "https://api.github.com/users/gziolo/following{/other_user}", + "gists_url": "https://api.github.com/users/gziolo/gists{/gist_id}", + "starred_url": "https://api.github.com/users/gziolo/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/gziolo/subscriptions", + "organizations_url": "https://api.github.com/users/gziolo/orgs", + "repos_url": "https://api.github.com/users/gziolo/repos", + "events_url": "https://api.github.com/users/gziolo/events{/privacy}", + "received_events_url": "https://api.github.com/users/gziolo/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 1, + "created_at": "2021-08-05T12:51:10Z", + "updated_at": "2021-08-06T05:23:04Z", + "closed_at": "2021-08-06T05:22:39Z", + "author_association": "MEMBER", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33901", + "html_url": "https://github.com/WordPress/gutenberg/pull/33901", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33901.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33901.patch" + }, + "body": "<!-- Learn the overall process and best practices for pull requests at https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/repository-management.md#pull-requests. -->\r\n\r\n<!-- Gutenberg's license is in the process of updating to be dual-licensed under the GPL and MPL. As part of that transition, all new contributions are dual-licensed. For more information, see: https://github.com/WordPress/gutenberg/blob/trunk/LICENSE.md -->\r\n\r\n## Description\r\n<!-- Please describe what you have changed or added -->\r\n\r\nIt's the result of running:\r\n\r\n```bash\r\nnpm run lint-js -- --fix\r\n```\r\n\r\nIt was applied to files that had reported violations for `jsdoc/check-line-alignment` rule.", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33896", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33896/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33896/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33896/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33896", + "id": 961675115, + "node_id": "MDExOlB1bGxSZXF1ZXN0NzA0NTc2MTYx", + "number": 33896, + "title": "Fix the site editor breaking in firefox", + "user": { + "login": "youknowriad", + "id": 272444, + "node_id": "MDQ6VXNlcjI3MjQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/272444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/youknowriad", + "html_url": "https://github.com/youknowriad", + "followers_url": "https://api.github.com/users/youknowriad/followers", + "following_url": "https://api.github.com/users/youknowriad/following{/other_user}", + "gists_url": "https://api.github.com/users/youknowriad/gists{/gist_id}", + "starred_url": "https://api.github.com/users/youknowriad/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/youknowriad/subscriptions", + "organizations_url": "https://api.github.com/users/youknowriad/orgs", + "repos_url": "https://api.github.com/users/youknowriad/repos", + "events_url": "https://api.github.com/users/youknowriad/events{/privacy}", + "received_events_url": "https://api.github.com/users/youknowriad/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 531680823, + "node_id": "MDU6TGFiZWw1MzE2ODA4MjM=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Bug", + "name": "[Type] Bug", + "color": "d93f0b", + "default": false, + "description": "An existing feature is broken." + }, + { + "id": 2706102777, + "node_id": "MDU6TGFiZWwyNzA2MTAyNzc3", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Feature]%20Site%20Editor", + "name": "[Feature] Site Editor", + "color": "fbca04", + "default": false, + "description": "" + } + ], + "state": "closed", + "locked": false, + "assignee": { + "login": "youknowriad", + "id": 272444, + "node_id": "MDQ6VXNlcjI3MjQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/272444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/youknowriad", + "html_url": "https://github.com/youknowriad", + "followers_url": "https://api.github.com/users/youknowriad/followers", + "following_url": "https://api.github.com/users/youknowriad/following{/other_user}", + "gists_url": "https://api.github.com/users/youknowriad/gists{/gist_id}", + "starred_url": "https://api.github.com/users/youknowriad/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/youknowriad/subscriptions", + "organizations_url": "https://api.github.com/users/youknowriad/orgs", + "repos_url": "https://api.github.com/users/youknowriad/repos", + "events_url": "https://api.github.com/users/youknowriad/events{/privacy}", + "received_events_url": "https://api.github.com/users/youknowriad/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "youknowriad", + "id": 272444, + "node_id": "MDQ6VXNlcjI3MjQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/272444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/youknowriad", + "html_url": "https://github.com/youknowriad", + "followers_url": "https://api.github.com/users/youknowriad/followers", + "following_url": "https://api.github.com/users/youknowriad/following{/other_user}", + "gists_url": "https://api.github.com/users/youknowriad/gists{/gist_id}", + "starred_url": "https://api.github.com/users/youknowriad/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/youknowriad/subscriptions", + "organizations_url": "https://api.github.com/users/youknowriad/orgs", + "repos_url": "https://api.github.com/users/youknowriad/repos", + "events_url": "https://api.github.com/users/youknowriad/events{/privacy}", + "received_events_url": "https://api.github.com/users/youknowriad/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 4, + "created_at": "2021-08-05T10:22:32Z", + "updated_at": "2021-08-11T22:07:55Z", + "closed_at": "2021-08-09T10:14:45Z", + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33896", + "html_url": "https://github.com/WordPress/gutenberg/pull/33896", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33896.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33896.patch" + }, + "body": "closes #33873 \r\n\r\nI'm not entirely certain that this is a good solution but in Firefox the ref is null initially meaning that it's probably not being attached on mount.\r\n\r\nGuarding against the ref solves the issue but doesn't explain why the ref is empty in the first place.\r\n\r\n**Note:** It seems we don't have an error boundary in the site editor or if we do, it's not working well.\r\n\r\n**Testing instructions**\r\n\r\n - Open the site editor in firefox\r\n - Make sure you don't get just a crash/", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33895", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33895/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33895/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33895/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33895", + "id": 961648612, + "node_id": "MDExOlB1bGxSZXF1ZXN0NzA0NTUzMDcy", + "number": 33895, + "title": "Fix block appender position in classic themes", + "user": { + "login": "youknowriad", + "id": 272444, + "node_id": "MDQ6VXNlcjI3MjQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/272444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/youknowriad", + "html_url": "https://github.com/youknowriad", + "followers_url": "https://api.github.com/users/youknowriad/followers", + "following_url": "https://api.github.com/users/youknowriad/following{/other_user}", + "gists_url": "https://api.github.com/users/youknowriad/gists{/gist_id}", + "starred_url": "https://api.github.com/users/youknowriad/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/youknowriad/subscriptions", + "organizations_url": "https://api.github.com/users/youknowriad/orgs", + "repos_url": "https://api.github.com/users/youknowriad/repos", + "events_url": "https://api.github.com/users/youknowriad/events{/privacy}", + "received_events_url": "https://api.github.com/users/youknowriad/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 531680823, + "node_id": "MDU6TGFiZWw1MzE2ODA4MjM=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Bug", + "name": "[Type] Bug", + "color": "d93f0b", + "default": false, + "description": "An existing feature is broken." + } + ], + "state": "closed", + "locked": false, + "assignee": { + "login": "youknowriad", + "id": 272444, + "node_id": "MDQ6VXNlcjI3MjQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/272444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/youknowriad", + "html_url": "https://github.com/youknowriad", + "followers_url": "https://api.github.com/users/youknowriad/followers", + "following_url": "https://api.github.com/users/youknowriad/following{/other_user}", + "gists_url": "https://api.github.com/users/youknowriad/gists{/gist_id}", + "starred_url": "https://api.github.com/users/youknowriad/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/youknowriad/subscriptions", + "organizations_url": "https://api.github.com/users/youknowriad/orgs", + "repos_url": "https://api.github.com/users/youknowriad/repos", + "events_url": "https://api.github.com/users/youknowriad/events{/privacy}", + "received_events_url": "https://api.github.com/users/youknowriad/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "youknowriad", + "id": 272444, + "node_id": "MDQ6VXNlcjI3MjQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/272444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/youknowriad", + "html_url": "https://github.com/youknowriad", + "followers_url": "https://api.github.com/users/youknowriad/followers", + "following_url": "https://api.github.com/users/youknowriad/following{/other_user}", + "gists_url": "https://api.github.com/users/youknowriad/gists{/gist_id}", + "starred_url": "https://api.github.com/users/youknowriad/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/youknowriad/subscriptions", + "organizations_url": "https://api.github.com/users/youknowriad/orgs", + "repos_url": "https://api.github.com/users/youknowriad/repos", + "events_url": "https://api.github.com/users/youknowriad/events{/privacy}", + "received_events_url": "https://api.github.com/users/youknowriad/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 5, + "created_at": "2021-08-05T09:52:58Z", + "updated_at": "2021-08-06T08:31:27Z", + "closed_at": "2021-08-05T13:22:21Z", + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33895", + "html_url": "https://github.com/WordPress/gutenberg/pull/33895", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33895.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33895.patch" + }, + "body": "In https://github.com/WordPress/gutenberg/pull/33024/files#r659586330 the `wp-block` class has been removed from the block appender. I think this was an error, that class is used to define the max-width for blocks which the appender should adhere too, otherwise it will be position on the extreme left.\r\n\r\nI'm not really sure why the class was removed there.\r\n\r\n**Testing instructions**\r\n\r\n - Use a classic theme\r\n - Insert an image block\r\n - notice that the block appender after the image block is positioned properly.", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33893", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33893/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33893/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33893/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33893", + "id": 961547711, + "node_id": "MDExOlB1bGxSZXF1ZXN0NzA0NDY2ODQ3", + "number": 33893, + "title": "Fix positioning discrepancy with draggable chip.", + "user": { + "login": "jasmussen", + "id": 1204802, + "node_id": "MDQ6VXNlcjEyMDQ4MDI=", + "avatar_url": "https://avatars.githubusercontent.com/u/1204802?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jasmussen", + "html_url": "https://github.com/jasmussen", + "followers_url": "https://api.github.com/users/jasmussen/followers", + "following_url": "https://api.github.com/users/jasmussen/following{/other_user}", + "gists_url": "https://api.github.com/users/jasmussen/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jasmussen/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jasmussen/subscriptions", + "organizations_url": "https://api.github.com/users/jasmussen/orgs", + "repos_url": "https://api.github.com/users/jasmussen/repos", + "events_url": "https://api.github.com/users/jasmussen/events{/privacy}", + "received_events_url": "https://api.github.com/users/jasmussen/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 596964332, + "node_id": "MDU6TGFiZWw1OTY5NjQzMzI=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/General%20Interface", + "name": "General Interface", + "color": "bfdadc", + "default": false, + "description": "Parts of the UI which don't fall neatly under other labels." + } + ], + "state": "closed", + "locked": false, + "assignee": { + "login": "jasmussen", + "id": 1204802, + "node_id": "MDQ6VXNlcjEyMDQ4MDI=", + "avatar_url": "https://avatars.githubusercontent.com/u/1204802?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jasmussen", + "html_url": "https://github.com/jasmussen", + "followers_url": "https://api.github.com/users/jasmussen/followers", + "following_url": "https://api.github.com/users/jasmussen/following{/other_user}", + "gists_url": "https://api.github.com/users/jasmussen/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jasmussen/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jasmussen/subscriptions", + "organizations_url": "https://api.github.com/users/jasmussen/orgs", + "repos_url": "https://api.github.com/users/jasmussen/repos", + "events_url": "https://api.github.com/users/jasmussen/events{/privacy}", + "received_events_url": "https://api.github.com/users/jasmussen/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "jasmussen", + "id": 1204802, + "node_id": "MDQ6VXNlcjEyMDQ4MDI=", + "avatar_url": "https://avatars.githubusercontent.com/u/1204802?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jasmussen", + "html_url": "https://github.com/jasmussen", + "followers_url": "https://api.github.com/users/jasmussen/followers", + "following_url": "https://api.github.com/users/jasmussen/following{/other_user}", + "gists_url": "https://api.github.com/users/jasmussen/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jasmussen/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jasmussen/subscriptions", + "organizations_url": "https://api.github.com/users/jasmussen/orgs", + "repos_url": "https://api.github.com/users/jasmussen/repos", + "events_url": "https://api.github.com/users/jasmussen/events{/privacy}", + "received_events_url": "https://api.github.com/users/jasmussen/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 1, + "created_at": "2021-08-05T07:53:04Z", + "updated_at": "2021-08-06T07:18:50Z", + "closed_at": "2021-08-06T07:18:20Z", + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33893", + "html_url": "https://github.com/WordPress/gutenberg/pull/33893", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33893.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33893.patch" + }, + "body": "## Description\r\n\r\nThe inverted block toolbar/drag handle in select mode is offset slightly compared to the block toolbar:\r\n\r\n![currently](https://user-images.githubusercontent.com/1204802/128312691-5ba9219c-828d-407b-a09a-a0df7ca350b5.gif)\r\n\r\n<img width=\"633\" alt=\"Screenshot 2021-08-05 at 09 42 21\" src=\"https://user-images.githubusercontent.com/1204802/128312698-29f9b0d6-cced-4cd0-a405-9df5eaf713c5.png\">\r\n\r\nThis PR fixes that:\r\n\r\n![after](https://user-images.githubusercontent.com/1204802/128312721-688ceff8-e734-4bda-932c-4caf5675c19f.gif)\r\n\r\nNote that now that IE11 support is no longer necessary, there is a huge opportunity to refactor the block toolbar to leverage flex and remove all the gnarly margin rules on content inside, replace them entirely with `gap` and drastically simplifying things. But it's a larger undertaking, and this is a small fix in the mean time. \r\n\r\n## How has this been tested?\r\n\r\nInsert a block, select it, then press Escape. Observe the block icon and drag handle ideally overlapping precisely in both states.\r\n\r\n## Checklist:\r\n- [x] My code is tested.\r\n- [x] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [x] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [x] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [x] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [x] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [ ] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33890", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33890/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33890/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33890/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33890", + "id": 961486553, + "node_id": "MDExOlB1bGxSZXF1ZXN0NzA0NDE1MDI5", + "number": 33890, + "title": "Try to fix flaky customizer inspector test", + "user": { + "login": "kevin940726", + "id": 7753001, + "node_id": "MDQ6VXNlcjc3NTMwMDE=", + "avatar_url": "https://avatars.githubusercontent.com/u/7753001?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/kevin940726", + "html_url": "https://github.com/kevin940726", + "followers_url": "https://api.github.com/users/kevin940726/followers", + "following_url": "https://api.github.com/users/kevin940726/following{/other_user}", + "gists_url": "https://api.github.com/users/kevin940726/gists{/gist_id}", + "starred_url": "https://api.github.com/users/kevin940726/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/kevin940726/subscriptions", + "organizations_url": "https://api.github.com/users/kevin940726/orgs", + "repos_url": "https://api.github.com/users/kevin940726/repos", + "events_url": "https://api.github.com/users/kevin940726/events{/privacy}", + "received_events_url": "https://api.github.com/users/kevin940726/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 2632875097, + "node_id": "MDU6TGFiZWwyNjMyODc1MDk3", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Feature]%20Widgets%20Customizer", + "name": "[Feature] Widgets Customizer", + "color": "fbca04", + "default": false, + "description": "Ability to add and edit blocks in Customize → Widgets." + } + ], + "state": "closed", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 4, + "created_at": "2021-08-05T06:20:38Z", + "updated_at": "2021-08-10T05:34:47Z", + "closed_at": "2021-08-05T07:50:06Z", + "author_association": "MEMBER", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33890", + "html_url": "https://github.com/WordPress/gutenberg/pull/33890", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33890.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33890.patch" + }, + "body": "<!-- Learn the overall process and best practices for pull requests at https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/repository-management.md#pull-requests. -->\r\n\r\n<!-- Gutenberg's license is in the process of updating to be dual-licensed under the GPL and MPL. As part of that transition, all new contributions are dual-licensed. For more information, see: https://github.com/WordPress/gutenberg/blob/trunk/LICENSE.md -->\r\n\r\n## Description\r\n<!-- Please describe what you have changed or added -->\r\nAlternative to #33875, part of #33275.\r\n\r\nDuring closing the inspector and going back to the editor, the transition is making the blocks positioning in an intermediate state. Since the toolbar is still opened, it could sometimes also be positioned in the wrong place according to intermediate state of the block.\r\n\r\nThis PR waits for the transition to finish (200ms). A better alternative could be:\r\n1. Disable the transitions in tests (#32024)\r\n2. Delay showing the block toolbar until the transition is finished\r\n\r\n## How has this been tested?\r\n<!-- Please describe in detail how you tested your changes. -->\r\n<!-- Include details of your testing environment, tests ran to see how -->\r\n<!-- your change affects other areas of the code, etc. -->\r\nNot yet found a reliable way to reproduce the issue, so maybe we just have to merge this and monitor it on trunk.\r\n\r\n## Types of changes\r\n<!-- What types of changes does your code introduce? -->\r\n<!-- Bug fix (non-breaking change which fixes an issue) -->\r\n<!-- New feature (non-breaking change which adds functionality) -->\r\n<!-- Breaking change (fix or feature that would cause existing functionality to not work as expected) -->\r\nBug fix\r\n\r\n## Checklist:\r\n- [ ] My code is tested.\r\n- [ ] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [ ] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [ ] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [ ] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [ ] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [ ] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33882", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33882/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33882/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33882/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33882", + "id": 960645484, + "node_id": "MDExOlB1bGxSZXF1ZXN0NzAzNjQ4ODYy", + "number": 33882, + "title": "Components utils: `rtl()` return type, `rtl.watch()` utility", + "user": { + "login": "ciampo", + "id": 1083581, + "node_id": "MDQ6VXNlcjEwODM1ODE=", + "avatar_url": "https://avatars.githubusercontent.com/u/1083581?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/ciampo", + "html_url": "https://github.com/ciampo", + "followers_url": "https://api.github.com/users/ciampo/followers", + "following_url": "https://api.github.com/users/ciampo/following{/other_user}", + "gists_url": "https://api.github.com/users/ciampo/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ciampo/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ciampo/subscriptions", + "organizations_url": "https://api.github.com/users/ciampo/orgs", + "repos_url": "https://api.github.com/users/ciampo/repos", + "events_url": "https://api.github.com/users/ciampo/events{/privacy}", + "received_events_url": "https://api.github.com/users/ciampo/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 930001208, + "node_id": "MDU6TGFiZWw5MzAwMDEyMDg=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Code%20Quality", + "name": "[Type] Code Quality", + "color": "e5e04b", + "default": false, + "description": "Gotta shave those yaks." + }, + { + "id": 997392122, + "node_id": "MDU6TGFiZWw5OTczOTIxMjI=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Package]%20Components", + "name": "[Package] Components", + "color": "ed2572", + "default": false, + "description": "/packages/components" + }, + { + "id": 2555015900, + "node_id": "MDU6TGFiZWwyNTU1MDE1OTAw", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Feature]%20Component%20System", + "name": "[Feature] Component System", + "color": "fbca04", + "default": false, + "description": "The next iteration on WordPress Components." + } + ], + "state": "closed", + "locked": false, + "assignee": { + "login": "ciampo", + "id": 1083581, + "node_id": "MDQ6VXNlcjEwODM1ODE=", + "avatar_url": "https://avatars.githubusercontent.com/u/1083581?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/ciampo", + "html_url": "https://github.com/ciampo", + "followers_url": "https://api.github.com/users/ciampo/followers", + "following_url": "https://api.github.com/users/ciampo/following{/other_user}", + "gists_url": "https://api.github.com/users/ciampo/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ciampo/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ciampo/subscriptions", + "organizations_url": "https://api.github.com/users/ciampo/orgs", + "repos_url": "https://api.github.com/users/ciampo/repos", + "events_url": "https://api.github.com/users/ciampo/events{/privacy}", + "received_events_url": "https://api.github.com/users/ciampo/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "ciampo", + "id": 1083581, + "node_id": "MDQ6VXNlcjEwODM1ODE=", + "avatar_url": "https://avatars.githubusercontent.com/u/1083581?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/ciampo", + "html_url": "https://github.com/ciampo", + "followers_url": "https://api.github.com/users/ciampo/followers", + "following_url": "https://api.github.com/users/ciampo/following{/other_user}", + "gists_url": "https://api.github.com/users/ciampo/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ciampo/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ciampo/subscriptions", + "organizations_url": "https://api.github.com/users/ciampo/orgs", + "repos_url": "https://api.github.com/users/ciampo/repos", + "events_url": "https://api.github.com/users/ciampo/events{/privacy}", + "received_events_url": "https://api.github.com/users/ciampo/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 1, + "created_at": "2021-08-04T15:39:13Z", + "updated_at": "2021-08-04T16:27:21Z", + "closed_at": "2021-08-04T16:26:56Z", + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33882", + "html_url": "https://github.com/WordPress/gutenberg/pull/33882", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33882.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33882.patch" + }, + "body": "<!-- Learn the overall process and best practices for pull requests at https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/repository-management.md#pull-requests. -->\r\n\r\n<!-- Gutenberg's license is in the process of updating to be dual-licensed under the GPL and MPL. As part of that transition, all new contributions are dual-licensed. For more information, see: https://github.com/WordPress/gutenberg/blob/trunk/LICENSE.md -->\r\n\r\n## Description\r\n<!-- Please describe what you have changed or added -->\r\n\r\n- Improve return type of the `rtl()` utility function\r\n- Add the `rtl.watch()` function, useful when in need of observing LTR/RTL locale changes\r\n\r\n## How has this been tested?\r\n<!-- Please describe in detail how you tested your changes. -->\r\n<!-- Include details of your testing environment, tests ran to see how -->\r\n<!-- your change affects other areas of the code, etc. -->\r\n\r\nNo runtime changes, the project builds correctly.\r\n\r\n## Screenshots <!-- if applicable -->\r\n\r\nN/A\r\n\r\n## Types of changes\r\n<!-- What types of changes does your code introduce? -->\r\n<!-- Bug fix (non-breaking change which fixes an issue) -->\r\n<!-- New feature (non-breaking change which adds functionality) -->\r\n<!-- Breaking change (fix or feature that would cause existing functionality to not work as expected) -->\r\n\r\n## Checklist:\r\n- [x] My code is tested.\r\n- [x] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [x] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- N/A I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [x] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [x] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- N/A I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33880", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33880/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33880/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33880/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33880", + "id": 960622372, + "node_id": "MDExOlB1bGxSZXF1ZXN0NzAzNjI3NTEz", + "number": 33880, + "title": "Docs: add more details about block attributes", + "user": { + "login": "johngodley", + "id": 1277682, + "node_id": "MDQ6VXNlcjEyNzc2ODI=", + "avatar_url": "https://avatars.githubusercontent.com/u/1277682?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/johngodley", + "html_url": "https://github.com/johngodley", + "followers_url": "https://api.github.com/users/johngodley/followers", + "following_url": "https://api.github.com/users/johngodley/following{/other_user}", + "gists_url": "https://api.github.com/users/johngodley/gists{/gist_id}", + "starred_url": "https://api.github.com/users/johngodley/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/johngodley/subscriptions", + "organizations_url": "https://api.github.com/users/johngodley/orgs", + "repos_url": "https://api.github.com/users/johngodley/repos", + "events_url": "https://api.github.com/users/johngodley/events{/privacy}", + "received_events_url": "https://api.github.com/users/johngodley/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 546156315, + "node_id": "MDU6TGFiZWw1NDYxNTYzMTU=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Feature]%20Block%20API", + "name": "[Feature] Block API", + "color": "fbca04", + "default": false, + "description": "" + }, + { + "id": 567484057, + "node_id": "MDU6TGFiZWw1Njc0ODQwNTc=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Documentation", + "name": "[Type] Documentation", + "color": "bfd4f2", + "default": false, + "description": "" + }, + { + "id": 587343997, + "node_id": "MDU6TGFiZWw1ODczNDM5OTc=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Status]%20In%20Progress", + "name": "[Status] In Progress", + "color": "0052cc", + "default": false, + "description": "Tracking issues with work in progress" + } + ], + "state": "closed", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 0, + "created_at": "2021-08-04T15:23:25Z", + "updated_at": "2021-08-09T09:41:58Z", + "closed_at": "2021-08-09T09:41:36Z", + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33880", + "html_url": "https://github.com/WordPress/gutenberg/pull/33880", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33880.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33880.patch" + }, + "body": "## Description\r\nThe block attributes documentation is a bit sparse on details, and I usually end up looking at core blocks for help.\r\n\r\nThis adds a lot more detail, with examples that show the block attributes, the HTML, and the attributes parsed from it.\r\n\r\nIt also includes the `enum` attribute type.\r\n\r\nI've removed the link to the WP REST API documentation as it contains PHP details, and just seems a confusing link.\r\n\r\n## Types of changes\r\nDocumentation update only.\r\n\r\n## Checklist:\r\n- [ ] My code is tested.\r\n- [ ] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [ ] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [ ] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [ ] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [ ] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [ ] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33870", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33870/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33870/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33870/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33870", + "id": 960382736, + "node_id": "MDExOlB1bGxSZXF1ZXN0NzAzNDEwOTY1", + "number": 33870, + "title": "Mobile Release v1.58.2", + "user": { + "login": "SiobhyB", + "id": 2998162, + "node_id": "MDQ6VXNlcjI5OTgxNjI=", + "avatar_url": "https://avatars.githubusercontent.com/u/2998162?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/SiobhyB", + "html_url": "https://github.com/SiobhyB", + "followers_url": "https://api.github.com/users/SiobhyB/followers", + "following_url": "https://api.github.com/users/SiobhyB/following{/other_user}", + "gists_url": "https://api.github.com/users/SiobhyB/gists{/gist_id}", + "starred_url": "https://api.github.com/users/SiobhyB/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/SiobhyB/subscriptions", + "organizations_url": "https://api.github.com/users/SiobhyB/orgs", + "repos_url": "https://api.github.com/users/SiobhyB/repos", + "events_url": "https://api.github.com/users/SiobhyB/events{/privacy}", + "received_events_url": "https://api.github.com/users/SiobhyB/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 982506020, + "node_id": "MDU6TGFiZWw5ODI1MDYwMjA=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/Mobile%20App%20-%20i.e.%20Android%20or%20iOS", + "name": "Mobile App - i.e. Android or iOS", + "color": "a3ef7a", + "default": false, + "description": "Native mobile impl of the block editor. (Note: used in scripts, ping mobile folks to change)" + } + ], + "state": "closed", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 1, + "created_at": "2021-08-04T12:39:09Z", + "updated_at": "2021-08-04T18:26:53Z", + "closed_at": "2021-08-04T18:26:27Z", + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33870", + "html_url": "https://github.com/WordPress/gutenberg/pull/33870", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33870.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33870.patch" + }, + "body": "## Description\nRelease 1.58.2 of the react-native-editor and Gutenberg-Mobile.\n\nFor more information about this release and testing instructions, please see the related Gutenberg-Mobile PR: https://github.com/wordpress-mobile/gutenberg-mobile/pull/3795\n\n## Checklist:\n- [x] My code is tested.\n- [x] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\n- [x] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\n- [x] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\n- [x] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\n- [x] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\n- [x] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33868", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33868/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33868/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33868/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33868", + "id": 960259006, + "node_id": "MDExOlB1bGxSZXF1ZXN0NzAzMjk3NTg2", + "number": 33868, + "title": "Lazy render the inserter search results", + "user": { + "login": "youknowriad", + "id": 272444, + "node_id": "MDQ6VXNlcjI3MjQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/272444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/youknowriad", + "html_url": "https://github.com/youknowriad", + "followers_url": "https://api.github.com/users/youknowriad/followers", + "following_url": "https://api.github.com/users/youknowriad/following{/other_user}", + "gists_url": "https://api.github.com/users/youknowriad/gists{/gist_id}", + "starred_url": "https://api.github.com/users/youknowriad/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/youknowriad/subscriptions", + "organizations_url": "https://api.github.com/users/youknowriad/orgs", + "repos_url": "https://api.github.com/users/youknowriad/repos", + "events_url": "https://api.github.com/users/youknowriad/events{/privacy}", + "received_events_url": "https://api.github.com/users/youknowriad/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 596962434, + "node_id": "MDU6TGFiZWw1OTY5NjI0MzQ=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Feature]%20Inserter", + "name": "[Feature] Inserter", + "color": "fbca04", + "default": false, + "description": "" + }, + { + "id": 731693674, + "node_id": "MDU6TGFiZWw3MzE2OTM2NzQ=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Performance", + "name": "[Type] Performance", + "color": "f3f4fe", + "default": false, + "description": "" + } + ], + "state": "closed", + "locked": false, + "assignee": { + "login": "youknowriad", + "id": 272444, + "node_id": "MDQ6VXNlcjI3MjQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/272444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/youknowriad", + "html_url": "https://github.com/youknowriad", + "followers_url": "https://api.github.com/users/youknowriad/followers", + "following_url": "https://api.github.com/users/youknowriad/following{/other_user}", + "gists_url": "https://api.github.com/users/youknowriad/gists{/gist_id}", + "starred_url": "https://api.github.com/users/youknowriad/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/youknowriad/subscriptions", + "organizations_url": "https://api.github.com/users/youknowriad/orgs", + "repos_url": "https://api.github.com/users/youknowriad/repos", + "events_url": "https://api.github.com/users/youknowriad/events{/privacy}", + "received_events_url": "https://api.github.com/users/youknowriad/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "youknowriad", + "id": 272444, + "node_id": "MDQ6VXNlcjI3MjQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/272444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/youknowriad", + "html_url": "https://github.com/youknowriad", + "followers_url": "https://api.github.com/users/youknowriad/followers", + "following_url": "https://api.github.com/users/youknowriad/following{/other_user}", + "gists_url": "https://api.github.com/users/youknowriad/gists{/gist_id}", + "starred_url": "https://api.github.com/users/youknowriad/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/youknowriad/subscriptions", + "organizations_url": "https://api.github.com/users/youknowriad/orgs", + "repos_url": "https://api.github.com/users/youknowriad/repos", + "events_url": "https://api.github.com/users/youknowriad/events{/privacy}", + "received_events_url": "https://api.github.com/users/youknowriad/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 3, + "created_at": "2021-08-04T11:03:08Z", + "updated_at": "2021-08-05T08:07:57Z", + "closed_at": "2021-08-05T07:50:44Z", + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33868", + "html_url": "https://github.com/WordPress/gutenberg/pull/33868", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33868.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33868.patch" + }, + "body": "This PR tries to improve the feeling of responsiveness in the inserter when searching block types and patterns. It does this by lazy-rendering the search results. It adds a `step` config into the `useAsyncList` hook to render the block types 9 by 9.", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33866", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33866/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33866/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33866/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33866", + "id": 960025040, + "node_id": "MDExOlB1bGxSZXF1ZXN0NzAzMDg1NzA3", + "number": 33866, + "title": "Tune appender margin.", + "user": { + "login": "jasmussen", + "id": 1204802, + "node_id": "MDQ6VXNlcjEyMDQ4MDI=", + "avatar_url": "https://avatars.githubusercontent.com/u/1204802?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jasmussen", + "html_url": "https://github.com/jasmussen", + "followers_url": "https://api.github.com/users/jasmussen/followers", + "following_url": "https://api.github.com/users/jasmussen/following{/other_user}", + "gists_url": "https://api.github.com/users/jasmussen/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jasmussen/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jasmussen/subscriptions", + "organizations_url": "https://api.github.com/users/jasmussen/orgs", + "repos_url": "https://api.github.com/users/jasmussen/repos", + "events_url": "https://api.github.com/users/jasmussen/events{/privacy}", + "received_events_url": "https://api.github.com/users/jasmussen/received_events", + "type": "User", + "site_admin": false + }, + "labels": [], + "state": "closed", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 3, + "created_at": "2021-08-04T07:57:20Z", + "updated_at": "2021-08-04T15:16:44Z", + "closed_at": "2021-08-04T15:16:18Z", + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33866", + "html_url": "https://github.com/WordPress/gutenberg/pull/33866", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33866.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33866.patch" + }, + "body": "## Description\r\n\r\nFollowup to #33739. There was a teeeeensy side effect of the uniform 8px margin around the appender. Specifically that it in some cases made the height of blocks larger. See here how the navigation block grows 4px taller on select:\r\n\r\n![before](https://user-images.githubusercontent.com/1204802/128143618-5cfb57b0-070f-4e2e-8224-c1ebab0faa64.gif)\r\n\r\nThat's because the 24px image plus 2x8px margins comes to 40px, but in this theme the menu is 36px tall by default.\r\n\r\nThis PR mitigates that by removing the top/bottom margin:\r\n\r\n![after](https://user-images.githubusercontent.com/1204802/128143703-b6a5d8bf-0020-4529-a0e5-32f96a9d5502.gif)\r\n\r\nI say _mitigates_ because if the menu is <24px tall the appender would still make it bigger. That's a separate and bigger issue to solve (see conversation in #31886). But it still seems like a good, small improvement. The appender is still vertically centered due to the flex rules.\r\n\r\n## How has this been tested?\r\n\r\nInsert social links, buttons, navigation blocks, and verify the appender on select still looks good.\r\n\r\n## Checklist:\r\n- [x] My code is tested.\r\n- [x] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [x] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [x] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [x] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [x] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [ ] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33863", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33863/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33863/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33863/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33863", + "id": 959775425, + "node_id": "MDExOlB1bGxSZXF1ZXN0NzAyODY0MTgw", + "number": 33863, + "title": "Image Block: Fix issue with canInsertCover not being set to false for empty arrays", + "user": { + "login": "glendaviesnz", + "id": 3629020, + "node_id": "MDQ6VXNlcjM2MjkwMjA=", + "avatar_url": "https://avatars.githubusercontent.com/u/3629020?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/glendaviesnz", + "html_url": "https://github.com/glendaviesnz", + "followers_url": "https://api.github.com/users/glendaviesnz/followers", + "following_url": "https://api.github.com/users/glendaviesnz/following{/other_user}", + "gists_url": "https://api.github.com/users/glendaviesnz/gists{/gist_id}", + "starred_url": "https://api.github.com/users/glendaviesnz/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/glendaviesnz/subscriptions", + "organizations_url": "https://api.github.com/users/glendaviesnz/orgs", + "repos_url": "https://api.github.com/users/glendaviesnz/repos", + "events_url": "https://api.github.com/users/glendaviesnz/events{/privacy}", + "received_events_url": "https://api.github.com/users/glendaviesnz/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 531680823, + "node_id": "MDU6TGFiZWw1MzE2ODA4MjM=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Bug", + "name": "[Type] Bug", + "color": "d93f0b", + "default": false, + "description": "An existing feature is broken." + }, + { + "id": 1101518360, + "node_id": "MDU6TGFiZWwxMTAxNTE4MzYw", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Block]%20Image", + "name": "[Block] Image", + "color": "6767e5", + "default": false, + "description": "" + } + ], + "state": "closed", + "locked": false, + "assignee": { + "login": "glendaviesnz", + "id": 3629020, + "node_id": "MDQ6VXNlcjM2MjkwMjA=", + "avatar_url": "https://avatars.githubusercontent.com/u/3629020?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/glendaviesnz", + "html_url": "https://github.com/glendaviesnz", + "followers_url": "https://api.github.com/users/glendaviesnz/followers", + "following_url": "https://api.github.com/users/glendaviesnz/following{/other_user}", + "gists_url": "https://api.github.com/users/glendaviesnz/gists{/gist_id}", + "starred_url": "https://api.github.com/users/glendaviesnz/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/glendaviesnz/subscriptions", + "organizations_url": "https://api.github.com/users/glendaviesnz/orgs", + "repos_url": "https://api.github.com/users/glendaviesnz/repos", + "events_url": "https://api.github.com/users/glendaviesnz/events{/privacy}", + "received_events_url": "https://api.github.com/users/glendaviesnz/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "glendaviesnz", + "id": 3629020, + "node_id": "MDQ6VXNlcjM2MjkwMjA=", + "avatar_url": "https://avatars.githubusercontent.com/u/3629020?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/glendaviesnz", + "html_url": "https://github.com/glendaviesnz", + "followers_url": "https://api.github.com/users/glendaviesnz/followers", + "following_url": "https://api.github.com/users/glendaviesnz/following{/other_user}", + "gists_url": "https://api.github.com/users/glendaviesnz/gists{/gist_id}", + "starred_url": "https://api.github.com/users/glendaviesnz/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/glendaviesnz/subscriptions", + "organizations_url": "https://api.github.com/users/glendaviesnz/orgs", + "repos_url": "https://api.github.com/users/glendaviesnz/repos", + "events_url": "https://api.github.com/users/glendaviesnz/events{/privacy}", + "received_events_url": "https://api.github.com/users/glendaviesnz/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 2, + "created_at": "2021-08-04T01:50:04Z", + "updated_at": "2021-08-04T03:08:43Z", + "closed_at": "2021-08-04T03:08:11Z", + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33863", + "html_url": "https://github.com/WordPress/gutenberg/pull/33863", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33863.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33863.patch" + }, + "body": "## Description\r\nThe canInsertCover value in the Image block is being set to 0 instead of false when `transformations` is an empty array, which causes its subsequent use in the conditional display of the coverblock conversion toolbar item to output a 0, instead of moving in to the right most criteria\r\n\r\nFixes: #33862\r\n\r\n## Testing\r\n\r\nCheck out PR in local dev env and add an Image block and make sure the convert to cover block option displays in toolbar still as expected\r\nCheck out this PR in conjunction with the Gallery refactor PR and enable the Gallery experiment\r\nAdd a gallery and make sure that the cover block option is not in the toolbar, and no 0 is displaying\r\n\r\n\r\n## Screenshots \r\n\r\nBefore:\r\n<img width=\"698\" alt=\"Screen Shot 2021-08-04 at 1 49 19 PM\" src=\"https://user-images.githubusercontent.com/3629020/128109031-6770603c-fa32-48b1-bae0-0df060dd79fd.png\">\r\n\r\nAfter:\r\n<img width=\"686\" alt=\"Screen Shot 2021-08-04 at 1 48 38 PM\" src=\"https://user-images.githubusercontent.com/3629020/128109044-353abe67-dcaf-4066-b065-ad1d0f534e82.png\">\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33860", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33860/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33860/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33860/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33860", + "id": 959604194, + "node_id": "MDExOlB1bGxSZXF1ZXN0NzAyNzAzNDE2", + "number": 33860, + "title": "Correct spelling and grammar in documentation", + "user": { + "login": "jeremyfelt", + "id": 286171, + "node_id": "MDQ6VXNlcjI4NjE3MQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/286171?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jeremyfelt", + "html_url": "https://github.com/jeremyfelt", + "followers_url": "https://api.github.com/users/jeremyfelt/followers", + "following_url": "https://api.github.com/users/jeremyfelt/following{/other_user}", + "gists_url": "https://api.github.com/users/jeremyfelt/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jeremyfelt/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jeremyfelt/subscriptions", + "organizations_url": "https://api.github.com/users/jeremyfelt/orgs", + "repos_url": "https://api.github.com/users/jeremyfelt/repos", + "events_url": "https://api.github.com/users/jeremyfelt/events{/privacy}", + "received_events_url": "https://api.github.com/users/jeremyfelt/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 567484057, + "node_id": "MDU6TGFiZWw1Njc0ODQwNTc=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Documentation", + "name": "[Type] Documentation", + "color": "bfd4f2", + "default": false, + "description": "" + } + ], + "state": "closed", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 0, + "created_at": "2021-08-03T23:03:58Z", + "updated_at": "2021-08-04T05:03:25Z", + "closed_at": "2021-08-04T05:03:03Z", + "author_association": "MEMBER", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33860", + "html_url": "https://github.com/WordPress/gutenberg/pull/33860", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33860.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33860.patch" + }, + "body": "## Description\r\n\r\n* \"theme\" should be \"them\" in this instance\r\n* \"supports\" should be \"support\" because of the plural \"Pages and Custom Post Types\"\r\n\r\n## Types of changes\r\nDocumentation\r\n\r\n## Checklist:\r\n- [ ] My code is tested.\r\n- [ ] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [ ] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [ ] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [ ] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [ ] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [ ] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33848", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33848/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33848/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33848/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33848", + "id": 959120665, + "node_id": "MDExOlB1bGxSZXF1ZXN0NzAyMjg0MzM0", + "number": 33848, + "title": "Add search performance measure and make other measures more stable", + "user": { + "login": "youknowriad", + "id": 272444, + "node_id": "MDQ6VXNlcjI3MjQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/272444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/youknowriad", + "html_url": "https://github.com/youknowriad", + "followers_url": "https://api.github.com/users/youknowriad/followers", + "following_url": "https://api.github.com/users/youknowriad/following{/other_user}", + "gists_url": "https://api.github.com/users/youknowriad/gists{/gist_id}", + "starred_url": "https://api.github.com/users/youknowriad/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/youknowriad/subscriptions", + "organizations_url": "https://api.github.com/users/youknowriad/orgs", + "repos_url": "https://api.github.com/users/youknowriad/repos", + "events_url": "https://api.github.com/users/youknowriad/events{/privacy}", + "received_events_url": "https://api.github.com/users/youknowriad/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 615503111, + "node_id": "MDU6TGFiZWw2MTU1MDMxMTE=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/Automated%20Testing", + "name": "Automated Testing", + "color": "111111", + "default": false, + "description": "Testing infrastructure changes impacting the execution of end-to-end (E2E) and/or unit tests." + }, + { + "id": 731693674, + "node_id": "MDU6TGFiZWw3MzE2OTM2NzQ=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Performance", + "name": "[Type] Performance", + "color": "f3f4fe", + "default": false, + "description": "" + } + ], + "state": "closed", + "locked": false, + "assignee": { + "login": "youknowriad", + "id": 272444, + "node_id": "MDQ6VXNlcjI3MjQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/272444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/youknowriad", + "html_url": "https://github.com/youknowriad", + "followers_url": "https://api.github.com/users/youknowriad/followers", + "following_url": "https://api.github.com/users/youknowriad/following{/other_user}", + "gists_url": "https://api.github.com/users/youknowriad/gists{/gist_id}", + "starred_url": "https://api.github.com/users/youknowriad/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/youknowriad/subscriptions", + "organizations_url": "https://api.github.com/users/youknowriad/orgs", + "repos_url": "https://api.github.com/users/youknowriad/repos", + "events_url": "https://api.github.com/users/youknowriad/events{/privacy}", + "received_events_url": "https://api.github.com/users/youknowriad/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "youknowriad", + "id": 272444, + "node_id": "MDQ6VXNlcjI3MjQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/272444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/youknowriad", + "html_url": "https://github.com/youknowriad", + "followers_url": "https://api.github.com/users/youknowriad/followers", + "following_url": "https://api.github.com/users/youknowriad/following{/other_user}", + "gists_url": "https://api.github.com/users/youknowriad/gists{/gist_id}", + "starred_url": "https://api.github.com/users/youknowriad/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/youknowriad/subscriptions", + "organizations_url": "https://api.github.com/users/youknowriad/orgs", + "repos_url": "https://api.github.com/users/youknowriad/repos", + "events_url": "https://api.github.com/users/youknowriad/events{/privacy}", + "received_events_url": "https://api.github.com/users/youknowriad/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 1, + "created_at": "2021-08-03T13:30:59Z", + "updated_at": "2021-08-06T11:54:26Z", + "closed_at": "2021-08-04T09:40:11Z", + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33848", + "html_url": "https://github.com/WordPress/gutenberg/pull/33848", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33848.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33848.patch" + }, + "body": "I noticed lags when searching the block inserter. I'd like to try some iterations to improve that (maybe using the same technique used for the regular inserter block list: lazy rendering).\r\n\r\nBefore jumping into the performance work, I'm adding a new performance measure here to track the time it takes for the browser to respond after an inserter search.\r\n\r\nI'm also using this as an opportunity to make the other measures a bit more stable.", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33847", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33847/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33847/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33847/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33847", + "id": 959087985, + "node_id": "MDExOlB1bGxSZXF1ZXN0NzAyMjU2MDk4", + "number": 33847, + "title": "[RNMobile] Disables supportsLayout by default on mobile", + "user": { + "login": "antonis", + "id": 304044, + "node_id": "MDQ6VXNlcjMwNDA0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/304044?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/antonis", + "html_url": "https://github.com/antonis", + "followers_url": "https://api.github.com/users/antonis/followers", + "following_url": "https://api.github.com/users/antonis/following{/other_user}", + "gists_url": "https://api.github.com/users/antonis/gists{/gist_id}", + "starred_url": "https://api.github.com/users/antonis/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/antonis/subscriptions", + "organizations_url": "https://api.github.com/users/antonis/orgs", + "repos_url": "https://api.github.com/users/antonis/repos", + "events_url": "https://api.github.com/users/antonis/events{/privacy}", + "received_events_url": "https://api.github.com/users/antonis/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 531680823, + "node_id": "MDU6TGFiZWw1MzE2ODA4MjM=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Bug", + "name": "[Type] Bug", + "color": "d93f0b", + "default": false, + "description": "An existing feature is broken." + } + ], + "state": "closed", + "locked": false, + "assignee": { + "login": "antonis", + "id": 304044, + "node_id": "MDQ6VXNlcjMwNDA0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/304044?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/antonis", + "html_url": "https://github.com/antonis", + "followers_url": "https://api.github.com/users/antonis/followers", + "following_url": "https://api.github.com/users/antonis/following{/other_user}", + "gists_url": "https://api.github.com/users/antonis/gists{/gist_id}", + "starred_url": "https://api.github.com/users/antonis/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/antonis/subscriptions", + "organizations_url": "https://api.github.com/users/antonis/orgs", + "repos_url": "https://api.github.com/users/antonis/repos", + "events_url": "https://api.github.com/users/antonis/events{/privacy}", + "received_events_url": "https://api.github.com/users/antonis/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "antonis", + "id": 304044, + "node_id": "MDQ6VXNlcjMwNDA0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/304044?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/antonis", + "html_url": "https://github.com/antonis", + "followers_url": "https://api.github.com/users/antonis/followers", + "following_url": "https://api.github.com/users/antonis/following{/other_user}", + "gists_url": "https://api.github.com/users/antonis/gists{/gist_id}", + "starred_url": "https://api.github.com/users/antonis/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/antonis/subscriptions", + "organizations_url": "https://api.github.com/users/antonis/orgs", + "repos_url": "https://api.github.com/users/antonis/repos", + "events_url": "https://api.github.com/users/antonis/events{/privacy}", + "received_events_url": "https://api.github.com/users/antonis/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 3, + "created_at": "2021-08-03T12:55:37Z", + "updated_at": "2021-08-04T12:13:20Z", + "closed_at": "2021-08-04T06:27:50Z", + "author_association": "MEMBER", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33847", + "html_url": "https://github.com/WordPress/gutenberg/pull/33847", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33847.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33847.patch" + }, + "body": "## Description\r\nThis PR handles an incoming breakage after the merge of https://github.com/WordPress/gutenberg/pull/33359 making the `Wide width` and `Full width` alignment options unavailable. To achieve this the `supportsLayout` setting introduced in https://github.com/WordPress/gutenberg/pull/29335 is set by default to `false` on mobile. \r\n\r\n## How has this been tested?\r\n1. Run the app using metro\r\n2. Create a new Post/Page\r\n3. Add an image block and choose an image\r\n4. Tap on the alignment options at the bottom toolbar\r\n5. **Verify** that the `Wide width` and `Full width` options are available\r\n\r\n## Screenshots\r\n\r\n|Before|After|\r\n|---|---|\r\n|![IMG_20BE77E7CBA5-1](https://user-images.githubusercontent.com/304044/128035883-b043290f-1bb4-4e28-8550-90d620333695.jpeg)|![IMG_675ABFF98181-1](https://user-images.githubusercontent.com/304044/128035895-d2706b23-f164-40f5-9b30-7006ae270917.jpeg)|\r\n\r\n## Types of changes\r\nBug fix\r\n\r\n## Checklist:\r\n- [x] My code is tested.\r\n- [x] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [x] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [x] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [x] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [x] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [x] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33845", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33845/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33845/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33845/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33845", + "id": 959073850, + "node_id": "MDExOlB1bGxSZXF1ZXN0NzAyMjQzOTAy", + "number": 33845, + "title": "[RNMobile] Fix BottomSheet.SubSheet/TextInput Conflict", + "user": { + "login": "SiobhyB", + "id": 2998162, + "node_id": "MDQ6VXNlcjI5OTgxNjI=", + "avatar_url": "https://avatars.githubusercontent.com/u/2998162?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/SiobhyB", + "html_url": "https://github.com/SiobhyB", + "followers_url": "https://api.github.com/users/SiobhyB/followers", + "following_url": "https://api.github.com/users/SiobhyB/following{/other_user}", + "gists_url": "https://api.github.com/users/SiobhyB/gists{/gist_id}", + "starred_url": "https://api.github.com/users/SiobhyB/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/SiobhyB/subscriptions", + "organizations_url": "https://api.github.com/users/SiobhyB/orgs", + "repos_url": "https://api.github.com/users/SiobhyB/repos", + "events_url": "https://api.github.com/users/SiobhyB/events{/privacy}", + "received_events_url": "https://api.github.com/users/SiobhyB/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 531680823, + "node_id": "MDU6TGFiZWw1MzE2ODA4MjM=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Bug", + "name": "[Type] Bug", + "color": "d93f0b", + "default": false, + "description": "An existing feature is broken." + }, + { + "id": 982506020, + "node_id": "MDU6TGFiZWw5ODI1MDYwMjA=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/Mobile%20App%20-%20i.e.%20Android%20or%20iOS", + "name": "Mobile App - i.e. Android or iOS", + "color": "a3ef7a", + "default": false, + "description": "Native mobile impl of the block editor. (Note: used in scripts, ping mobile folks to change)" + }, + { + "id": 1101518360, + "node_id": "MDU6TGFiZWwxMTAxNTE4MzYw", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Block]%20Image", + "name": "[Block] Image", + "color": "6767e5", + "default": false, + "description": "" + } + ], + "state": "closed", + "locked": false, + "assignee": { + "login": "SiobhyB", + "id": 2998162, + "node_id": "MDQ6VXNlcjI5OTgxNjI=", + "avatar_url": "https://avatars.githubusercontent.com/u/2998162?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/SiobhyB", + "html_url": "https://github.com/SiobhyB", + "followers_url": "https://api.github.com/users/SiobhyB/followers", + "following_url": "https://api.github.com/users/SiobhyB/following{/other_user}", + "gists_url": "https://api.github.com/users/SiobhyB/gists{/gist_id}", + "starred_url": "https://api.github.com/users/SiobhyB/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/SiobhyB/subscriptions", + "organizations_url": "https://api.github.com/users/SiobhyB/orgs", + "repos_url": "https://api.github.com/users/SiobhyB/repos", + "events_url": "https://api.github.com/users/SiobhyB/events{/privacy}", + "received_events_url": "https://api.github.com/users/SiobhyB/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "SiobhyB", + "id": 2998162, + "node_id": "MDQ6VXNlcjI5OTgxNjI=", + "avatar_url": "https://avatars.githubusercontent.com/u/2998162?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/SiobhyB", + "html_url": "https://github.com/SiobhyB", + "followers_url": "https://api.github.com/users/SiobhyB/followers", + "following_url": "https://api.github.com/users/SiobhyB/following{/other_user}", + "gists_url": "https://api.github.com/users/SiobhyB/gists{/gist_id}", + "starred_url": "https://api.github.com/users/SiobhyB/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/SiobhyB/subscriptions", + "organizations_url": "https://api.github.com/users/SiobhyB/orgs", + "repos_url": "https://api.github.com/users/SiobhyB/repos", + "events_url": "https://api.github.com/users/SiobhyB/events{/privacy}", + "received_events_url": "https://api.github.com/users/SiobhyB/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 3, + "created_at": "2021-08-03T12:37:52Z", + "updated_at": "2021-08-03T18:29:32Z", + "closed_at": "2021-08-03T18:29:00Z", + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33845", + "html_url": "https://github.com/WordPress/gutenberg/pull/33845", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33845.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33845.patch" + }, + "body": "Fixes: https://github.com/WordPress/gutenberg/issues/33828\r\n\r\n`gutenberg-mobile:` https://github.com/wordpress-mobile/gutenberg-mobile/pull/3784\r\n\r\n## Description\r\n\r\nAs outlined in https://github.com/WordPress/gutenberg/issues/33828, the text editor for adding alt text to an image (accessed from the image block's settings) isn't currently working as expected. At the time of writing, the keyboard is immediately dismissed with each keystroke, making it extremely difficult, bordering on impossible, to add alt text to an image.\r\n\r\n[BottomSheetTextControl](https://github.com/WordPress/gutenberg/tree/trunk/packages/components/src/mobile/bottom-sheet-text-control) is the component behind the image block's alt text settings and is built on [the BottomSheet.SubSheet component](https://github.com/WordPress/gutenberg/blob/trunk/packages/components/src/mobile/bottom-sheet/sub-sheet/index.native.js). There were changes to `BottomSheet.SubSheet` in https://github.com/WordPress/gutenberg/pull/33240/commits/d650b4f1df6e1699c7c45819a8afd4a2ec39a08e that led to a conflict with the `TextInput` component in `BottomSheetTextControl`, which brought this issue to the surface.\r\n\r\nWith this PR, I have refactored the changes in https://github.com/WordPress/gutenberg/pull/33240/commits/d650b4f1df6e1699c7c45819a8afd4a2ec39a08e in a way that enables the alt text entry to work as expected. \r\n\r\n## How has this been tested?\r\n\r\n### Test Case 1: Alt Text Settings\r\n\r\n<details>\r\n<summary>The following steps outline an approach to test that the original bug is fixed with this PR.</summary>\r\n\r\n1. Navigate to a new post then add an image block or tap on an existing one.\r\n2. Access the image block's settings by tapping the cog/gear icon. \r\n3. Tap **Alt Text** and confirm that a new sub sheet opens with a text editor.\r\n4. Enter a few lines into the text editor and confirm that it no longer closes with each keystroke.\r\n</details>\r\n\r\n### Test Case 2: Help Panel (Production Only)\r\n\r\n<details>\r\n<summary>As part of our testing, we should also verify that the new changes don't bring any unexpected side effects to other places where the component's used, such as the Help panel.</summary>\r\n\r\n* Run the demo app.\r\n* Open the menu on iOS by clicking the overflow menu icon in the ActionBar or by shaking the device on Android.\r\n* Tap **Help**. The main help topics bottom sheet should be displayed.\r\n* Tap one of the help topics and verify that the new sheet displays as expected.\r\n\r\n</details>\r\n\r\n### Test Case 3: Full Screen (Code Changes Required)\r\n\r\n<details>\r\n<summary>Lastly, we'll need to double-check that the \"isFullScreen\" parameter works as expected following the refactor. This will require code changes.</summary>\r\n\r\n* Find a component in the app where [the BottomSheet.SubSheet component](https://github.com/WordPress/gutenberg/blob/trunk/packages/components/src/mobile/bottom-sheet/sub-sheet/index.native.js) is being utilised, such as [the BottomSheetTextControl component](https://github.com/WordPress/gutenberg/blob/trunk/packages/components/src/mobile/bottom-sheet-text-control/index.native.js).\r\n* Add `isFullScreen={ true }` to the list of parameters being accepted by `BottomSheet.SubSheet`.\r\n* Navigate to the area in the app where the edited component is being used and verify that it's rendered as a sheet that takes up the full screen.\r\n</details>\r\n\r\n## Screenshots <!-- if applicable -->\r\n\r\nhttps://user-images.githubusercontent.com/2998162/128023488-cb4a35b3-34eb-4478-acf9-9e8835fc1ab3.mov\r\n\r\n## Types of changes\r\n\r\nBug fix (non-breaking change which fixes an issue), with the following high-level rundown of the main code changes:\r\n\r\n* The `setIsFullScreen( isFullScreen )` method was moved to [a standalone `useEffect` hook](https://github.com/WordPress/gutenberg/pull/33845/files#diff-d16d37d09ff59dce57c087e978ac5536503cb1642ec2b0ecdba9536f5c695b95R26), which fires only when [the values of either `showSheet` or `isFullScreen` change](https://github.com/WordPress/gutenberg/pull/33845/files#diff-d16d37d09ff59dce57c087e978ac5536503cb1642ec2b0ecdba9536f5c695b95R30).\r\n* Moving the method to the standalone hook meant [the BottomSheetScreen component could be removed](https://github.com/WordPress/gutenberg/pull/33845/files#diff-d16d37d09ff59dce57c087e978ac5536503cb1642ec2b0ecdba9536f5c695b95L20). It appeared to be the addition of this component that was causing a conflict with the `TextInput` component.\r\n\r\n## Checklist:\r\n- [x] My code is tested.\r\n- [x] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [x] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [x] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [x] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [x] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [x] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33844", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33844/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33844/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33844/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33844", + "id": 959026920, + "node_id": "MDExOlB1bGxSZXF1ZXN0NzAyMjAzOTQ5", + "number": 33844, + "title": "Global Styles: Fix Global Styles transient key clash", + "user": { + "login": "scruffian", + "id": 275961, + "node_id": "MDQ6VXNlcjI3NTk2MQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/275961?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/scruffian", + "html_url": "https://github.com/scruffian", + "followers_url": "https://api.github.com/users/scruffian/followers", + "following_url": "https://api.github.com/users/scruffian/following{/other_user}", + "gists_url": "https://api.github.com/users/scruffian/gists{/gist_id}", + "starred_url": "https://api.github.com/users/scruffian/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/scruffian/subscriptions", + "organizations_url": "https://api.github.com/users/scruffian/orgs", + "repos_url": "https://api.github.com/users/scruffian/repos", + "events_url": "https://api.github.com/users/scruffian/events{/privacy}", + "received_events_url": "https://api.github.com/users/scruffian/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 531680823, + "node_id": "MDU6TGFiZWw1MzE2ODA4MjM=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Bug", + "name": "[Type] Bug", + "color": "d93f0b", + "default": false, + "description": "An existing feature is broken." + }, + { + "id": 1800807983, + "node_id": "MDU6TGFiZWwxODAwODA3OTgz", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/Global%20Styles", + "name": "Global Styles", + "color": "2100b7", + "default": false, + "description": "" + } + ], + "state": "closed", + "locked": false, + "assignee": { + "login": "scruffian", + "id": 275961, + "node_id": "MDQ6VXNlcjI3NTk2MQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/275961?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/scruffian", + "html_url": "https://github.com/scruffian", + "followers_url": "https://api.github.com/users/scruffian/followers", + "following_url": "https://api.github.com/users/scruffian/following{/other_user}", + "gists_url": "https://api.github.com/users/scruffian/gists{/gist_id}", + "starred_url": "https://api.github.com/users/scruffian/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/scruffian/subscriptions", + "organizations_url": "https://api.github.com/users/scruffian/orgs", + "repos_url": "https://api.github.com/users/scruffian/repos", + "events_url": "https://api.github.com/users/scruffian/events{/privacy}", + "received_events_url": "https://api.github.com/users/scruffian/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "scruffian", + "id": 275961, + "node_id": "MDQ6VXNlcjI3NTk2MQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/275961?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/scruffian", + "html_url": "https://github.com/scruffian", + "followers_url": "https://api.github.com/users/scruffian/followers", + "following_url": "https://api.github.com/users/scruffian/following{/other_user}", + "gists_url": "https://api.github.com/users/scruffian/gists{/gist_id}", + "starred_url": "https://api.github.com/users/scruffian/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/scruffian/subscriptions", + "organizations_url": "https://api.github.com/users/scruffian/orgs", + "repos_url": "https://api.github.com/users/scruffian/repos", + "events_url": "https://api.github.com/users/scruffian/events{/privacy}", + "received_events_url": "https://api.github.com/users/scruffian/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 3, + "created_at": "2021-08-03T11:39:19Z", + "updated_at": "2021-08-06T09:42:45Z", + "closed_at": "2021-08-03T17:01:45Z", + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33844", + "html_url": "https://github.com/WordPress/gutenberg/pull/33844", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33844.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33844.patch" + }, + "body": "<!-- Learn the overall process and best practices for pull requests at https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/repository-management.md#pull-requests. -->\r\n\r\n<!-- Gutenberg's license is in the process of updating to be dual-licensed under the GPL and MPL. As part of that transition, all new contributions are dual-licensed. For more information, see: https://github.com/WordPress/gutenberg/blob/trunk/LICENSE.md -->\r\n\r\n## Description\r\nNow that we have a version of Global Styles in core, when you run the Gutenberg plugin activated, you're running a different version of Global Styles. However both versions currently use the same cache key. This means that once the core version of Global Styles has loaded and been cached, the Gutenberg version won't be generated since it will fall back to the same key.\r\n\r\nThis proposes that we introduce a new cache key for Global Styles in Gutenberg (`gutenberg_global_styles`) so that if you're running the Gutenberg plugin you will get the Gutenberg version of Global Styles.\r\n\r\nFixes https://github.com/WordPress/gutenberg/issues/33681\r\n\r\n## How has this been tested?\r\nTested changing fonts in Blockbase.\r\n\r\n## Screenshots <!-- if applicable -->\r\n\r\n## Types of changes\r\nBug fix (non-breaking change which fixes an issue)\r\n\r\n## Checklist:\r\n- [x] My code is tested.\r\n- [x] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [x] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [ ] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [ ] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [ ] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [ ] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33843", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33843/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33843/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33843/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33843", + "id": 959014817, + "node_id": "MDExOlB1bGxSZXF1ZXN0NzAyMTkzNzk2", + "number": 33843, + "title": "Navigation Editor: Avoid React warning when creating a new menu", + "user": { + "login": "Mamaduka", + "id": 240569, + "node_id": "MDQ6VXNlcjI0MDU2OQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/240569?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Mamaduka", + "html_url": "https://github.com/Mamaduka", + "followers_url": "https://api.github.com/users/Mamaduka/followers", + "following_url": "https://api.github.com/users/Mamaduka/following{/other_user}", + "gists_url": "https://api.github.com/users/Mamaduka/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Mamaduka/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Mamaduka/subscriptions", + "organizations_url": "https://api.github.com/users/Mamaduka/orgs", + "repos_url": "https://api.github.com/users/Mamaduka/repos", + "events_url": "https://api.github.com/users/Mamaduka/events{/privacy}", + "received_events_url": "https://api.github.com/users/Mamaduka/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 531680823, + "node_id": "MDU6TGFiZWw1MzE2ODA4MjM=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Bug", + "name": "[Type] Bug", + "color": "d93f0b", + "default": false, + "description": "An existing feature is broken." + }, + { + "id": 2074073931, + "node_id": "MDU6TGFiZWwyMDc0MDczOTMx", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Feature]%20Navigation%20Screen", + "name": "[Feature] Navigation Screen", + "color": "fbca04", + "default": false, + "description": "A new block-based screen intended to replace nav-menus.php." + }, + { + "id": 2536082965, + "node_id": "MDU6TGFiZWwyNTM2MDgyOTY1", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Package]%20Edit%20Navigation", + "name": "[Package] Edit Navigation", + "color": "ed2572", + "default": false, + "description": "/packages/edit-navigation" + } + ], + "state": "closed", + "locked": false, + "assignee": { + "login": "Mamaduka", + "id": 240569, + "node_id": "MDQ6VXNlcjI0MDU2OQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/240569?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Mamaduka", + "html_url": "https://github.com/Mamaduka", + "followers_url": "https://api.github.com/users/Mamaduka/followers", + "following_url": "https://api.github.com/users/Mamaduka/following{/other_user}", + "gists_url": "https://api.github.com/users/Mamaduka/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Mamaduka/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Mamaduka/subscriptions", + "organizations_url": "https://api.github.com/users/Mamaduka/orgs", + "repos_url": "https://api.github.com/users/Mamaduka/repos", + "events_url": "https://api.github.com/users/Mamaduka/events{/privacy}", + "received_events_url": "https://api.github.com/users/Mamaduka/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "Mamaduka", + "id": 240569, + "node_id": "MDQ6VXNlcjI0MDU2OQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/240569?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Mamaduka", + "html_url": "https://github.com/Mamaduka", + "followers_url": "https://api.github.com/users/Mamaduka/followers", + "following_url": "https://api.github.com/users/Mamaduka/following{/other_user}", + "gists_url": "https://api.github.com/users/Mamaduka/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Mamaduka/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Mamaduka/subscriptions", + "organizations_url": "https://api.github.com/users/Mamaduka/orgs", + "repos_url": "https://api.github.com/users/Mamaduka/repos", + "events_url": "https://api.github.com/users/Mamaduka/events{/privacy}", + "received_events_url": "https://api.github.com/users/Mamaduka/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 4, + "created_at": "2021-08-03T11:24:09Z", + "updated_at": "2021-08-04T08:47:11Z", + "closed_at": "2021-08-04T04:54:22Z", + "author_association": "MEMBER", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33843", + "html_url": "https://github.com/WordPress/gutenberg/pull/33843", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33843.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33843.patch" + }, + "body": "## Description\r\nCurrently, when creating a menu, there's React warning about state updates on unmounted components.\r\n\r\nPR updates `createMenu` logic to set state right after the `saveMenu` action is dispatched. \r\n\r\n## How has this been tested?\r\n1. Go to the experimental navigation screen.\r\n2. Click on \"Switch Menu\" in the top right corner.\r\n3. Choose the\"Create a new menu\" option.\r\n4. After creating the menu, there shouldn't be an error in the browser console.\r\n\r\n## Screenshots <!-- if applicable -->\r\n![CleanShot 2021-08-03 at 15 17 52](https://user-images.githubusercontent.com/240569/128007292-91e71416-14e7-40e3-94c4-461ad411f0b2.png)\r\n\r\n## Types of changes\r\nBugfix\r\n\r\n## Checklist:\r\n- [x] My code is tested.\r\n- [x] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [ ] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [ ] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [x] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [x] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [ ] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33842", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33842/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33842/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33842/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33842", + "id": 959008282, + "node_id": "MDExOlB1bGxSZXF1ZXN0NzAyMTg4MjY0", + "number": 33842, + "title": "Polish the focus style for the segmented control.", + "user": { + "login": "jasmussen", + "id": 1204802, + "node_id": "MDQ6VXNlcjEyMDQ4MDI=", + "avatar_url": "https://avatars.githubusercontent.com/u/1204802?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jasmussen", + "html_url": "https://github.com/jasmussen", + "followers_url": "https://api.github.com/users/jasmussen/followers", + "following_url": "https://api.github.com/users/jasmussen/following{/other_user}", + "gists_url": "https://api.github.com/users/jasmussen/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jasmussen/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jasmussen/subscriptions", + "organizations_url": "https://api.github.com/users/jasmussen/orgs", + "repos_url": "https://api.github.com/users/jasmussen/repos", + "events_url": "https://api.github.com/users/jasmussen/events{/privacy}", + "received_events_url": "https://api.github.com/users/jasmussen/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 997392122, + "node_id": "MDU6TGFiZWw5OTczOTIxMjI=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Package]%20Components", + "name": "[Package] Components", + "color": "ed2572", + "default": false, + "description": "/packages/components" + } + ], + "state": "closed", + "locked": false, + "assignee": { + "login": "jasmussen", + "id": 1204802, + "node_id": "MDQ6VXNlcjEyMDQ4MDI=", + "avatar_url": "https://avatars.githubusercontent.com/u/1204802?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jasmussen", + "html_url": "https://github.com/jasmussen", + "followers_url": "https://api.github.com/users/jasmussen/followers", + "following_url": "https://api.github.com/users/jasmussen/following{/other_user}", + "gists_url": "https://api.github.com/users/jasmussen/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jasmussen/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jasmussen/subscriptions", + "organizations_url": "https://api.github.com/users/jasmussen/orgs", + "repos_url": "https://api.github.com/users/jasmussen/repos", + "events_url": "https://api.github.com/users/jasmussen/events{/privacy}", + "received_events_url": "https://api.github.com/users/jasmussen/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "jasmussen", + "id": 1204802, + "node_id": "MDQ6VXNlcjEyMDQ4MDI=", + "avatar_url": "https://avatars.githubusercontent.com/u/1204802?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jasmussen", + "html_url": "https://github.com/jasmussen", + "followers_url": "https://api.github.com/users/jasmussen/followers", + "following_url": "https://api.github.com/users/jasmussen/following{/other_user}", + "gists_url": "https://api.github.com/users/jasmussen/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jasmussen/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jasmussen/subscriptions", + "organizations_url": "https://api.github.com/users/jasmussen/orgs", + "repos_url": "https://api.github.com/users/jasmussen/repos", + "events_url": "https://api.github.com/users/jasmussen/events{/privacy}", + "received_events_url": "https://api.github.com/users/jasmussen/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 3, + "created_at": "2021-08-03T11:16:34Z", + "updated_at": "2021-08-03T14:16:40Z", + "closed_at": "2021-08-03T14:16:07Z", + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33842", + "html_url": "https://github.com/WordPress/gutenberg/pull/33842", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33842.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33842.patch" + }, + "body": "## Description\r\n\r\nFollowup to feedback in https://github.com/WordPress/gutenberg/pull/31937#issuecomment-880153741, this PR polishes the focus style for the new Segmented Control. Before:\r\n\r\n![before](https://user-images.githubusercontent.com/1204802/128005511-81a68f09-ddf4-4870-b5ce-3889d915ca86.gif)\r\n\r\nAfter:\r\n\r\n![after](https://user-images.githubusercontent.com/1204802/128005531-526c2de3-53fe-4c8c-966c-a85be69064c9.gif)\r\n\r\nThe focus style for buttons, unputs and selected blocks across the block editor is 1.5px blue focusring, which changes the shape from 1px inputs or controls, or sits outset of solid blue primary buttons.\r\n\r\nIn this case, the usage of focus-within feels correct, as when you tab to the segmented control, pressing tab again sets focus on the next control, not the next option inside; you have to use the arrow keys to change the property inside.\r\n\r\nNote: This PR is a draft because it needs a bit more work. Specifically there appears to be a bug in how the `${ CONFIG.controlBoxShadowFocus };` variable is output. It generates the following incorrect box shadow, which then doesn't render at all:\r\n\r\n```\r\nbox-shadow: 0 0 0,0.5px,var( --wp-admin-theme-color, #00669b);\r\n```\r\n\r\nThe two commas are wrong. Here's how it should be:\r\n\r\n```\r\nbox-shadow: 0 0 0 0.5px var( --wp-admin-theme-color, #00669b);\r\n```\r\n\r\nThis PR simply outputs the corrected value directly, but ideally we find a way to output the variable correctly before we land this. If you know how to, please feel free to push directly to this branch.\r\n\r\n## How has this been tested?\r\n\r\nInsert a \"Post Featured Image\" block and focus the segmented control in the inspector.\r\n\r\n## Checklist:\r\n- [x] My code is tested.\r\n- [x] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [x] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [x] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [x] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [x] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [ ] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33840", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33840/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33840/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33840/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33840", + "id": 958800394, + "node_id": "MDExOlB1bGxSZXF1ZXN0NzAyMDE1NzM0", + "number": 33840, + "title": "Editor: Safer isPreviewingPost check", + "user": { + "login": "Mamaduka", + "id": 240569, + "node_id": "MDQ6VXNlcjI0MDU2OQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/240569?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Mamaduka", + "html_url": "https://github.com/Mamaduka", + "followers_url": "https://api.github.com/users/Mamaduka/followers", + "following_url": "https://api.github.com/users/Mamaduka/following{/other_user}", + "gists_url": "https://api.github.com/users/Mamaduka/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Mamaduka/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Mamaduka/subscriptions", + "organizations_url": "https://api.github.com/users/Mamaduka/orgs", + "repos_url": "https://api.github.com/users/Mamaduka/repos", + "events_url": "https://api.github.com/users/Mamaduka/events{/privacy}", + "received_events_url": "https://api.github.com/users/Mamaduka/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 531680823, + "node_id": "MDU6TGFiZWw1MzE2ODA4MjM=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Bug", + "name": "[Type] Bug", + "color": "d93f0b", + "default": false, + "description": "An existing feature is broken." + }, + { + "id": 1013395453, + "node_id": "MDU6TGFiZWwxMDEzMzk1NDUz", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Package]%20Editor", + "name": "[Package] Editor", + "color": "ed2572", + "default": false, + "description": "/packages/editor" + } + ], + "state": "closed", + "locked": false, + "assignee": { + "login": "Mamaduka", + "id": 240569, + "node_id": "MDQ6VXNlcjI0MDU2OQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/240569?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Mamaduka", + "html_url": "https://github.com/Mamaduka", + "followers_url": "https://api.github.com/users/Mamaduka/followers", + "following_url": "https://api.github.com/users/Mamaduka/following{/other_user}", + "gists_url": "https://api.github.com/users/Mamaduka/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Mamaduka/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Mamaduka/subscriptions", + "organizations_url": "https://api.github.com/users/Mamaduka/orgs", + "repos_url": "https://api.github.com/users/Mamaduka/repos", + "events_url": "https://api.github.com/users/Mamaduka/events{/privacy}", + "received_events_url": "https://api.github.com/users/Mamaduka/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "Mamaduka", + "id": 240569, + "node_id": "MDQ6VXNlcjI0MDU2OQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/240569?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Mamaduka", + "html_url": "https://github.com/Mamaduka", + "followers_url": "https://api.github.com/users/Mamaduka/followers", + "following_url": "https://api.github.com/users/Mamaduka/following{/other_user}", + "gists_url": "https://api.github.com/users/Mamaduka/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Mamaduka/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Mamaduka/subscriptions", + "organizations_url": "https://api.github.com/users/Mamaduka/orgs", + "repos_url": "https://api.github.com/users/Mamaduka/repos", + "events_url": "https://api.github.com/users/Mamaduka/events{/privacy}", + "received_events_url": "https://api.github.com/users/Mamaduka/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 1, + "created_at": "2021-08-03T07:06:47Z", + "updated_at": "2021-08-03T08:16:59Z", + "closed_at": "2021-08-03T08:16:31Z", + "author_association": "MEMBER", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33840", + "html_url": "https://github.com/WordPress/gutenberg/pull/33840", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33840.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33840.patch" + }, + "body": "## Description\r\nThe `options` property might not always be defined for the `saving` state and, in some cases, might result in an error.\r\n\r\nPR updates selector to use lodash `get` to safely check `options.isPreview` reference. It also matches the signature in the `isAutosavingPost` selector.\r\n\r\nFixes #29711.\r\n\r\n## How has this been tested?\r\n1. Comment out `isSavingPost` condition from the `isPreviewingPost()` selector.\r\n2. Run the following code in the browser console:\r\n\r\n```js\r\nwp.data.select( 'core/editor' ).isPreviewingPost();\r\n```\r\n\r\n## Types of changes\r\nBugfix\r\n\r\n## Checklist:\r\n- [x] My code is tested.\r\n- [x] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [ ] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [ ] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [x] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [x] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [ ] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33833", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33833/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33833/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33833/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33833", + "id": 958653186, + "node_id": "MDExOlB1bGxSZXF1ZXN0NzAxOTAwMTgx", + "number": 33833, + "title": "RNMobile: Add integration test guide", + "user": { + "login": "guarani", + "id": 1898325, + "node_id": "MDQ6VXNlcjE4OTgzMjU=", + "avatar_url": "https://avatars.githubusercontent.com/u/1898325?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/guarani", + "html_url": "https://github.com/guarani", + "followers_url": "https://api.github.com/users/guarani/followers", + "following_url": "https://api.github.com/users/guarani/following{/other_user}", + "gists_url": "https://api.github.com/users/guarani/gists{/gist_id}", + "starred_url": "https://api.github.com/users/guarani/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/guarani/subscriptions", + "organizations_url": "https://api.github.com/users/guarani/orgs", + "repos_url": "https://api.github.com/users/guarani/repos", + "events_url": "https://api.github.com/users/guarani/events{/privacy}", + "received_events_url": "https://api.github.com/users/guarani/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 982506020, + "node_id": "MDU6TGFiZWw5ODI1MDYwMjA=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/Mobile%20App%20-%20i.e.%20Android%20or%20iOS", + "name": "Mobile App - i.e. Android or iOS", + "color": "a3ef7a", + "default": false, + "description": "Native mobile impl of the block editor. (Note: used in scripts, ping mobile folks to change)" + } + ], + "state": "closed", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 2, + "created_at": "2021-08-03T02:17:36Z", + "updated_at": "2021-08-04T15:42:53Z", + "closed_at": "2021-08-04T15:42:28Z", + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33833", + "html_url": "https://github.com/WordPress/gutenberg/pull/33833", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33833.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33833.patch" + }, + "body": "## Description\r\n\r\nAdds a guide to integration tests on Gutenberg Mobile.\r\n\r\n## How has this been tested?\r\nRead through the guide to ensure legibility and accuracy.\r\n\r\n## Types of changes\r\n- Updated docs\r\n\r\n## Checklist:\r\n- [x] My code is tested.\r\n- [x] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [x] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [x] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [x] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [x] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [x] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33831", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33831/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33831/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33831/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33831", + "id": 958559778, + "node_id": "MDExOlB1bGxSZXF1ZXN0NzAxODI1NjM1", + "number": 33831, + "title": "Components: Fix RTL on custom gradient picker", + "user": { + "login": "walbo", + "id": 1415747, + "node_id": "MDQ6VXNlcjE0MTU3NDc=", + "avatar_url": "https://avatars.githubusercontent.com/u/1415747?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/walbo", + "html_url": "https://github.com/walbo", + "followers_url": "https://api.github.com/users/walbo/followers", + "following_url": "https://api.github.com/users/walbo/following{/other_user}", + "gists_url": "https://api.github.com/users/walbo/gists{/gist_id}", + "starred_url": "https://api.github.com/users/walbo/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/walbo/subscriptions", + "organizations_url": "https://api.github.com/users/walbo/orgs", + "repos_url": "https://api.github.com/users/walbo/repos", + "events_url": "https://api.github.com/users/walbo/events{/privacy}", + "received_events_url": "https://api.github.com/users/walbo/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 531680823, + "node_id": "MDU6TGFiZWw1MzE2ODA4MjM=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Bug", + "name": "[Type] Bug", + "color": "d93f0b", + "default": false, + "description": "An existing feature is broken." + }, + { + "id": 596965480, + "node_id": "MDU6TGFiZWw1OTY5NjU0ODA=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/Internationalization%20(i18n)", + "name": "Internationalization (i18n)", + "color": "e881e2", + "default": false, + "description": "" + }, + { + "id": 997392122, + "node_id": "MDU6TGFiZWw5OTczOTIxMjI=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Package]%20Components", + "name": "[Package] Components", + "color": "ed2572", + "default": false, + "description": "/packages/components" + } + ], + "state": "closed", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 0, + "created_at": "2021-08-02T22:36:46Z", + "updated_at": "2021-08-03T15:38:00Z", + "closed_at": "2021-08-03T15:27:19Z", + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33831", + "html_url": "https://github.com/WordPress/gutenberg/pull/33831", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33831.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33831.patch" + }, + "body": "<!-- Learn the overall process and best practices for pull requests at https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/repository-management.md#pull-requests. -->\r\n\r\n<!-- Gutenberg's license is in the process of updating to be dual-licensed under the GPL and MPL. As part of that transition, all new contributions are dual-licensed. For more information, see: https://github.com/WordPress/gutenberg/blob/trunk/LICENSE.md -->\r\n\r\n## Description\r\n<!-- Please describe what you have changed or added -->\r\nFix custom gradient picker on sites with RTL.\r\n\r\nFixes #27352\r\n\r\n## How has this been tested?\r\nWith a RTL language and RTL tester plugin\r\n\r\n## Screenshots <!-- if applicable -->\r\n| Before | After |\r\n| --- | --- |\r\n| ![rtl-custom-gradient](https://user-images.githubusercontent.com/1415747/127931900-3846eecd-8f1a-40d2-9d74-96ddc4b8441e.gif) | ![fixed-rtl-custom-gradient](https://user-images.githubusercontent.com/1415747/127931912-5b1f00e0-d348-4ba7-9f7f-1b7f15268524.gif) |\r\n\r\n## Types of changes\r\nBug fix\r\n<!-- What types of changes does your code introduce? -->\r\n<!-- Bug fix (non-breaking change which fixes an issue) -->\r\n<!-- New feature (non-breaking change which adds functionality) -->\r\n<!-- Breaking change (fix or feature that would cause existing functionality to not work as expected) -->\r\n\r\n## Checklist:\r\n- [x] My code is tested.\r\n- [x] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [ ] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [ ] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [ ] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [ ] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [ ] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33824", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33824/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33824/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33824/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33824", + "id": 958364226, + "node_id": "MDExOlB1bGxSZXF1ZXN0NzAxNjU2OTA1", + "number": 33824, + "title": "components: Use updated range styles", + "user": { + "login": "sarayourfriend", + "id": 24264157, + "node_id": "MDQ6VXNlcjI0MjY0MTU3", + "avatar_url": "https://avatars.githubusercontent.com/u/24264157?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/sarayourfriend", + "html_url": "https://github.com/sarayourfriend", + "followers_url": "https://api.github.com/users/sarayourfriend/followers", + "following_url": "https://api.github.com/users/sarayourfriend/following{/other_user}", + "gists_url": "https://api.github.com/users/sarayourfriend/gists{/gist_id}", + "starred_url": "https://api.github.com/users/sarayourfriend/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/sarayourfriend/subscriptions", + "organizations_url": "https://api.github.com/users/sarayourfriend/orgs", + "repos_url": "https://api.github.com/users/sarayourfriend/repos", + "events_url": "https://api.github.com/users/sarayourfriend/events{/privacy}", + "received_events_url": "https://api.github.com/users/sarayourfriend/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 531680825, + "node_id": "MDU6TGFiZWw1MzE2ODA4MjU=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Enhancement", + "name": "[Type] Enhancement", + "color": "3993a3", + "default": false, + "description": "A suggestion for improvement." + }, + { + "id": 997392122, + "node_id": "MDU6TGFiZWw5OTczOTIxMjI=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Package]%20Components", + "name": "[Package] Components", + "color": "ed2572", + "default": false, + "description": "/packages/components" + }, + { + "id": 1344464662, + "node_id": "MDU6TGFiZWwxMzQ0NDY0NjYy", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[a11y]%20Keyboard%20&%20Focus", + "name": "[a11y] Keyboard & Focus", + "color": "efde5d", + "default": false, + "description": "" + } + ], + "state": "closed", + "locked": false, + "assignee": { + "login": "sarayourfriend", + "id": 24264157, + "node_id": "MDQ6VXNlcjI0MjY0MTU3", + "avatar_url": "https://avatars.githubusercontent.com/u/24264157?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/sarayourfriend", + "html_url": "https://github.com/sarayourfriend", + "followers_url": "https://api.github.com/users/sarayourfriend/followers", + "following_url": "https://api.github.com/users/sarayourfriend/following{/other_user}", + "gists_url": "https://api.github.com/users/sarayourfriend/gists{/gist_id}", + "starred_url": "https://api.github.com/users/sarayourfriend/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/sarayourfriend/subscriptions", + "organizations_url": "https://api.github.com/users/sarayourfriend/orgs", + "repos_url": "https://api.github.com/users/sarayourfriend/repos", + "events_url": "https://api.github.com/users/sarayourfriend/events{/privacy}", + "received_events_url": "https://api.github.com/users/sarayourfriend/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "sarayourfriend", + "id": 24264157, + "node_id": "MDQ6VXNlcjI0MjY0MTU3", + "avatar_url": "https://avatars.githubusercontent.com/u/24264157?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/sarayourfriend", + "html_url": "https://github.com/sarayourfriend", + "followers_url": "https://api.github.com/users/sarayourfriend/followers", + "following_url": "https://api.github.com/users/sarayourfriend/following{/other_user}", + "gists_url": "https://api.github.com/users/sarayourfriend/gists{/gist_id}", + "starred_url": "https://api.github.com/users/sarayourfriend/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/sarayourfriend/subscriptions", + "organizations_url": "https://api.github.com/users/sarayourfriend/orgs", + "repos_url": "https://api.github.com/users/sarayourfriend/repos", + "events_url": "https://api.github.com/users/sarayourfriend/events{/privacy}", + "received_events_url": "https://api.github.com/users/sarayourfriend/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 15, + "created_at": "2021-08-02T17:33:13Z", + "updated_at": "2021-08-06T13:19:05Z", + "closed_at": "2021-08-06T13:18:17Z", + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33824", + "html_url": "https://github.com/WordPress/gutenberg/pull/33824", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33824.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33824.patch" + }, + "body": "<!-- Learn the overall process and best practices for pull requests at https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/repository-management.md#pull-requests. -->\r\n\r\n<!-- Gutenberg's license is in the process of updating to be dual-licensed under the GPL and MPL. As part of that transition, all new contributions are dual-licensed. For more information, see: https://github.com/WordPress/gutenberg/blob/trunk/LICENSE.md -->\r\n\r\n## Description\r\nUse the updated range styles from the Global Styles figma: https://www.figma.com/file/oEkcAyhIvPFMVEAO8EImvA/Global-Styles\r\n\r\n## How has this been tested?\r\nRun storybook and check out the range control page: `iframe.html?id=components-rangecontrol--default`\r\n\r\n## Screenshots <!-- if applicable -->\r\n\r\n### Unfocused\r\n\r\n<img width=\"1072\" alt=\"Captura de Tela 2021-08-02 às 10 30 28\" src=\"https://user-images.githubusercontent.com/24264157/127901085-e8b175a9-9171-4a5e-8f90-a93207f61a85.png\">\r\n\r\n### Focused\r\n\r\n<img width=\"1072\" alt=\"Captura de Tela 2021-08-02 às 10 30 30\" src=\"https://user-images.githubusercontent.com/24264157/127901095-12dab52c-650f-45ec-9f93-653a04326bc6.png\">\r\n\r\n\r\n## Types of changes\r\nStyle changes (new feature???)\r\n\r\n## Checklist:\r\n- [x] My code is tested.\r\n- [x] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [x] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [x] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [x] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [x] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [x] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33818", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33818/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33818/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33818/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33818", + "id": 958138621, + "node_id": "MDExOlB1bGxSZXF1ZXN0NzAxNDYxNTky", + "number": 33818, + "title": "Scripts: Update webpack to v5 (try 2)", + "user": { + "login": "gziolo", + "id": 699132, + "node_id": "MDQ6VXNlcjY5OTEzMg==", + "avatar_url": "https://avatars.githubusercontent.com/u/699132?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/gziolo", + "html_url": "https://github.com/gziolo", + "followers_url": "https://api.github.com/users/gziolo/followers", + "following_url": "https://api.github.com/users/gziolo/following{/other_user}", + "gists_url": "https://api.github.com/users/gziolo/gists{/gist_id}", + "starred_url": "https://api.github.com/users/gziolo/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/gziolo/subscriptions", + "organizations_url": "https://api.github.com/users/gziolo/orgs", + "repos_url": "https://api.github.com/users/gziolo/repos", + "events_url": "https://api.github.com/users/gziolo/events{/privacy}", + "received_events_url": "https://api.github.com/users/gziolo/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 596512821, + "node_id": "MDU6TGFiZWw1OTY1MTI4MjE=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Build%20Tooling", + "name": "[Type] Build Tooling", + "color": "111111", + "default": false, + "description": "" + }, + { + "id": 978007737, + "node_id": "MDU6TGFiZWw5NzgwMDc3Mzc=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Package]%20Scripts", + "name": "[Package] Scripts", + "color": "ed2572", + "default": false, + "description": "/packages/scripts" + }, + { + "id": 1607665481, + "node_id": "MDU6TGFiZWwxNjA3NjY1NDgx", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/Storybook", + "name": "Storybook", + "color": "81e2c7", + "default": false, + "description": "Storybook and its stories for components" + } + ], + "state": "closed", + "locked": false, + "assignee": { + "login": "gziolo", + "id": 699132, + "node_id": "MDQ6VXNlcjY5OTEzMg==", + "avatar_url": "https://avatars.githubusercontent.com/u/699132?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/gziolo", + "html_url": "https://github.com/gziolo", + "followers_url": "https://api.github.com/users/gziolo/followers", + "following_url": "https://api.github.com/users/gziolo/following{/other_user}", + "gists_url": "https://api.github.com/users/gziolo/gists{/gist_id}", + "starred_url": "https://api.github.com/users/gziolo/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/gziolo/subscriptions", + "organizations_url": "https://api.github.com/users/gziolo/orgs", + "repos_url": "https://api.github.com/users/gziolo/repos", + "events_url": "https://api.github.com/users/gziolo/events{/privacy}", + "received_events_url": "https://api.github.com/users/gziolo/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "gziolo", + "id": 699132, + "node_id": "MDQ6VXNlcjY5OTEzMg==", + "avatar_url": "https://avatars.githubusercontent.com/u/699132?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/gziolo", + "html_url": "https://github.com/gziolo", + "followers_url": "https://api.github.com/users/gziolo/followers", + "following_url": "https://api.github.com/users/gziolo/following{/other_user}", + "gists_url": "https://api.github.com/users/gziolo/gists{/gist_id}", + "starred_url": "https://api.github.com/users/gziolo/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/gziolo/subscriptions", + "organizations_url": "https://api.github.com/users/gziolo/orgs", + "repos_url": "https://api.github.com/users/gziolo/repos", + "events_url": "https://api.github.com/users/gziolo/events{/privacy}", + "received_events_url": "https://api.github.com/users/gziolo/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 28, + "created_at": "2021-08-02T13:19:47Z", + "updated_at": "2021-08-10T07:24:53Z", + "closed_at": "2021-08-10T07:24:28Z", + "author_association": "MEMBER", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33818", + "html_url": "https://github.com/WordPress/gutenberg/pull/33818", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33818.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33818.patch" + }, + "body": "<!-- Learn the overall process and best practices for pull requests at https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/repository-management.md#pull-requests. -->\r\n\r\n<!-- Gutenberg's license is in the process of updating to be dual-licensed under the GPL and MPL. As part of that transition, all new contributions are dual-licensed. For more information, see: https://github.com/WordPress/gutenberg/blob/trunk/LICENSE.md -->\r\n\r\n## Description\r\n<!-- Please describe what you have changed or added -->\r\n\r\nFollow-up for #26382. \r\nFixes #33768, fixes #32203, fixes #30289.\r\n\r\nIt's a second attempt to upgrade webpack to v5.\r\n\r\n## Known Issues\r\n\r\n- [x] `wp-scripts build` generates styles with a wrong name\r\n <img width=\"363\" alt=\"Screen Shot 2021-08-02 at 15 15 49\" src=\"https://user-images.githubusercontent.com/699132/127868546-a35d31bf-699b-4f6a-b782-8dcd2ea2b169.png\">\r\n it should be `index-style.css` in the context of a block\r\n- [x] `npm run build` errors because of API changes in webpack plugins\r\n <img width=\"1455\" alt=\"Screen Shot 2021-08-02 at 15 23 15\" src=\"https://user-images.githubusercontent.com/699132/127868792-1002a33f-14d4-4dc0-a924-e7cac241c773.png\">\r\n- [x] `npm run storybook:build` – Storybook has to be updated to work with webpack v5, more details at https://storybook.js.org/blog/storybook-for-webpack-5/\r\n\r\n## How has this been tested?\r\n<!-- Please describe in detail how you tested your changes. -->\r\n<!-- Include details of your testing environment, tests ran to see how -->\r\n<!-- your change affects other areas of the code, etc. -->\r\n\r\n### Build for Gutenberg\r\n\r\n- `npm run dev`\r\n- `npm run build`\r\n\r\n### Build for Storybook\r\n\r\n- `npm run storybook:dev`\r\n- `npm run storybook:build`\r\n\r\n### Build for `@wordpress/scripts`\r\n\r\n```bash\r\nnpx wp-create-block example --no-wp-scripts\r\ncd example\r\n../node_modules/.bin/wp-script build\r\n```\r\n\r\n## Types of changes\r\nBreaking change for `@wordpress/scripts` users that provide their own config files for build tools.\r\n\r\n## Checklist:\r\n- [x] My code is tested.\r\n- [x] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [x] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [x] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [x] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [x] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [x] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33817", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33817/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33817/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33817/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33817", + "id": 958115507, + "node_id": "MDExOlB1bGxSZXF1ZXN0NzAxNDQxNDI1", + "number": 33817, + "title": "Fix Safari 13 metaboxes from overlapping the content.", + "user": { + "login": "jasmussen", + "id": 1204802, + "node_id": "MDQ6VXNlcjEyMDQ4MDI=", + "avatar_url": "https://avatars.githubusercontent.com/u/1204802?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jasmussen", + "html_url": "https://github.com/jasmussen", + "followers_url": "https://api.github.com/users/jasmussen/followers", + "following_url": "https://api.github.com/users/jasmussen/following{/other_user}", + "gists_url": "https://api.github.com/users/jasmussen/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jasmussen/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jasmussen/subscriptions", + "organizations_url": "https://api.github.com/users/jasmussen/orgs", + "repos_url": "https://api.github.com/users/jasmussen/repos", + "events_url": "https://api.github.com/users/jasmussen/events{/privacy}", + "received_events_url": "https://api.github.com/users/jasmussen/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 531680823, + "node_id": "MDU6TGFiZWw1MzE2ODA4MjM=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Bug", + "name": "[Type] Bug", + "color": "d93f0b", + "default": false, + "description": "An existing feature is broken." + }, + { + "id": 671439711, + "node_id": "MDU6TGFiZWw2NzE0Mzk3MTE=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/Browser%20Issues", + "name": "Browser Issues", + "color": "0052cc", + "default": false, + "description": null + }, + { + "id": 738764878, + "node_id": "MDU6TGFiZWw3Mzg3NjQ4Nzg=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Feature]%20Meta%20Boxes", + "name": "[Feature] Meta Boxes", + "color": "fbca04", + "default": false, + "description": "" + } + ], + "state": "closed", + "locked": false, + "assignee": { + "login": "jasmussen", + "id": 1204802, + "node_id": "MDQ6VXNlcjEyMDQ4MDI=", + "avatar_url": "https://avatars.githubusercontent.com/u/1204802?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jasmussen", + "html_url": "https://github.com/jasmussen", + "followers_url": "https://api.github.com/users/jasmussen/followers", + "following_url": "https://api.github.com/users/jasmussen/following{/other_user}", + "gists_url": "https://api.github.com/users/jasmussen/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jasmussen/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jasmussen/subscriptions", + "organizations_url": "https://api.github.com/users/jasmussen/orgs", + "repos_url": "https://api.github.com/users/jasmussen/repos", + "events_url": "https://api.github.com/users/jasmussen/events{/privacy}", + "received_events_url": "https://api.github.com/users/jasmussen/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "jasmussen", + "id": 1204802, + "node_id": "MDQ6VXNlcjEyMDQ4MDI=", + "avatar_url": "https://avatars.githubusercontent.com/u/1204802?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jasmussen", + "html_url": "https://github.com/jasmussen", + "followers_url": "https://api.github.com/users/jasmussen/followers", + "following_url": "https://api.github.com/users/jasmussen/following{/other_user}", + "gists_url": "https://api.github.com/users/jasmussen/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jasmussen/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jasmussen/subscriptions", + "organizations_url": "https://api.github.com/users/jasmussen/orgs", + "repos_url": "https://api.github.com/users/jasmussen/repos", + "events_url": "https://api.github.com/users/jasmussen/events{/privacy}", + "received_events_url": "https://api.github.com/users/jasmussen/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 3, + "created_at": "2021-08-02T12:56:59Z", + "updated_at": "2021-08-05T06:43:02Z", + "closed_at": "2021-08-05T06:42:35Z", + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33817", + "html_url": "https://github.com/WordPress/gutenberg/pull/33817", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33817.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33817.patch" + }, + "body": "## Description\r\n\r\nFixes #33668.\r\n\r\nFlex is a delicate feature, especially when supporting a range of browsers. As it turns out, older versions of Safari have a pretty specific interpretation of how flex children should inherit the height of their parents. Which is to say, _they do if you don't provide a percentage height_. \r\n\r\nIt gets a bit more gnarly than that, but [this SO comment](https://stackoverflow.com/questions/33636796/chrome-safari-not-filling-100-height-of-flex-parent) elucidates a bit:\r\n\r\n> Remove specified heights from flex items for this method to work. If a child has a height specified (e.g. height: 100%), then it will ignore the align-items: stretch coming from the parent. For the stretch default to work, the child's height must compute to auto.\r\n\r\nI have developed this patch while using Browserstack to test Safari 13, because I'm no longer on MacOS Catalina. And as best I can tell the flex rules we have in place caused a sequence of events there:\r\n\r\n- First it meant that the height of `.edit-post-visual-editor` was allowed to shrink, which happened when a metabox was present. This was fixed by disallowing shrinking (`flex: 1 0 auto;` instead of `flex: 1 1 auto;`) _and_ by removing `flex-basis: 100%;` (more on that in a second)\r\n- When that was fixed, it became clear that the child element, `.edit-post-visual-editor__content-area` no longer expanded to fill the void. _Presumably_ because when `flex-basis: 100%;` was removed, inheritance there no longer worked. This was fixed by removing the explicit `height: 100%;` inline style applied to that element, _and_ by allowing it to grow (`flex-grow: 1;`). \r\n\r\nTo summarize it to the best of my understanding: when we used percentages, the editing canvas didn't actually expand, causing the metaboxes to overlap it. By removing the percentages, I had to remove them from quite a few of the child items, and change those to rely in the intrinsic `align-items: stretch;` property they are given by `display: flex;` by default.\r\n\r\n## How has this been tested?\r\n\r\nIn my testing, this threads the needle and accomplishes what it needs to in modern browsers, Chrome, Firefox, Edge and Safari 14. It also makes it all work with Safar 13. I have not tested older yet, but presume it works the same.\r\n\r\nThe behavior to test is:\r\n\r\n- Test with and without the Custom Fields metabox present.\r\n- Create a new post with no content, and you should not see the dark gray color behind the editing canvas peek through.\r\n- Use the device preview dropdown and verify the sizes are correct. \r\n- Add a lot of content, and observe that the custom fields metabox keeps \"riding below the content\" as you press Enter. No overlap.\r\n\r\n## Screenshots <!-- if applicable -->\r\n\r\nThe Safari 13 issue that ships in trunk (big GIF):\r\n\r\nhttps://cldup.com/_zYngFvNTq.gif\r\n\r\nSafari 13 after this PR is applied:\r\n\r\n![saf 13 after](https://user-images.githubusercontent.com/1204802/127865217-0de80ec7-2906-4503-a4d8-6066bf7a6a75.gif)\r\n\r\nChrome after this PR applied (should be like before):\r\n\r\n![chrome](https://user-images.githubusercontent.com/1204802/127865407-7ad3eaef-b067-44b8-895f-e5208342ea55.gif)\r\n\r\n## Types of changes\r\n\r\nSince this is a pretty sensitive part of the editor layout code, it's important to test this pretty broadly, notably with those of you with access to Safari 13. But it's still important to ensure identical behavior on modern browsers as well.\r\n\r\n\r\n## Checklist:\r\n- [x] My code is tested.\r\n- [x] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [x] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [x] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [x] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [x] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [ ] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33800", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33800/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33800/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33800/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33800", + "id": 957359088, + "node_id": "MDExOlB1bGxSZXF1ZXN0NzAwNzk4ODA2", + "number": 33800, + "title": "Fix gutenberg_resolve_template() return documentation", + "user": { + "login": "jeremyfelt", + "id": 286171, + "node_id": "MDQ6VXNlcjI4NjE3MQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/286171?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jeremyfelt", + "html_url": "https://github.com/jeremyfelt", + "followers_url": "https://api.github.com/users/jeremyfelt/followers", + "following_url": "https://api.github.com/users/jeremyfelt/following{/other_user}", + "gists_url": "https://api.github.com/users/jeremyfelt/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jeremyfelt/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jeremyfelt/subscriptions", + "organizations_url": "https://api.github.com/users/jeremyfelt/orgs", + "repos_url": "https://api.github.com/users/jeremyfelt/repos", + "events_url": "https://api.github.com/users/jeremyfelt/events{/privacy}", + "received_events_url": "https://api.github.com/users/jeremyfelt/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 567484057, + "node_id": "MDU6TGFiZWw1Njc0ODQwNTc=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Documentation", + "name": "[Type] Documentation", + "color": "bfd4f2", + "default": false, + "description": "" + }, + { + "id": 1604715381, + "node_id": "MDU6TGFiZWwxNjA0NzE1Mzgx", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Feature]%20Full%20Site%20Editing", + "name": "[Feature] Full Site Editing", + "color": "fbca04", + "default": false, + "description": "" + } + ], + "state": "closed", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 0, + "created_at": "2021-08-01T01:36:25Z", + "updated_at": "2021-08-02T17:01:25Z", + "closed_at": "2021-08-02T06:04:38Z", + "author_association": "MEMBER", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33800", + "html_url": "https://github.com/WordPress/gutenberg/pull/33800", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33800.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33800.patch" + }, + "body": "`gutenberg_resolve_template()` now returns a `WP_Block_Template` instance rather than an array of data.", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33799", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33799/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33799/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33799/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33799", + "id": 957356268, + "node_id": "MDExOlB1bGxSZXF1ZXN0NzAwNzk2MzI3", + "number": 33799, + "title": "Fix misspelling of \"queries\" in filter documentation", + "user": { + "login": "jeremyfelt", + "id": 286171, + "node_id": "MDQ6VXNlcjI4NjE3MQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/286171?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jeremyfelt", + "html_url": "https://github.com/jeremyfelt", + "followers_url": "https://api.github.com/users/jeremyfelt/followers", + "following_url": "https://api.github.com/users/jeremyfelt/following{/other_user}", + "gists_url": "https://api.github.com/users/jeremyfelt/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jeremyfelt/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jeremyfelt/subscriptions", + "organizations_url": "https://api.github.com/users/jeremyfelt/orgs", + "repos_url": "https://api.github.com/users/jeremyfelt/repos", + "events_url": "https://api.github.com/users/jeremyfelt/events{/privacy}", + "received_events_url": "https://api.github.com/users/jeremyfelt/received_events", + "type": "User", + "site_admin": false + }, + "labels": [], + "state": "closed", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 0, + "created_at": "2021-08-01T01:21:27Z", + "updated_at": "2021-08-02T17:01:51Z", + "closed_at": "2021-08-02T03:22:39Z", + "author_association": "MEMBER", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33799", + "html_url": "https://github.com/WordPress/gutenberg/pull/33799", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33799.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33799.patch" + }, + "body": "## Description\r\n\r\nThis fixes an accidental misspelling in 3 places.\r\n\r\n\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33796", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33796/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33796/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33796/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33796", + "id": 957288624, + "node_id": "MDExOlB1bGxSZXF1ZXN0NzAwNzQzNTQx", + "number": 33796, + "title": "Add spaces in add_theme_support docs code", + "user": { + "login": "kapilpaul", + "id": 9963909, + "node_id": "MDQ6VXNlcjk5NjM5MDk=", + "avatar_url": "https://avatars.githubusercontent.com/u/9963909?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/kapilpaul", + "html_url": "https://github.com/kapilpaul", + "followers_url": "https://api.github.com/users/kapilpaul/followers", + "following_url": "https://api.github.com/users/kapilpaul/following{/other_user}", + "gists_url": "https://api.github.com/users/kapilpaul/gists{/gist_id}", + "starred_url": "https://api.github.com/users/kapilpaul/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/kapilpaul/subscriptions", + "organizations_url": "https://api.github.com/users/kapilpaul/orgs", + "repos_url": "https://api.github.com/users/kapilpaul/repos", + "events_url": "https://api.github.com/users/kapilpaul/events{/privacy}", + "received_events_url": "https://api.github.com/users/kapilpaul/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 567484057, + "node_id": "MDU6TGFiZWw1Njc0ODQwNTc=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Documentation", + "name": "[Type] Documentation", + "color": "bfd4f2", + "default": false, + "description": "" + }, + { + "id": 1388646432, + "node_id": "MDU6TGFiZWwxMzg4NjQ2NDMy", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/First-time%20Contributor", + "name": "First-time Contributor", + "color": "a0f762", + "default": false, + "description": "Pull request opened by a first-time contributor to Gutenberg repository" + } + ], + "state": "closed", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 1, + "created_at": "2021-07-31T17:34:13Z", + "updated_at": "2021-08-02T05:38:52Z", + "closed_at": "2021-08-02T05:36:51Z", + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33796", + "html_url": "https://github.com/WordPress/gutenberg/pull/33796", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33796.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33796.patch" + }, + "body": "## Description\r\nAdded missing space in theme support docs\r\n\r\n## Types of changes\r\n<!-- What types of changes does your code introduce? -->\r\nUpdated the documentation\r\n\r\n## Checklist:\r\n- [ ] My code is tested.\r\n- [x] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [x] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [ ] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [ ] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [x] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [ ] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33788", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33788/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33788/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33788/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33788", + "id": 957068842, + "node_id": "MDExOlB1bGxSZXF1ZXN0NzAwNTY5NTA4", + "number": 33788, + "title": "[RNMobile] Fix Xcode Demo app build", + "user": { + "login": "dcalhoun", + "id": 438664, + "node_id": "MDQ6VXNlcjQzODY2NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/438664?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/dcalhoun", + "html_url": "https://github.com/dcalhoun", + "followers_url": "https://api.github.com/users/dcalhoun/followers", + "following_url": "https://api.github.com/users/dcalhoun/following{/other_user}", + "gists_url": "https://api.github.com/users/dcalhoun/gists{/gist_id}", + "starred_url": "https://api.github.com/users/dcalhoun/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/dcalhoun/subscriptions", + "organizations_url": "https://api.github.com/users/dcalhoun/orgs", + "repos_url": "https://api.github.com/users/dcalhoun/repos", + "events_url": "https://api.github.com/users/dcalhoun/events{/privacy}", + "received_events_url": "https://api.github.com/users/dcalhoun/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 596512821, + "node_id": "MDU6TGFiZWw1OTY1MTI4MjE=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Build%20Tooling", + "name": "[Type] Build Tooling", + "color": "111111", + "default": false, + "description": "" + }, + { + "id": 982506020, + "node_id": "MDU6TGFiZWw5ODI1MDYwMjA=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/Mobile%20App%20-%20i.e.%20Android%20or%20iOS", + "name": "Mobile App - i.e. Android or iOS", + "color": "a3ef7a", + "default": false, + "description": "Native mobile impl of the block editor. (Note: used in scripts, ping mobile folks to change)" + } + ], + "state": "closed", + "locked": false, + "assignee": { + "login": "dcalhoun", + "id": 438664, + "node_id": "MDQ6VXNlcjQzODY2NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/438664?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/dcalhoun", + "html_url": "https://github.com/dcalhoun", + "followers_url": "https://api.github.com/users/dcalhoun/followers", + "following_url": "https://api.github.com/users/dcalhoun/following{/other_user}", + "gists_url": "https://api.github.com/users/dcalhoun/gists{/gist_id}", + "starred_url": "https://api.github.com/users/dcalhoun/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/dcalhoun/subscriptions", + "organizations_url": "https://api.github.com/users/dcalhoun/orgs", + "repos_url": "https://api.github.com/users/dcalhoun/repos", + "events_url": "https://api.github.com/users/dcalhoun/events{/privacy}", + "received_events_url": "https://api.github.com/users/dcalhoun/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "dcalhoun", + "id": 438664, + "node_id": "MDQ6VXNlcjQzODY2NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/438664?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/dcalhoun", + "html_url": "https://github.com/dcalhoun", + "followers_url": "https://api.github.com/users/dcalhoun/followers", + "following_url": "https://api.github.com/users/dcalhoun/following{/other_user}", + "gists_url": "https://api.github.com/users/dcalhoun/gists{/gist_id}", + "starred_url": "https://api.github.com/users/dcalhoun/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/dcalhoun/subscriptions", + "organizations_url": "https://api.github.com/users/dcalhoun/orgs", + "repos_url": "https://api.github.com/users/dcalhoun/repos", + "events_url": "https://api.github.com/users/dcalhoun/events{/privacy}", + "received_events_url": "https://api.github.com/users/dcalhoun/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 1, + "created_at": "2021-07-30T21:26:38Z", + "updated_at": "2021-08-09T16:07:06Z", + "closed_at": "2021-08-09T16:06:39Z", + "author_association": "MEMBER", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33788", + "html_url": "https://github.com/WordPress/gutenberg/pull/33788", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33788.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33788.patch" + }, + "body": "## Description\r\nReact Native added a `PROJECT_ROOT` [configuration to better support monorepos](https://github.com/facebook/react-native/commit/9ccde378b6e6379df61f9d968be6346ca6be7ead). Prior to setting the `PROJECT_ROOT` configuration, building the Demo app in Xcode threw errors related to the inability to find the entry `index.js` file, as it was searching in the root directory.\r\n\r\n<details><summary>Error Text</summary>\r\n\r\n```\r\nerror The resource `/Users/username/Sites/a8c/gutenberg/index.js` was not found.\r\nError: The resource `/Users/username/Sites/a8c/gutenberg/index.js` was not found.\r\n at /Users/username/Sites/a8c/gutenberg/node_modules/metro/src/IncrementalBundler.js:457:26\r\n at gotStat (node:fs:2627:21)\r\n at FSReqCallback.oncomplete (node:fs:195:21)\r\ninfo Run CLI with --verbose flag for more details.\r\nCommand PhaseScriptExecution failed with a nonzero exit code\r\n```\r\n\r\n</details>\r\n\r\n<details><summary>Error Screenshot</summary>\r\n\r\n<img width=\"1552\" alt=\"xcode-demo-app-error\" src=\"https://user-images.githubusercontent.com/438664/127712716-eb2fd3a3-0444-45be-a4d5-8ada20d22579.png\">\r\n\r\n</details>\r\n\r\n## How has this been tested?\r\n1. Check out `trunk` branch. \r\n2. `npm run native start:reset`\r\n3. Launch Xcode and build the Demo app to a physical device. \r\n4. ⚠️ **Unexpected:** Notice the build failure. \r\n5. Check out this PR branch. \r\n6. `npm run native start:reset`\r\n7. Launch Xcode and build the Demo app to a physical device. \r\n8. ℹ️ **Expected:** The build succeeds and runs on the device. \r\n\r\n## Screenshots <!-- if applicable -->\r\n\r\n## Types of changes\r\nBug fix\r\n\r\n## Checklist:\r\n- [x] My code is tested.\r\n- [x] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [x] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [ ] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [x] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [x] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [x] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33786", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33786/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33786/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33786/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33786", + "id": 956992028, + "node_id": "MDExOlB1bGxSZXF1ZXN0NzAwNTA0MTcw", + "number": 33786, + "title": "GitHub Templates: Format bug report template", + "user": { + "login": "walbo", + "id": 1415747, + "node_id": "MDQ6VXNlcjE0MTU3NDc=", + "avatar_url": "https://avatars.githubusercontent.com/u/1415747?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/walbo", + "html_url": "https://github.com/walbo", + "followers_url": "https://api.github.com/users/walbo/followers", + "following_url": "https://api.github.com/users/walbo/following{/other_user}", + "gists_url": "https://api.github.com/users/walbo/gists{/gist_id}", + "starred_url": "https://api.github.com/users/walbo/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/walbo/subscriptions", + "organizations_url": "https://api.github.com/users/walbo/orgs", + "repos_url": "https://api.github.com/users/walbo/repos", + "events_url": "https://api.github.com/users/walbo/events{/privacy}", + "received_events_url": "https://api.github.com/users/walbo/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 1032028862, + "node_id": "MDU6TGFiZWwxMDMyMDI4ODYy", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Project%20Management", + "name": "[Type] Project Management", + "color": "e55ead", + "default": false, + "description": "Meta-issues related to project management of Gutenberg" + } + ], + "state": "closed", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 0, + "created_at": "2021-07-30T19:00:14Z", + "updated_at": "2021-08-02T10:12:55Z", + "closed_at": "2021-08-02T04:01:02Z", + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33786", + "html_url": "https://github.com/WordPress/gutenberg/pull/33786", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33786.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33786.patch" + }, + "body": "Follow-up to #33761\r\n\r\nSeem like the bug report template never went trough prettier. Running `npm run format` adds the correct spacing to the .yml file.\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33785", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33785/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33785/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33785/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33785", + "id": 956986302, + "node_id": "MDExOlB1bGxSZXF1ZXN0NzAwNDk5Mjc0", + "number": 33785, + "title": "Readable JS assets Plugin: Fix webpack 5 support", + "user": { + "login": "walbo", + "id": 1415747, + "node_id": "MDQ6VXNlcjE0MTU3NDc=", + "avatar_url": "https://avatars.githubusercontent.com/u/1415747?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/walbo", + "html_url": "https://github.com/walbo", + "followers_url": "https://api.github.com/users/walbo/followers", + "following_url": "https://api.github.com/users/walbo/following{/other_user}", + "gists_url": "https://api.github.com/users/walbo/gists{/gist_id}", + "starred_url": "https://api.github.com/users/walbo/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/walbo/subscriptions", + "organizations_url": "https://api.github.com/users/walbo/orgs", + "repos_url": "https://api.github.com/users/walbo/repos", + "events_url": "https://api.github.com/users/walbo/events{/privacy}", + "received_events_url": "https://api.github.com/users/walbo/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 531680823, + "node_id": "MDU6TGFiZWw1MzE2ODA4MjM=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Bug", + "name": "[Type] Bug", + "color": "d93f0b", + "default": false, + "description": "An existing feature is broken." + }, + { + "id": 596512821, + "node_id": "MDU6TGFiZWw1OTY1MTI4MjE=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Build%20Tooling", + "name": "[Type] Build Tooling", + "color": "111111", + "default": false, + "description": "" + }, + { + "id": 3222328876, + "node_id": "MDU6TGFiZWwzMjIyMzI4ODc2", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Package]%20Readable%20JS%20Assets%20Webpack%20Plugin", + "name": "[Package] Readable JS Assets Webpack Plugin", + "color": "ed2572", + "default": false, + "description": "/packages/readable-js-assets-webpack-plugin" + } + ], + "state": "closed", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 1, + "created_at": "2021-07-30T18:50:05Z", + "updated_at": "2021-08-02T14:50:22Z", + "closed_at": "2021-08-02T14:49:37Z", + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33785", + "html_url": "https://github.com/WordPress/gutenberg/pull/33785", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33785.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33785.patch" + }, + "body": "<!-- Learn the overall process and best practices for pull requests at https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/repository-management.md#pull-requests. -->\r\n\r\n<!-- Gutenberg's license is in the process of updating to be dual-licensed under the GPL and MPL. As part of that transition, all new contributions are dual-licensed. For more information, see: https://github.com/WordPress/gutenberg/blob/trunk/LICENSE.md -->\r\n\r\n## Description\r\nIn webpack v5 `Compilation.chunks` and `Chunk.files` changed from arrays to sets. See https://webpack.js.org/blog/2020-10-10-webpack-5-release/#arrays-to-sets\r\n\r\nSupport both v4 and v5 by making sure we work with arrays (converting the set to array for v5) when generating the files list.\r\n\r\n## How has this been tested?\r\nTested the plugin both in webpack v4 and v5.\r\n<!-- Please describe in detail how you tested your changes. -->\r\n<!-- Include details of your testing environment, tests ran to see how -->\r\n<!-- your change affects other areas of the code, etc. -->\r\n\r\n## Types of changes\r\nBug fix\r\n\r\n## Checklist:\r\n- [x] My code is tested.\r\n- [x] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [ ] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [ ] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [ ] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [ ] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [ ] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33782", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33782/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33782/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33782/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33782", + "id": 956872839, + "node_id": "MDExOlB1bGxSZXF1ZXN0NzAwNDAzNDI1", + "number": 33782, + "title": "[RNMobile] Fix crash caused by column block with padding having paragraph as a child", + "user": { + "login": "ceyhun", + "id": 1845482, + "node_id": "MDQ6VXNlcjE4NDU0ODI=", + "avatar_url": "https://avatars.githubusercontent.com/u/1845482?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/ceyhun", + "html_url": "https://github.com/ceyhun", + "followers_url": "https://api.github.com/users/ceyhun/followers", + "following_url": "https://api.github.com/users/ceyhun/following{/other_user}", + "gists_url": "https://api.github.com/users/ceyhun/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ceyhun/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ceyhun/subscriptions", + "organizations_url": "https://api.github.com/users/ceyhun/orgs", + "repos_url": "https://api.github.com/users/ceyhun/repos", + "events_url": "https://api.github.com/users/ceyhun/events{/privacy}", + "received_events_url": "https://api.github.com/users/ceyhun/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 531680823, + "node_id": "MDU6TGFiZWw1MzE2ODA4MjM=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Bug", + "name": "[Type] Bug", + "color": "d93f0b", + "default": false, + "description": "An existing feature is broken." + }, + { + "id": 982506020, + "node_id": "MDU6TGFiZWw5ODI1MDYwMjA=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/Mobile%20App%20-%20i.e.%20Android%20or%20iOS", + "name": "Mobile App - i.e. Android or iOS", + "color": "a3ef7a", + "default": false, + "description": "Native mobile impl of the block editor. (Note: used in scripts, ping mobile folks to change)" + } + ], + "state": "closed", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 3, + "created_at": "2021-07-30T15:50:03Z", + "updated_at": "2021-08-03T09:18:47Z", + "closed_at": "2021-08-03T09:18:16Z", + "author_association": "MEMBER", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33782", + "html_url": "https://github.com/WordPress/gutenberg/pull/33782", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33782.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33782.patch" + }, + "body": "<!-- Learn the overall process and best practices for pull requests at https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/repository-management.md#pull-requests. -->\r\n\r\n<!-- Gutenberg's license is in the process of updating to be dual-licensed under the GPL and MPL. As part of that transition, all new contributions are dual-licensed. For more information, see: https://github.com/WordPress/gutenberg/blob/trunk/LICENSE.md -->\r\n\r\n## Description\r\n<!-- Please describe what you have changed or added -->\r\n\r\nFixes https://github.com/wordpress-mobile/WordPress-Android/issues/15016.\r\n\r\nColumn block has [a new feature](https://github.com/WordPress/gutenberg/pull/31778), where we can add paddings to a column block and it passes these to its child as `wrapperStyles`. These paddings can have units of `%` as well as `px`, `em`, etc. Since paragraph block on mobile doesn't yet support all of those units, the app crashes during layout. \r\n\r\n\r\n## How has this been tested?\r\n<!-- Please describe in detail how you tested your changes. -->\r\n<!-- Include details of your testing environment, tests ran to see how -->\r\n<!-- your change affects other areas of the code, etc. -->\r\n\r\nOn web, using a self-hosted or atomic site with latest Gutenberg version.\r\n1. Add a columns block\r\n1. Select 100 to add a single column\r\n1. Add a paragraph block inside this column and add some text\r\n1. Select back the column\r\n1. Add some padding from sidebar -> `Spacing` -> `Padding`\r\n1. Save the post as draft and open from Mobile Gutenberg\r\n\r\n<img width=\"276\" alt=\"column-settings\" src=\"https://user-images.githubusercontent.com/1845482/127677397-de6d9f79-5efa-499d-815d-57661f7a8071.png\">\r\n\r\nAlternatively you can use this HTML in the Gutenberg demo app by switching to HTML mode, pasting it and switching back to Visual mode to test:\r\n\r\n```\r\n<!-- wp:columns -->\r\n<div class=\"wp-block-columns\"><!-- wp:column {\"style\":{\"spacing\":{\"padding\":{\"top\":\"5px\",\"right\":\"5px\",\"bottom\":\"5px\",\"left\":\"5px\"}}}} -->\r\n<div class=\"wp-block-column\" style=\"padding-top:5px;padding-right:5px;padding-bottom:5px;padding-left:5px\"><!-- wp:paragraph -->\r\n<p>Test</p>\r\n<!-- /wp:paragraph --></div>\r\n<!-- /wp:column --></div>\r\n<!-- /wp:columns -->\r\n```\r\n\r\n## Screenshots <!-- if applicable -->\r\n\r\nBefore | After\r\n-- | -- \r\n<img width=\"300\" src=\"https://user-images.githubusercontent.com/1845482/127371989-4e661df9-672f-4b8d-9640-cab8162d98e5.png\">|<img width=\"300\" src=\"https://user-images.githubusercontent.com/1845482/127678357-dd079032-73f8-4fa4-b1f1-24a86fe10947.png\">\r\n\r\n\r\n\r\n\r\n\r\n## Types of changes\r\n<!-- What types of changes does your code introduce? -->\r\nBug fix (non-breaking change which fixes an issue)\r\n<!-- New feature (non-breaking change which adds functionality) -->\r\n<!-- Breaking change (fix or feature that would cause existing functionality to not work as expected) -->\r\n\r\n## Checklist:\r\n- [x] My code is tested.\r\n- [x] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [x] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [ ] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [x] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [x] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [x] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33781", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33781/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33781/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33781/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33781", + "id": 956812984, + "node_id": "MDExOlB1bGxSZXF1ZXN0NzAwMzUwNTc1", + "number": 33781, + "title": "[docs] fix: `supports.color.gradients` is plural", + "user": { + "login": "chrisvanpatten", + "id": 1231306, + "node_id": "MDQ6VXNlcjEyMzEzMDY=", + "avatar_url": "https://avatars.githubusercontent.com/u/1231306?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/chrisvanpatten", + "html_url": "https://github.com/chrisvanpatten", + "followers_url": "https://api.github.com/users/chrisvanpatten/followers", + "following_url": "https://api.github.com/users/chrisvanpatten/following{/other_user}", + "gists_url": "https://api.github.com/users/chrisvanpatten/gists{/gist_id}", + "starred_url": "https://api.github.com/users/chrisvanpatten/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/chrisvanpatten/subscriptions", + "organizations_url": "https://api.github.com/users/chrisvanpatten/orgs", + "repos_url": "https://api.github.com/users/chrisvanpatten/repos", + "events_url": "https://api.github.com/users/chrisvanpatten/events{/privacy}", + "received_events_url": "https://api.github.com/users/chrisvanpatten/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 567484057, + "node_id": "MDU6TGFiZWw1Njc0ODQwNTc=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Documentation", + "name": "[Type] Documentation", + "color": "bfd4f2", + "default": false, + "description": "" + }, + { + "id": 2551400612, + "node_id": "MDU6TGFiZWwyNTUxNDAwNjEy", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/developer-docs", + "name": "developer-docs", + "color": "1d76db", + "default": false, + "description": "Issues that impact the block editor developer documentation site" + } + ], + "state": "closed", + "locked": false, + "assignee": { + "login": "chrisvanpatten", + "id": 1231306, + "node_id": "MDQ6VXNlcjEyMzEzMDY=", + "avatar_url": "https://avatars.githubusercontent.com/u/1231306?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/chrisvanpatten", + "html_url": "https://github.com/chrisvanpatten", + "followers_url": "https://api.github.com/users/chrisvanpatten/followers", + "following_url": "https://api.github.com/users/chrisvanpatten/following{/other_user}", + "gists_url": "https://api.github.com/users/chrisvanpatten/gists{/gist_id}", + "starred_url": "https://api.github.com/users/chrisvanpatten/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/chrisvanpatten/subscriptions", + "organizations_url": "https://api.github.com/users/chrisvanpatten/orgs", + "repos_url": "https://api.github.com/users/chrisvanpatten/repos", + "events_url": "https://api.github.com/users/chrisvanpatten/events{/privacy}", + "received_events_url": "https://api.github.com/users/chrisvanpatten/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "chrisvanpatten", + "id": 1231306, + "node_id": "MDQ6VXNlcjEyMzEzMDY=", + "avatar_url": "https://avatars.githubusercontent.com/u/1231306?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/chrisvanpatten", + "html_url": "https://github.com/chrisvanpatten", + "followers_url": "https://api.github.com/users/chrisvanpatten/followers", + "following_url": "https://api.github.com/users/chrisvanpatten/following{/other_user}", + "gists_url": "https://api.github.com/users/chrisvanpatten/gists{/gist_id}", + "starred_url": "https://api.github.com/users/chrisvanpatten/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/chrisvanpatten/subscriptions", + "organizations_url": "https://api.github.com/users/chrisvanpatten/orgs", + "repos_url": "https://api.github.com/users/chrisvanpatten/repos", + "events_url": "https://api.github.com/users/chrisvanpatten/events{/privacy}", + "received_events_url": "https://api.github.com/users/chrisvanpatten/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 0, + "created_at": "2021-07-30T14:47:40Z", + "updated_at": "2021-07-30T16:23:33Z", + "closed_at": "2021-07-30T16:22:36Z", + "author_association": "MEMBER", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33781", + "html_url": "https://github.com/WordPress/gutenberg/pull/33781", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33781.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33781.patch" + }, + "body": "Small typo in the block supports documentation; `supports.color.gradient` should be `supports.color.gradients` as plural.", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33780", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33780/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33780/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33780/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33780", + "id": 956788321, + "node_id": "MDExOlB1bGxSZXF1ZXN0NzAwMzI5OTY1", + "number": 33780, + "title": "fix: broken link in documentation to block support mechanism", + "user": { + "login": "RhnSharma", + "id": 22129063, + "node_id": "MDQ6VXNlcjIyMTI5MDYz", + "avatar_url": "https://avatars.githubusercontent.com/u/22129063?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/RhnSharma", + "html_url": "https://github.com/RhnSharma", + "followers_url": "https://api.github.com/users/RhnSharma/followers", + "following_url": "https://api.github.com/users/RhnSharma/following{/other_user}", + "gists_url": "https://api.github.com/users/RhnSharma/gists{/gist_id}", + "starred_url": "https://api.github.com/users/RhnSharma/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/RhnSharma/subscriptions", + "organizations_url": "https://api.github.com/users/RhnSharma/orgs", + "repos_url": "https://api.github.com/users/RhnSharma/repos", + "events_url": "https://api.github.com/users/RhnSharma/events{/privacy}", + "received_events_url": "https://api.github.com/users/RhnSharma/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 531680823, + "node_id": "MDU6TGFiZWw1MzE2ODA4MjM=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Bug", + "name": "[Type] Bug", + "color": "d93f0b", + "default": false, + "description": "An existing feature is broken." + }, + { + "id": 567484057, + "node_id": "MDU6TGFiZWw1Njc0ODQwNTc=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Documentation", + "name": "[Type] Documentation", + "color": "bfd4f2", + "default": false, + "description": "" + } + ], + "state": "closed", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 0, + "created_at": "2021-07-30T14:17:38Z", + "updated_at": "2021-08-04T09:15:30Z", + "closed_at": "2021-08-04T09:14:57Z", + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33780", + "html_url": "https://github.com/WordPress/gutenberg/pull/33780", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33780.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33780.patch" + }, + "body": "<!-- Learn the overall process and best practices for pull requests at https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/repository-management.md#pull-requests. -->\r\n\r\n<!-- Gutenberg's license is in the process of updating to be dual-licensed under the GPL and MPL. As part of that transition, all new contributions are dual-licensed. For more information, see: https://github.com/WordPress/gutenberg/blob/trunk/LICENSE.md -->\r\n\r\n## Description\r\n<!-- Please describe what you have changed or added -->\r\nFixes #33778\r\nFix a broken link to block support mechanism in `theme-json.md`.\r\n\r\nHi @Mamaduka, how does this look?\r\nLet me know if this needs any changes.\r\nThanks\r\n\r\n## Types of changes\r\n<!-- What types of changes does your code introduce? -->\r\n Bug fix (non-breaking change which fixes an issue) \r\n<!-- New feature (non-breaking change which adds functionality) -->\r\n<!-- Breaking change (fix or feature that would cause existing functionality to not work as expected) -->\r\n\r\n## Checklist:\r\n- [ ] My code is tested.\r\n- [x] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [x] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [ ] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [ ] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [ ] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [ ] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33779", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33779/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33779/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33779/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33779", + "id": 956687808, + "node_id": "MDExOlB1bGxSZXF1ZXN0NzAwMjQzMzA1", + "number": 33779, + "title": "URL Details: Avoid PHP notice when parsing protocol-relative icon URLs", + "user": { + "login": "Mamaduka", + "id": 240569, + "node_id": "MDQ6VXNlcjI0MDU2OQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/240569?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Mamaduka", + "html_url": "https://github.com/Mamaduka", + "followers_url": "https://api.github.com/users/Mamaduka/followers", + "following_url": "https://api.github.com/users/Mamaduka/following{/other_user}", + "gists_url": "https://api.github.com/users/Mamaduka/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Mamaduka/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Mamaduka/subscriptions", + "organizations_url": "https://api.github.com/users/Mamaduka/orgs", + "repos_url": "https://api.github.com/users/Mamaduka/repos", + "events_url": "https://api.github.com/users/Mamaduka/events{/privacy}", + "received_events_url": "https://api.github.com/users/Mamaduka/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 531680823, + "node_id": "MDU6TGFiZWw1MzE2ODA4MjM=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Bug", + "name": "[Type] Bug", + "color": "d93f0b", + "default": false, + "description": "An existing feature is broken." + }, + { + "id": 1838782557, + "node_id": "MDU6TGFiZWwxODM4NzgyNTU3", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Feature]%20Link%20Editing", + "name": "[Feature] Link Editing", + "color": "fbca04", + "default": false, + "description": "Link components (LinkControl, URLInput) and integrations (RichText link formatting)" + } + ], + "state": "closed", + "locked": false, + "assignee": { + "login": "Mamaduka", + "id": 240569, + "node_id": "MDQ6VXNlcjI0MDU2OQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/240569?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Mamaduka", + "html_url": "https://github.com/Mamaduka", + "followers_url": "https://api.github.com/users/Mamaduka/followers", + "following_url": "https://api.github.com/users/Mamaduka/following{/other_user}", + "gists_url": "https://api.github.com/users/Mamaduka/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Mamaduka/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Mamaduka/subscriptions", + "organizations_url": "https://api.github.com/users/Mamaduka/orgs", + "repos_url": "https://api.github.com/users/Mamaduka/repos", + "events_url": "https://api.github.com/users/Mamaduka/events{/privacy}", + "received_events_url": "https://api.github.com/users/Mamaduka/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "Mamaduka", + "id": 240569, + "node_id": "MDQ6VXNlcjI0MDU2OQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/240569?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Mamaduka", + "html_url": "https://github.com/Mamaduka", + "followers_url": "https://api.github.com/users/Mamaduka/followers", + "following_url": "https://api.github.com/users/Mamaduka/following{/other_user}", + "gists_url": "https://api.github.com/users/Mamaduka/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Mamaduka/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Mamaduka/subscriptions", + "organizations_url": "https://api.github.com/users/Mamaduka/orgs", + "repos_url": "https://api.github.com/users/Mamaduka/repos", + "events_url": "https://api.github.com/users/Mamaduka/events{/privacy}", + "received_events_url": "https://api.github.com/users/Mamaduka/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 0, + "created_at": "2021-07-30T12:09:09Z", + "updated_at": "2021-07-30T14:14:09Z", + "closed_at": "2021-07-30T14:13:37Z", + "author_association": "MEMBER", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33779", + "html_url": "https://github.com/WordPress/gutenberg/pull/33779", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33779.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33779.patch" + }, + "body": "## Description\r\nSites might use protocol-relative URLs for icons. When a similar URL is parsed with `parse_url`, it doesn't return schema and triggered PHP notice.\r\n\r\nExample: https://3v4l.org/SFEiZ\r\n\r\n## How has this been tested?\r\n1. Create a post.\r\n2. Add a paragraph with a link to `https://twitter.com/`\r\n3. Display rich URL preview.\r\n4. WP shouldn't log the `PHP Notice: Undefined index: scheme` message.\r\n\r\n## Types of changes\r\nBugfix\r\n\r\n## Checklist:\r\n- [x] My code is tested.\r\n- [x] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [ ] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [ ] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [x] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [x] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [ ] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33777", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33777/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33777/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33777/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33777", + "id": 956555230, + "node_id": "MDExOlB1bGxSZXF1ZXN0NzAwMTMwNjkz", + "number": 33777, + "title": "Enable ability to remove a link from the Nav Link block in the Nav Block", + "user": { + "login": "getdave", + "id": 444434, + "node_id": "MDQ6VXNlcjQ0NDQzNA==", + "avatar_url": "https://avatars.githubusercontent.com/u/444434?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/getdave", + "html_url": "https://github.com/getdave", + "followers_url": "https://api.github.com/users/getdave/followers", + "following_url": "https://api.github.com/users/getdave/following{/other_user}", + "gists_url": "https://api.github.com/users/getdave/gists{/gist_id}", + "starred_url": "https://api.github.com/users/getdave/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/getdave/subscriptions", + "organizations_url": "https://api.github.com/users/getdave/orgs", + "repos_url": "https://api.github.com/users/getdave/repos", + "events_url": "https://api.github.com/users/getdave/events{/privacy}", + "received_events_url": "https://api.github.com/users/getdave/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 1225853227, + "node_id": "MDU6TGFiZWwxMjI1ODUzMjI3", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Block]%20Navigation", + "name": "[Block] Navigation", + "color": "6767e5", + "default": false, + "description": "" + } + ], + "state": "closed", + "locked": false, + "assignee": { + "login": "getdave", + "id": 444434, + "node_id": "MDQ6VXNlcjQ0NDQzNA==", + "avatar_url": "https://avatars.githubusercontent.com/u/444434?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/getdave", + "html_url": "https://github.com/getdave", + "followers_url": "https://api.github.com/users/getdave/followers", + "following_url": "https://api.github.com/users/getdave/following{/other_user}", + "gists_url": "https://api.github.com/users/getdave/gists{/gist_id}", + "starred_url": "https://api.github.com/users/getdave/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/getdave/subscriptions", + "organizations_url": "https://api.github.com/users/getdave/orgs", + "repos_url": "https://api.github.com/users/getdave/repos", + "events_url": "https://api.github.com/users/getdave/events{/privacy}", + "received_events_url": "https://api.github.com/users/getdave/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "getdave", + "id": 444434, + "node_id": "MDQ6VXNlcjQ0NDQzNA==", + "avatar_url": "https://avatars.githubusercontent.com/u/444434?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/getdave", + "html_url": "https://github.com/getdave", + "followers_url": "https://api.github.com/users/getdave/followers", + "following_url": "https://api.github.com/users/getdave/following{/other_user}", + "gists_url": "https://api.github.com/users/getdave/gists{/gist_id}", + "starred_url": "https://api.github.com/users/getdave/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/getdave/subscriptions", + "organizations_url": "https://api.github.com/users/getdave/orgs", + "repos_url": "https://api.github.com/users/getdave/repos", + "events_url": "https://api.github.com/users/getdave/events{/privacy}", + "received_events_url": "https://api.github.com/users/getdave/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 9, + "created_at": "2021-07-30T09:04:31Z", + "updated_at": "2021-08-03T12:59:45Z", + "closed_at": "2021-08-03T12:59:19Z", + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33777", + "html_url": "https://github.com/WordPress/gutenberg/pull/33777", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33777.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33777.patch" + }, + "body": "<!-- Learn the overall process and best practices for pull requests at https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/repository-management.md#pull-requests. -->\r\n\r\n<!-- Gutenberg's license is in the process of updating to be dual-licensed under the GPL and MPL. As part of that transition, all new contributions are dual-licensed. For more information, see: https://github.com/WordPress/gutenberg/blob/trunk/LICENSE.md -->\r\n\r\n## Description\r\n\r\nIn https://github.com/WordPress/gutenberg/issues/18866 we see that it is impossible to remove a link from the Nav Link block once it's been added. That's not good.\r\n\r\n[I've already added a `Unlink` feature to the link UI in the format library](https://github.com/WordPress/gutenberg/pull/32541) for rich text and I've been meaning to port it over to the Nav Block link implementation.\r\n\r\nThis PR enables the ability to unset links on the Nav Link block using the `Unlink` button in the link UI.\r\n\r\n**Note**: we are intentionally not mirroring this unlink behaviour in the block toolbar for [the reasons outlined in this comment](https://github.com/WordPress/gutenberg/pull/33777#issuecomment-889829952).\r\n\r\n## How has this been tested?\r\n\r\n* Create a new Post.\r\n* Add Nav Block.\r\n* Add a custom link to anything you want.\r\n* Click on link.\r\n* See `Unlink` button in popover.\r\n* Click button.\r\n* Remove is removed and the UI of the `Nav Link` block should be reset to default state.\r\n* Check you can click and re-add the link as required.\r\n* Check you can do the same in the Nav Editor screen.\r\n\r\n## Screenshots <!-- if applicable -->\r\n\r\n\r\n#### Post Editor\r\nhttps://user-images.githubusercontent.com/444434/127629489-927586d7-6bb8-49eb-85a9-b09e3de7263e.mp4\r\n\r\n\r\n#### Nav Editor\r\nhttps://user-images.githubusercontent.com/444434/127629484-e5837372-a98c-40a8-8678-7afd8d48b98f.mp4\r\n\r\n\r\n\r\n\r\n## Types of changes\r\nNew feature (non-breaking change which adds functionality)\r\n\r\n## Checklist:\r\n- [ ] My code is tested.\r\n- [ ] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [ ] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [ ] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [ ] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [ ] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [ ] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33771", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33771/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33771/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33771/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33771", + "id": 956384942, + "node_id": "MDExOlB1bGxSZXF1ZXN0Njk5OTg5NDU2", + "number": 33771, + "title": "Add error boundaries to widget screens", + "user": { + "login": "talldan", + "id": 677833, + "node_id": "MDQ6VXNlcjY3NzgzMw==", + "avatar_url": "https://avatars.githubusercontent.com/u/677833?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/talldan", + "html_url": "https://github.com/talldan", + "followers_url": "https://api.github.com/users/talldan/followers", + "following_url": "https://api.github.com/users/talldan/following{/other_user}", + "gists_url": "https://api.github.com/users/talldan/gists{/gist_id}", + "starred_url": "https://api.github.com/users/talldan/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/talldan/subscriptions", + "organizations_url": "https://api.github.com/users/talldan/orgs", + "repos_url": "https://api.github.com/users/talldan/repos", + "events_url": "https://api.github.com/users/talldan/events{/privacy}", + "received_events_url": "https://api.github.com/users/talldan/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 531680825, + "node_id": "MDU6TGFiZWw1MzE2ODA4MjU=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Enhancement", + "name": "[Type] Enhancement", + "color": "3993a3", + "default": false, + "description": "A suggestion for improvement." + }, + { + "id": 1414926647, + "node_id": "MDU6TGFiZWwxNDE0OTI2NjQ3", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Package]%20Edit%20Widgets", + "name": "[Package] Edit Widgets", + "color": "ed2572", + "default": false, + "description": "/packages/edit-widgets" + }, + { + "id": 2463256422, + "node_id": "MDU6TGFiZWwyNDYzMjU2NDIy", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/Backport%20to%20WP%20Minor%20Release", + "name": "Backport to WP Minor Release", + "color": "491d8e", + "default": false, + "description": "PRs to be back-ported to a WordPress minor release." + }, + { + "id": 2632875097, + "node_id": "MDU6TGFiZWwyNjMyODc1MDk3", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Feature]%20Widgets%20Customizer", + "name": "[Feature] Widgets Customizer", + "color": "fbca04", + "default": false, + "description": "Ability to add and edit blocks in Customize → Widgets." + } + ], + "state": "closed", + "locked": false, + "assignee": { + "login": "talldan", + "id": 677833, + "node_id": "MDQ6VXNlcjY3NzgzMw==", + "avatar_url": "https://avatars.githubusercontent.com/u/677833?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/talldan", + "html_url": "https://github.com/talldan", + "followers_url": "https://api.github.com/users/talldan/followers", + "following_url": "https://api.github.com/users/talldan/following{/other_user}", + "gists_url": "https://api.github.com/users/talldan/gists{/gist_id}", + "starred_url": "https://api.github.com/users/talldan/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/talldan/subscriptions", + "organizations_url": "https://api.github.com/users/talldan/orgs", + "repos_url": "https://api.github.com/users/talldan/repos", + "events_url": "https://api.github.com/users/talldan/events{/privacy}", + "received_events_url": "https://api.github.com/users/talldan/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "talldan", + "id": 677833, + "node_id": "MDQ6VXNlcjY3NzgzMw==", + "avatar_url": "https://avatars.githubusercontent.com/u/677833?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/talldan", + "html_url": "https://github.com/talldan", + "followers_url": "https://api.github.com/users/talldan/followers", + "following_url": "https://api.github.com/users/talldan/following{/other_user}", + "gists_url": "https://api.github.com/users/talldan/gists{/gist_id}", + "starred_url": "https://api.github.com/users/talldan/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/talldan/subscriptions", + "organizations_url": "https://api.github.com/users/talldan/orgs", + "repos_url": "https://api.github.com/users/talldan/repos", + "events_url": "https://api.github.com/users/talldan/events{/privacy}", + "received_events_url": "https://api.github.com/users/talldan/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 1, + "created_at": "2021-07-30T04:14:40Z", + "updated_at": "2021-08-02T07:33:24Z", + "closed_at": "2021-08-02T03:20:39Z", + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33771", + "html_url": "https://github.com/WordPress/gutenberg/pull/33771", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33771.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33771.patch" + }, + "body": "## Description\r\nCloses #33620\r\n\r\nAdds error boundaries to the widgets screens. Previously users have reported JavaScript errors (like those solved by #33618) cause a blank white screen with very little information.\r\n\r\nThis PR at least adds a message and a Copy Error button. The edit widgets screen also has an 'Attempt Recovery' button, but I didn't add this to the customizer screen, as the customizer is a little more complex. When I attempted to do so, I found that the `activeSidebarControl` state was lost, so recovery would never work.\r\n\r\nThe ErrorBoundary component is also in need of refactoring and improvement, but this PR would be good to backport to a minor release, so I'd prefer to keep it simple.\r\n\r\n## How has this been tested?\r\n### Appearance > Widgets screen\r\n1. Have your dev environment running and add some code to throw an error in a widget screen component. e.g. add `throw new Error( 'Test' );` to somewhere like the Header component.\r\n2. Load the editor\r\n3. Observe the notice\r\n4. Copy the error and paste it somewhere, it should be the same as the error message thrown\r\n5. Click attempt recovery, observe the editor reloads, but you'll encounter the same error again\r\n\r\n### Appearance > Customize > Widgets screen\r\n1. Have your dev environment running and add some code to throw an error in a widget screen component. e.g. add `throw new Error( 'Test' );` to somewhere like the Header component.\r\n2. Load the editor\r\n3. Observe the notice\r\n4. Copy the error and paste it somewhere, it should be the same as the error message thrown\r\n\r\n## Screenshots <!-- if applicable -->\r\n### Appearance > Widgets screen\r\n<img width=\"802\" alt=\"Screenshot 2021-07-30 at 12 20 15 pm\" src=\"https://user-images.githubusercontent.com/677833/127599677-104170a9-74f2-4852-afda-9668443b116c.png\">\r\n\r\n### Appearance > Customize > Widgets screen\r\n<img width=\"298\" alt=\"Screenshot 2021-07-30 at 12 19 25 pm\" src=\"https://user-images.githubusercontent.com/677833/127599695-a745d9cc-1584-4710-ae38-066ce9227925.png\">\r\n\r\n## Types of changes\r\n<!-- What types of changes does your code introduce? -->\r\n<!-- Bug fix (non-breaking change which fixes an issue) -->\r\nNew feature (non-breaking change which adds functionality) \r\n<!-- Breaking change (fix or feature that would cause existing functionality to not work as expected) -->\r\n\r\n## Checklist:\r\n- [ ] My code is tested.\r\n- [x] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [x] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [x] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [x] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [x] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [x] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33764", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33764/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33764/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33764/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33764", + "id": 956032331, + "node_id": "MDExOlB1bGxSZXF1ZXN0Njk5Njk0MDMy", + "number": 33764, + "title": "[Documentation] Add missing comma", + "user": { + "login": "mrleemon", + "id": 2060659, + "node_id": "MDQ6VXNlcjIwNjA2NTk=", + "avatar_url": "https://avatars.githubusercontent.com/u/2060659?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/mrleemon", + "html_url": "https://github.com/mrleemon", + "followers_url": "https://api.github.com/users/mrleemon/followers", + "following_url": "https://api.github.com/users/mrleemon/following{/other_user}", + "gists_url": "https://api.github.com/users/mrleemon/gists{/gist_id}", + "starred_url": "https://api.github.com/users/mrleemon/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/mrleemon/subscriptions", + "organizations_url": "https://api.github.com/users/mrleemon/orgs", + "repos_url": "https://api.github.com/users/mrleemon/repos", + "events_url": "https://api.github.com/users/mrleemon/events{/privacy}", + "received_events_url": "https://api.github.com/users/mrleemon/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 567484057, + "node_id": "MDU6TGFiZWw1Njc0ODQwNTc=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Documentation", + "name": "[Type] Documentation", + "color": "bfd4f2", + "default": false, + "description": "" + } + ], + "state": "closed", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 0, + "created_at": "2021-07-29T16:55:31Z", + "updated_at": "2021-07-30T04:59:01Z", + "closed_at": "2021-07-30T04:58:41Z", + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33764", + "html_url": "https://github.com/WordPress/gutenberg/pull/33764", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33764.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33764.patch" + }, + "body": "<!-- Learn the overall process and best practices for pull requests at https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/repository-management.md#pull-requests. -->\r\n\r\n<!-- Gutenberg's license is in the process of updating to be dual-licensed under the GPL and MPL. As part of that transition, all new contributions are dual-licensed. For more information, see: https://github.com/WordPress/gutenberg/blob/trunk/LICENSE.md -->\r\n\r\n## Description\r\n<!-- Please describe what you have changed or added -->\r\n\r\n## How has this been tested?\r\n<!-- Please describe in detail how you tested your changes. -->\r\n<!-- Include details of your testing environment, tests ran to see how -->\r\n<!-- your change affects other areas of the code, etc. -->\r\n\r\n## Screenshots <!-- if applicable -->\r\n\r\n## Types of changes\r\n<!-- What types of changes does your code introduce? -->\r\n<!-- Bug fix (non-breaking change which fixes an issue) -->\r\n<!-- New feature (non-breaking change which adds functionality) -->\r\n<!-- Breaking change (fix or feature that would cause existing functionality to not work as expected) -->\r\n\r\n## Checklist:\r\n- [ ] My code is tested.\r\n- [ ] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [ ] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [ ] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [ ] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [ ] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [ ] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33761", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33761/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33761/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33761/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33761", + "id": 955949660, + "node_id": "MDExOlB1bGxSZXF1ZXN0Njk5NjI0MDM2", + "number": 33761, + "title": "GitHub Templates: Fix spacing in bug report template", + "user": { + "login": "ryelle", + "id": 541093, + "node_id": "MDQ6VXNlcjU0MTA5Mw==", + "avatar_url": "https://avatars.githubusercontent.com/u/541093?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/ryelle", + "html_url": "https://github.com/ryelle", + "followers_url": "https://api.github.com/users/ryelle/followers", + "following_url": "https://api.github.com/users/ryelle/following{/other_user}", + "gists_url": "https://api.github.com/users/ryelle/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ryelle/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ryelle/subscriptions", + "organizations_url": "https://api.github.com/users/ryelle/orgs", + "repos_url": "https://api.github.com/users/ryelle/repos", + "events_url": "https://api.github.com/users/ryelle/events{/privacy}", + "received_events_url": "https://api.github.com/users/ryelle/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 1032028862, + "node_id": "MDU6TGFiZWwxMDMyMDI4ODYy", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Project%20Management", + "name": "[Type] Project Management", + "color": "e55ead", + "default": false, + "description": "Meta-issues related to project management of Gutenberg" + } + ], + "state": "closed", + "locked": false, + "assignee": { + "login": "ryelle", + "id": 541093, + "node_id": "MDQ6VXNlcjU0MTA5Mw==", + "avatar_url": "https://avatars.githubusercontent.com/u/541093?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/ryelle", + "html_url": "https://github.com/ryelle", + "followers_url": "https://api.github.com/users/ryelle/followers", + "following_url": "https://api.github.com/users/ryelle/following{/other_user}", + "gists_url": "https://api.github.com/users/ryelle/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ryelle/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ryelle/subscriptions", + "organizations_url": "https://api.github.com/users/ryelle/orgs", + "repos_url": "https://api.github.com/users/ryelle/repos", + "events_url": "https://api.github.com/users/ryelle/events{/privacy}", + "received_events_url": "https://api.github.com/users/ryelle/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "ryelle", + "id": 541093, + "node_id": "MDQ6VXNlcjU0MTA5Mw==", + "avatar_url": "https://avatars.githubusercontent.com/u/541093?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/ryelle", + "html_url": "https://github.com/ryelle", + "followers_url": "https://api.github.com/users/ryelle/followers", + "following_url": "https://api.github.com/users/ryelle/following{/other_user}", + "gists_url": "https://api.github.com/users/ryelle/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ryelle/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ryelle/subscriptions", + "organizations_url": "https://api.github.com/users/ryelle/orgs", + "repos_url": "https://api.github.com/users/ryelle/repos", + "events_url": "https://api.github.com/users/ryelle/events{/privacy}", + "received_events_url": "https://api.github.com/users/ryelle/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 0, + "created_at": "2021-07-29T15:17:03Z", + "updated_at": "2021-07-29T15:59:58Z", + "closed_at": "2021-07-29T15:59:32Z", + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33761", + "html_url": "https://github.com/WordPress/gutenberg/pull/33761", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33761.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33761.patch" + }, + "body": "Follow up to #33713, which had some yml syntax issues that caused the Bug Report template to disappear. This fixes up some indentation, spacing, and moves the `required` value into the `validation` property to match the documentation.", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33757", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33757/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33757/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33757/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33757", + "id": 955801397, + "node_id": "MDExOlB1bGxSZXF1ZXN0Njk5NDk3NzA3", + "number": 33757, + "title": "[RNMobile] Bump SauceLabs caps", + "user": { + "login": "hypest", + "id": 1032913, + "node_id": "MDQ6VXNlcjEwMzI5MTM=", + "avatar_url": "https://avatars.githubusercontent.com/u/1032913?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/hypest", + "html_url": "https://github.com/hypest", + "followers_url": "https://api.github.com/users/hypest/followers", + "following_url": "https://api.github.com/users/hypest/following{/other_user}", + "gists_url": "https://api.github.com/users/hypest/gists{/gist_id}", + "starred_url": "https://api.github.com/users/hypest/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/hypest/subscriptions", + "organizations_url": "https://api.github.com/users/hypest/orgs", + "repos_url": "https://api.github.com/users/hypest/repos", + "events_url": "https://api.github.com/users/hypest/events{/privacy}", + "received_events_url": "https://api.github.com/users/hypest/received_events", + "type": "User", + "site_admin": false + }, + "labels": [], + "state": "closed", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 1, + "created_at": "2021-07-29T12:40:07Z", + "updated_at": "2021-08-03T10:19:08Z", + "closed_at": "2021-08-03T10:18:40Z", + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33757", + "html_url": "https://github.com/WordPress/gutenberg/pull/33757", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33757.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33757.patch" + }, + "body": "<!-- Learn the overall process and best practices for pull requests at https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/repository-management.md#pull-requests. -->\r\n\r\n<!-- Gutenberg's license is in the process of updating to be dual-licensed under the GPL and MPL. As part of that transition, all new contributions are dual-licensed. For more information, see: https://github.com/WordPress/gutenberg/blob/trunk/LICENSE.md -->\r\n\r\n## Description\r\nBumping the Appium and iOS versions used on SauceLabs, in an attempt to improve test reliability in gutenberg-mobile.\r\n\r\ngutenberg-mobile PR: https://github.com/wordpress-mobile/gutenberg-mobile/pull/3770\r\n\r\n## How has this been tested?\r\nBy checking the mobile device CI tests on the gutenberg-mobile PR.\r\n\r\n1. Bumping the iOS version used in the iOS simulator to the latest available on SauceLabs, v14.5.\r\n2. Bumping the Appium version used in the iOS run to v1.20.1. **Note:** this is not the same version as specified in our package.json (v1.20.2) because the `.2` doesn't seem to be available yet on SauceLabs for the iOS targets (it is for Android though 🤷‍♂️).\r\n3. Bumping the Appium version used in the Android run to v1.20.2, same as the one used via package.json.\r\n\r\n## Checklist:\r\n- [x] My code is tested.\r\n- [x] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [x] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [x] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [x] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [x] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [x] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33755", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33755/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33755/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33755/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33755", + "id": 955764324, + "node_id": "MDExOlB1bGxSZXF1ZXN0Njk5NDY1NzQz", + "number": 33755, + "title": "Mobile Release v1.58.1", + "user": { + "login": "fluiddot", + "id": 14905380, + "node_id": "MDQ6VXNlcjE0OTA1Mzgw", + "avatar_url": "https://avatars.githubusercontent.com/u/14905380?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/fluiddot", + "html_url": "https://github.com/fluiddot", + "followers_url": "https://api.github.com/users/fluiddot/followers", + "following_url": "https://api.github.com/users/fluiddot/following{/other_user}", + "gists_url": "https://api.github.com/users/fluiddot/gists{/gist_id}", + "starred_url": "https://api.github.com/users/fluiddot/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/fluiddot/subscriptions", + "organizations_url": "https://api.github.com/users/fluiddot/orgs", + "repos_url": "https://api.github.com/users/fluiddot/repos", + "events_url": "https://api.github.com/users/fluiddot/events{/privacy}", + "received_events_url": "https://api.github.com/users/fluiddot/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 982506020, + "node_id": "MDU6TGFiZWw5ODI1MDYwMjA=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/Mobile%20App%20-%20i.e.%20Android%20or%20iOS", + "name": "Mobile App - i.e. Android or iOS", + "color": "a3ef7a", + "default": false, + "description": "Native mobile impl of the block editor. (Note: used in scripts, ping mobile folks to change)" + } + ], + "state": "closed", + "locked": false, + "assignee": { + "login": "fluiddot", + "id": 14905380, + "node_id": "MDQ6VXNlcjE0OTA1Mzgw", + "avatar_url": "https://avatars.githubusercontent.com/u/14905380?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/fluiddot", + "html_url": "https://github.com/fluiddot", + "followers_url": "https://api.github.com/users/fluiddot/followers", + "following_url": "https://api.github.com/users/fluiddot/following{/other_user}", + "gists_url": "https://api.github.com/users/fluiddot/gists{/gist_id}", + "starred_url": "https://api.github.com/users/fluiddot/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/fluiddot/subscriptions", + "organizations_url": "https://api.github.com/users/fluiddot/orgs", + "repos_url": "https://api.github.com/users/fluiddot/repos", + "events_url": "https://api.github.com/users/fluiddot/events{/privacy}", + "received_events_url": "https://api.github.com/users/fluiddot/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "fluiddot", + "id": 14905380, + "node_id": "MDQ6VXNlcjE0OTA1Mzgw", + "avatar_url": "https://avatars.githubusercontent.com/u/14905380?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/fluiddot", + "html_url": "https://github.com/fluiddot", + "followers_url": "https://api.github.com/users/fluiddot/followers", + "following_url": "https://api.github.com/users/fluiddot/following{/other_user}", + "gists_url": "https://api.github.com/users/fluiddot/gists{/gist_id}", + "starred_url": "https://api.github.com/users/fluiddot/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/fluiddot/subscriptions", + "organizations_url": "https://api.github.com/users/fluiddot/orgs", + "repos_url": "https://api.github.com/users/fluiddot/repos", + "events_url": "https://api.github.com/users/fluiddot/events{/privacy}", + "received_events_url": "https://api.github.com/users/fluiddot/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 1, + "created_at": "2021-07-29T11:57:57Z", + "updated_at": "2021-08-04T11:58:18Z", + "closed_at": "2021-07-30T17:02:04Z", + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33755", + "html_url": "https://github.com/WordPress/gutenberg/pull/33755", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33755.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33755.patch" + }, + "body": "## Description\nRelease 1.58.1 of the react-native-editor and Gutenberg-Mobile.\n\nFor more information about this release and testing instructions, please see the related Gutenberg-Mobile PR: https://github.com/wordpress-mobile/gutenberg-mobile/pull/3769\n\n## Checklist:\n- [x] My code is tested.\n- [x] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\n- [x] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\n- [ ] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\n- [x] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\n- [x] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\n- [x] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33753", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33753/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33753/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33753/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33753", + "id": 955746219, + "node_id": "MDExOlB1bGxSZXF1ZXN0Njk5NDUwMjY0", + "number": 33753, + "title": "Force link text to wrap in the Link UI when encountering extra long link text", + "user": { + "login": "getdave", + "id": 444434, + "node_id": "MDQ6VXNlcjQ0NDQzNA==", + "avatar_url": "https://avatars.githubusercontent.com/u/444434?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/getdave", + "html_url": "https://github.com/getdave", + "followers_url": "https://api.github.com/users/getdave/followers", + "following_url": "https://api.github.com/users/getdave/following{/other_user}", + "gists_url": "https://api.github.com/users/getdave/gists{/gist_id}", + "starred_url": "https://api.github.com/users/getdave/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/getdave/subscriptions", + "organizations_url": "https://api.github.com/users/getdave/orgs", + "repos_url": "https://api.github.com/users/getdave/repos", + "events_url": "https://api.github.com/users/getdave/events{/privacy}", + "received_events_url": "https://api.github.com/users/getdave/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 531680823, + "node_id": "MDU6TGFiZWw1MzE2ODA4MjM=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Bug", + "name": "[Type] Bug", + "color": "d93f0b", + "default": false, + "description": "An existing feature is broken." + }, + { + "id": 644027893, + "node_id": "MDU6TGFiZWw2NDQwMjc4OTM=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/Needs%20Design%20Feedback", + "name": "Needs Design Feedback", + "color": "0e8a16", + "default": false, + "description": "Anything that needs general design feedback." + }, + { + "id": 1838782557, + "node_id": "MDU6TGFiZWwxODM4NzgyNTU3", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Feature]%20Link%20Editing", + "name": "[Feature] Link Editing", + "color": "fbca04", + "default": false, + "description": "Link components (LinkControl, URLInput) and integrations (RichText link formatting)" + } + ], + "state": "closed", + "locked": false, + "assignee": { + "login": "getdave", + "id": 444434, + "node_id": "MDQ6VXNlcjQ0NDQzNA==", + "avatar_url": "https://avatars.githubusercontent.com/u/444434?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/getdave", + "html_url": "https://github.com/getdave", + "followers_url": "https://api.github.com/users/getdave/followers", + "following_url": "https://api.github.com/users/getdave/following{/other_user}", + "gists_url": "https://api.github.com/users/getdave/gists{/gist_id}", + "starred_url": "https://api.github.com/users/getdave/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/getdave/subscriptions", + "organizations_url": "https://api.github.com/users/getdave/orgs", + "repos_url": "https://api.github.com/users/getdave/repos", + "events_url": "https://api.github.com/users/getdave/events{/privacy}", + "received_events_url": "https://api.github.com/users/getdave/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "getdave", + "id": 444434, + "node_id": "MDQ6VXNlcjQ0NDQzNA==", + "avatar_url": "https://avatars.githubusercontent.com/u/444434?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/getdave", + "html_url": "https://github.com/getdave", + "followers_url": "https://api.github.com/users/getdave/followers", + "following_url": "https://api.github.com/users/getdave/following{/other_user}", + "gists_url": "https://api.github.com/users/getdave/gists{/gist_id}", + "starred_url": "https://api.github.com/users/getdave/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/getdave/subscriptions", + "organizations_url": "https://api.github.com/users/getdave/orgs", + "repos_url": "https://api.github.com/users/getdave/repos", + "events_url": "https://api.github.com/users/getdave/events{/privacy}", + "received_events_url": "https://api.github.com/users/getdave/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 9, + "created_at": "2021-07-29T11:32:59Z", + "updated_at": "2021-07-30T14:42:36Z", + "closed_at": "2021-07-30T14:42:14Z", + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33753", + "html_url": "https://github.com/WordPress/gutenberg/pull/33753", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33753.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33753.patch" + }, + "body": "<!-- Learn the overall process and best practices for pull requests at https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/repository-management.md#pull-requests. -->\r\n\r\n<!-- Gutenberg's license is in the process of updating to be dual-licensed under the GPL and MPL. As part of that transition, all new contributions are dual-licensed. For more information, see: https://github.com/WordPress/gutenberg/blob/trunk/LICENSE.md -->\r\n\r\n## Description\r\nCurrently in the Link UI, if the link text is particularly long then it is \"clipped\" and an ellipsis is shown. This is ok, but it does make the UI difficult to use if you are trying to [distinguish between similarly named posts](https://ibb.co/tczM3Y8).\r\n\r\nMoreover, if you enter a link which has no spaces and is very long then you encounter the same problem.\r\n\r\nThis PR resolves this by allowing the UI to wrap the link text. This allow the user to see the full link text whilst avoid any unwanted horizontal overflow.\r\n\r\nCloses https://github.com/WordPress/gutenberg/issues/33586\r\n\r\n\r\n## How has this been tested?\r\n1. Create a few posts with very long titles and publish them.\r\n2. Create a new post and add some text content.\r\n3. Create a link to one of your test posts (the ones with the long titles). \r\n4. See that the link UI wraps the long text both in edit and in preview mode.\r\n5. Create a very long freeform link with no spaces at all.\r\n6. Check that the link UI wraps the long text both in edit and in preview mode.\r\n\r\n## Screenshots <!-- if applicable -->\r\n\r\n\r\n<img width=\"880\" alt=\"Screen Shot 2021-07-29 at 11 17 16\" src=\"https://user-images.githubusercontent.com/444434/127484666-6d787d37-8ea8-43d0-a7cd-db6ae01306d8.png\">\r\n<img width=\"580\" alt=\"Screen Shot 2021-07-29 at 11 17 03\" src=\"https://user-images.githubusercontent.com/444434/127484669-21aed897-7026-4183-804d-51d5efa482b6.png\">\r\n\r\n\r\n## Types of changes\r\n<!-- What types of changes does your code introduce? -->\r\n<!-- Bug fix (non-breaking change which fixes an issue) -->\r\n<!-- New feature (non-breaking change which adds functionality) -->\r\n<!-- Breaking change (fix or feature that would cause existing functionality to not work as expected) -->\r\n\r\n## Checklist:\r\n- [ ] My code is tested.\r\n- [ ] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [ ] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [ ] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [ ] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [ ] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [ ] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33750", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33750/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33750/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33750/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33750", + "id": 955696398, + "node_id": "MDExOlB1bGxSZXF1ZXN0Njk5NDA3ODQ3", + "number": 33750, + "title": "Scripts: Use cssnano to minimize CSS files with build", + "user": { + "login": "gziolo", + "id": 699132, + "node_id": "MDQ6VXNlcjY5OTEzMg==", + "avatar_url": "https://avatars.githubusercontent.com/u/699132?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/gziolo", + "html_url": "https://github.com/gziolo", + "followers_url": "https://api.github.com/users/gziolo/followers", + "following_url": "https://api.github.com/users/gziolo/following{/other_user}", + "gists_url": "https://api.github.com/users/gziolo/gists{/gist_id}", + "starred_url": "https://api.github.com/users/gziolo/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/gziolo/subscriptions", + "organizations_url": "https://api.github.com/users/gziolo/orgs", + "repos_url": "https://api.github.com/users/gziolo/repos", + "events_url": "https://api.github.com/users/gziolo/events{/privacy}", + "received_events_url": "https://api.github.com/users/gziolo/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 531680825, + "node_id": "MDU6TGFiZWw1MzE2ODA4MjU=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Enhancement", + "name": "[Type] Enhancement", + "color": "3993a3", + "default": false, + "description": "A suggestion for improvement." + }, + { + "id": 978007737, + "node_id": "MDU6TGFiZWw5NzgwMDc3Mzc=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Package]%20Scripts", + "name": "[Package] Scripts", + "color": "ed2572", + "default": false, + "description": "/packages/scripts" + } + ], + "state": "closed", + "locked": false, + "assignee": { + "login": "gziolo", + "id": 699132, + "node_id": "MDQ6VXNlcjY5OTEzMg==", + "avatar_url": "https://avatars.githubusercontent.com/u/699132?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/gziolo", + "html_url": "https://github.com/gziolo", + "followers_url": "https://api.github.com/users/gziolo/followers", + "following_url": "https://api.github.com/users/gziolo/following{/other_user}", + "gists_url": "https://api.github.com/users/gziolo/gists{/gist_id}", + "starred_url": "https://api.github.com/users/gziolo/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/gziolo/subscriptions", + "organizations_url": "https://api.github.com/users/gziolo/orgs", + "repos_url": "https://api.github.com/users/gziolo/repos", + "events_url": "https://api.github.com/users/gziolo/events{/privacy}", + "received_events_url": "https://api.github.com/users/gziolo/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "gziolo", + "id": 699132, + "node_id": "MDQ6VXNlcjY5OTEzMg==", + "avatar_url": "https://avatars.githubusercontent.com/u/699132?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/gziolo", + "html_url": "https://github.com/gziolo", + "followers_url": "https://api.github.com/users/gziolo/followers", + "following_url": "https://api.github.com/users/gziolo/following{/other_user}", + "gists_url": "https://api.github.com/users/gziolo/gists{/gist_id}", + "starred_url": "https://api.github.com/users/gziolo/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/gziolo/subscriptions", + "organizations_url": "https://api.github.com/users/gziolo/orgs", + "repos_url": "https://api.github.com/users/gziolo/repos", + "events_url": "https://api.github.com/users/gziolo/events{/privacy}", + "received_events_url": "https://api.github.com/users/gziolo/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 3, + "created_at": "2021-07-29T10:28:57Z", + "updated_at": "2021-08-02T08:16:43Z", + "closed_at": "2021-08-01T08:20:16Z", + "author_association": "MEMBER", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33750", + "html_url": "https://github.com/WordPress/gutenberg/pull/33750", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33750.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33750.patch" + }, + "body": "<!-- Learn the overall process and best practices for pull requests at https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/repository-management.md#pull-requests. -->\r\n\r\n<!-- Gutenberg's license is in the process of updating to be dual-licensed under the GPL and MPL. As part of that transition, all new contributions are dual-licensed. For more information, see: https://github.com/WordPress/gutenberg/blob/trunk/LICENSE.md -->\r\n\r\n## Description\r\n<!-- Please describe what you have changed or added -->\r\nFollow-up for #33676 and the comment from @ocean90 https://github.com/WordPress/gutenberg/pull/33676#issuecomment-888435234:\r\n\r\n> This should probably be released as a breaking change because it can impact users which have their own PostCSS config which already includes cssnano (which optimize-css-assets-webpack-plugin uses by default) with a custom config for [allowed optimisations](https://cssnano.co/docs/optimisations/).\r\n> \r\n> Since sass-loader seems to minify the CSS already, should we maybe extend the default PostCSS config to use cssnano instead?\r\n> \r\n> Related:\r\n> * [github.com/WordPress/gutenberg/blob/44212878dcbf6f4616266eb0fb4756293a471615/tools/webpack/shared.js#L82-L93](https://github.com/WordPress/gutenberg/blob/44212878dcbf6f4616266eb0fb4756293a471615/tools/webpack/shared.js#L82-L93)\r\n> * [github.com/WordPress/gutenberg/blob/44212878dcbf6f4616266eb0fb4756293a471615/packages/scripts/config/webpack.config.js#L47-L55](https://github.com/WordPress/gutenberg/blob/44212878dcbf6f4616266eb0fb4756293a471615/packages/scripts/config/webpack.config.js#L47-L55)\r\n> * [github.com/WordPress/gutenberg/blob/44212878dcbf6f4616266eb0fb4756293a471615/packages/postcss-plugins-preset/lib/index.js](https://github.com/WordPress/gutenberg/blob/44212878dcbf6f4616266eb0fb4756293a471615/packages/postcss-plugins-preset/lib/index.js)\r\n\r\n\r\n## How has this been tested?\r\n<!-- Please describe in detail how you tested your changes. -->\r\n<!-- Include details of your testing environment, tests ran to see how -->\r\n<!-- your change affects other areas of the code, etc. -->\r\n\r\nI created a custom block with:\r\n\r\n```bash\r\nnpx wp-create-block example --no-wp-scripts\r\ncd example\r\n../node_modules/.bin/wp-scripts build\r\n```\r\n\r\nI updated used CSS files to end with `.css` to ensure that the output is properly minimized.\r\n\r\nI also ensured that the output of CSS files isn't minified in the dev mode with:\r\n```bash\r\n../node_modules/.bin/wp-scripts start\r\n```\r\n\r\nI added `cssnano.config.js` file in the root folder of the project with the following content:\r\n\r\n```js\r\nmodule.exports = {\r\n\tpreset: [ require( 'cssnano-preset-default' ), { discardComments: false } ],\r\n};\r\n```\r\n\r\nI also had to install `cssnano-preset-default' with:\r\n\r\n```bash\r\nnpm i cssnano-preset-default --save-dev\r\n```\r\n\r\nWhen I run:\r\n\r\n```bash\r\n../node_modules/.bin/wp-scripts build\r\n```\r\n\r\nI can see that comments in the CSS files are preserved. It means that the custom config is properly loaded when present.\r\n\r\n## Types of changes\r\n<!-- What types of changes does your code introduce? -->\r\n<!-- Bug fix (non-breaking change which fixes an issue) -->\r\n<!-- New feature (non-breaking change which adds functionality) -->\r\n<!-- Breaking change (fix or feature that would cause existing functionality to not work as expected) -->\r\nEnhancement.\r\n\r\n\r\n## Checklist:\r\n- [x] My code is tested.\r\n- [x] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [x] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [x] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [x] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [x] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [x] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33749", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33749/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33749/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33749/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33749", + "id": 955687904, + "node_id": "MDExOlB1bGxSZXF1ZXN0Njk5NDAwNTQ3", + "number": 33749, + "title": "Lazy render block types in the inserter", + "user": { + "login": "youknowriad", + "id": 272444, + "node_id": "MDQ6VXNlcjI3MjQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/272444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/youknowriad", + "html_url": "https://github.com/youknowriad", + "followers_url": "https://api.github.com/users/youknowriad/followers", + "following_url": "https://api.github.com/users/youknowriad/following{/other_user}", + "gists_url": "https://api.github.com/users/youknowriad/gists{/gist_id}", + "starred_url": "https://api.github.com/users/youknowriad/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/youknowriad/subscriptions", + "organizations_url": "https://api.github.com/users/youknowriad/orgs", + "repos_url": "https://api.github.com/users/youknowriad/repos", + "events_url": "https://api.github.com/users/youknowriad/events{/privacy}", + "received_events_url": "https://api.github.com/users/youknowriad/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 596962434, + "node_id": "MDU6TGFiZWw1OTY5NjI0MzQ=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Feature]%20Inserter", + "name": "[Feature] Inserter", + "color": "fbca04", + "default": false, + "description": "" + }, + { + "id": 731693674, + "node_id": "MDU6TGFiZWw3MzE2OTM2NzQ=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Performance", + "name": "[Type] Performance", + "color": "f3f4fe", + "default": false, + "description": "" + } + ], + "state": "closed", + "locked": false, + "assignee": { + "login": "youknowriad", + "id": 272444, + "node_id": "MDQ6VXNlcjI3MjQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/272444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/youknowriad", + "html_url": "https://github.com/youknowriad", + "followers_url": "https://api.github.com/users/youknowriad/followers", + "following_url": "https://api.github.com/users/youknowriad/following{/other_user}", + "gists_url": "https://api.github.com/users/youknowriad/gists{/gist_id}", + "starred_url": "https://api.github.com/users/youknowriad/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/youknowriad/subscriptions", + "organizations_url": "https://api.github.com/users/youknowriad/orgs", + "repos_url": "https://api.github.com/users/youknowriad/repos", + "events_url": "https://api.github.com/users/youknowriad/events{/privacy}", + "received_events_url": "https://api.github.com/users/youknowriad/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "youknowriad", + "id": 272444, + "node_id": "MDQ6VXNlcjI3MjQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/272444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/youknowriad", + "html_url": "https://github.com/youknowriad", + "followers_url": "https://api.github.com/users/youknowriad/followers", + "following_url": "https://api.github.com/users/youknowriad/following{/other_user}", + "gists_url": "https://api.github.com/users/youknowriad/gists{/gist_id}", + "starred_url": "https://api.github.com/users/youknowriad/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/youknowriad/subscriptions", + "organizations_url": "https://api.github.com/users/youknowriad/orgs", + "repos_url": "https://api.github.com/users/youknowriad/repos", + "events_url": "https://api.github.com/users/youknowriad/events{/privacy}", + "received_events_url": "https://api.github.com/users/youknowriad/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 16, + "created_at": "2021-07-29T10:18:38Z", + "updated_at": "2021-07-30T18:56:37Z", + "closed_at": "2021-07-30T18:56:15Z", + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33749", + "html_url": "https://github.com/WordPress/gutenberg/pull/33749", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33749.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33749.patch" + }, + "body": "Opening the inserter is very a slow operation, it takes approximatively 360ms according to our metrics https://codehealth-riad.vercel.app and the size of the post don't have an impact there meaning on slow machines, folks could potentially notice a small lag when clicking the \"open inserter\" button.\r\n\r\nI tried to debug this using the Chrome tools, and I noticed that the biggest part of that time is spent on rendering the block types, there's just a lot of block types and the number grows with third-party blocks.\r\n\r\nThis PR uses a technique we previously used for the patterns list to make the inserter feel more responsive: render the inserter categories one by one, and then let the browser do more priority things (like actually opening the inserter) before continuing\r\n\r\n**Trace before this PR:** \r\n<img width=\"717\" alt=\"Screen Shot 2021-07-29 at 11 11 33 AM\" src=\"https://user-images.githubusercontent.com/272444/127474913-61402e61-36b3-4a14-ac0d-36e98265640d.png\">\r\n\r\n**Trace after the PR**\r\n<img width=\"1286\" alt=\"Screen Shot 2021-07-29 at 11 12 17 AM\" src=\"https://user-images.githubusercontent.com/272444/127475110-acbe295f-158b-4f54-b61d-d25c1aad7600.png\">\r\n\r\nNotice that now the trace is split into smaller chunks which allows the browser to feel more responsive.", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33748", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33748/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33748/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33748/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33748", + "id": 955676709, + "node_id": "MDExOlB1bGxSZXF1ZXN0Njk5MzkxMDcx", + "number": 33748, + "title": "Fix regressed menu selection dropdown placeholder value for Nav Editor menu locations UI", + "user": { + "login": "getdave", + "id": 444434, + "node_id": "MDQ6VXNlcjQ0NDQzNA==", + "avatar_url": "https://avatars.githubusercontent.com/u/444434?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/getdave", + "html_url": "https://github.com/getdave", + "followers_url": "https://api.github.com/users/getdave/followers", + "following_url": "https://api.github.com/users/getdave/following{/other_user}", + "gists_url": "https://api.github.com/users/getdave/gists{/gist_id}", + "starred_url": "https://api.github.com/users/getdave/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/getdave/subscriptions", + "organizations_url": "https://api.github.com/users/getdave/orgs", + "repos_url": "https://api.github.com/users/getdave/repos", + "events_url": "https://api.github.com/users/getdave/events{/privacy}", + "received_events_url": "https://api.github.com/users/getdave/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 949438185, + "node_id": "MDU6TGFiZWw5NDk0MzgxODU=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Regression", + "name": "[Type] Regression", + "color": "d93f0b", + "default": false, + "description": "" + }, + { + "id": 2074073931, + "node_id": "MDU6TGFiZWwyMDc0MDczOTMx", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Feature]%20Navigation%20Screen", + "name": "[Feature] Navigation Screen", + "color": "fbca04", + "default": false, + "description": "A new block-based screen intended to replace nav-menus.php." + }, + { + "id": 2536082965, + "node_id": "MDU6TGFiZWwyNTM2MDgyOTY1", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Package]%20Edit%20Navigation", + "name": "[Package] Edit Navigation", + "color": "ed2572", + "default": false, + "description": "/packages/edit-navigation" + } + ], + "state": "closed", + "locked": false, + "assignee": { + "login": "getdave", + "id": 444434, + "node_id": "MDQ6VXNlcjQ0NDQzNA==", + "avatar_url": "https://avatars.githubusercontent.com/u/444434?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/getdave", + "html_url": "https://github.com/getdave", + "followers_url": "https://api.github.com/users/getdave/followers", + "following_url": "https://api.github.com/users/getdave/following{/other_user}", + "gists_url": "https://api.github.com/users/getdave/gists{/gist_id}", + "starred_url": "https://api.github.com/users/getdave/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/getdave/subscriptions", + "organizations_url": "https://api.github.com/users/getdave/orgs", + "repos_url": "https://api.github.com/users/getdave/repos", + "events_url": "https://api.github.com/users/getdave/events{/privacy}", + "received_events_url": "https://api.github.com/users/getdave/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "getdave", + "id": 444434, + "node_id": "MDQ6VXNlcjQ0NDQzNA==", + "avatar_url": "https://avatars.githubusercontent.com/u/444434?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/getdave", + "html_url": "https://github.com/getdave", + "followers_url": "https://api.github.com/users/getdave/followers", + "following_url": "https://api.github.com/users/getdave/following{/other_user}", + "gists_url": "https://api.github.com/users/getdave/gists{/gist_id}", + "starred_url": "https://api.github.com/users/getdave/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/getdave/subscriptions", + "organizations_url": "https://api.github.com/users/getdave/orgs", + "repos_url": "https://api.github.com/users/getdave/repos", + "events_url": "https://api.github.com/users/getdave/events{/privacy}", + "received_events_url": "https://api.github.com/users/getdave/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 1, + "created_at": "2021-07-29T10:06:10Z", + "updated_at": "2021-07-29T11:21:22Z", + "closed_at": "2021-07-29T11:20:57Z", + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33748", + "html_url": "https://github.com/WordPress/gutenberg/pull/33748", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33748.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33748.patch" + }, + "body": "<!-- Learn the overall process and best practices for pull requests at https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/repository-management.md#pull-requests. -->\r\n\r\n<!-- Gutenberg's license is in the process of updating to be dual-licensed under the GPL and MPL. As part of that transition, all new contributions are dual-licensed. For more information, see: https://github.com/WordPress/gutenberg/blob/trunk/LICENSE.md -->\r\n\r\n## Description\r\n\r\nTakes over from https://github.com/WordPress/gutenberg/pull/32423#issuecomment-888903800 as the contributor seems unable to continue.\r\n\r\nCloses https://github.com/WordPress/gutenberg/issues/30330\r\n\r\n## How has this been tested?\r\n\r\n* Enable Nav Editor experiment.\r\n* Go to Nav Editor screen.\r\n* Add a menu.\r\n* Click \"Manage Locations\" in the sidebar.\r\n* See modal appear with locations for menus.\r\n* See placeholder value for the menu selection dropdown is now \"Select a Menu\".\r\n\r\n\r\n## Screenshots <!-- if applicable -->\r\n\r\n<img width=\"1278\" alt=\"Screen Shot 2021-07-29 at 11 01 53\" src=\"https://user-images.githubusercontent.com/444434/127473360-f5ae5637-56a9-4397-a743-e87cf602dbeb.png\">\r\n\r\n\r\n## Types of changes\r\nBug fix (non-breaking change which fixes an issue)\r\n\r\n## Checklist:\r\n- [ ] My code is tested.\r\n- [ ] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [ ] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [ ] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [ ] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [ ] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [ ] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33747", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33747/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33747/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33747/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33747", + "id": 955662605, + "node_id": "MDExOlB1bGxSZXF1ZXN0Njk5Mzc5MTg0", + "number": 33747, + "title": "Improve likelihood of getting rich link previews by modifying UA string for URL Details REST API endpoint", + "user": { + "login": "getdave", + "id": 444434, + "node_id": "MDQ6VXNlcjQ0NDQzNA==", + "avatar_url": "https://avatars.githubusercontent.com/u/444434?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/getdave", + "html_url": "https://github.com/getdave", + "followers_url": "https://api.github.com/users/getdave/followers", + "following_url": "https://api.github.com/users/getdave/following{/other_user}", + "gists_url": "https://api.github.com/users/getdave/gists{/gist_id}", + "starred_url": "https://api.github.com/users/getdave/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/getdave/subscriptions", + "organizations_url": "https://api.github.com/users/getdave/orgs", + "repos_url": "https://api.github.com/users/getdave/repos", + "events_url": "https://api.github.com/users/getdave/events{/privacy}", + "received_events_url": "https://api.github.com/users/getdave/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 813888420, + "node_id": "MDU6TGFiZWw4MTM4ODg0MjA=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/REST%20API%20Interaction", + "name": "REST API Interaction", + "color": "fbca04", + "default": false, + "description": "" + }, + { + "id": 1838782557, + "node_id": "MDU6TGFiZWwxODM4NzgyNTU3", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Feature]%20Link%20Editing", + "name": "[Feature] Link Editing", + "color": "fbca04", + "default": false, + "description": "Link components (LinkControl, URLInput) and integrations (RichText link formatting)" + } + ], + "state": "closed", + "locked": false, + "assignee": { + "login": "getdave", + "id": 444434, + "node_id": "MDQ6VXNlcjQ0NDQzNA==", + "avatar_url": "https://avatars.githubusercontent.com/u/444434?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/getdave", + "html_url": "https://github.com/getdave", + "followers_url": "https://api.github.com/users/getdave/followers", + "following_url": "https://api.github.com/users/getdave/following{/other_user}", + "gists_url": "https://api.github.com/users/getdave/gists{/gist_id}", + "starred_url": "https://api.github.com/users/getdave/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/getdave/subscriptions", + "organizations_url": "https://api.github.com/users/getdave/orgs", + "repos_url": "https://api.github.com/users/getdave/repos", + "events_url": "https://api.github.com/users/getdave/events{/privacy}", + "received_events_url": "https://api.github.com/users/getdave/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "getdave", + "id": 444434, + "node_id": "MDQ6VXNlcjQ0NDQzNA==", + "avatar_url": "https://avatars.githubusercontent.com/u/444434?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/getdave", + "html_url": "https://github.com/getdave", + "followers_url": "https://api.github.com/users/getdave/followers", + "following_url": "https://api.github.com/users/getdave/following{/other_user}", + "gists_url": "https://api.github.com/users/getdave/gists{/gist_id}", + "starred_url": "https://api.github.com/users/getdave/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/getdave/subscriptions", + "organizations_url": "https://api.github.com/users/getdave/orgs", + "repos_url": "https://api.github.com/users/getdave/repos", + "events_url": "https://api.github.com/users/getdave/events{/privacy}", + "received_events_url": "https://api.github.com/users/getdave/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 6, + "created_at": "2021-07-29T09:49:52Z", + "updated_at": "2021-07-30T14:59:01Z", + "closed_at": "2021-07-30T14:07:41Z", + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33747", + "html_url": "https://github.com/WordPress/gutenberg/pull/33747", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33747.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33747.patch" + }, + "body": "<!-- Learn the overall process and best practices for pull requests at https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/repository-management.md#pull-requests. -->\r\n\r\n<!-- Gutenberg's license is in the process of updating to be dual-licensed under the GPL and MPL. As part of that transition, all new contributions are dual-licensed. For more information, see: https://github.com/WordPress/gutenberg/blob/trunk/LICENSE.md -->\r\n\r\n## Description\r\n\r\nAs described in https://github.com/WordPress/gutenberg/issues/33722#issuecomment-888341130 the UA string seems to be causing the `url-details` endpoint requests to be rejected by certain prominent web properties such as Google. This appears to be due to the default UA string used by the WP HTTP API being very similar to the UA string used by \"Pingback\" requests - many people block such requests.\r\n\r\nIf we change the UA string to something else the failing requests start to work. Therefore we need to use a different UA string from the default provided by the WP HTTP API.\r\n\r\nThe REST API Core team have advised that we should _not_ be seen to be spoofing the UA string. However, we can _modify_ it as long as it still has something to identify it as \"WordPress\".\r\n\r\nTherefore this PR tweaks the UA string to:\r\n\r\n* Use `WP` instead of `WordPress`.\r\n* Includes the feature name in the UA string in order that properties can still easily identify it and block it if they wish to do so.\r\n\r\nCloses https://github.com/WordPress/gutenberg/issues/33722\r\n\r\n## How has this been tested?\r\n\r\n### On trunk\r\n\r\n1. New Post.\r\n2. Open browser dev tools `Console`.\r\n3. Type `copy(wpApiSettings.nonce)`.\r\n4. Update the following URL replacing `YOUR_NONCE_HERE` with the value from the previous step.\r\n\r\n```\r\nhttp://localhost:8888/index.php?rest_route=%2F__experimental%2Furl-details&url=http%3A%2F%2Fwww.google.com&_locale=user&_wpnonce=YOUR_NONCE_HERE\r\n```\r\n5. Paste into your browser.\r\n6. See the \"404\" response.\r\n```\r\n{\r\ncode: \"no_response\",\r\nmessage: \"URL not found. Response returned a non-200 status code for this URL.\",\r\ndata: {\r\nstatus: 404\r\n}\r\n}\r\n```\r\n\r\n### On this PR branch\r\n\r\n1. Repeat the steps above. \r\n2. This time see the request suceed and rich results returned, eg:\r\n\r\n```\r\n{\r\ntitle: \"Google\",\r\nicon: \"\",\r\ndescription: \"\",\r\nimage: \"https://www.google.com/logos/doodles/2021/doodle-champion-island-games-july-29-6753651837109022-2xa.gif\"\r\n}\r\n```\r\n\r\n## Screenshots <!-- if applicable -->\r\n\r\n## Types of changes\r\nBug fix (non-breaking change which fixes an issue)\r\n\r\n## Checklist:\r\n- [ ] My code is tested.\r\n- [ ] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [ ] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [ ] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [ ] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [ ] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [ ] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33746", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33746/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33746/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33746/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33746", + "id": 955641959, + "node_id": "MDExOlB1bGxSZXF1ZXN0Njk5MzYxODkw", + "number": 33746, + "title": "ESLint Plugin: Include .jsx extenstion when linting import statements", + "user": { + "login": "gziolo", + "id": 699132, + "node_id": "MDQ6VXNlcjY5OTEzMg==", + "avatar_url": "https://avatars.githubusercontent.com/u/699132?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/gziolo", + "html_url": "https://github.com/gziolo", + "followers_url": "https://api.github.com/users/gziolo/followers", + "following_url": "https://api.github.com/users/gziolo/following{/other_user}", + "gists_url": "https://api.github.com/users/gziolo/gists{/gist_id}", + "starred_url": "https://api.github.com/users/gziolo/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/gziolo/subscriptions", + "organizations_url": "https://api.github.com/users/gziolo/orgs", + "repos_url": "https://api.github.com/users/gziolo/repos", + "events_url": "https://api.github.com/users/gziolo/events{/privacy}", + "received_events_url": "https://api.github.com/users/gziolo/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 531680823, + "node_id": "MDU6TGFiZWw1MzE2ODA4MjM=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Bug", + "name": "[Type] Bug", + "color": "d93f0b", + "default": false, + "description": "An existing feature is broken." + }, + { + "id": 1159632801, + "node_id": "MDU6TGFiZWwxMTU5NjMyODAx", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Package]%20ESLint%20plugin", + "name": "[Package] ESLint plugin", + "color": "ed2572", + "default": false, + "description": "/packages/eslint-plugin" + } + ], + "state": "closed", + "locked": false, + "assignee": { + "login": "gziolo", + "id": 699132, + "node_id": "MDQ6VXNlcjY5OTEzMg==", + "avatar_url": "https://avatars.githubusercontent.com/u/699132?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/gziolo", + "html_url": "https://github.com/gziolo", + "followers_url": "https://api.github.com/users/gziolo/followers", + "following_url": "https://api.github.com/users/gziolo/following{/other_user}", + "gists_url": "https://api.github.com/users/gziolo/gists{/gist_id}", + "starred_url": "https://api.github.com/users/gziolo/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/gziolo/subscriptions", + "organizations_url": "https://api.github.com/users/gziolo/orgs", + "repos_url": "https://api.github.com/users/gziolo/repos", + "events_url": "https://api.github.com/users/gziolo/events{/privacy}", + "received_events_url": "https://api.github.com/users/gziolo/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "gziolo", + "id": 699132, + "node_id": "MDQ6VXNlcjY5OTEzMg==", + "avatar_url": "https://avatars.githubusercontent.com/u/699132?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/gziolo", + "html_url": "https://github.com/gziolo", + "followers_url": "https://api.github.com/users/gziolo/followers", + "following_url": "https://api.github.com/users/gziolo/following{/other_user}", + "gists_url": "https://api.github.com/users/gziolo/gists{/gist_id}", + "starred_url": "https://api.github.com/users/gziolo/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/gziolo/subscriptions", + "organizations_url": "https://api.github.com/users/gziolo/orgs", + "repos_url": "https://api.github.com/users/gziolo/repos", + "events_url": "https://api.github.com/users/gziolo/events{/privacy}", + "received_events_url": "https://api.github.com/users/gziolo/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 1, + "created_at": "2021-07-29T09:24:57Z", + "updated_at": "2021-08-03T13:56:04Z", + "closed_at": "2021-08-03T13:55:39Z", + "author_association": "MEMBER", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33746", + "html_url": "https://github.com/WordPress/gutenberg/pull/33746", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33746.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33746.patch" + }, + "body": "<!-- Learn the overall process and best practices for pull requests at https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/repository-management.md#pull-requests. -->\r\n\r\n<!-- Gutenberg's license is in the process of updating to be dual-licensed under the GPL and MPL. As part of that transition, all new contributions are dual-licensed. For more information, see: https://github.com/WordPress/gutenberg/blob/trunk/LICENSE.md -->\r\n\r\n## Description\r\n<!-- Please describe what you have changed or added -->\r\nFixes #32408.\r\n\r\nReported by @galloppinggryphon:\r\n\r\n> When using `@wordpress/eslint-plugin`, ESLint is reporting the following error while trying to resolve `.jsx` files:\r\n> \r\n> Unable to resolve path to module './path/jsx-file-sans-extension'. eslint(import/no-unresolved)\r\n> Adding the extension to the import statement makes the file resolve. All `.js` files resolve normally.\r\n\r\nA similar setting is present when TypeScript is found in the project:\r\n\r\nhttps://github.com/WordPress/gutenberg/blob/85cfab17de6a23a73a6163472d1c9d85581d86c2/packages/eslint-plugin/configs/recommended.js#L33-L36\r\n\r\n## How has this been tested?\r\n<!-- Please describe in detail how you tested your changes. -->\r\n<!-- Include details of your testing environment, tests ran to see how -->\r\n<!-- your change affects other areas of the code, etc. -->\r\n\r\n`npm run lint-js` should work as before. \r\n\r\nIt also needs to be tested in the 3rd party project that doesn't have TypeScript installed.", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33745", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33745/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33745/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33745/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33745", + "id": 955570802, + "node_id": "MDExOlB1bGxSZXF1ZXN0Njk5MzAxOTQz", + "number": 33745, + "title": "[RNMobile][Embed block] Disable paragraph transform", + "user": { + "login": "ceyhun", + "id": 1845482, + "node_id": "MDQ6VXNlcjE4NDU0ODI=", + "avatar_url": "https://avatars.githubusercontent.com/u/1845482?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/ceyhun", + "html_url": "https://github.com/ceyhun", + "followers_url": "https://api.github.com/users/ceyhun/followers", + "following_url": "https://api.github.com/users/ceyhun/following{/other_user}", + "gists_url": "https://api.github.com/users/ceyhun/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ceyhun/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ceyhun/subscriptions", + "organizations_url": "https://api.github.com/users/ceyhun/orgs", + "repos_url": "https://api.github.com/users/ceyhun/repos", + "events_url": "https://api.github.com/users/ceyhun/events{/privacy}", + "received_events_url": "https://api.github.com/users/ceyhun/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 982506020, + "node_id": "MDU6TGFiZWw5ODI1MDYwMjA=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/Mobile%20App%20-%20i.e.%20Android%20or%20iOS", + "name": "Mobile App - i.e. Android or iOS", + "color": "a3ef7a", + "default": false, + "description": "Native mobile impl of the block editor. (Note: used in scripts, ping mobile folks to change)" + } + ], + "state": "closed", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 3, + "created_at": "2021-07-29T08:01:33Z", + "updated_at": "2021-07-30T07:20:33Z", + "closed_at": "2021-07-30T07:20:01Z", + "author_association": "MEMBER", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33745", + "html_url": "https://github.com/WordPress/gutenberg/pull/33745", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33745.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33745.patch" + }, + "body": "<!-- Learn the overall process and best practices for pull requests at https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/repository-management.md#pull-requests. -->\r\n\r\n<!-- Gutenberg's license is in the process of updating to be dual-licensed under the GPL and MPL. As part of that transition, all new contributions are dual-licensed. For more information, see: https://github.com/WordPress/gutenberg/blob/trunk/LICENSE.md -->\r\n\r\n## Description\r\n<!-- Please describe what you have changed or added -->\r\n\r\nDisabling paragraph transform for embed block on mobile/native as a workaround to fix https://github.com/wordpress-mobile/gutenberg-mobile/issues/3762\r\n\r\n## How has this been tested?\r\n<!-- Please describe in detail how you tested your changes. -->\r\n<!-- Include details of your testing environment, tests ran to see how -->\r\n<!-- your change affects other areas of the code, etc. -->\r\n\r\nSee: https://github.com/wordpress-mobile/gutenberg-mobile/issues/3762\r\n\r\n## Screenshots <!-- if applicable -->\r\n\r\nN/A\r\n\r\n## Types of changes\r\n<!-- What types of changes does your code introduce? -->\r\nBug fix (non-breaking change which fixes an issue)\r\n<!-- New feature (non-breaking change which adds functionality) -->\r\n<!-- Breaking change (fix or feature that would cause existing functionality to not work as expected) -->\r\n\r\n## Checklist:\r\n- [x] My code is tested.\r\n- [x] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [x] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [ ] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [x] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [x] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [x] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33742", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33742/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33742/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33742/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33742", + "id": 955514565, + "node_id": "MDExOlB1bGxSZXF1ZXN0Njk5MjU0MjM0", + "number": 33742, + "title": "Template Mode: Remove 'per_page' argument from the template data selector", + "user": { + "login": "Mamaduka", + "id": 240569, + "node_id": "MDQ6VXNlcjI0MDU2OQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/240569?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Mamaduka", + "html_url": "https://github.com/Mamaduka", + "followers_url": "https://api.github.com/users/Mamaduka/followers", + "following_url": "https://api.github.com/users/Mamaduka/following{/other_user}", + "gists_url": "https://api.github.com/users/Mamaduka/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Mamaduka/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Mamaduka/subscriptions", + "organizations_url": "https://api.github.com/users/Mamaduka/orgs", + "repos_url": "https://api.github.com/users/Mamaduka/repos", + "events_url": "https://api.github.com/users/Mamaduka/events{/privacy}", + "received_events_url": "https://api.github.com/users/Mamaduka/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 731693674, + "node_id": "MDU6TGFiZWw3MzE2OTM2NzQ=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Performance", + "name": "[Type] Performance", + "color": "f3f4fe", + "default": false, + "description": "" + }, + { + "id": 2978205898, + "node_id": "MDU6TGFiZWwyOTc4MjA1ODk4", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Feature]%20Template%20Editing%20Mode", + "name": "[Feature] Template Editing Mode", + "color": "FBCA04", + "default": false, + "description": "" + } + ], + "state": "closed", + "locked": false, + "assignee": { + "login": "Mamaduka", + "id": 240569, + "node_id": "MDQ6VXNlcjI0MDU2OQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/240569?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Mamaduka", + "html_url": "https://github.com/Mamaduka", + "followers_url": "https://api.github.com/users/Mamaduka/followers", + "following_url": "https://api.github.com/users/Mamaduka/following{/other_user}", + "gists_url": "https://api.github.com/users/Mamaduka/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Mamaduka/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Mamaduka/subscriptions", + "organizations_url": "https://api.github.com/users/Mamaduka/orgs", + "repos_url": "https://api.github.com/users/Mamaduka/repos", + "events_url": "https://api.github.com/users/Mamaduka/events{/privacy}", + "received_events_url": "https://api.github.com/users/Mamaduka/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "Mamaduka", + "id": 240569, + "node_id": "MDQ6VXNlcjI0MDU2OQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/240569?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Mamaduka", + "html_url": "https://github.com/Mamaduka", + "followers_url": "https://api.github.com/users/Mamaduka/followers", + "following_url": "https://api.github.com/users/Mamaduka/following{/other_user}", + "gists_url": "https://api.github.com/users/Mamaduka/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Mamaduka/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Mamaduka/subscriptions", + "organizations_url": "https://api.github.com/users/Mamaduka/orgs", + "repos_url": "https://api.github.com/users/Mamaduka/repos", + "events_url": "https://api.github.com/users/Mamaduka/events{/privacy}", + "received_events_url": "https://api.github.com/users/Mamaduka/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 2, + "created_at": "2021-07-29T06:41:40Z", + "updated_at": "2021-07-29T07:25:16Z", + "closed_at": "2021-07-29T07:24:49Z", + "author_association": "MEMBER", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33742", + "html_url": "https://github.com/WordPress/gutenberg/pull/33742", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33742.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33742.patch" + }, + "body": "## Description\r\nRemoves `per_page` query argument in TemplatesPanel component when fetching WP templates. This argument isn't supported by the `templates` endpoint nor by the `get_block_templates` function.\r\n\r\nThis also allows reusing data from the store between the `getEditedPostTemplate` and TemplatesPanel component and removes extra API requests.\r\n\r\n## Screenshots\r\n| Before | After |\r\n| ------------- | ------------- |\r\n| ![template-mode-before](https://user-images.githubusercontent.com/240569/127444078-cca5f00b-106d-4ed0-bc62-bbf70ba17d53.png) | ![template-mode-after](https://user-images.githubusercontent.com/240569/127444070-fdb82e5c-d3c2-45f8-b694-0325f3cb9fab.png) |\r\n\r\n## How has this been tested?\r\n1. Enable TT1 Blocks theme\r\n2. Create a new post.\r\n3. The sidebar should render templates selection.\r\n\r\n## Types of changes\r\nPerformance\r\n\r\n## Checklist:\r\n- [x] My code is tested.\r\n- [x] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [ ] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [ ] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [x] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [x] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [ ] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33740", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33740/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33740/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33740/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33740", + "id": 955404874, + "node_id": "MDExOlB1bGxSZXF1ZXN0Njk5MTYxMDM4", + "number": 33740, + "title": "[RNMobile] Fix UBE's Inaccessible \"More\" Toolbar Item on Android", + "user": { + "login": "SiobhyB", + "id": 2998162, + "node_id": "MDQ6VXNlcjI5OTgxNjI=", + "avatar_url": "https://avatars.githubusercontent.com/u/2998162?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/SiobhyB", + "html_url": "https://github.com/SiobhyB", + "followers_url": "https://api.github.com/users/SiobhyB/followers", + "following_url": "https://api.github.com/users/SiobhyB/following{/other_user}", + "gists_url": "https://api.github.com/users/SiobhyB/gists{/gist_id}", + "starred_url": "https://api.github.com/users/SiobhyB/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/SiobhyB/subscriptions", + "organizations_url": "https://api.github.com/users/SiobhyB/orgs", + "repos_url": "https://api.github.com/users/SiobhyB/repos", + "events_url": "https://api.github.com/users/SiobhyB/events{/privacy}", + "received_events_url": "https://api.github.com/users/SiobhyB/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 531680823, + "node_id": "MDU6TGFiZWw1MzE2ODA4MjM=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Bug", + "name": "[Type] Bug", + "color": "d93f0b", + "default": false, + "description": "An existing feature is broken." + }, + { + "id": 982506020, + "node_id": "MDU6TGFiZWw5ODI1MDYwMjA=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/Mobile%20App%20-%20i.e.%20Android%20or%20iOS", + "name": "Mobile App - i.e. Android or iOS", + "color": "a3ef7a", + "default": false, + "description": "Native mobile impl of the block editor. (Note: used in scripts, ping mobile folks to change)" + }, + { + "id": 1999059055, + "node_id": "MDU6TGFiZWwxOTk5MDU5MDU1", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/CSS%20Styling", + "name": "CSS Styling", + "color": "63e2d2", + "default": false, + "description": "Related to editor and front end styles, CSS-specific issues." + } + ], + "state": "closed", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 2, + "created_at": "2021-07-29T02:48:49Z", + "updated_at": "2021-08-02T18:22:05Z", + "closed_at": "2021-08-02T18:21:37Z", + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33740", + "html_url": "https://github.com/WordPress/gutenberg/pull/33740", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33740.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33740.patch" + }, + "body": "Fixes https://github.com/WordPress/gutenberg/issues/33592\r\n\r\n`gutenberg-mobile`: https://github.com/wordpress-mobile/gutenberg-mobile/pull/3771\r\n\r\n## Brief Description\r\n\r\nThe \"more\" toolbar item isn't currently accessible from the Unsupported Block Editor (UBE) within the Android app. As outlined in https://github.com/WordPress/gutenberg/issues/33592, tapping on the toolbar items results in a flash of a dropdown menu, but that menu instantly disappears. This PR includes a fix for that.\r\n\r\n## More Detailed/Technical Description\r\n\r\nThe UBE is essentially the same editor that loads in the web, with a key difference being that we override some of the default CSS in [the /editor-style-overrides.css file](https://github.com/WordPress/gutenberg/blob/trunk/packages/react-native-bridge/common/gutenberg-web-single-block/editor-style-overrides.css). In that CSS file, we're currently attempting to hide all but one item in the dropdown menu associated with the \"more\" toolbar item. The only item we want to display is the link to **Show More Settings**.\r\n\r\n| Default web view | HTML + class names |\r\n| ------------- | ------------- |\r\n| <img src=\"https://user-images.githubusercontent.com/2998162/127452966-3e670a89-ce55-4705-b9e2-98a288b86fc2.png\" width=\"100%\"> | <img src=\"https://user-images.githubusercontent.com/2998162/127453401-55f7a040-81c7-49bb-a7d9-56ce3be763a2.png\" width=\"100%\"> |\r\n\r\nYou'll see from the above screenshot of the dropdown menu's HTML, that there aren't any specific class names we can target to achieve our goal of only displaying the **Show More Settings** link. As such, [the `:first-child` selector](https://developer.mozilla.org/en-US/docs/Web/CSS/:first-child) is [being used here to target it](https://github.com/WordPress/gutenberg/blob/trunk/packages/react-native-bridge/common/gutenberg-web-single-block/editor-style-overrides.css#L68):\r\n\r\n```\r\n/* Remove all buttons from the component menu group inside \\'...\\' button in block toolbar */\r\n.components-menu-group > div > button:not(:first-child) {\r\n display: none;\r\n}\r\n```\r\n\r\n**Show More Settings** isn't _always_ the first child in the dropdown menu. The **Copy** link is the menu's first initial child, with **Show More Settings** being added via JavaScript when the \"more\" toolbar item is added. Although the CSS should still work in theory, as it seems to in Safari, this seems to be the crutch of the reason Chrome isn't applying the selector as expected. Both menus are _at some point_ removed, causing an empty dropdown menu to disappear.\r\n\r\nWith this PR, I've been able to work around the issue with a somewhat hacky-feeling addition to the custom CSS we're using, but I believe it may be the best solution. Specifically, I've targeted the **Copy** link so that it's never technically removed from the document and only hidden by reducing its height to zero. \r\n\r\nFurther details around debugging this issue and commentary around the solution can be found in the **Developer Notes** section below.\r\n\r\n_**Sidenote:** As [I was able to replicate the problem in much older versions of the app](https://github.com/WordPress/gutenberg/issues/33592#issuecomment-884402519), and I'm fairly certain it'd have been spotted when the UBE was first released if it had existed back then, I'm speculating that this has come up due to a change in the way Chrome applies the `:first-child` CSS selector. As outlined in https://github.com/WordPress/gutenberg/issues/21874, this highlights some fragility with the way the UBE is being styled, which is a wider discussion than intended for this specific PR._\r\n\r\n## How has this been tested?\r\n\r\n_**Precondition:** To follow these steps, you'll first need to create a post or page on the web that contains a block that's unsupported in the apps. At the time of writing, the tag cloud block is an option. You will also need to be working on a WordPress.com or a Jetpack-connected site._ \r\n\r\nThe testing steps are as follows:\r\n\r\n* In the Android app, navigate to a post or page containing an unsupported block. \r\n* Tap the **?** icon to the unsupported block's upper right and then **Edit using web editor**.\r\n* Tap the \"more\" icon in the editor's toolbar i.e. the last icon in the toolbar's list, it has three dots.\r\n* Verify that you see a **More Settings** menu item that you're able to tap on and use with no issues.\r\n\r\nIt'd also be helpful to test the flow on iOS to ensure these changes don't have any unintended side effects on that platform.\r\n\r\n## Screenshots <!-- if applicable -->\r\n\r\nA working version of the dropdown menu on a Pixel 2 emulator, with the changes from this branch:\r\n\r\nhttps://user-images.githubusercontent.com/2998162/127540128-79f89b00-7f71-4258-8c61-e3098f2c3708.mov\r\n\r\n## Developer Notes\r\n\r\n<details>\r\n<summary>Process for Debugging on Chrome</summary>\r\n\r\nThe most straightforward way to debug this issue is to [use Chrome's Device Mode to simulate a mobile device](https://developer.chrome.com/docs/devtools/device-mode/) on the web and then [use the CSS tools](https://developer.chrome.com/docs/devtools/css/) to add the following custom CSS, which is being added to the apps via [the /editor-style-overrides.css file](https://github.com/WordPress/gutenberg/blob/trunk/packages/react-native-bridge/common/gutenberg-web-single-block/editor-style-overrides.css):\r\n\r\n```\r\n.components-menu-group > div > button:not( :first-child ) {\r\n\tdisplay: none;\r\n}\r\n\r\ncomponents-dropdown-menu__menu > div:not( :first-child ) {\r\n\tdisplay: none;\r\n}\r\n```\r\n\r\nWith the above CSS added, it's possible to follow the general steps for reproducing the issue outlined in the original issue at https://github.com/WordPress/gutenberg/issues/33592. We can then use Chrome's inspector tools to further experiment with a CSS fix and add breakpoints to dig further. \r\n\r\nFor our purposes, we're only attempting to update the first portion of the above snippet, the portion with the `.components-menu-group > div > button:not( :first-child )` selector.\r\n\r\nIt's also worth highlighting that, all spaces are removed when the CSS is bundled for the app, which can create issues with the CSS e.g. \".components-dropdown-menu__menu .components-menu-group\" will load as \".components-dropdown-menu__menu.components-menu-group\", with no space together.\r\n\r\n</details>\r\n\r\n<details>\r\n<summary>Experiments</summary>\r\n\r\nI tried different variations of `:first-child` and `:first-of-type`, including the following two snippets, but wasn't able to find a way to get these selectors to work with our goal of only displays **Show More Settings**: \r\n\r\n```\r\n.components-menu-group > div > button {\r\n\tdisplay: none;\r\n}\r\n\r\n\r\n.components-menu-group > div > button:first-child {\r\n\tdisplay: block;\r\n}\r\n```\r\n\r\n```\r\n.components-menu-group > div > button {\r\n\tdisplay: none;\r\n}\r\n\r\n\r\n.components-menu-group > div > button:first-of-type {\r\n\tdisplay: block;\r\n}\r\n```\r\n\r\n</details>\r\n\r\n<details>\r\n<summary>Solution</summary>\r\n\r\nThe only CSS I found to achieve the goal was the following, which stops the second menu item (**Copy**) being removed from the document and hides it from view by setting a height of zero and applying `display: none` to its content.\r\n\r\nI believe the core issue is that **Copy** is the dropdown menu's `:first-child` when the page first loads, with **Show More Settings** being dynamically added upon click. As such, the existing CSS removes both at some point, causing an empty dropdown menu. The below CSS gets around that problem by never removing **Copy** completely from the document.\r\n\r\n```\r\n.components-dropdown-menu__menu\r\n\t> .components-menu-group\r\n\t> div\r\n\t> button:nth-child( 2 ) {\r\n\tdisplay: block;\r\n\tmin-height: 0;\r\n\theight: 0;\r\n\tpadding: 0;\r\n}\r\n\r\n.components-menu-group > div > button:nth-child( 2 ) > span {\r\n\tdisplay: none;\r\n}\r\n\r\n.components-button:focus:not( :disabled ) {\r\n\tbox-shadow: none;\r\n}\r\n```\r\n\r\n</details>\r\n\r\n\r\n## Types of changes\r\n\r\nThis PR introduces a bug fix (a non-breaking change that fixes an issue).\r\n\r\n## Checklist:\r\n- [x] My code is tested.\r\n- [x] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [x] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [x] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [x] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [x] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [x] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33739", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33739/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33739/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33739/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33739", + "id": 955312278, + "node_id": "MDExOlB1bGxSZXF1ZXN0Njk5MDgxNzI0", + "number": 33739, + "title": "Fix justification for button block when selected", + "user": { + "login": "mkaz", + "id": 45363, + "node_id": "MDQ6VXNlcjQ1MzYz", + "avatar_url": "https://avatars.githubusercontent.com/u/45363?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/mkaz", + "html_url": "https://github.com/mkaz", + "followers_url": "https://api.github.com/users/mkaz/followers", + "following_url": "https://api.github.com/users/mkaz/following{/other_user}", + "gists_url": "https://api.github.com/users/mkaz/gists{/gist_id}", + "starred_url": "https://api.github.com/users/mkaz/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/mkaz/subscriptions", + "organizations_url": "https://api.github.com/users/mkaz/orgs", + "repos_url": "https://api.github.com/users/mkaz/repos", + "events_url": "https://api.github.com/users/mkaz/events{/privacy}", + "received_events_url": "https://api.github.com/users/mkaz/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 1112969457, + "node_id": "MDU6TGFiZWwxMTEyOTY5NDU3", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Block]%20Buttons", + "name": "[Block] Buttons", + "color": "6767e5", + "default": false, + "description": "" + }, + { + "id": 2463256422, + "node_id": "MDU6TGFiZWwyNDYzMjU2NDIy", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/Backport%20to%20WP%20Minor%20Release", + "name": "Backport to WP Minor Release", + "color": "491d8e", + "default": false, + "description": "PRs to be back-ported to a WordPress minor release." + } + ], + "state": "closed", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 2, + "created_at": "2021-07-28T23:40:16Z", + "updated_at": "2021-08-02T16:48:16Z", + "closed_at": "2021-08-02T16:46:43Z", + "author_association": "MEMBER", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33739", + "html_url": "https://github.com/WordPress/gutenberg/pull/33739", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33739.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33739.patch" + }, + "body": "\r\n## Description\r\n\r\nWhen selecting the button block and applying a justification, the justify doesn't apply until the box is unselected.\r\n\r\nWhat is really happening is when the block is unselected the block appender is removed, and the rules for the block appender is forcing the button all the way to the left so when removed it allows the justification to apply and the block is then centered (or right).\r\n\r\nFixes #33487\r\n\r\n## How has this been tested?\r\n\r\n1. Confirm bug by adding buttons block and justify center or right, see bug #33487\r\n2. Unselect the block to see justification applied\r\n3. Apply PR fix\r\n4. Repeat and notice justification applies immediately\r\n\r\n\r\n![button-justify](https://user-images.githubusercontent.com/45363/127409926-b8794df5-faf1-4e01-ae14-e8772e3e3930.gif)\r\n\r\n\r\n## Types of changes\r\n\r\nThis PR changes the block appender CSS rules that forced justified content all the way to the left. I did extra testing around but any additional checks are welcome to confirm no unintended consequences with the appender elsewhere.\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33738", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33738/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33738/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33738/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33738", + "id": 955269728, + "node_id": "MDExOlB1bGxSZXF1ZXN0Njk5MDQ1MjM3", + "number": 33738, + "title": "Example for rest_endpoints filter in PHP", + "user": { + "login": "amir2mi", + "id": 64708228, + "node_id": "MDQ6VXNlcjY0NzA4MjI4", + "avatar_url": "https://avatars.githubusercontent.com/u/64708228?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/amir2mi", + "html_url": "https://github.com/amir2mi", + "followers_url": "https://api.github.com/users/amir2mi/followers", + "following_url": "https://api.github.com/users/amir2mi/following{/other_user}", + "gists_url": "https://api.github.com/users/amir2mi/gists{/gist_id}", + "starred_url": "https://api.github.com/users/amir2mi/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/amir2mi/subscriptions", + "organizations_url": "https://api.github.com/users/amir2mi/orgs", + "repos_url": "https://api.github.com/users/amir2mi/repos", + "events_url": "https://api.github.com/users/amir2mi/events{/privacy}", + "received_events_url": "https://api.github.com/users/amir2mi/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 567484057, + "node_id": "MDU6TGFiZWw1Njc0ODQwNTc=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Documentation", + "name": "[Type] Documentation", + "color": "bfd4f2", + "default": false, + "description": "" + }, + { + "id": 1388646432, + "node_id": "MDU6TGFiZWwxMzg4NjQ2NDMy", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/First-time%20Contributor", + "name": "First-time Contributor", + "color": "a0f762", + "default": false, + "description": "Pull request opened by a first-time contributor to Gutenberg repository" + } + ], + "state": "closed", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 2, + "created_at": "2021-07-28T22:06:53Z", + "updated_at": "2021-08-03T07:56:08Z", + "closed_at": "2021-08-03T06:40:12Z", + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33738", + "html_url": "https://github.com/WordPress/gutenberg/pull/33738", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33738.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33738.patch" + }, + "body": "`httpMethod` is added recently. It can be set to `POST`, which allows bigger attributes object.\r\nHowever, before WP 5.5 it does not work and gives 404 error. it will be solved with filtered `rest_endpoints` and here is that example.\r\nThanks to @kienstra, who pointed me out [here](https://github.com/studiopress/genesis-custom-blocks/blob/3670937b8d0a7326c7a4e28413c09e48bae457e4/php/Blocks/Loader.php#L613).", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33737", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33737/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33737/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33737/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33737", + "id": 955251305, + "node_id": "MDExOlB1bGxSZXF1ZXN0Njk5MDI5NTMw", + "number": 33737, + "title": "Site Editor: Implement a settings object filter", + "user": { + "login": "jeyip", + "id": 5414230, + "node_id": "MDQ6VXNlcjU0MTQyMzA=", + "avatar_url": "https://avatars.githubusercontent.com/u/5414230?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jeyip", + "html_url": "https://github.com/jeyip", + "followers_url": "https://api.github.com/users/jeyip/followers", + "following_url": "https://api.github.com/users/jeyip/following{/other_user}", + "gists_url": "https://api.github.com/users/jeyip/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jeyip/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jeyip/subscriptions", + "organizations_url": "https://api.github.com/users/jeyip/orgs", + "repos_url": "https://api.github.com/users/jeyip/repos", + "events_url": "https://api.github.com/users/jeyip/events{/privacy}", + "received_events_url": "https://api.github.com/users/jeyip/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 1604715381, + "node_id": "MDU6TGFiZWwxNjA0NzE1Mzgx", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Feature]%20Full%20Site%20Editing", + "name": "[Feature] Full Site Editing", + "color": "fbca04", + "default": false, + "description": "" + }, + { + "id": 2706102777, + "node_id": "MDU6TGFiZWwyNzA2MTAyNzc3", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Feature]%20Site%20Editor", + "name": "[Feature] Site Editor", + "color": "fbca04", + "default": false, + "description": "" + } + ], + "state": "closed", + "locked": false, + "assignee": { + "login": "jeyip", + "id": 5414230, + "node_id": "MDQ6VXNlcjU0MTQyMzA=", + "avatar_url": "https://avatars.githubusercontent.com/u/5414230?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jeyip", + "html_url": "https://github.com/jeyip", + "followers_url": "https://api.github.com/users/jeyip/followers", + "following_url": "https://api.github.com/users/jeyip/following{/other_user}", + "gists_url": "https://api.github.com/users/jeyip/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jeyip/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jeyip/subscriptions", + "organizations_url": "https://api.github.com/users/jeyip/orgs", + "repos_url": "https://api.github.com/users/jeyip/repos", + "events_url": "https://api.github.com/users/jeyip/events{/privacy}", + "received_events_url": "https://api.github.com/users/jeyip/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "jeyip", + "id": 5414230, + "node_id": "MDQ6VXNlcjU0MTQyMzA=", + "avatar_url": "https://avatars.githubusercontent.com/u/5414230?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jeyip", + "html_url": "https://github.com/jeyip", + "followers_url": "https://api.github.com/users/jeyip/followers", + "following_url": "https://api.github.com/users/jeyip/following{/other_user}", + "gists_url": "https://api.github.com/users/jeyip/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jeyip/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jeyip/subscriptions", + "organizations_url": "https://api.github.com/users/jeyip/orgs", + "repos_url": "https://api.github.com/users/jeyip/repos", + "events_url": "https://api.github.com/users/jeyip/events{/privacy}", + "received_events_url": "https://api.github.com/users/jeyip/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 2, + "created_at": "2021-07-28T21:33:27Z", + "updated_at": "2021-08-03T17:00:08Z", + "closed_at": "2021-08-03T16:59:29Z", + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33737", + "html_url": "https://github.com/WordPress/gutenberg/pull/33737", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33737.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33737.patch" + }, + "body": "Potentially solves https://github.com/WordPress/gutenberg/issues/33736\r\n\r\n<!-- Learn the overall process and best practices for pull requests at https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/repository-management.md#pull-requests. -->\r\n\r\n<!-- Gutenberg's license is in the process of updating to be dual-licensed under the GPL and MPL. As part of that transition, all new contributions are dual-licensed. For more information, see: https://github.com/WordPress/gutenberg/blob/trunk/LICENSE.md -->\r\n\r\n## Description\r\n<!-- Please describe what you have changed or added -->\r\nThe **post editor** has the `block_editor_settings_all` and `block_editor_settings` filter that allows us to modify the `settings` object injected into the block editor. A similar filter, however, doesn't exist for the site editor.\r\n\r\n## How has this been tested?\r\n<!-- Please describe in detail how you tested your changes. -->\r\n<!-- Include details of your testing environment, tests ran to see how -->\r\n<!-- your change affects other areas of the code, etc. -->\r\n**There should be no visible changes to the UI.**\r\n\r\n1. Set up local Gutenberg dev environment\r\n2. Activate a block based theme\r\n3. Navigate to the site editor\r\n4. Smoke test the site editor to ensure that updates still persist correctly, block insertion still functions as expected, etc.\r\n\r\n## Screenshots <!-- if applicable -->\r\n\r\n## Types of changes\r\n<!-- What types of changes does your code introduce? -->\r\n<!-- Bug fix (non-breaking change which fixes an issue) -->\r\n<!-- New feature (non-breaking change which adds functionality) -->\r\n<!-- Breaking change (fix or feature that would cause existing functionality to not work as expected) -->\r\nNew feature\r\n\r\n## Checklist:\r\n- [ ] My code is tested.\r\n- [ ] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [ ] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [ ] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [ ] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [ ] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [ ] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33734", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33734/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33734/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33734/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33734", + "id": 955144677, + "node_id": "MDExOlB1bGxSZXF1ZXN0Njk4OTM3MTI3", + "number": 33734, + "title": "Block patterns: Add translation context on titles", + "user": { + "login": "walbo", + "id": 1415747, + "node_id": "MDQ6VXNlcjE0MTU3NDc=", + "avatar_url": "https://avatars.githubusercontent.com/u/1415747?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/walbo", + "html_url": "https://github.com/walbo", + "followers_url": "https://api.github.com/users/walbo/followers", + "following_url": "https://api.github.com/users/walbo/following{/other_user}", + "gists_url": "https://api.github.com/users/walbo/gists{/gist_id}", + "starred_url": "https://api.github.com/users/walbo/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/walbo/subscriptions", + "organizations_url": "https://api.github.com/users/walbo/orgs", + "repos_url": "https://api.github.com/users/walbo/repos", + "events_url": "https://api.github.com/users/walbo/events{/privacy}", + "received_events_url": "https://api.github.com/users/walbo/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 531680825, + "node_id": "MDU6TGFiZWw1MzE2ODA4MjU=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Enhancement", + "name": "[Type] Enhancement", + "color": "3993a3", + "default": false, + "description": "A suggestion for improvement." + }, + { + "id": 596965480, + "node_id": "MDU6TGFiZWw1OTY5NjU0ODA=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/Internationalization%20(i18n)", + "name": "Internationalization (i18n)", + "color": "e881e2", + "default": false, + "description": "" + }, + { + "id": 1882657161, + "node_id": "MDU6TGFiZWwxODgyNjU3MTYx", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Feature]%20Patterns", + "name": "[Feature] Patterns", + "color": "fbca04", + "default": false, + "description": "" + } + ], + "state": "closed", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 0, + "created_at": "2021-07-28T18:51:55Z", + "updated_at": "2021-08-03T20:17:16Z", + "closed_at": "2021-08-03T18:50:17Z", + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33734", + "html_url": "https://github.com/WordPress/gutenberg/pull/33734", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33734.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33734.patch" + }, + "body": "<!-- Learn the overall process and best practices for pull requests at https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/repository-management.md#pull-requests. -->\r\n\r\n<!-- Gutenberg's license is in the process of updating to be dual-licensed under the GPL and MPL. As part of that transition, all new contributions are dual-licensed. For more information, see: https://github.com/WordPress/gutenberg/blob/trunk/LICENSE.md -->\r\n\r\n## Description\r\n<!-- Please describe what you have changed or added -->\r\nAdd context to block pattern titles.\r\n\r\nSee #33715\r\n\r\n## Types of changes\r\nEnhancement\r\n\r\n## Checklist:\r\n- [x] My code is tested.\r\n- [x] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [ ] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [ ] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [ ] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [ ] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [ ] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33733", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33733/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33733/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33733/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33733", + "id": 954931785, + "node_id": "MDExOlB1bGxSZXF1ZXN0Njk4NzUzOTUx", + "number": 33733, + "title": "Template part selection popover - minor style updates for visiblity.", + "user": { + "login": "Addison-Stavlo", + "id": 28742426, + "node_id": "MDQ6VXNlcjI4NzQyNDI2", + "avatar_url": "https://avatars.githubusercontent.com/u/28742426?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Addison-Stavlo", + "html_url": "https://github.com/Addison-Stavlo", + "followers_url": "https://api.github.com/users/Addison-Stavlo/followers", + "following_url": "https://api.github.com/users/Addison-Stavlo/following{/other_user}", + "gists_url": "https://api.github.com/users/Addison-Stavlo/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Addison-Stavlo/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Addison-Stavlo/subscriptions", + "organizations_url": "https://api.github.com/users/Addison-Stavlo/orgs", + "repos_url": "https://api.github.com/users/Addison-Stavlo/repos", + "events_url": "https://api.github.com/users/Addison-Stavlo/events{/privacy}", + "received_events_url": "https://api.github.com/users/Addison-Stavlo/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 1604715381, + "node_id": "MDU6TGFiZWwxNjA0NzE1Mzgx", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Feature]%20Full%20Site%20Editing", + "name": "[Feature] Full Site Editing", + "color": "fbca04", + "default": false, + "description": "" + }, + { + "id": 2373088071, + "node_id": "MDU6TGFiZWwyMzczMDg4MDcx", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Block]%20Template-Part", + "name": "[Block] Template-Part", + "color": "6767e5", + "default": false, + "description": "" + } + ], + "state": "closed", + "locked": false, + "assignee": { + "login": "Addison-Stavlo", + "id": 28742426, + "node_id": "MDQ6VXNlcjI4NzQyNDI2", + "avatar_url": "https://avatars.githubusercontent.com/u/28742426?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Addison-Stavlo", + "html_url": "https://github.com/Addison-Stavlo", + "followers_url": "https://api.github.com/users/Addison-Stavlo/followers", + "following_url": "https://api.github.com/users/Addison-Stavlo/following{/other_user}", + "gists_url": "https://api.github.com/users/Addison-Stavlo/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Addison-Stavlo/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Addison-Stavlo/subscriptions", + "organizations_url": "https://api.github.com/users/Addison-Stavlo/orgs", + "repos_url": "https://api.github.com/users/Addison-Stavlo/repos", + "events_url": "https://api.github.com/users/Addison-Stavlo/events{/privacy}", + "received_events_url": "https://api.github.com/users/Addison-Stavlo/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "Addison-Stavlo", + "id": 28742426, + "node_id": "MDQ6VXNlcjI4NzQyNDI2", + "avatar_url": "https://avatars.githubusercontent.com/u/28742426?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Addison-Stavlo", + "html_url": "https://github.com/Addison-Stavlo", + "followers_url": "https://api.github.com/users/Addison-Stavlo/followers", + "following_url": "https://api.github.com/users/Addison-Stavlo/following{/other_user}", + "gists_url": "https://api.github.com/users/Addison-Stavlo/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Addison-Stavlo/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Addison-Stavlo/subscriptions", + "organizations_url": "https://api.github.com/users/Addison-Stavlo/orgs", + "repos_url": "https://api.github.com/users/Addison-Stavlo/repos", + "events_url": "https://api.github.com/users/Addison-Stavlo/events{/privacy}", + "received_events_url": "https://api.github.com/users/Addison-Stavlo/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 2, + "created_at": "2021-07-28T14:36:38Z", + "updated_at": "2021-07-30T16:18:27Z", + "closed_at": "2021-07-30T16:18:02Z", + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33733", + "html_url": "https://github.com/WordPress/gutenberg/pull/33733", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33733.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33733.patch" + }, + "body": "<!-- Learn the overall process and best practices for pull requests at https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/repository-management.md#pull-requests. -->\r\n\r\n<!-- Gutenberg's license is in the process of updating to be dual-licensed under the GPL and MPL. As part of that transition, all new contributions are dual-licensed. For more information, see: https://github.com/WordPress/gutenberg/blob/trunk/LICENSE.md -->\r\n\r\n## Description\r\n<!-- Please describe what you have changed or added -->\r\nRelated to discussion in https://github.com/WordPress/gutenberg/issues/29950. This PR adds some minor style changes to make previews more visible in the selection popover. While we may still need to reconsider the selection flow/component in the future, these minor changes should help improve the readability of the current state until a new design is introduced.\r\n\r\nCurrently on trunk, there are no borders (save hover and focus) to the items or background to the selection, making it difficult to tell where one preview starts and the other begins:\r\n\r\n![Screen Shot 2021-07-28 at 10 34 24 AM](https://user-images.githubusercontent.com/28742426/127341222-88fdae72-9307-409f-9576-ee0188e653c7.png)\r\n\r\nHere we try adding a gray border to allow the previews to stand out together with their title:\r\n\r\n![Screen Shot 2021-07-30 at 8 23 05 AM](https://user-images.githubusercontent.com/28742426/127652426-8cd19ad4-e29a-4707-b755-fda098ad2a8c.png)\r\n\r\n\r\n\r\n\r\n## How has this been tested?\r\n<!-- Please describe in detail how you tested your changes. -->\r\n<!-- Include details of your testing environment, tests ran to see how -->\r\n<!-- your change affects other areas of the code, etc. -->\r\nTest the template part selection component in the site and post editors. This can be accessed from a placeholder block's (insert header, footer, or template part) \"Choose existing\" option, or the \"replace\" option in the block toolbar of an existing template part.\r\n\r\n## Screenshots <!-- if applicable -->\r\n\r\n## Types of changes\r\n<!-- What types of changes does your code introduce? -->\r\n<!-- Bug fix (non-breaking change which fixes an issue) -->\r\n<!-- New feature (non-breaking change which adds functionality) -->\r\n<!-- Breaking change (fix or feature that would cause existing functionality to not work as expected) -->\r\n\r\n## Checklist:\r\n- [ ] My code is tested.\r\n- [ ] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [ ] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [ ] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [ ] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [ ] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [ ] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33732", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33732/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33732/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33732/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33732", + "id": 954881033, + "node_id": "MDExOlB1bGxSZXF1ZXN0Njk4NzA4OTkx", + "number": 33732, + "title": "[RNMobile] Use random `postId` in integration tests", + "user": { + "login": "fluiddot", + "id": 14905380, + "node_id": "MDQ6VXNlcjE0OTA1Mzgw", + "avatar_url": "https://avatars.githubusercontent.com/u/14905380?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/fluiddot", + "html_url": "https://github.com/fluiddot", + "followers_url": "https://api.github.com/users/fluiddot/followers", + "following_url": "https://api.github.com/users/fluiddot/following{/other_user}", + "gists_url": "https://api.github.com/users/fluiddot/gists{/gist_id}", + "starred_url": "https://api.github.com/users/fluiddot/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/fluiddot/subscriptions", + "organizations_url": "https://api.github.com/users/fluiddot/orgs", + "repos_url": "https://api.github.com/users/fluiddot/repos", + "events_url": "https://api.github.com/users/fluiddot/events{/privacy}", + "received_events_url": "https://api.github.com/users/fluiddot/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 982506020, + "node_id": "MDU6TGFiZWw5ODI1MDYwMjA=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/Mobile%20App%20-%20i.e.%20Android%20or%20iOS", + "name": "Mobile App - i.e. Android or iOS", + "color": "a3ef7a", + "default": false, + "description": "Native mobile impl of the block editor. (Note: used in scripts, ping mobile folks to change)" + } + ], + "state": "closed", + "locked": false, + "assignee": { + "login": "fluiddot", + "id": 14905380, + "node_id": "MDQ6VXNlcjE0OTA1Mzgw", + "avatar_url": "https://avatars.githubusercontent.com/u/14905380?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/fluiddot", + "html_url": "https://github.com/fluiddot", + "followers_url": "https://api.github.com/users/fluiddot/followers", + "following_url": "https://api.github.com/users/fluiddot/following{/other_user}", + "gists_url": "https://api.github.com/users/fluiddot/gists{/gist_id}", + "starred_url": "https://api.github.com/users/fluiddot/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/fluiddot/subscriptions", + "organizations_url": "https://api.github.com/users/fluiddot/orgs", + "repos_url": "https://api.github.com/users/fluiddot/repos", + "events_url": "https://api.github.com/users/fluiddot/events{/privacy}", + "received_events_url": "https://api.github.com/users/fluiddot/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "fluiddot", + "id": 14905380, + "node_id": "MDQ6VXNlcjE0OTA1Mzgw", + "avatar_url": "https://avatars.githubusercontent.com/u/14905380?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/fluiddot", + "html_url": "https://github.com/fluiddot", + "followers_url": "https://api.github.com/users/fluiddot/followers", + "following_url": "https://api.github.com/users/fluiddot/following{/other_user}", + "gists_url": "https://api.github.com/users/fluiddot/gists{/gist_id}", + "starred_url": "https://api.github.com/users/fluiddot/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/fluiddot/subscriptions", + "organizations_url": "https://api.github.com/users/fluiddot/orgs", + "repos_url": "https://api.github.com/users/fluiddot/repos", + "events_url": "https://api.github.com/users/fluiddot/events{/privacy}", + "received_events_url": "https://api.github.com/users/fluiddot/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 3, + "created_at": "2021-07-28T13:54:23Z", + "updated_at": "2021-07-28T18:33:49Z", + "closed_at": "2021-07-28T18:33:20Z", + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33732", + "html_url": "https://github.com/WordPress/gutenberg/pull/33732", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33732.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33732.patch" + }, + "body": "<!-- Learn the overall process and best practices for pull requests at https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/repository-management.md#pull-requests. -->\r\n\r\n<!-- Gutenberg's license is in the process of updating to be dual-licensed under the GPL and MPL. As part of that transition, all new contributions are dual-licensed. For more information, see: https://github.com/WordPress/gutenberg/blob/trunk/LICENSE.md -->\r\n\r\n## Description\r\n<!-- Please describe what you have changed or added -->\r\n\r\nWe were using the same `postId` value when initializing the editor in the integration tests, due to incoming changes related to the logic of loading the editor (https://github.com/WordPress/gutenberg/pull/33727), now we need to assure that each test uses a unique `postId` value.\r\n\r\n## How has this been tested?\r\n<!-- Please describe in detail how you tested your changes. -->\r\n<!-- Include details of your testing environment, tests ran to see how -->\r\n<!-- your change affects other areas of the code, etc. -->\r\n- Verify that all the tests pass by running the command `npm run native test` or by the CI check.\r\n\r\n## Screenshots <!-- if applicable -->\r\nN/A\r\n\r\n## Types of changes\r\n<!-- What types of changes does your code introduce? -->\r\n<!-- Bug fix (non-breaking change which fixes an issue) -->\r\n<!-- New feature (non-breaking change which adds functionality) -->\r\n<!-- Breaking change (fix or feature that would cause existing functionality to not work as expected) -->\r\nBug fix\r\n\r\n## Checklist:\r\n- [x] My code is tested.\r\n- [x] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [x] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [ ] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [x] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [x] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [x] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33727", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33727/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33727/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33727/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33727", + "id": 954756916, + "node_id": "MDExOlB1bGxSZXF1ZXN0Njk4NjAyMDQ5", + "number": 33727, + "title": "Avoid double parsing the content when loading the editor", + "user": { + "login": "youknowriad", + "id": 272444, + "node_id": "MDQ6VXNlcjI3MjQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/272444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/youknowriad", + "html_url": "https://github.com/youknowriad", + "followers_url": "https://api.github.com/users/youknowriad/followers", + "following_url": "https://api.github.com/users/youknowriad/following{/other_user}", + "gists_url": "https://api.github.com/users/youknowriad/gists{/gist_id}", + "starred_url": "https://api.github.com/users/youknowriad/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/youknowriad/subscriptions", + "organizations_url": "https://api.github.com/users/youknowriad/orgs", + "repos_url": "https://api.github.com/users/youknowriad/repos", + "events_url": "https://api.github.com/users/youknowriad/events{/privacy}", + "received_events_url": "https://api.github.com/users/youknowriad/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 731693674, + "node_id": "MDU6TGFiZWw3MzE2OTM2NzQ=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Performance", + "name": "[Type] Performance", + "color": "f3f4fe", + "default": false, + "description": "" + } + ], + "state": "closed", + "locked": false, + "assignee": { + "login": "youknowriad", + "id": 272444, + "node_id": "MDQ6VXNlcjI3MjQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/272444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/youknowriad", + "html_url": "https://github.com/youknowriad", + "followers_url": "https://api.github.com/users/youknowriad/followers", + "following_url": "https://api.github.com/users/youknowriad/following{/other_user}", + "gists_url": "https://api.github.com/users/youknowriad/gists{/gist_id}", + "starred_url": "https://api.github.com/users/youknowriad/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/youknowriad/subscriptions", + "organizations_url": "https://api.github.com/users/youknowriad/orgs", + "repos_url": "https://api.github.com/users/youknowriad/repos", + "events_url": "https://api.github.com/users/youknowriad/events{/privacy}", + "received_events_url": "https://api.github.com/users/youknowriad/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "youknowriad", + "id": 272444, + "node_id": "MDQ6VXNlcjI3MjQ0NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/272444?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/youknowriad", + "html_url": "https://github.com/youknowriad", + "followers_url": "https://api.github.com/users/youknowriad/followers", + "following_url": "https://api.github.com/users/youknowriad/following{/other_user}", + "gists_url": "https://api.github.com/users/youknowriad/gists{/gist_id}", + "starred_url": "https://api.github.com/users/youknowriad/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/youknowriad/subscriptions", + "organizations_url": "https://api.github.com/users/youknowriad/orgs", + "repos_url": "https://api.github.com/users/youknowriad/repos", + "events_url": "https://api.github.com/users/youknowriad/events{/privacy}", + "received_events_url": "https://api.github.com/users/youknowriad/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 6, + "created_at": "2021-07-28T11:26:41Z", + "updated_at": "2021-07-29T09:33:48Z", + "closed_at": "2021-07-29T09:33:20Z", + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33727", + "html_url": "https://github.com/WordPress/gutenberg/pull/33727", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33727.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33727.patch" + }, + "body": "In the couple last WP releases, we introduced the EntityProvider and the `useEntityBlockEditor` React hook which allows us to retrieve the \"blocks\" of a given post entity. This hook also makes it easy to create block editors for widgets screens, reusable blocks, templates parts... \r\n\r\nThe hook need to transform the \"content\" of the entity to \"blocks\" by parsing it on initial render if the blocks are not already parsed.\r\n\r\nThat said, historically in the post editor, parsing was done in the `setupEditor` action which is called in theory before that hook, the problem though is that the React effect is run before the `useSelect` call subscription triggers after `setupEditor` meaning the `blocks` will always be empty causing a double parsing.\r\n\r\nThe solution I came with is to avoid the parsing in `setupEditor` unless necessary. Ideally the `setupEditor` action shouldn't be needed at all and its logic moved to the components themselves. In other words, the \"editor\" should always be \"setup\"/\"ready\". This is something we've struggled with for a long time but I think we're making good progress towards that .\r\n\r\nRight now, parsing is still done in `setupEditor` when a \"template\" is provided, that said, this is rare and especially for long posts (where the performance issues happen).\r\n\r\n**Notes**\r\n\r\n - I had to change the order of some action calls in the `setupEditor` action. I don't think it's impactful but I know initialization is e2e tests heavily, so let's see the impact here.\r\n - This should result in a gain of half a second at least for long posts (like the one we test with)", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33725", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33725/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33725/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33725/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33725", + "id": 954721914, + "node_id": "MDExOlB1bGxSZXF1ZXN0Njk4NTcxODcw", + "number": 33725, + "title": "Core Data: Deprecate `getAuthors` in favor of `getUsers`", + "user": { + "login": "Mamaduka", + "id": 240569, + "node_id": "MDQ6VXNlcjI0MDU2OQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/240569?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Mamaduka", + "html_url": "https://github.com/Mamaduka", + "followers_url": "https://api.github.com/users/Mamaduka/followers", + "following_url": "https://api.github.com/users/Mamaduka/following{/other_user}", + "gists_url": "https://api.github.com/users/Mamaduka/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Mamaduka/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Mamaduka/subscriptions", + "organizations_url": "https://api.github.com/users/Mamaduka/orgs", + "repos_url": "https://api.github.com/users/Mamaduka/repos", + "events_url": "https://api.github.com/users/Mamaduka/events{/privacy}", + "received_events_url": "https://api.github.com/users/Mamaduka/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 995368074, + "node_id": "MDU6TGFiZWw5OTUzNjgwNzQ=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Package]%20Core%20data", + "name": "[Package] Core data", + "color": "ed2572", + "default": false, + "description": "/packages/core-data" + } + ], + "state": "closed", + "locked": false, + "assignee": { + "login": "Mamaduka", + "id": 240569, + "node_id": "MDQ6VXNlcjI0MDU2OQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/240569?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Mamaduka", + "html_url": "https://github.com/Mamaduka", + "followers_url": "https://api.github.com/users/Mamaduka/followers", + "following_url": "https://api.github.com/users/Mamaduka/following{/other_user}", + "gists_url": "https://api.github.com/users/Mamaduka/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Mamaduka/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Mamaduka/subscriptions", + "organizations_url": "https://api.github.com/users/Mamaduka/orgs", + "repos_url": "https://api.github.com/users/Mamaduka/repos", + "events_url": "https://api.github.com/users/Mamaduka/events{/privacy}", + "received_events_url": "https://api.github.com/users/Mamaduka/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "Mamaduka", + "id": 240569, + "node_id": "MDQ6VXNlcjI0MDU2OQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/240569?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Mamaduka", + "html_url": "https://github.com/Mamaduka", + "followers_url": "https://api.github.com/users/Mamaduka/followers", + "following_url": "https://api.github.com/users/Mamaduka/following{/other_user}", + "gists_url": "https://api.github.com/users/Mamaduka/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Mamaduka/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Mamaduka/subscriptions", + "organizations_url": "https://api.github.com/users/Mamaduka/orgs", + "repos_url": "https://api.github.com/users/Mamaduka/repos", + "events_url": "https://api.github.com/users/Mamaduka/events{/privacy}", + "received_events_url": "https://api.github.com/users/Mamaduka/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 1, + "created_at": "2021-07-28T10:42:36Z", + "updated_at": "2021-07-28T18:00:34Z", + "closed_at": "2021-07-28T18:00:04Z", + "author_association": "MEMBER", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33725", + "html_url": "https://github.com/WordPress/gutenberg/pull/33725", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33725.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33725.patch" + }, + "body": "## Description\r\nDeprecates `getAuthors` in favor of `getUsers` and removes `__unstableGetAuthor` selector.\r\n\r\n## How has this been tested?\r\nRunning following code should display deprecation message in console:\r\n\r\n```js\r\nwp.data.select('core').getAuthors();\r\n```\r\n\r\n## Screenshots <!-- if applicable -->\r\n![CleanShot 2021-07-28 at 14 40 19](https://user-images.githubusercontent.com/240569/127309189-4b0bb6d5-d2cb-48ec-9699-1fc1b5e2a46b.png)\r\n\r\n## Types of changes\r\nDeprecation\r\n\r\n## Checklist:\r\n- [x] My code is tested.\r\n- [x] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [ ] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [ ] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [x] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [x] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [ ] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33721", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33721/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33721/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33721/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33721", + "id": 954586831, + "node_id": "MDExOlB1bGxSZXF1ZXN0Njk4NDU3Nzkz", + "number": 33721, + "title": "E2E: Block Hierarchy Navigation wait for the column to be highlighted", + "user": { + "login": "Mamaduka", + "id": 240569, + "node_id": "MDQ6VXNlcjI0MDU2OQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/240569?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Mamaduka", + "html_url": "https://github.com/Mamaduka", + "followers_url": "https://api.github.com/users/Mamaduka/followers", + "following_url": "https://api.github.com/users/Mamaduka/following{/other_user}", + "gists_url": "https://api.github.com/users/Mamaduka/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Mamaduka/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Mamaduka/subscriptions", + "organizations_url": "https://api.github.com/users/Mamaduka/orgs", + "repos_url": "https://api.github.com/users/Mamaduka/repos", + "events_url": "https://api.github.com/users/Mamaduka/events{/privacy}", + "received_events_url": "https://api.github.com/users/Mamaduka/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 1699237849, + "node_id": "MDU6TGFiZWwxNjk5MjM3ODQ5", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Package]%20E2E%20Tests", + "name": "[Package] E2E Tests", + "color": "ed2572", + "default": false, + "description": "/packages/e2e-tests" + } + ], + "state": "closed", + "locked": false, + "assignee": { + "login": "Mamaduka", + "id": 240569, + "node_id": "MDQ6VXNlcjI0MDU2OQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/240569?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Mamaduka", + "html_url": "https://github.com/Mamaduka", + "followers_url": "https://api.github.com/users/Mamaduka/followers", + "following_url": "https://api.github.com/users/Mamaduka/following{/other_user}", + "gists_url": "https://api.github.com/users/Mamaduka/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Mamaduka/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Mamaduka/subscriptions", + "organizations_url": "https://api.github.com/users/Mamaduka/orgs", + "repos_url": "https://api.github.com/users/Mamaduka/repos", + "events_url": "https://api.github.com/users/Mamaduka/events{/privacy}", + "received_events_url": "https://api.github.com/users/Mamaduka/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "Mamaduka", + "id": 240569, + "node_id": "MDQ6VXNlcjI0MDU2OQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/240569?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Mamaduka", + "html_url": "https://github.com/Mamaduka", + "followers_url": "https://api.github.com/users/Mamaduka/followers", + "following_url": "https://api.github.com/users/Mamaduka/following{/other_user}", + "gists_url": "https://api.github.com/users/Mamaduka/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Mamaduka/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Mamaduka/subscriptions", + "organizations_url": "https://api.github.com/users/Mamaduka/orgs", + "repos_url": "https://api.github.com/users/Mamaduka/repos", + "events_url": "https://api.github.com/users/Mamaduka/events{/privacy}", + "received_events_url": "https://api.github.com/users/Mamaduka/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 5, + "created_at": "2021-07-28T08:00:11Z", + "updated_at": "2021-07-28T10:43:49Z", + "closed_at": "2021-07-28T10:43:28Z", + "author_association": "MEMBER", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33721", + "html_url": "https://github.com/WordPress/gutenberg/pull/33721", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33721.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33721.patch" + }, + "body": "## Description\r\nThe \"Block Hierarchy Navigation\" e2e test [fails](https://github.com/WordPress/gutenberg/runs/3162134316) from time to time. Unfortunately, I'm unable to reproduce this locally.\r\n\r\nBased on the screenshot from the artifacts, it looks like block selection happens before navigation reaches the third and last column block.\r\n\r\nI'm adding an extra check to verify that the third block is highlighted before selecting it. This should also give keyboard navigation a little spare time to finish.\r\n\r\n## How has this been tested?\r\nLocally using the following command:\r\n\r\n```\r\nnpm run test-e2e -- packages/e2e-tests/specs/editor/various/block-hierarchy-navigation.test.js\r\n```\r\n\r\n## Screenshots <!-- if applicable -->\r\n![should navigate block hierarchy using only the keyboard](https://user-images.githubusercontent.com/240569/127285118-90c8af20-a50e-4729-927c-6fa68dd7bfc2.jpg)\r\n\r\n## Types of changes\r\nBugfix\r\n\r\n## Checklist:\r\n- [x] My code is tested.\r\n- [x] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [ ] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [ ] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [x] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [x] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [ ] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33717", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33717/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33717/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33717/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33717", + "id": 954302691, + "node_id": "MDExOlB1bGxSZXF1ZXN0Njk4MjE5Mjg1", + "number": 33717, + "title": "Components: update snackbar to use framer motion instead of react spring", + "user": { + "login": "gwwar", + "id": 1270189, + "node_id": "MDQ6VXNlcjEyNzAxODk=", + "avatar_url": "https://avatars.githubusercontent.com/u/1270189?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/gwwar", + "html_url": "https://github.com/gwwar", + "followers_url": "https://api.github.com/users/gwwar/followers", + "following_url": "https://api.github.com/users/gwwar/following{/other_user}", + "gists_url": "https://api.github.com/users/gwwar/gists{/gist_id}", + "starred_url": "https://api.github.com/users/gwwar/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/gwwar/subscriptions", + "organizations_url": "https://api.github.com/users/gwwar/orgs", + "repos_url": "https://api.github.com/users/gwwar/repos", + "events_url": "https://api.github.com/users/gwwar/events{/privacy}", + "received_events_url": "https://api.github.com/users/gwwar/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 531680825, + "node_id": "MDU6TGFiZWw1MzE2ODA4MjU=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Enhancement", + "name": "[Type] Enhancement", + "color": "3993a3", + "default": false, + "description": "A suggestion for improvement." + }, + { + "id": 997392122, + "node_id": "MDU6TGFiZWw5OTczOTIxMjI=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Package]%20Components", + "name": "[Package] Components", + "color": "ed2572", + "default": false, + "description": "/packages/components" + }, + { + "id": 1298994603, + "node_id": "MDU6TGFiZWwxMjk4OTk0NjAz", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Package]%20Edit%20Post", + "name": "[Package] Edit Post", + "color": "ed2572", + "default": false, + "description": "packages/edit-post" + } + ], + "state": "closed", + "locked": false, + "assignee": { + "login": "gwwar", + "id": 1270189, + "node_id": "MDQ6VXNlcjEyNzAxODk=", + "avatar_url": "https://avatars.githubusercontent.com/u/1270189?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/gwwar", + "html_url": "https://github.com/gwwar", + "followers_url": "https://api.github.com/users/gwwar/followers", + "following_url": "https://api.github.com/users/gwwar/following{/other_user}", + "gists_url": "https://api.github.com/users/gwwar/gists{/gist_id}", + "starred_url": "https://api.github.com/users/gwwar/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/gwwar/subscriptions", + "organizations_url": "https://api.github.com/users/gwwar/orgs", + "repos_url": "https://api.github.com/users/gwwar/repos", + "events_url": "https://api.github.com/users/gwwar/events{/privacy}", + "received_events_url": "https://api.github.com/users/gwwar/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "gwwar", + "id": 1270189, + "node_id": "MDQ6VXNlcjEyNzAxODk=", + "avatar_url": "https://avatars.githubusercontent.com/u/1270189?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/gwwar", + "html_url": "https://github.com/gwwar", + "followers_url": "https://api.github.com/users/gwwar/followers", + "following_url": "https://api.github.com/users/gwwar/following{/other_user}", + "gists_url": "https://api.github.com/users/gwwar/gists{/gist_id}", + "starred_url": "https://api.github.com/users/gwwar/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/gwwar/subscriptions", + "organizations_url": "https://api.github.com/users/gwwar/orgs", + "repos_url": "https://api.github.com/users/gwwar/repos", + "events_url": "https://api.github.com/users/gwwar/events{/privacy}", + "received_events_url": "https://api.github.com/users/gwwar/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 18, + "created_at": "2021-07-27T22:08:50Z", + "updated_at": "2021-08-05T17:36:56Z", + "closed_at": "2021-08-05T16:25:27Z", + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33717", + "html_url": "https://github.com/WordPress/gutenberg/pull/33717", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33717.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33717.patch" + }, + "body": "This PR experiments with using framer motion instead of react spring for the snackbar component. Since Framer Motion is ~30kb gzipped I also ~externalized it~ exported this from `@wordpress/components` once to avoid bloating each package that it's used in.\r\n\r\nOne benefit here is that framer motion supports `height: auto` which allows us to remove ref and component state management. 🤔 ~There's quite a bundle size jump here to consider for a single component, so I may explore trying to whittle down.~\r\n\r\nResults overall, are are encouraging. I'd like to see if we can update the Persistent List View to use drag and add animations for the drawers opening and closing next.\r\n\r\n| Size Impacts |\r\n|----|\r\n| <img width=\"602\" alt=\"Screen Shot 2021-08-04 at 9 54 40 AM\" src=\"https://user-images.githubusercontent.com/1270189/128222441-287b2cd3-4536-4add-94a0-a8094f46cfb2.png\"> |\r\n\r\n#### After - Motion:\r\n\r\nhttps://user-images.githubusercontent.com/1270189/127399049-aa5a91fe-88e9-4783-857e-7531e9adcf8b.mp4\r\n\r\n#### After - Reduce Motion\r\n\r\nhttps://user-images.githubusercontent.com/1270189/127397712-3a733583-5e04-485c-bf2f-791e01950e4d.mp4\r\n\r\n#### Before - Motion\r\n\r\nhttps://user-images.githubusercontent.com/1270189/127397745-b6b3c29f-5952-4e1a-87c4-cc27564ad7f7.mp4\r\n\r\n#### Before - Reduce Motion\r\n\r\nhttps://user-images.githubusercontent.com/1270189/127397786-38325ff9-563c-4446-a2a7-a0b528d19b80.mp4\r\n \r\n\r\n### Testing Instructions\r\n\r\nIn console type:\r\n```\r\nwp.data.dispatch('core/notices').createNotice(\r\n\t\t'info',\r\n\t\t'Post published.',\r\n\t\t{\r\n\t\t\ttype: 'snackbar',\r\n\t\t\tactions: [\r\n\t\t\t\t{\r\n\t\t\t\t\tonClick: () => {},\r\n\t\t\t\t\tlabel: 'View post'\r\n\t\t\t\t}\r\n\t\t\t]\r\n\t\t}\r\n\t);\r\n```\r\nOr perform an action like publishing or updating a page.\r\n\r\nVerify that folks are happy with how framer motion is being exported.\r\n\r\n| Verify that there are no regressions in the preview panel |\r\n|-----|\r\n| <img width=\"245\" alt=\"Screen Shot 2021-08-03 at 12 10 13 PM\" src=\"https://user-images.githubusercontent.com/1270189/128072345-28934d99-042b-4ca7-ada5-fcd5eda4510c.png\"> |\r\n\r\n\r\n\r\n\r\n\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33714", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33714/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33714/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33714/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33714", + "id": 954094299, + "node_id": "MDExOlB1bGxSZXF1ZXN0Njk4MDQwNjEy", + "number": 33714, + "title": "components: Add new ColorPicker", + "user": { + "login": "sarayourfriend", + "id": 24264157, + "node_id": "MDQ6VXNlcjI0MjY0MTU3", + "avatar_url": "https://avatars.githubusercontent.com/u/24264157?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/sarayourfriend", + "html_url": "https://github.com/sarayourfriend", + "followers_url": "https://api.github.com/users/sarayourfriend/followers", + "following_url": "https://api.github.com/users/sarayourfriend/following{/other_user}", + "gists_url": "https://api.github.com/users/sarayourfriend/gists{/gist_id}", + "starred_url": "https://api.github.com/users/sarayourfriend/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/sarayourfriend/subscriptions", + "organizations_url": "https://api.github.com/users/sarayourfriend/orgs", + "repos_url": "https://api.github.com/users/sarayourfriend/repos", + "events_url": "https://api.github.com/users/sarayourfriend/events{/privacy}", + "received_events_url": "https://api.github.com/users/sarayourfriend/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 531680825, + "node_id": "MDU6TGFiZWw1MzE2ODA4MjU=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Enhancement", + "name": "[Type] Enhancement", + "color": "3993a3", + "default": false, + "description": "A suggestion for improvement." + }, + { + "id": 659839209, + "node_id": "MDU6TGFiZWw2NTk4MzkyMDk=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Feature]%20UI%20Components", + "name": "[Feature] UI Components", + "color": "fbca04", + "default": false, + "description": "" + }, + { + "id": 997392122, + "node_id": "MDU6TGFiZWw5OTczOTIxMjI=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Package]%20Components", + "name": "[Package] Components", + "color": "ed2572", + "default": false, + "description": "/packages/components" + }, + { + "id": 1607665481, + "node_id": "MDU6TGFiZWwxNjA3NjY1NDgx", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/Storybook", + "name": "Storybook", + "color": "81e2c7", + "default": false, + "description": "Storybook and its stories for components" + }, + { + "id": 2555015900, + "node_id": "MDU6TGFiZWwyNTU1MDE1OTAw", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Feature]%20Component%20System", + "name": "[Feature] Component System", + "color": "fbca04", + "default": false, + "description": "The next iteration on WordPress Components." + } + ], + "state": "closed", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 21, + "created_at": "2021-07-27T17:16:54Z", + "updated_at": "2021-08-12T13:12:16Z", + "closed_at": "2021-08-10T13:59:00Z", + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33714", + "html_url": "https://github.com/WordPress/gutenberg/pull/33714", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33714.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33714.patch" + }, + "body": "<!-- Learn the overall process and best practices for pull requests at https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/repository-management.md#pull-requests. -->\r\n\r\n<!-- Gutenberg's license is in the process of updating to be dual-licensed under the GPL and MPL. As part of that transition, all new contributions are dual-licensed. For more information, see: https://github.com/WordPress/gutenberg/blob/trunk/LICENSE.md -->\r\n\r\n## Description\r\nAdds a new vastly simplified ColorPicker implementation based on `react-colorful`.\r\n\r\n## How has this been tested?\r\nStorybook.\r\n\r\n## Screenshots <!-- if applicable -->\r\n\r\n\r\nhttps://user-images.githubusercontent.com/24264157/127386106-606631ef-2d8e-4c5a-973f-c288bddb947d.mov\r\n\r\n\r\n\r\n## Types of changes\r\nNew feature.\r\n\r\n## Checklist:\r\n- [x] My code is tested.\r\n- [x] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [ ] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [ ] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [x] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [x] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [x] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33713", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33713/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33713/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33713/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33713", + "id": 954035586, + "node_id": "MDExOlB1bGxSZXF1ZXN0Njk3OTkwODk5", + "number": 33713, + "title": "Update bug issue template to use forms", + "user": { + "login": "annezazu", + "id": 26996883, + "node_id": "MDQ6VXNlcjI2OTk2ODgz", + "avatar_url": "https://avatars.githubusercontent.com/u/26996883?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/annezazu", + "html_url": "https://github.com/annezazu", + "followers_url": "https://api.github.com/users/annezazu/followers", + "following_url": "https://api.github.com/users/annezazu/following{/other_user}", + "gists_url": "https://api.github.com/users/annezazu/gists{/gist_id}", + "starred_url": "https://api.github.com/users/annezazu/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/annezazu/subscriptions", + "organizations_url": "https://api.github.com/users/annezazu/orgs", + "repos_url": "https://api.github.com/users/annezazu/repos", + "events_url": "https://api.github.com/users/annezazu/events{/privacy}", + "received_events_url": "https://api.github.com/users/annezazu/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 1032028862, + "node_id": "MDU6TGFiZWwxMDMyMDI4ODYy", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Project%20Management", + "name": "[Type] Project Management", + "color": "e55ead", + "default": false, + "description": "Meta-issues related to project management of Gutenberg" + } + ], + "state": "closed", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 4, + "created_at": "2021-07-27T16:02:51Z", + "updated_at": "2021-08-02T17:06:37Z", + "closed_at": "2021-07-29T14:48:58Z", + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33713", + "html_url": "https://github.com/WordPress/gutenberg/pull/33713", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33713.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33713.patch" + }, + "body": "## Description\r\nThis will help address part of this open issue to move bug reports to forms: https://github.com/WordPress/gutenberg/issues/33394 I followed the documentation linked and tried to match it to the current issue template as closely as possible. I purposefully left out adding labels and customizing the title as I still believe both of those are too complex decisions to make in such a generalized way. \r\n\r\nOf note:\r\n\r\n> If you want to use the same file name for your YAML issue form, you must delete the Markdown issue template when you commit the new file to your repository.\r\n\r\nThis PR doesn't include that file being removed but can be if we'd like to keep the same file name. I've never created one of these issue template forms before so might have approached this incorrectly :) Guidance appreciated. \r\n\r\n## Types of changes\r\n\r\nEnhancement to project management\r\n\r\n## Checklist:\r\n- [ ] My code is tested.\r\n- [ ] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [ ] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [ ] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [ ] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [ ] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [ ] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33708", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33708/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33708/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33708/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33708", + "id": 953810575, + "node_id": "MDExOlB1bGxSZXF1ZXN0Njk3Nzk4MTc2", + "number": 33708, + "title": "Disable spellcheck and autocomplete in permalink slug field", + "user": { + "login": "walbo", + "id": 1415747, + "node_id": "MDQ6VXNlcjE0MTU3NDc=", + "avatar_url": "https://avatars.githubusercontent.com/u/1415747?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/walbo", + "html_url": "https://github.com/walbo", + "followers_url": "https://api.github.com/users/walbo/followers", + "following_url": "https://api.github.com/users/walbo/following{/other_user}", + "gists_url": "https://api.github.com/users/walbo/gists{/gist_id}", + "starred_url": "https://api.github.com/users/walbo/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/walbo/subscriptions", + "organizations_url": "https://api.github.com/users/walbo/orgs", + "repos_url": "https://api.github.com/users/walbo/repos", + "events_url": "https://api.github.com/users/walbo/events{/privacy}", + "received_events_url": "https://api.github.com/users/walbo/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 531680825, + "node_id": "MDU6TGFiZWw1MzE2ODA4MjU=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Enhancement", + "name": "[Type] Enhancement", + "color": "3993a3", + "default": false, + "description": "A suggestion for improvement." + }, + { + "id": 610403961, + "node_id": "MDU6TGFiZWw2MTA0MDM5NjE=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Feature]%20Document%20Settings", + "name": "[Feature] Document Settings", + "color": "fbca04", + "default": false, + "description": "" + }, + { + "id": 1118625183, + "node_id": "MDU6TGFiZWwxMTE4NjI1MTgz", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Feature]%20Permalink", + "name": "[Feature] Permalink", + "color": "fbca04", + "default": false, + "description": "" + } + ], + "state": "closed", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 0, + "created_at": "2021-07-27T12:03:07Z", + "updated_at": "2021-07-28T12:08:41Z", + "closed_at": "2021-07-28T05:12:26Z", + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33708", + "html_url": "https://github.com/WordPress/gutenberg/pull/33708", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33708.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33708.patch" + }, + "body": "<!-- Learn the overall process and best practices for pull requests at https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/repository-management.md#pull-requests. -->\r\n\r\n<!-- Gutenberg's license is in the process of updating to be dual-licensed under the GPL and MPL. As part of that transition, all new contributions are dual-licensed. For more information, see: https://github.com/WordPress/gutenberg/blob/trunk/LICENSE.md -->\r\n\r\n## Description\r\nPrevent unintended permalink slugs.\r\n\r\nFixes #33612\r\n<!-- Please describe what you have changed or added -->\r\n\r\n## How has this been tested?\r\n<!-- Please describe in detail how you tested your changes. -->\r\n<!-- Include details of your testing environment, tests ran to see how -->\r\n<!-- your change affects other areas of the code, etc. -->\r\n\r\n## Screenshots <!-- if applicable -->\r\n\r\n## Types of changes\r\nEnhancement\r\n<!-- What types of changes does your code introduce? -->\r\n<!-- Bug fix (non-breaking change which fixes an issue) -->\r\n<!-- New feature (non-breaking change which adds functionality) -->\r\n<!-- Breaking change (fix or feature that would cause existing functionality to not work as expected) -->\r\n\r\n## Checklist:\r\n- [ ] My code is tested.\r\n- [ ] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [ ] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [ ] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [ ] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [ ] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [ ] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33707", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33707/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33707/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33707/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33707", + "id": 953738028, + "node_id": "MDExOlB1bGxSZXF1ZXN0Njk3NzM0OTI5", + "number": 33707, + "title": "[Mobile] - Global styles: Check for undefined values and merge user colors", + "user": { + "login": "geriux", + "id": 4885740, + "node_id": "MDQ6VXNlcjQ4ODU3NDA=", + "avatar_url": "https://avatars.githubusercontent.com/u/4885740?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/geriux", + "html_url": "https://github.com/geriux", + "followers_url": "https://api.github.com/users/geriux/followers", + "following_url": "https://api.github.com/users/geriux/following{/other_user}", + "gists_url": "https://api.github.com/users/geriux/gists{/gist_id}", + "starred_url": "https://api.github.com/users/geriux/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/geriux/subscriptions", + "organizations_url": "https://api.github.com/users/geriux/orgs", + "repos_url": "https://api.github.com/users/geriux/repos", + "events_url": "https://api.github.com/users/geriux/events{/privacy}", + "received_events_url": "https://api.github.com/users/geriux/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 982506020, + "node_id": "MDU6TGFiZWw5ODI1MDYwMjA=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/Mobile%20App%20-%20i.e.%20Android%20or%20iOS", + "name": "Mobile App - i.e. Android or iOS", + "color": "a3ef7a", + "default": false, + "description": "Native mobile impl of the block editor. (Note: used in scripts, ping mobile folks to change)" + } + ], + "state": "closed", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 3, + "created_at": "2021-07-27T10:28:27Z", + "updated_at": "2021-07-28T14:33:42Z", + "closed_at": "2021-07-28T14:33:16Z", + "author_association": "MEMBER", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33707", + "html_url": "https://github.com/WordPress/gutenberg/pull/33707", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33707.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33707.patch" + }, + "body": "## Description\r\nWhile testing the mobile editor an issue was found when one of the Global styles values was undefined, causing it to crash. This PR checks those values before parsing the variables.\r\n\r\n## How has this been tested?\r\n\r\n### Test case 1 \r\n\r\nWith a simple site\r\n\r\n- Open the WordPress iOS app with metro running\r\n- Open and close the editor a couple of times\r\n- **Expect** the editor to work correctly without crashing\r\n\r\n### Test case 2\r\n\r\nWith a self-hosted site with WordPress 5.8 and Gutenberg 11.1 and a theme.json theme activated\r\n\r\n- Open the WordPress iOS app with metro running\r\n- Open the editor\r\n- **Expect** to see the theme colors (background, text)\r\n\r\n## Screenshots <!-- if applicable -->\r\n\r\nTest case 1|Test case 2\r\n-|-\r\n<kbd><img src=\"https://user-images.githubusercontent.com/4885740/127139157-54e02f96-efb4-4975-9c19-076bdad9ccff.png\" width=\"200\" /></kbd> | <kbd><img src=\"https://user-images.githubusercontent.com/4885740/127139171-9daf9b21-3595-4fc0-a421-320157cffd7b.png\" width=\"200\" /></kbd>\r\n\r\n## Types of changes\r\nBug fix\r\n\r\n## Checklist:\r\n- [x] My code is tested.\r\n- [x] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [x] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [x] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [x] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [x] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [x] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33703", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33703/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33703/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33703/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33703", + "id": 953194000, + "node_id": "MDExOlB1bGxSZXF1ZXN0Njk3MjczNzI1", + "number": 33703, + "title": "Template Part placeholder - Add title step to creation flow.", + "user": { + "login": "Addison-Stavlo", + "id": 28742426, + "node_id": "MDQ6VXNlcjI4NzQyNDI2", + "avatar_url": "https://avatars.githubusercontent.com/u/28742426?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Addison-Stavlo", + "html_url": "https://github.com/Addison-Stavlo", + "followers_url": "https://api.github.com/users/Addison-Stavlo/followers", + "following_url": "https://api.github.com/users/Addison-Stavlo/following{/other_user}", + "gists_url": "https://api.github.com/users/Addison-Stavlo/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Addison-Stavlo/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Addison-Stavlo/subscriptions", + "organizations_url": "https://api.github.com/users/Addison-Stavlo/orgs", + "repos_url": "https://api.github.com/users/Addison-Stavlo/repos", + "events_url": "https://api.github.com/users/Addison-Stavlo/events{/privacy}", + "received_events_url": "https://api.github.com/users/Addison-Stavlo/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 1604715381, + "node_id": "MDU6TGFiZWwxNjA0NzE1Mzgx", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Feature]%20Full%20Site%20Editing", + "name": "[Feature] Full Site Editing", + "color": "fbca04", + "default": false, + "description": "" + }, + { + "id": 2373088071, + "node_id": "MDU6TGFiZWwyMzczMDg4MDcx", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Block]%20Template-Part", + "name": "[Block] Template-Part", + "color": "6767e5", + "default": false, + "description": "" + } + ], + "state": "closed", + "locked": false, + "assignee": { + "login": "Addison-Stavlo", + "id": 28742426, + "node_id": "MDQ6VXNlcjI4NzQyNDI2", + "avatar_url": "https://avatars.githubusercontent.com/u/28742426?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Addison-Stavlo", + "html_url": "https://github.com/Addison-Stavlo", + "followers_url": "https://api.github.com/users/Addison-Stavlo/followers", + "following_url": "https://api.github.com/users/Addison-Stavlo/following{/other_user}", + "gists_url": "https://api.github.com/users/Addison-Stavlo/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Addison-Stavlo/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Addison-Stavlo/subscriptions", + "organizations_url": "https://api.github.com/users/Addison-Stavlo/orgs", + "repos_url": "https://api.github.com/users/Addison-Stavlo/repos", + "events_url": "https://api.github.com/users/Addison-Stavlo/events{/privacy}", + "received_events_url": "https://api.github.com/users/Addison-Stavlo/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "Addison-Stavlo", + "id": 28742426, + "node_id": "MDQ6VXNlcjI4NzQyNDI2", + "avatar_url": "https://avatars.githubusercontent.com/u/28742426?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Addison-Stavlo", + "html_url": "https://github.com/Addison-Stavlo", + "followers_url": "https://api.github.com/users/Addison-Stavlo/followers", + "following_url": "https://api.github.com/users/Addison-Stavlo/following{/other_user}", + "gists_url": "https://api.github.com/users/Addison-Stavlo/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Addison-Stavlo/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Addison-Stavlo/subscriptions", + "organizations_url": "https://api.github.com/users/Addison-Stavlo/orgs", + "repos_url": "https://api.github.com/users/Addison-Stavlo/repos", + "events_url": "https://api.github.com/users/Addison-Stavlo/events{/privacy}", + "received_events_url": "https://api.github.com/users/Addison-Stavlo/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 5, + "created_at": "2021-07-26T18:59:12Z", + "updated_at": "2021-07-30T16:42:33Z", + "closed_at": "2021-07-30T16:42:07Z", + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33703", + "html_url": "https://github.com/WordPress/gutenberg/pull/33703", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33703.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33703.patch" + }, + "body": "<!-- Learn the overall process and best practices for pull requests at https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/repository-management.md#pull-requests. -->\r\n\r\n<!-- Gutenberg's license is in the process of updating to be dual-licensed under the GPL and MPL. As part of that transition, all new contributions are dual-licensed. For more information, see: https://github.com/WordPress/gutenberg/blob/trunk/LICENSE.md -->\r\n\r\n## Description\r\n<!-- Please describe what you have changed or added -->\r\nRelated to discussion on #29950 - Adds a title step to the creation flow from the Template Part placeholder. Here we prompt the user with a modal (similar to the \"make template part\" flow from the block settings ellipsis menu) to change the name of the title from \"Untitled Template Part\". If the modal is cancelled, we revert to the placeholder and the template part is not created.\r\n\r\n![Screen Shot 2021-07-26 at 2 47 41 PM](https://user-images.githubusercontent.com/28742426/127043576-2263a093-c1ab-44a8-859b-d299bd937820.png)\r\n\r\n\r\n## How has this been tested?\r\n<!-- Please describe in detail how you tested your changes. -->\r\n<!-- Include details of your testing environment, tests ran to see how -->\r\n<!-- your change affects other areas of the code, etc. -->\r\nWith FSE enabled, test the following in both the Site and Post editor:\r\n* Insert a template part block placeholder (Header, Footer, or Template Part).\r\n* Select the \"New %s\" option. \r\n* A naming input should appear.\r\n* Cancelling (or clicking outside) the modal should revert the block back to the placeholder state.\r\n* \"Create\" should create the new template part with the name that was given in the input field.\r\n\r\n## Screenshots <!-- if applicable -->\r\n\r\n## Types of changes\r\n<!-- What types of changes does your code introduce? -->\r\n<!-- Bug fix (non-breaking change which fixes an issue) -->\r\nNew feature (non-breaking change which adds functionality) \r\n<!-- Breaking change (fix or feature that would cause existing functionality to not work as expected) -->\r\n\r\n## Checklist:\r\n- [ ] My code is tested.\r\n- [ ] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [ ] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [ ] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [ ] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [ ] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [ ] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33701", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33701/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33701/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33701/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33701", + "id": 953174654, + "node_id": "MDExOlB1bGxSZXF1ZXN0Njk3MjU3OTQy", + "number": 33701, + "title": "Components: promote `ItemGroup`", + "user": { + "login": "ciampo", + "id": 1083581, + "node_id": "MDQ6VXNlcjEwODM1ODE=", + "avatar_url": "https://avatars.githubusercontent.com/u/1083581?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/ciampo", + "html_url": "https://github.com/ciampo", + "followers_url": "https://api.github.com/users/ciampo/followers", + "following_url": "https://api.github.com/users/ciampo/following{/other_user}", + "gists_url": "https://api.github.com/users/ciampo/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ciampo/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ciampo/subscriptions", + "organizations_url": "https://api.github.com/users/ciampo/orgs", + "repos_url": "https://api.github.com/users/ciampo/repos", + "events_url": "https://api.github.com/users/ciampo/events{/privacy}", + "received_events_url": "https://api.github.com/users/ciampo/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 531680825, + "node_id": "MDU6TGFiZWw1MzE2ODA4MjU=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Enhancement", + "name": "[Type] Enhancement", + "color": "3993a3", + "default": false, + "description": "A suggestion for improvement." + }, + { + "id": 997392122, + "node_id": "MDU6TGFiZWw5OTczOTIxMjI=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Package]%20Components", + "name": "[Package] Components", + "color": "ed2572", + "default": false, + "description": "/packages/components" + }, + { + "id": 1789345375, + "node_id": "MDU6TGFiZWwxNzg5MzQ1Mzc1", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Experimental", + "name": "[Type] Experimental", + "color": "4109a0", + "default": false, + "description": "Experimental feature or API." + }, + { + "id": 2555015900, + "node_id": "MDU6TGFiZWwyNTU1MDE1OTAw", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Feature]%20Component%20System", + "name": "[Feature] Component System", + "color": "fbca04", + "default": false, + "description": "The next iteration on WordPress Components." + } + ], + "state": "closed", + "locked": false, + "assignee": { + "login": "ciampo", + "id": 1083581, + "node_id": "MDQ6VXNlcjEwODM1ODE=", + "avatar_url": "https://avatars.githubusercontent.com/u/1083581?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/ciampo", + "html_url": "https://github.com/ciampo", + "followers_url": "https://api.github.com/users/ciampo/followers", + "following_url": "https://api.github.com/users/ciampo/following{/other_user}", + "gists_url": "https://api.github.com/users/ciampo/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ciampo/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ciampo/subscriptions", + "organizations_url": "https://api.github.com/users/ciampo/orgs", + "repos_url": "https://api.github.com/users/ciampo/repos", + "events_url": "https://api.github.com/users/ciampo/events{/privacy}", + "received_events_url": "https://api.github.com/users/ciampo/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "ciampo", + "id": 1083581, + "node_id": "MDQ6VXNlcjEwODM1ODE=", + "avatar_url": "https://avatars.githubusercontent.com/u/1083581?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/ciampo", + "html_url": "https://github.com/ciampo", + "followers_url": "https://api.github.com/users/ciampo/followers", + "following_url": "https://api.github.com/users/ciampo/following{/other_user}", + "gists_url": "https://api.github.com/users/ciampo/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ciampo/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ciampo/subscriptions", + "organizations_url": "https://api.github.com/users/ciampo/orgs", + "repos_url": "https://api.github.com/users/ciampo/repos", + "events_url": "https://api.github.com/users/ciampo/events{/privacy}", + "received_events_url": "https://api.github.com/users/ciampo/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 2, + "created_at": "2021-07-26T18:31:43Z", + "updated_at": "2021-07-29T08:56:06Z", + "closed_at": "2021-07-29T08:55:47Z", + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33701", + "html_url": "https://github.com/WordPress/gutenberg/pull/33701", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33701.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33701.patch" + }, + "body": "<!-- Learn the overall process and best practices for pull requests at https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/repository-management.md#pull-requests. -->\r\n\r\n<!-- Gutenberg's license is in the process of updating to be dual-licensed under the GPL and MPL. As part of that transition, all new contributions are dual-licensed. For more information, see: https://github.com/WordPress/gutenberg/blob/trunk/LICENSE.md -->\r\n\r\n## Description\r\n<!-- Please describe what you have changed or added -->\r\n\r\n- Promote the `ItemGroup` and `Item` components from the `packages/components/src/ui` folder to the `packages/components/src` folder\r\n- Refactor the folder structure, so that each component has its own folder\r\n- Fix a bug with the CSS pseudo-elements selectors, where the `[first|last]-of-type` selectors where causing an issue when mixing and matching different HTML element types (e.g. when one item has `isAction={true}` and the rest of the elements don't). To fix this bug, every `Item` is now wrapped in a `div` component to make sure that all children of `ItemGroup` are of the same type\r\n- Add README and JSDocs comments to types\r\n- Add a few basic unit tests\r\n- Export component from the `@wordpress/components` package\r\n\r\n## How has this been tested?\r\n<!-- Please describe in detail how you tested your changes. -->\r\n<!-- Include details of your testing environment, tests ran to see how -->\r\n<!-- your change affects other areas of the code, etc. -->\r\n\r\n- All tests pass\r\n- Run storybook locally, and make sure that the components behaves in the same way as it does currently on [production storybook](https://wordpress.github.io/gutenberg/?path=/story/components-experimental-itemgroup--default)\r\n\r\n## Screenshots <!-- if applicable -->\r\n\r\n<img width=\"374\" alt=\"Screenshot 2021-07-26 at 20 31 27\" src=\"https://user-images.githubusercontent.com/1083581/127040232-730f1a65-d93f-46d4-9d45-14892f0ebc9b.png\">\r\n\r\n\r\n## Types of changes\r\n<!-- What types of changes does your code introduce? -->\r\n<!-- Bug fix (non-breaking change which fixes an issue) -->\r\n<!-- New feature (non-breaking change which adds functionality) -->\r\n<!-- Breaking change (fix or feature that would cause existing functionality to not work as expected) -->\r\n\r\nRefactor\r\n\r\n## Checklist:\r\n- [x] My code is tested.\r\n- [x] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [x] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [x] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [x] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [x] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [x] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33696", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33696/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33696/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33696/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33696", + "id": 952995508, + "node_id": "MDExOlB1bGxSZXF1ZXN0Njk3MTA2MzEx", + "number": 33696, + "title": "components: InputControl to TypeScript", + "user": { + "login": "sarayourfriend", + "id": 24264157, + "node_id": "MDQ6VXNlcjI0MjY0MTU3", + "avatar_url": "https://avatars.githubusercontent.com/u/24264157?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/sarayourfriend", + "html_url": "https://github.com/sarayourfriend", + "followers_url": "https://api.github.com/users/sarayourfriend/followers", + "following_url": "https://api.github.com/users/sarayourfriend/following{/other_user}", + "gists_url": "https://api.github.com/users/sarayourfriend/gists{/gist_id}", + "starred_url": "https://api.github.com/users/sarayourfriend/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/sarayourfriend/subscriptions", + "organizations_url": "https://api.github.com/users/sarayourfriend/orgs", + "repos_url": "https://api.github.com/users/sarayourfriend/repos", + "events_url": "https://api.github.com/users/sarayourfriend/events{/privacy}", + "received_events_url": "https://api.github.com/users/sarayourfriend/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 930001208, + "node_id": "MDU6TGFiZWw5MzAwMDEyMDg=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Code%20Quality", + "name": "[Type] Code Quality", + "color": "e5e04b", + "default": false, + "description": "Gotta shave those yaks." + }, + { + "id": 997392122, + "node_id": "MDU6TGFiZWw5OTczOTIxMjI=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Package]%20Components", + "name": "[Package] Components", + "color": "ed2572", + "default": false, + "description": "/packages/components" + } + ], + "state": "closed", + "locked": false, + "assignee": { + "login": "sarayourfriend", + "id": 24264157, + "node_id": "MDQ6VXNlcjI0MjY0MTU3", + "avatar_url": "https://avatars.githubusercontent.com/u/24264157?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/sarayourfriend", + "html_url": "https://github.com/sarayourfriend", + "followers_url": "https://api.github.com/users/sarayourfriend/followers", + "following_url": "https://api.github.com/users/sarayourfriend/following{/other_user}", + "gists_url": "https://api.github.com/users/sarayourfriend/gists{/gist_id}", + "starred_url": "https://api.github.com/users/sarayourfriend/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/sarayourfriend/subscriptions", + "organizations_url": "https://api.github.com/users/sarayourfriend/orgs", + "repos_url": "https://api.github.com/users/sarayourfriend/repos", + "events_url": "https://api.github.com/users/sarayourfriend/events{/privacy}", + "received_events_url": "https://api.github.com/users/sarayourfriend/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "sarayourfriend", + "id": 24264157, + "node_id": "MDQ6VXNlcjI0MjY0MTU3", + "avatar_url": "https://avatars.githubusercontent.com/u/24264157?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/sarayourfriend", + "html_url": "https://github.com/sarayourfriend", + "followers_url": "https://api.github.com/users/sarayourfriend/followers", + "following_url": "https://api.github.com/users/sarayourfriend/following{/other_user}", + "gists_url": "https://api.github.com/users/sarayourfriend/gists{/gist_id}", + "starred_url": "https://api.github.com/users/sarayourfriend/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/sarayourfriend/subscriptions", + "organizations_url": "https://api.github.com/users/sarayourfriend/orgs", + "repos_url": "https://api.github.com/users/sarayourfriend/repos", + "events_url": "https://api.github.com/users/sarayourfriend/events{/privacy}", + "received_events_url": "https://api.github.com/users/sarayourfriend/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 2, + "created_at": "2021-07-26T14:58:32Z", + "updated_at": "2021-08-06T13:04:52Z", + "closed_at": "2021-08-06T13:04:11Z", + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33696", + "html_url": "https://github.com/WordPress/gutenberg/pull/33696", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33696.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33696.patch" + }, + "body": "<!-- Learn the overall process and best practices for pull requests at https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/repository-management.md#pull-requests. -->\r\n\r\n<!-- Gutenberg's license is in the process of updating to be dual-licensed under the GPL and MPL. As part of that transition, all new contributions are dual-licensed. For more information, see: https://github.com/WordPress/gutenberg/blob/trunk/LICENSE.md -->\r\n\r\n## Description\r\nI did this refactor while I was working on something else so I figured I might as well open a PR for it.\r\n\r\nIt just converts the InputControl to TypeScript and (I think) improves the way the reducer code is structured while we're at it.\r\n\r\n## How has this been tested?\r\nStorybook should work the same for InputControl, NumberControl and UnitControl, the last two depend on InputControl.\r\n\r\nTS build should pass as well.\r\n\r\n## Types of changes\r\nJanitorial\r\n\r\n## Checklist:\r\n- [x] My code is tested.\r\n- [x] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [N/A] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [N/A] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [x] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [x] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [x] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33680", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33680/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33680/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33680/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33680", + "id": 952571352, + "node_id": "MDExOlB1bGxSZXF1ZXN0Njk2NzQ1NzI3", + "number": 33680, + "title": "Global Styles: Avoid rendering duplicate elements stylesheet", + "user": { + "login": "Mamaduka", + "id": 240569, + "node_id": "MDQ6VXNlcjI0MDU2OQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/240569?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Mamaduka", + "html_url": "https://github.com/Mamaduka", + "followers_url": "https://api.github.com/users/Mamaduka/followers", + "following_url": "https://api.github.com/users/Mamaduka/following{/other_user}", + "gists_url": "https://api.github.com/users/Mamaduka/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Mamaduka/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Mamaduka/subscriptions", + "organizations_url": "https://api.github.com/users/Mamaduka/orgs", + "repos_url": "https://api.github.com/users/Mamaduka/repos", + "events_url": "https://api.github.com/users/Mamaduka/events{/privacy}", + "received_events_url": "https://api.github.com/users/Mamaduka/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 531680823, + "node_id": "MDU6TGFiZWw1MzE2ODA4MjM=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Bug", + "name": "[Type] Bug", + "color": "d93f0b", + "default": false, + "description": "An existing feature is broken." + }, + { + "id": 1800807983, + "node_id": "MDU6TGFiZWwxODAwODA3OTgz", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/Global%20Styles", + "name": "Global Styles", + "color": "2100b7", + "default": false, + "description": "" + } + ], + "state": "closed", + "locked": false, + "assignee": { + "login": "Mamaduka", + "id": 240569, + "node_id": "MDQ6VXNlcjI0MDU2OQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/240569?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Mamaduka", + "html_url": "https://github.com/Mamaduka", + "followers_url": "https://api.github.com/users/Mamaduka/followers", + "following_url": "https://api.github.com/users/Mamaduka/following{/other_user}", + "gists_url": "https://api.github.com/users/Mamaduka/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Mamaduka/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Mamaduka/subscriptions", + "organizations_url": "https://api.github.com/users/Mamaduka/orgs", + "repos_url": "https://api.github.com/users/Mamaduka/repos", + "events_url": "https://api.github.com/users/Mamaduka/events{/privacy}", + "received_events_url": "https://api.github.com/users/Mamaduka/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "Mamaduka", + "id": 240569, + "node_id": "MDQ6VXNlcjI0MDU2OQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/240569?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Mamaduka", + "html_url": "https://github.com/Mamaduka", + "followers_url": "https://api.github.com/users/Mamaduka/followers", + "following_url": "https://api.github.com/users/Mamaduka/following{/other_user}", + "gists_url": "https://api.github.com/users/Mamaduka/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Mamaduka/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Mamaduka/subscriptions", + "organizations_url": "https://api.github.com/users/Mamaduka/orgs", + "repos_url": "https://api.github.com/users/Mamaduka/repos", + "events_url": "https://api.github.com/users/Mamaduka/events{/privacy}", + "received_events_url": "https://api.github.com/users/Mamaduka/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 0, + "created_at": "2021-07-26T07:00:39Z", + "updated_at": "2021-07-28T10:08:42Z", + "closed_at": "2021-07-28T10:08:15Z", + "author_association": "MEMBER", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33680", + "html_url": "https://github.com/WordPress/gutenberg/pull/33680", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33680.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33680.patch" + }, + "body": "## Description\r\nRemoves WP Core filter for \"elements support\" to avoid rendering duplicate stylesheet.\r\n\r\nFixes #33669.\r\n\r\nSimilar PRs - #33005 and #33233.\r\n\r\n## How has this been tested?\r\n1. Add the Paragraph block.\r\n2. Select text and add a link.\r\n3. Set link color for the paragraph.\r\n4. Save post.\r\n5. On the front-end, WP shouldn't render duplicated stylesheet for link color.\r\n\r\n## Screenshots <!-- if applicable -->\r\n![CleanShot 2021-07-26 at 10 58 36](https://user-images.githubusercontent.com/240569/126946197-0c76e6d3-6d7a-4aaa-bb0d-2c2608fc790c.png)\r\n\r\n## Types of changes\r\nBugfix\r\n\r\n## Checklist:\r\n- [x] My code is tested.\r\n- [x] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [ ] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [ ] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [x] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [x] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [ ] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33679", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33679/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33679/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33679/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33679", + "id": 952534040, + "node_id": "MDExOlB1bGxSZXF1ZXN0Njk2NzEzMjkw", + "number": 33679, + "title": "FontSizePicker: Use number values when the initial value is a number", + "user": { + "login": "Mamaduka", + "id": 240569, + "node_id": "MDQ6VXNlcjI0MDU2OQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/240569?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Mamaduka", + "html_url": "https://github.com/Mamaduka", + "followers_url": "https://api.github.com/users/Mamaduka/followers", + "following_url": "https://api.github.com/users/Mamaduka/following{/other_user}", + "gists_url": "https://api.github.com/users/Mamaduka/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Mamaduka/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Mamaduka/subscriptions", + "organizations_url": "https://api.github.com/users/Mamaduka/orgs", + "repos_url": "https://api.github.com/users/Mamaduka/repos", + "events_url": "https://api.github.com/users/Mamaduka/events{/privacy}", + "received_events_url": "https://api.github.com/users/Mamaduka/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 949438185, + "node_id": "MDU6TGFiZWw5NDk0MzgxODU=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Regression", + "name": "[Type] Regression", + "color": "d93f0b", + "default": false, + "description": "" + }, + { + "id": 997392122, + "node_id": "MDU6TGFiZWw5OTczOTIxMjI=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Package]%20Components", + "name": "[Package] Components", + "color": "ed2572", + "default": false, + "description": "/packages/components" + }, + { + "id": 2463256422, + "node_id": "MDU6TGFiZWwyNDYzMjU2NDIy", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/Backport%20to%20WP%20Minor%20Release", + "name": "Backport to WP Minor Release", + "color": "491d8e", + "default": false, + "description": "PRs to be back-ported to a WordPress minor release." + } + ], + "state": "closed", + "locked": false, + "assignee": { + "login": "Mamaduka", + "id": 240569, + "node_id": "MDQ6VXNlcjI0MDU2OQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/240569?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Mamaduka", + "html_url": "https://github.com/Mamaduka", + "followers_url": "https://api.github.com/users/Mamaduka/followers", + "following_url": "https://api.github.com/users/Mamaduka/following{/other_user}", + "gists_url": "https://api.github.com/users/Mamaduka/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Mamaduka/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Mamaduka/subscriptions", + "organizations_url": "https://api.github.com/users/Mamaduka/orgs", + "repos_url": "https://api.github.com/users/Mamaduka/repos", + "events_url": "https://api.github.com/users/Mamaduka/events{/privacy}", + "received_events_url": "https://api.github.com/users/Mamaduka/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "Mamaduka", + "id": 240569, + "node_id": "MDQ6VXNlcjI0MDU2OQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/240569?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Mamaduka", + "html_url": "https://github.com/Mamaduka", + "followers_url": "https://api.github.com/users/Mamaduka/followers", + "following_url": "https://api.github.com/users/Mamaduka/following{/other_user}", + "gists_url": "https://api.github.com/users/Mamaduka/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Mamaduka/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Mamaduka/subscriptions", + "organizations_url": "https://api.github.com/users/Mamaduka/orgs", + "repos_url": "https://api.github.com/users/Mamaduka/repos", + "events_url": "https://api.github.com/users/Mamaduka/events{/privacy}", + "received_events_url": "https://api.github.com/users/Mamaduka/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 25, + "created_at": "2021-07-26T06:02:26Z", + "updated_at": "2021-07-30T11:21:57Z", + "closed_at": "2021-07-30T11:21:33Z", + "author_association": "MEMBER", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33679", + "html_url": "https://github.com/WordPress/gutenberg/pull/33679", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33679.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33679.patch" + }, + "body": "## Description\r\nUpdates `onChange` logic in FontSizePicker component. When the component detects that value or first object in `fonSizes` doesn't use units, it will pass the number value to the onChange callback.\r\n\r\nFixes #33651.\r\nFixes #33653.\r\n\r\n## How has this been tested?\r\nTested with plugin provided in original issue report - https://github.com/NasKadir123/textBlock\r\n\r\n## Types of changes\r\nBugfix \r\n\r\n## Checklist:\r\n- [x] My code is tested.\r\n- [x] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [ ] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [ ] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [x] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [x] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [ ] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33676", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33676/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33676/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33676/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33676", + "id": 952252078, + "node_id": "MDExOlB1bGxSZXF1ZXN0Njk2NDg0NDQ2", + "number": 33676, + "title": "Scripts: Webpack config update to minimize CSS", + "user": { + "login": "christianztamayo", + "id": 2377217, + "node_id": "MDQ6VXNlcjIzNzcyMTc=", + "avatar_url": "https://avatars.githubusercontent.com/u/2377217?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/christianztamayo", + "html_url": "https://github.com/christianztamayo", + "followers_url": "https://api.github.com/users/christianztamayo/followers", + "following_url": "https://api.github.com/users/christianztamayo/following{/other_user}", + "gists_url": "https://api.github.com/users/christianztamayo/gists{/gist_id}", + "starred_url": "https://api.github.com/users/christianztamayo/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/christianztamayo/subscriptions", + "organizations_url": "https://api.github.com/users/christianztamayo/orgs", + "repos_url": "https://api.github.com/users/christianztamayo/repos", + "events_url": "https://api.github.com/users/christianztamayo/events{/privacy}", + "received_events_url": "https://api.github.com/users/christianztamayo/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 531680825, + "node_id": "MDU6TGFiZWw1MzE2ODA4MjU=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Enhancement", + "name": "[Type] Enhancement", + "color": "3993a3", + "default": false, + "description": "A suggestion for improvement." + }, + { + "id": 978007737, + "node_id": "MDU6TGFiZWw5NzgwMDc3Mzc=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Package]%20Scripts", + "name": "[Package] Scripts", + "color": "ed2572", + "default": false, + "description": "/packages/scripts" + }, + { + "id": 1388646432, + "node_id": "MDU6TGFiZWwxMzg4NjQ2NDMy", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/First-time%20Contributor", + "name": "First-time Contributor", + "color": "a0f762", + "default": false, + "description": "Pull request opened by a first-time contributor to Gutenberg repository" + } + ], + "state": "closed", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 5, + "created_at": "2021-07-25T11:14:35Z", + "updated_at": "2021-07-29T10:44:46Z", + "closed_at": "2021-07-28T12:06:28Z", + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33676", + "html_url": "https://github.com/WordPress/gutenberg/pull/33676", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33676.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33676.patch" + }, + "body": "<!-- Learn the overall process and best practices for pull requests at https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/repository-management.md#pull-requests. -->\r\n\r\n<!-- Gutenberg's license is in the process of updating to be dual-licensed under the GPL and MPL. As part of that transition, all new contributions are dual-licensed. For more information, see: https://github.com/WordPress/gutenberg/blob/trunk/LICENSE.md -->\r\n\r\n## Description\r\n<!-- Please describe what you have changed or added -->\r\nThe previous configuration does not have CSS minification included aside from the `sass-loader` built-in which only affects SCSS files. (Closes #33643, Related: #29624)\r\n\r\n## How has this been tested?\r\n<!-- Please describe in detail how you tested your changes. -->\r\n<!-- Include details of your testing environment, tests ran to see how -->\r\n<!-- your change affects other areas of the code, etc. -->\r\n- Followed reproduction steps on #33643 and checked that regular CSS are now minified\r\n- Ran the build on Gutenberg and made sure it's still working as expected\r\n\r\n## Types of changes\r\n<!-- What types of changes does your code introduce? -->\r\n<!-- Bug fix (non-breaking change which fixes an issue) -->\r\n<!-- New feature (non-breaking change which adds functionality) -->\r\n<!-- Breaking change (fix or feature that would cause existing functionality to not work as expected) -->\r\nAdded the optimize-css-assets-webpack-plugin to the minimizer config.\r\n\r\n## Checklist:\r\n- [x] My code is tested.\r\n- [x] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [-] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [-] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [-] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [-] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [-] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33660", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33660/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33660/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33660/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33660", + "id": 951727008, + "node_id": "MDExOlB1bGxSZXF1ZXN0Njk2MDY1NTQ4", + "number": 33660, + "title": "Only show rich preview for image and description if data is available", + "user": { + "login": "getdave", + "id": 444434, + "node_id": "MDQ6VXNlcjQ0NDQzNA==", + "avatar_url": "https://avatars.githubusercontent.com/u/444434?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/getdave", + "html_url": "https://github.com/getdave", + "followers_url": "https://api.github.com/users/getdave/followers", + "following_url": "https://api.github.com/users/getdave/following{/other_user}", + "gists_url": "https://api.github.com/users/getdave/gists{/gist_id}", + "starred_url": "https://api.github.com/users/getdave/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/getdave/subscriptions", + "organizations_url": "https://api.github.com/users/getdave/orgs", + "repos_url": "https://api.github.com/users/getdave/repos", + "events_url": "https://api.github.com/users/getdave/events{/privacy}", + "received_events_url": "https://api.github.com/users/getdave/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 531680823, + "node_id": "MDU6TGFiZWw1MzE2ODA4MjM=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Bug", + "name": "[Type] Bug", + "color": "d93f0b", + "default": false, + "description": "An existing feature is broken." + }, + { + "id": 1838782557, + "node_id": "MDU6TGFiZWwxODM4NzgyNTU3", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Feature]%20Link%20Editing", + "name": "[Feature] Link Editing", + "color": "fbca04", + "default": false, + "description": "Link components (LinkControl, URLInput) and integrations (RichText link formatting)" + } + ], + "state": "closed", + "locked": false, + "assignee": { + "login": "getdave", + "id": 444434, + "node_id": "MDQ6VXNlcjQ0NDQzNA==", + "avatar_url": "https://avatars.githubusercontent.com/u/444434?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/getdave", + "html_url": "https://github.com/getdave", + "followers_url": "https://api.github.com/users/getdave/followers", + "following_url": "https://api.github.com/users/getdave/following{/other_user}", + "gists_url": "https://api.github.com/users/getdave/gists{/gist_id}", + "starred_url": "https://api.github.com/users/getdave/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/getdave/subscriptions", + "organizations_url": "https://api.github.com/users/getdave/orgs", + "repos_url": "https://api.github.com/users/getdave/repos", + "events_url": "https://api.github.com/users/getdave/events{/privacy}", + "received_events_url": "https://api.github.com/users/getdave/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "getdave", + "id": 444434, + "node_id": "MDQ6VXNlcjQ0NDQzNA==", + "avatar_url": "https://avatars.githubusercontent.com/u/444434?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/getdave", + "html_url": "https://github.com/getdave", + "followers_url": "https://api.github.com/users/getdave/followers", + "following_url": "https://api.github.com/users/getdave/following{/other_user}", + "gists_url": "https://api.github.com/users/getdave/gists{/gist_id}", + "starred_url": "https://api.github.com/users/getdave/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/getdave/subscriptions", + "organizations_url": "https://api.github.com/users/getdave/orgs", + "repos_url": "https://api.github.com/users/getdave/repos", + "events_url": "https://api.github.com/users/getdave/events{/privacy}", + "received_events_url": "https://api.github.com/users/getdave/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 4, + "created_at": "2021-07-23T16:35:12Z", + "updated_at": "2021-07-29T15:51:36Z", + "closed_at": "2021-07-29T15:51:10Z", + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33660", + "html_url": "https://github.com/WordPress/gutenberg/pull/33660", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33660.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33660.patch" + }, + "body": "<!-- Learn the overall process and best practices for pull requests at https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/repository-management.md#pull-requests. -->\r\n\r\n<!-- Gutenberg's license is in the process of updating to be dual-licensed under the GPL and MPL. As part of that transition, all new contributions are dual-licensed. For more information, see: https://github.com/WordPress/gutenberg/blob/trunk/LICENSE.md -->\r\n\r\n## Description\r\n\r\nThe Link UI's rich preview feature for remote URLs was showing placeholders for image and description even thought that data did not exist in the rich preview data.\r\n\r\nThis would allow you to arrive at states such as:\r\n\r\n![image](https://user-images.githubusercontent.com/444434/126812983-e606765b-8166-4aa4-aebf-2bfe20a90129.png)\r\n\r\nThis PR corrects that by only showing the lower half of the rich preview if the necessary data is available. It will also only show the description or image if they are available.\r\n\r\n@javierarce I think this was actually an intentional feature. I know that because we encoded the feature into the tests!\r\n\r\nhttps://github.com/WordPress/gutenberg/blob/40a511ec0e89ae401d799c66625b6fe0db00aea5/packages/block-editor/src/components/link-control/test/index.js#L1960-L1961\r\n\r\nTherefore I'm checking in with you to make sure you're aware that this change is being made. Essentially if the content doesn't exist then we won't see a placeholder.\r\n\r\n## How has this been tested?\r\n<!-- Please describe in detail how you tested your changes. -->\r\n<!-- Include details of your testing environment, tests ran to see how -->\r\n<!-- your change affects other areas of the code, etc. -->\r\n\r\n* Create a link to a page which doesn't return a description or an image but which does return a title or an icon. Good example is https://twitter.com/.\r\n* Click on the link to show a link preview.\r\n* See that the placeholders for image and description are not shown once the fetching has finished.\r\n* Check another \"normal\" URL to make sure we haven't caused any regressions.\r\n\r\nNote we have quite a bit of test coverage here so it should 🤞 🤞 🤞 🤞 be safe.\r\n\r\n## Screenshots <!-- if applicable -->\r\n\r\n## Types of changes\r\n<!-- What types of changes does your code introduce? -->\r\n<!-- Bug fix (non-breaking change which fixes an issue) -->\r\n<!-- New feature (non-breaking change which adds functionality) -->\r\n<!-- Breaking change (fix or feature that would cause existing functionality to not work as expected) -->\r\n\r\n## Checklist:\r\n- [ ] My code is tested.\r\n- [ ] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [ ] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [ ] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [ ] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [ ] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [ ] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33657", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33657/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33657/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33657/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33657", + "id": 951670686, + "node_id": "MDExOlB1bGxSZXF1ZXN0Njk2MDE4ODMz", + "number": 33657, + "title": "RNMobile: Try unifying the unit test command on mobile", + "user": { + "login": "guarani", + "id": 1898325, + "node_id": "MDQ6VXNlcjE4OTgzMjU=", + "avatar_url": "https://avatars.githubusercontent.com/u/1898325?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/guarani", + "html_url": "https://github.com/guarani", + "followers_url": "https://api.github.com/users/guarani/followers", + "following_url": "https://api.github.com/users/guarani/following{/other_user}", + "gists_url": "https://api.github.com/users/guarani/gists{/gist_id}", + "starred_url": "https://api.github.com/users/guarani/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/guarani/subscriptions", + "organizations_url": "https://api.github.com/users/guarani/orgs", + "repos_url": "https://api.github.com/users/guarani/repos", + "events_url": "https://api.github.com/users/guarani/events{/privacy}", + "received_events_url": "https://api.github.com/users/guarani/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 982506020, + "node_id": "MDU6TGFiZWw5ODI1MDYwMjA=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/Mobile%20App%20-%20i.e.%20Android%20or%20iOS", + "name": "Mobile App - i.e. Android or iOS", + "color": "a3ef7a", + "default": false, + "description": "Native mobile impl of the block editor. (Note: used in scripts, ping mobile folks to change)" + } + ], + "state": "closed", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 3, + "created_at": "2021-07-23T15:16:35Z", + "updated_at": "2021-08-03T17:28:10Z", + "closed_at": "2021-08-03T17:27:45Z", + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33657", + "html_url": "https://github.com/WordPress/gutenberg/pull/33657", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33657.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33657.patch" + }, + "body": "<!-- Learn the overall process and best practices for pull requests at https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/repository-management.md#pull-requests. -->\r\n\r\n<!-- Gutenberg's license is in the process of updating to be dual-licensed under the GPL and MPL. As part of that transition, all new contributions are dual-licensed. For more information, see: https://github.com/WordPress/gutenberg/blob/trunk/LICENSE.md -->\r\n\r\n## Description\r\nUnify the the native unit test command.\r\n\r\nRelated https://github.com/wordpress-mobile/gutenberg-mobile/pull/3754\r\n\r\n## How has this been tested?\r\nRun the `npm run native test` command on a unit test:\r\n```\r\nnpm run native test packages/block-library/src/verse/test/edit.native.js\r\n```\r\nRun it on an integration test:\r\n```\r\nnpm run native test packages/block-library/src/cover/test/edit.native.js\r\n```\r\nRun it on any test and ensure the debugger connects properly:\r\n1. Put a `debugger;` statement in any unit test or integration test file e.g. `packages/block-library/src/verse/test/edit.native.js`\r\n2. Run the `:debug` variant of the command to run tests e.g. `npm run native test:debug packages/block-library/src/verse/test/edit.native.js`\r\n3. Open Google Chrome and enter `chrome://inspect`\r\n4. Click on the target\r\n5. Ensure that the debugger connects and stops at the `debugger;` statement\r\n\r\n## Types of changes\r\n- Updated unit test command and documentation\r\n\r\n## Checklist:\r\n- [x] My code is tested.\r\n- [x] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [x] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [x] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [x] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [x] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [x] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33652", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33652/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33652/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33652/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33652", + "id": 951614964, + "node_id": "MDExOlB1bGxSZXF1ZXN0Njk1OTcxNTA5", + "number": 33652, + "title": "Improve display of LinkURL menu and fix spacing.", + "user": { + "login": "mtias", + "id": 548849, + "node_id": "MDQ6VXNlcjU0ODg0OQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/548849?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/mtias", + "html_url": "https://github.com/mtias", + "followers_url": "https://api.github.com/users/mtias/followers", + "following_url": "https://api.github.com/users/mtias/following{/other_user}", + "gists_url": "https://api.github.com/users/mtias/gists{/gist_id}", + "starred_url": "https://api.github.com/users/mtias/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/mtias/subscriptions", + "organizations_url": "https://api.github.com/users/mtias/orgs", + "repos_url": "https://api.github.com/users/mtias/repos", + "events_url": "https://api.github.com/users/mtias/events{/privacy}", + "received_events_url": "https://api.github.com/users/mtias/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 531680823, + "node_id": "MDU6TGFiZWw1MzE2ODA4MjM=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Bug", + "name": "[Type] Bug", + "color": "d93f0b", + "default": false, + "description": "An existing feature is broken." + }, + { + "id": 1838782557, + "node_id": "MDU6TGFiZWwxODM4NzgyNTU3", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Feature]%20Link%20Editing", + "name": "[Feature] Link Editing", + "color": "fbca04", + "default": false, + "description": "Link components (LinkControl, URLInput) and integrations (RichText link formatting)" + } + ], + "state": "closed", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 6, + "created_at": "2021-07-23T14:09:31Z", + "updated_at": "2021-07-30T14:06:43Z", + "closed_at": "2021-07-30T13:16:01Z", + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33652", + "html_url": "https://github.com/WordPress/gutenberg/pull/33652", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33652.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33652.patch" + }, + "body": "There were some spacing issues on the Link URL menu that would make the icon shrink:\r\n\r\n<img width=\"651\" alt=\"Screenshot 2021-07-23 at 16 01 02\" src=\"https://user-images.githubusercontent.com/548849/126793962-81159625-3198-4215-be3c-26bca50e1ea7.png\">\r\n\r\nWhich is corrected here. It also restores the true width of the icon (24px which was assumed to be 32 before?):\r\n\r\n<img width=\"636\" alt=\"Screenshot 2021-07-23 at 16 01 22\" src=\"https://user-images.githubusercontent.com/548849/126794016-ef534c09-9de0-4b95-a471-863511f93559.png\">\r\n\r\nThere's also some alignment issues that this corrects (note the bottom part with the toggle is now aligned):\r\n\r\n<img width=\"614\" alt=\"Screenshot 2021-07-23 at 16 05 10\" src=\"https://user-images.githubusercontent.com/548849/126794119-0730cd6e-e1ae-4ac8-8580-9a7e048054fc.png\">\r\n\r\ncc @javierarce \r\n\r\n(The middle one still seems like it has spacing issues on the result list, but given it's there to accommodate the hover effect I think we can leave it be for now.)", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33629", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33629/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33629/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33629/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33629", + "id": 950551877, + "node_id": "MDExOlB1bGxSZXF1ZXN0Njk1MDgxMzQ4", + "number": 33629, + "title": "[Block Library - Query Pagination Numbers]: Fix first page's link", + "user": { + "login": "ntsekouras", + "id": 16275880, + "node_id": "MDQ6VXNlcjE2Mjc1ODgw", + "avatar_url": "https://avatars.githubusercontent.com/u/16275880?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/ntsekouras", + "html_url": "https://github.com/ntsekouras", + "followers_url": "https://api.github.com/users/ntsekouras/followers", + "following_url": "https://api.github.com/users/ntsekouras/following{/other_user}", + "gists_url": "https://api.github.com/users/ntsekouras/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ntsekouras/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ntsekouras/subscriptions", + "organizations_url": "https://api.github.com/users/ntsekouras/orgs", + "repos_url": "https://api.github.com/users/ntsekouras/repos", + "events_url": "https://api.github.com/users/ntsekouras/events{/privacy}", + "received_events_url": "https://api.github.com/users/ntsekouras/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 531680823, + "node_id": "MDU6TGFiZWw1MzE2ODA4MjM=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Bug", + "name": "[Type] Bug", + "color": "d93f0b", + "default": false, + "description": "An existing feature is broken." + }, + { + "id": 2479589311, + "node_id": "MDU6TGFiZWwyNDc5NTg5MzEx", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Block]%20Query%20Pagination", + "name": "[Block] Query Pagination", + "color": "6767e5", + "default": false, + "description": "" + } + ], + "state": "closed", + "locked": false, + "assignee": { + "login": "ntsekouras", + "id": 16275880, + "node_id": "MDQ6VXNlcjE2Mjc1ODgw", + "avatar_url": "https://avatars.githubusercontent.com/u/16275880?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/ntsekouras", + "html_url": "https://github.com/ntsekouras", + "followers_url": "https://api.github.com/users/ntsekouras/followers", + "following_url": "https://api.github.com/users/ntsekouras/following{/other_user}", + "gists_url": "https://api.github.com/users/ntsekouras/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ntsekouras/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ntsekouras/subscriptions", + "organizations_url": "https://api.github.com/users/ntsekouras/orgs", + "repos_url": "https://api.github.com/users/ntsekouras/repos", + "events_url": "https://api.github.com/users/ntsekouras/events{/privacy}", + "received_events_url": "https://api.github.com/users/ntsekouras/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "ntsekouras", + "id": 16275880, + "node_id": "MDQ6VXNlcjE2Mjc1ODgw", + "avatar_url": "https://avatars.githubusercontent.com/u/16275880?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/ntsekouras", + "html_url": "https://github.com/ntsekouras", + "followers_url": "https://api.github.com/users/ntsekouras/followers", + "following_url": "https://api.github.com/users/ntsekouras/following{/other_user}", + "gists_url": "https://api.github.com/users/ntsekouras/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ntsekouras/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ntsekouras/subscriptions", + "organizations_url": "https://api.github.com/users/ntsekouras/orgs", + "repos_url": "https://api.github.com/users/ntsekouras/repos", + "events_url": "https://api.github.com/users/ntsekouras/events{/privacy}", + "received_events_url": "https://api.github.com/users/ntsekouras/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 2, + "created_at": "2021-07-22T11:17:15Z", + "updated_at": "2021-08-09T11:27:46Z", + "closed_at": "2021-08-09T11:27:23Z", + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33629", + "html_url": "https://github.com/WordPress/gutenberg/pull/33629", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33629.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33629.patch" + }, + "body": "<!-- Learn the overall process and best practices for pull requests at https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/repository-management.md#pull-requests. -->\r\n\r\n<!-- Gutenberg's license is in the process of updating to be dual-licensed under the GPL and MPL. As part of that transition, all new contributions are dual-licensed. For more information, see: https://github.com/WordPress/gutenberg/blob/trunk/LICENSE.md -->\r\n\r\n## Description\r\n\r\nFixes: https://github.com/WordPress/gutenberg/issues/32792\r\n\r\n`paginate_links` doesn't use the provided `format` when the page is `1`. This is great for the main query as it removes the extra query params making the URL shorter, but in the case of multiple custom queries is problematic. It results in returning an empty link which ends up with a link to the current page.\r\n\r\nA way to address this is to add a `fake` query arg with no value that is the same for all custom queries. This way the link is not empty and preserves all the other existent query args.\r\n\r\n\r\nReference: https://developer.wordpress.org/reference/functions/paginate_links/\r\n`$link = str_replace( '%_%', 1 == $n ? '' : $args['format'], $args['base'] );\r\n $link = str_replace( '%#%', $n, $link );`\r\n<!-- Please describe what you have changed or added -->\r\n\r\n## How has this been tested?\r\n1. In page with many `Query Loop` blocks with `QueryPaginationNumbers` blocks check that by clicking another page number first, the pagination link for the first page (`1`), works as expected.\r\n2. This can be tested with a single custom `Query` in a page as well, but it's better to have multiple `Query Loop` blocks which can be both `custom` and ones that `inherit the global query`.\r\n\r\n## Notes\r\n1. The issue can be replicated only when we have no other query args, because in that case the `link` is not empty - thus the `hacky` approach here to add an empty `query arg`.\r\n\r\nI couldn't find any better alternative so a more elegant solution would be more than welcomed. We could also look at making some changes in core `paginate_links` but needs more exploration there. For example we could extend the `paginate_links` filter by passing the current `page number ($n)` and use this filter in the block??(🤔 ).\r\n\r\n\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33627", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33627/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33627/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33627/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33627", + "id": 950476171, + "node_id": "MDExOlB1bGxSZXF1ZXN0Njk1MDE2NTU3", + "number": 33627, + "title": "Fix some JAWS bugs", + "user": { + "login": "alexstine", + "id": 13755480, + "node_id": "MDQ6VXNlcjEzNzU1NDgw", + "avatar_url": "https://avatars.githubusercontent.com/u/13755480?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/alexstine", + "html_url": "https://github.com/alexstine", + "followers_url": "https://api.github.com/users/alexstine/followers", + "following_url": "https://api.github.com/users/alexstine/following{/other_user}", + "gists_url": "https://api.github.com/users/alexstine/gists{/gist_id}", + "starred_url": "https://api.github.com/users/alexstine/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/alexstine/subscriptions", + "organizations_url": "https://api.github.com/users/alexstine/orgs", + "repos_url": "https://api.github.com/users/alexstine/repos", + "events_url": "https://api.github.com/users/alexstine/events{/privacy}", + "received_events_url": "https://api.github.com/users/alexstine/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 531680823, + "node_id": "MDU6TGFiZWw1MzE2ODA4MjM=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Bug", + "name": "[Type] Bug", + "color": "d93f0b", + "default": false, + "description": "An existing feature is broken." + }, + { + "id": 546517042, + "node_id": "MDU6TGFiZWw1NDY1MTcwNDI=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/Accessibility%20(a11y)", + "name": "Accessibility (a11y)", + "color": "655104", + "default": false, + "description": "Changes that impact accessibility and need corresponding review (e.g. markup changes)." + }, + { + "id": 587343997, + "node_id": "MDU6TGFiZWw1ODczNDM5OTc=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Status]%20In%20Progress", + "name": "[Status] In Progress", + "color": "0052cc", + "default": false, + "description": "Tracking issues with work in progress" + }, + { + "id": 1086171268, + "node_id": "MDU6TGFiZWwxMDg2MTcxMjY4", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/Needs%20Accessibility%20Feedback", + "name": "Needs Accessibility Feedback", + "color": "ffbcbd", + "default": false, + "description": "" + }, + { + "id": 1388646432, + "node_id": "MDU6TGFiZWwxMzg4NjQ2NDMy", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/First-time%20Contributor", + "name": "First-time Contributor", + "color": "a0f762", + "default": false, + "description": "Pull request opened by a first-time contributor to Gutenberg repository" + } + ], + "state": "closed", + "locked": false, + "assignee": { + "login": "alexstine", + "id": 13755480, + "node_id": "MDQ6VXNlcjEzNzU1NDgw", + "avatar_url": "https://avatars.githubusercontent.com/u/13755480?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/alexstine", + "html_url": "https://github.com/alexstine", + "followers_url": "https://api.github.com/users/alexstine/followers", + "following_url": "https://api.github.com/users/alexstine/following{/other_user}", + "gists_url": "https://api.github.com/users/alexstine/gists{/gist_id}", + "starred_url": "https://api.github.com/users/alexstine/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/alexstine/subscriptions", + "organizations_url": "https://api.github.com/users/alexstine/orgs", + "repos_url": "https://api.github.com/users/alexstine/repos", + "events_url": "https://api.github.com/users/alexstine/events{/privacy}", + "received_events_url": "https://api.github.com/users/alexstine/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "alexstine", + "id": 13755480, + "node_id": "MDQ6VXNlcjEzNzU1NDgw", + "avatar_url": "https://avatars.githubusercontent.com/u/13755480?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/alexstine", + "html_url": "https://github.com/alexstine", + "followers_url": "https://api.github.com/users/alexstine/followers", + "following_url": "https://api.github.com/users/alexstine/following{/other_user}", + "gists_url": "https://api.github.com/users/alexstine/gists{/gist_id}", + "starred_url": "https://api.github.com/users/alexstine/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/alexstine/subscriptions", + "organizations_url": "https://api.github.com/users/alexstine/orgs", + "repos_url": "https://api.github.com/users/alexstine/repos", + "events_url": "https://api.github.com/users/alexstine/events{/privacy}", + "received_events_url": "https://api.github.com/users/alexstine/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 6, + "created_at": "2021-07-22T09:39:23Z", + "updated_at": "2021-08-04T07:28:10Z", + "closed_at": "2021-08-04T07:27:41Z", + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33627", + "html_url": "https://github.com/WordPress/gutenberg/pull/33627", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33627.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33627.patch" + }, + "body": "<!-- Learn the overall process and best practices for pull requests at https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/repository-management.md#pull-requests. -->\r\n\r\n<!-- Gutenberg's license is in the process of updating to be dual-licensed under the GPL and MPL. As part of that transition, all new contributions are dual-licensed. For more information, see: https://github.com/WordPress/gutenberg/blob/trunk/LICENSE.md -->\r\n\r\n## Description\r\n<!-- Please describe what you have changed or added -->\r\n\r\nFixes #29526\r\n\r\n1. JAWS will now have the ability to use Gutenberg navigation mode and here the blocks announced via Tab.\r\n2.Removed broken speak() function call that was only working part of the time.\r\n3. Remove the wordpress/a11y package. No longer needed.\r\n4.Replace `role=\"group\"` with `role=\"document\"` for better block editing experience in earlier versions of JAWS. \r\n \r\n## How has this been tested?\r\n<!-- Please describe in detail how you tested your changes. -->\r\n<!-- Include details of your testing environment, tests ran to see how -->\r\n<!-- your change affects other areas of the code, etc. -->\r\n\r\nI have tested using NVDA and JAWS on Windows 10. I tested using Voiceover on Mac. All seems to be in working order.\r\n\r\n## Screenshots <!-- if applicable -->\r\n\r\n## Types of changes\r\n<!-- What types of changes does your code introduce? -->\r\n<!-- Bug fix (non-breaking change which fixes an issue) -->\r\n<!-- New feature (non-breaking change which adds functionality) -->\r\n<!-- Breaking change (fix or feature that would cause existing functionality to not work as expected) -->\r\n\r\nHopefully some much needed Bug fixes.\r\n\r\n## Checklist:\r\n- [x] My code is tested.\r\n- [x] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [x] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [x] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [x] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [x] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [x] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33623", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33623/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33623/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33623/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33623", + "id": 950451600, + "node_id": "MDExOlB1bGxSZXF1ZXN0Njk0OTk1OTUy", + "number": 33623, + "title": "FormTokenField: Avoid error when maxLength value is hit", + "user": { + "login": "Mamaduka", + "id": 240569, + "node_id": "MDQ6VXNlcjI0MDU2OQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/240569?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Mamaduka", + "html_url": "https://github.com/Mamaduka", + "followers_url": "https://api.github.com/users/Mamaduka/followers", + "following_url": "https://api.github.com/users/Mamaduka/following{/other_user}", + "gists_url": "https://api.github.com/users/Mamaduka/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Mamaduka/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Mamaduka/subscriptions", + "organizations_url": "https://api.github.com/users/Mamaduka/orgs", + "repos_url": "https://api.github.com/users/Mamaduka/repos", + "events_url": "https://api.github.com/users/Mamaduka/events{/privacy}", + "received_events_url": "https://api.github.com/users/Mamaduka/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 531680823, + "node_id": "MDU6TGFiZWw1MzE2ODA4MjM=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Bug", + "name": "[Type] Bug", + "color": "d93f0b", + "default": false, + "description": "An existing feature is broken." + }, + { + "id": 659839209, + "node_id": "MDU6TGFiZWw2NTk4MzkyMDk=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Feature]%20UI%20Components", + "name": "[Feature] UI Components", + "color": "fbca04", + "default": false, + "description": "" + }, + { + "id": 997392122, + "node_id": "MDU6TGFiZWw5OTczOTIxMjI=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Package]%20Components", + "name": "[Package] Components", + "color": "ed2572", + "default": false, + "description": "/packages/components" + } + ], + "state": "closed", + "locked": false, + "assignee": { + "login": "Mamaduka", + "id": 240569, + "node_id": "MDQ6VXNlcjI0MDU2OQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/240569?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Mamaduka", + "html_url": "https://github.com/Mamaduka", + "followers_url": "https://api.github.com/users/Mamaduka/followers", + "following_url": "https://api.github.com/users/Mamaduka/following{/other_user}", + "gists_url": "https://api.github.com/users/Mamaduka/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Mamaduka/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Mamaduka/subscriptions", + "organizations_url": "https://api.github.com/users/Mamaduka/orgs", + "repos_url": "https://api.github.com/users/Mamaduka/repos", + "events_url": "https://api.github.com/users/Mamaduka/events{/privacy}", + "received_events_url": "https://api.github.com/users/Mamaduka/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "Mamaduka", + "id": 240569, + "node_id": "MDQ6VXNlcjI0MDU2OQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/240569?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Mamaduka", + "html_url": "https://github.com/Mamaduka", + "followers_url": "https://api.github.com/users/Mamaduka/followers", + "following_url": "https://api.github.com/users/Mamaduka/following{/other_user}", + "gists_url": "https://api.github.com/users/Mamaduka/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Mamaduka/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Mamaduka/subscriptions", + "organizations_url": "https://api.github.com/users/Mamaduka/orgs", + "repos_url": "https://api.github.com/users/Mamaduka/repos", + "events_url": "https://api.github.com/users/Mamaduka/events{/privacy}", + "received_events_url": "https://api.github.com/users/Mamaduka/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 2, + "created_at": "2021-07-22T09:08:55Z", + "updated_at": "2021-07-28T14:45:54Z", + "closed_at": "2021-07-28T14:45:29Z", + "author_association": "MEMBER", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33623", + "html_url": "https://github.com/WordPress/gutenberg/pull/33623", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33623.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33623.patch" + }, + "body": "## Description\r\nSets no-operation function as a `onChange` default for the `TokenInput` component.\r\n\r\nCodeSandbox showcasing the issue - https://codesandbox.io/s/formtokenfield-dv9nb\r\n\r\nFixes #18463.\r\n\r\n## How has this been tested?\r\nTemporarily added `maxLength` to the `FlatTermSelector` component for testings, but probably there's a better way to do it.\r\n\r\n## Types of changes\r\nBugfix\r\n\r\n## Checklist:\r\n- [x] My code is tested.\r\n- [x] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [ ] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [ ] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [x] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [x] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [ ] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33573", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33573/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33573/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33573/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33573", + "id": 948722800, + "node_id": "MDExOlB1bGxSZXF1ZXN0NjkzNTI0NDk3", + "number": 33573, + "title": "Update docs to reflect new automated process for feature grouping", + "user": { + "login": "getdave", + "id": 444434, + "node_id": "MDQ6VXNlcjQ0NDQzNA==", + "avatar_url": "https://avatars.githubusercontent.com/u/444434?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/getdave", + "html_url": "https://github.com/getdave", + "followers_url": "https://api.github.com/users/getdave/followers", + "following_url": "https://api.github.com/users/getdave/following{/other_user}", + "gists_url": "https://api.github.com/users/getdave/gists{/gist_id}", + "starred_url": "https://api.github.com/users/getdave/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/getdave/subscriptions", + "organizations_url": "https://api.github.com/users/getdave/orgs", + "repos_url": "https://api.github.com/users/getdave/repos", + "events_url": "https://api.github.com/users/getdave/events{/privacy}", + "received_events_url": "https://api.github.com/users/getdave/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 567484057, + "node_id": "MDU6TGFiZWw1Njc0ODQwNTc=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Documentation", + "name": "[Type] Documentation", + "color": "bfd4f2", + "default": false, + "description": "" + }, + { + "id": 596512821, + "node_id": "MDU6TGFiZWw1OTY1MTI4MjE=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Build%20Tooling", + "name": "[Type] Build Tooling", + "color": "111111", + "default": false, + "description": "" + }, + { + "id": 2551400612, + "node_id": "MDU6TGFiZWwyNTUxNDAwNjEy", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/developer-docs", + "name": "developer-docs", + "color": "1d76db", + "default": false, + "description": "Issues that impact the block editor developer documentation site" + } + ], + "state": "closed", + "locked": false, + "assignee": { + "login": "getdave", + "id": 444434, + "node_id": "MDQ6VXNlcjQ0NDQzNA==", + "avatar_url": "https://avatars.githubusercontent.com/u/444434?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/getdave", + "html_url": "https://github.com/getdave", + "followers_url": "https://api.github.com/users/getdave/followers", + "following_url": "https://api.github.com/users/getdave/following{/other_user}", + "gists_url": "https://api.github.com/users/getdave/gists{/gist_id}", + "starred_url": "https://api.github.com/users/getdave/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/getdave/subscriptions", + "organizations_url": "https://api.github.com/users/getdave/orgs", + "repos_url": "https://api.github.com/users/getdave/repos", + "events_url": "https://api.github.com/users/getdave/events{/privacy}", + "received_events_url": "https://api.github.com/users/getdave/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "getdave", + "id": 444434, + "node_id": "MDQ6VXNlcjQ0NDQzNA==", + "avatar_url": "https://avatars.githubusercontent.com/u/444434?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/getdave", + "html_url": "https://github.com/getdave", + "followers_url": "https://api.github.com/users/getdave/followers", + "following_url": "https://api.github.com/users/getdave/following{/other_user}", + "gists_url": "https://api.github.com/users/getdave/gists{/gist_id}", + "starred_url": "https://api.github.com/users/getdave/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/getdave/subscriptions", + "organizations_url": "https://api.github.com/users/getdave/orgs", + "repos_url": "https://api.github.com/users/getdave/repos", + "events_url": "https://api.github.com/users/getdave/events{/privacy}", + "received_events_url": "https://api.github.com/users/getdave/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 1, + "created_at": "2021-07-20T14:39:26Z", + "updated_at": "2021-07-30T08:47:57Z", + "closed_at": "2021-07-30T08:47:30Z", + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33573", + "html_url": "https://github.com/WordPress/gutenberg/pull/33573", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33573.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33573.patch" + }, + "body": "<!-- Learn the overall process and best practices for pull requests at https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/repository-management.md#pull-requests. -->\r\n\r\n<!-- Gutenberg's license is in the process of updating to be dual-licensed under the GPL and MPL. As part of that transition, all new contributions are dual-licensed. For more information, see: https://github.com/WordPress/gutenberg/blob/trunk/LICENSE.md -->\r\n\r\n## Description\r\nIn https://github.com/WordPress/gutenberg/pull/33229 we added automation to the release tooling to attempt to auto-categorize the grouping of PRs by \"feature\".\r\n\r\nThis PR updates the docs to reflect that and to add information on exactly how you should look to curate the changelog in response to what the script will output.\r\n\r\n## How has this been tested?\r\nReading and checking for accuracy.\r\n\r\n## Screenshots <!-- if applicable -->\r\n\r\n## Types of changes\r\n<!-- What types of changes does your code introduce? -->\r\n<!-- Bug fix (non-breaking change which fixes an issue) -->\r\n<!-- New feature (non-breaking change which adds functionality) -->\r\n<!-- Breaking change (fix or feature that would cause existing functionality to not work as expected) -->\r\n\r\n## Checklist:\r\n- [ ] My code is tested.\r\n- [ ] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [ ] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [ ] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [ ] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [ ] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [ ] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33513", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33513/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33513/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33513/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33513", + "id": 946389939, + "node_id": "MDExOlB1bGxSZXF1ZXN0NjkxNTcxMzgw", + "number": 33513, + "title": "Correct `function_exists()` check typo introduced in #33331.", + "user": { + "login": "desrosj", + "id": 359867, + "node_id": "MDQ6VXNlcjM1OTg2Nw==", + "avatar_url": "https://avatars.githubusercontent.com/u/359867?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/desrosj", + "html_url": "https://github.com/desrosj", + "followers_url": "https://api.github.com/users/desrosj/followers", + "following_url": "https://api.github.com/users/desrosj/following{/other_user}", + "gists_url": "https://api.github.com/users/desrosj/gists{/gist_id}", + "starred_url": "https://api.github.com/users/desrosj/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/desrosj/subscriptions", + "organizations_url": "https://api.github.com/users/desrosj/orgs", + "repos_url": "https://api.github.com/users/desrosj/repos", + "events_url": "https://api.github.com/users/desrosj/events{/privacy}", + "received_events_url": "https://api.github.com/users/desrosj/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 531680823, + "node_id": "MDU6TGFiZWw1MzE2ODA4MjM=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Bug", + "name": "[Type] Bug", + "color": "d93f0b", + "default": false, + "description": "An existing feature is broken." + } + ], + "state": "closed", + "locked": false, + "assignee": { + "login": "desrosj", + "id": 359867, + "node_id": "MDQ6VXNlcjM1OTg2Nw==", + "avatar_url": "https://avatars.githubusercontent.com/u/359867?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/desrosj", + "html_url": "https://github.com/desrosj", + "followers_url": "https://api.github.com/users/desrosj/followers", + "following_url": "https://api.github.com/users/desrosj/following{/other_user}", + "gists_url": "https://api.github.com/users/desrosj/gists{/gist_id}", + "starred_url": "https://api.github.com/users/desrosj/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/desrosj/subscriptions", + "organizations_url": "https://api.github.com/users/desrosj/orgs", + "repos_url": "https://api.github.com/users/desrosj/repos", + "events_url": "https://api.github.com/users/desrosj/events{/privacy}", + "received_events_url": "https://api.github.com/users/desrosj/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "desrosj", + "id": 359867, + "node_id": "MDQ6VXNlcjM1OTg2Nw==", + "avatar_url": "https://avatars.githubusercontent.com/u/359867?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/desrosj", + "html_url": "https://github.com/desrosj", + "followers_url": "https://api.github.com/users/desrosj/followers", + "following_url": "https://api.github.com/users/desrosj/following{/other_user}", + "gists_url": "https://api.github.com/users/desrosj/gists{/gist_id}", + "starred_url": "https://api.github.com/users/desrosj/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/desrosj/subscriptions", + "organizations_url": "https://api.github.com/users/desrosj/orgs", + "repos_url": "https://api.github.com/users/desrosj/repos", + "events_url": "https://api.github.com/users/desrosj/events{/privacy}", + "received_events_url": "https://api.github.com/users/desrosj/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 2, + "created_at": "2021-07-16T15:23:00Z", + "updated_at": "2021-08-05T13:18:11Z", + "closed_at": "2021-08-05T13:15:38Z", + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33513", + "html_url": "https://github.com/WordPress/gutenberg/pull/33513", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33513.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33513.patch" + }, + "body": "## Description\r\nThis corrects a `function_exists()` check introduced in #33331.\r\n\r\n## Checklist:\r\n- [x] My code is tested.\r\n- [x] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [ ] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [ ] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [ ] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [ ] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [ ] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33426", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33426/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33426/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33426/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33426", + "id": 944506962, + "node_id": "MDExOlB1bGxSZXF1ZXN0Njg5OTgwNDk2", + "number": 33426, + "title": "[RNMobile] Embed block: Implement specific Embed preview", + "user": { + "login": "fluiddot", + "id": 14905380, + "node_id": "MDQ6VXNlcjE0OTA1Mzgw", + "avatar_url": "https://avatars.githubusercontent.com/u/14905380?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/fluiddot", + "html_url": "https://github.com/fluiddot", + "followers_url": "https://api.github.com/users/fluiddot/followers", + "following_url": "https://api.github.com/users/fluiddot/following{/other_user}", + "gists_url": "https://api.github.com/users/fluiddot/gists{/gist_id}", + "starred_url": "https://api.github.com/users/fluiddot/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/fluiddot/subscriptions", + "organizations_url": "https://api.github.com/users/fluiddot/orgs", + "repos_url": "https://api.github.com/users/fluiddot/repos", + "events_url": "https://api.github.com/users/fluiddot/events{/privacy}", + "received_events_url": "https://api.github.com/users/fluiddot/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 982506020, + "node_id": "MDU6TGFiZWw5ODI1MDYwMjA=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/Mobile%20App%20-%20i.e.%20Android%20or%20iOS", + "name": "Mobile App - i.e. Android or iOS", + "color": "a3ef7a", + "default": false, + "description": "Native mobile impl of the block editor. (Note: used in scripts, ping mobile folks to change)" + }, + { + "id": 1078477350, + "node_id": "MDU6TGFiZWwxMDc4NDc3MzUw", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Block]%20Embed", + "name": "[Block] Embed", + "color": "6767e5", + "default": false, + "description": "" + } + ], + "state": "closed", + "locked": false, + "assignee": { + "login": "fluiddot", + "id": 14905380, + "node_id": "MDQ6VXNlcjE0OTA1Mzgw", + "avatar_url": "https://avatars.githubusercontent.com/u/14905380?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/fluiddot", + "html_url": "https://github.com/fluiddot", + "followers_url": "https://api.github.com/users/fluiddot/followers", + "following_url": "https://api.github.com/users/fluiddot/following{/other_user}", + "gists_url": "https://api.github.com/users/fluiddot/gists{/gist_id}", + "starred_url": "https://api.github.com/users/fluiddot/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/fluiddot/subscriptions", + "organizations_url": "https://api.github.com/users/fluiddot/orgs", + "repos_url": "https://api.github.com/users/fluiddot/repos", + "events_url": "https://api.github.com/users/fluiddot/events{/privacy}", + "received_events_url": "https://api.github.com/users/fluiddot/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "fluiddot", + "id": 14905380, + "node_id": "MDQ6VXNlcjE0OTA1Mzgw", + "avatar_url": "https://avatars.githubusercontent.com/u/14905380?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/fluiddot", + "html_url": "https://github.com/fluiddot", + "followers_url": "https://api.github.com/users/fluiddot/followers", + "following_url": "https://api.github.com/users/fluiddot/following{/other_user}", + "gists_url": "https://api.github.com/users/fluiddot/gists{/gist_id}", + "starred_url": "https://api.github.com/users/fluiddot/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/fluiddot/subscriptions", + "organizations_url": "https://api.github.com/users/fluiddot/orgs", + "repos_url": "https://api.github.com/users/fluiddot/repos", + "events_url": "https://api.github.com/users/fluiddot/events{/privacy}", + "received_events_url": "https://api.github.com/users/fluiddot/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 7, + "created_at": "2021-07-14T14:48:06Z", + "updated_at": "2021-08-11T11:42:39Z", + "closed_at": "2021-08-11T10:08:58Z", + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33426", + "html_url": "https://github.com/WordPress/gutenberg/pull/33426", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33426.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33426.patch" + }, + "body": "`gutenberg-mobile` PR: https://github.com/wordpress-mobile/gutenberg-mobile/pull/3725\r\n`WordPress-iOS` PR: https://github.com/wordpress-mobile/WordPress-iOS/pull/16866\r\n`WordPress-Android` PR: https://github.com/wordpress-mobile/WordPress-Android/pull/15051\r\n\r\n<!-- Learn the overall process and best practices for pull requests at https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/repository-management.md#pull-requests. -->\r\n\r\n<!-- Gutenberg's license is in the process of updating to be dual-licensed under the GPL and MPL. As part of that transition, all new contributions are dual-licensed. For more information, see: https://github.com/WordPress/gutenberg/blob/trunk/LICENSE.md -->\r\n\r\n## Description\r\n<!-- Please describe what you have changed or added -->\r\n\r\nThis PR includes the `react-native-webview` native module to render the HTML of the embed preview.\r\n\r\nFollowing the implementation of the web version, a native version of the `SandBox` component has been implemented. In the following sections, I briefly describe the key points of this component and how it has been addressed for the native version.\r\n\r\n<details><summary><strong>Details</strong></summary>\r\n\r\n# Embed preview component\r\n\r\n## Interactive flag and overlay\r\n\r\n**✅ It doesn't require further implementation.**\r\n\r\n<details><summary>Related code</summary>\r\n\r\nhttps://github.com/WordPress/gutenberg/blob/105dc1dfe41ed8fe85c147c1c3c204f9fb683990/packages/block-library/src/embed/embed-preview.js#L45-L52\r\nhttps://github.com/WordPress/gutenberg/blob/105dc1dfe41ed8fe85c147c1c3c204f9fb683990/packages/block-library/src/embed/embed-preview.js#L101-L108\r\n\r\n</details>\r\n\r\nThis is mainly used to show/hide an overlay view, as far as I checked, the purpose of this logic is to prevent the user to interact with the preview unless the block and the Iframe are focused. In native, this is not necessary as we can easily control the interaction via the `pointerEvents` prop of the `View` component and the `isSelected` prop.\r\n\r\n## Sandbox classnames\r\n\r\n**🔧 This will be addressed in this issue: https://github.com/wordpress-mobile/gutenberg-mobile/issues/3284**\r\n\r\n<details><summary>Related code</summary>\r\n\r\nhttps://github.com/WordPress/gutenberg/blob/105dc1dfe41ed8fe85c147c1c3c204f9fb683990/packages/block-library/src/embed/embed-preview.js#L81-L85\r\nhttps://github.com/WordPress/gutenberg/blob/105dc1dfe41ed8fe85c147c1c3c204f9fb683990/packages/block-library/src/embed/embed-preview.js#L100\r\n\r\n</details>\r\n\r\nI'm not sure if they're required in native, but it would be worth investigating it, maybe we would need them for the alignment.\r\n\r\n## `WpEmbedPreview` component\r\n\r\n**🔧 This will be addressed in this issue: https://github.com/wordpress-mobile/gutenberg-mobile/issues/3744.**\r\n\r\n<details><summary>Related code</summary>\r\n\r\nhttps://github.com/WordPress/gutenberg/blob/105dc1dfe41ed8fe85c147c1c3c204f9fb683990/packages/block-library/src/embed/embed-preview.js#L92-L93\r\n\r\n</details>\r\n\r\nThis PR doesn't support yet WordPress embeds.\r\n\r\n## Not previewable case\r\n\r\n**🔧 This will be addressed in this issue: https://github.com/wordpress-mobile/gutenberg-mobile/issues/3277**\r\n\r\n<details><summary>Related code</summary>\r\n\r\nhttps://github.com/WordPress/gutenberg/blob/105dc1dfe41ed8fe85c147c1c3c204f9fb683990/packages/block-library/src/embed/embed-preview.js#L122-L138\r\n\r\n</details>\r\n\r\nWe're currently displaying the unavailable preview fallback, now that we support previews, we should update this component.\r\n\r\n# Sandbox component\r\n\r\n## [`FocusableIframe` component](https://github.com/WordPress/gutenberg/blob/trunk/packages/components/src/focusable-iframe/index.js)\r\n\r\n**✅ It doesn't require further implementation.**\r\n\r\n<details><summary>Related code</summary>\r\n\r\nhttps://github.com/WordPress/gutenberg/blob/105dc1dfe41ed8fe85c147c1c3c204f9fb683990/packages/components/src/sandbox/index.js#L241-L249\r\n\r\n</details>\r\n\r\nThis component is mainly used in the web version to determine if the Iframe has been focused and notify the embed preview component. In the embed preview, the focus event is used for controlling the preview interaction, as we're going to control it in a different way, implementing this component won't be necessary for the native version.\r\n\r\n## Resize JS observer\r\n\r\n**✅ It doesn't require further implementation.**\r\n\r\n<details><summary>Related code</summary>\r\n\r\nhttps://github.com/WordPress/gutenberg/blob/105dc1dfe41ed8fe85c147c1c3c204f9fb683990/packages/components/src/sandbox/index.js#L16-L73\r\n\r\n</details>\r\n\r\nThis JS code is used to listen for size changes within the preview, initially, we can use the same version in native. The only tweak I introduced is the object used to notify upstream, on native is `ReactNativeWebView`.\r\n\r\nhttps://github.com/WordPress/gutenberg/blob/0d35c24bfd797185926e465eb040d935834e6454/packages/components/src/sandbox/index.native.js#L27\r\n\r\n## Iframe style\r\n\r\n**🔧 This will be addressed in this issue: https://github.com/wordpress-mobile/gutenberg-mobile/issues/3284**\r\n\r\n<details><summary>Related code</summary>\r\n\r\nhttps://github.com/WordPress/gutenberg/blob/105dc1dfe41ed8fe85c147c1c3c204f9fb683990/packages/components/src/sandbox/index.js#L75-L96\r\n\r\n</details>\r\n\r\nThis is the style object used as the base style for the preview. I noticed that it references the class name `wp-has-aspect-ratio`, we should check what's the purpose of this and if required implement it in the native version.\r\n\r\n## `isFrameAccessible` function\r\n\r\n**✅ It doesn't require further implementation.**\r\n\r\n<details><summary>Related code</summary>\r\n\r\nhttps://github.com/WordPress/gutenberg/blob/105dc1dfe41ed8fe85c147c1c3c204f9fb683990/packages/components/src/sandbox/index.js#L110-L116\r\n\r\n</details>\r\n\r\nNot required because the webview component is always accessible.\r\n\r\n## [`trySandbox` function](https://github.com/WordPress/gutenberg/blob/105dc1dfe41ed8fe85c147c1c3c204f9fb683990/packages/components/src/sandbox/index.js#L118-L176)\r\n\r\n### `contentDocument` ref\r\n\r\n**✅ It doesn't require further implementation.**\r\n\r\n<details><summary>Related code</summary>\r\n\r\nhttps://github.com/WordPress/gutenberg/blob/105dc1dfe41ed8fe85c147c1c3c204f9fb683990/packages/components/src/sandbox/index.js#L123-L124\r\nhttps://github.com/WordPress/gutenberg/blob/105dc1dfe41ed8fe85c147c1c3c204f9fb683990/packages/components/src/sandbox/index.js#L170-L175\r\n\r\n</details>\r\n\r\nIt's used for injecting the HTML to the IFrame in the web version, initially, it won't be necessary for the native version as we use the `source` prop of the `webview` component.\r\n\r\nHowever, I noticed that the `body` property is extracted from this value so we should investigate if it's required.\r\n\r\n**EDIT:** This is not required in the mobile version.\r\n\r\nhttps://github.com/WordPress/gutenberg/blob/105dc1dfe41ed8fe85c147c1c3c204f9fb683990/packages/components/src/sandbox/index.js#L128\r\n\r\n### `ownerDocument` ref - Language value\r\n\r\n**🔧 Being addressed in `rnmobile/embed-block-preview-locale` branch.**\r\n\r\n<details><summary>Related code</summary>\r\n\r\nhttps://github.com/WordPress/gutenberg/blob/105dc1dfe41ed8fe85c147c1c3c204f9fb683990/packages/components/src/sandbox/index.js#L139\r\n\r\n</details>\r\n\r\nUsed to extract the language from the browser so it's not necessary for the native version. For now, in the native version, the language is fixed to `en` but we should fetch it from the device via the locale.\r\n\r\nhttps://github.com/WordPress/gutenberg/blob/0d35c24bfd797185926e465eb040d935834e6454/packages/components/src/sandbox/index.native.js#L111-L112\r\n\r\n### `data-resizable-iframe-connected` attribute\r\n\r\n**✅ It doesn't require further implementation.**\r\n\r\n<details><summary>Related code</summary>\r\n\r\nhttps://github.com/WordPress/gutenberg/blob/105dc1dfe41ed8fe85c147c1c3c204f9fb683990/packages/components/src/sandbox/index.js#L126-L131\r\nhttps://github.com/WordPress/gutenberg/blob/105dc1dfe41ed8fe85c147c1c3c204f9fb683990/packages/components/src/sandbox/index.js#L153\r\nhttps://github.com/WordPress/gutenberg/blob/105dc1dfe41ed8fe85c147c1c3c204f9fb683990/packages/components/src/sandbox/index.js#L66\r\n\r\n</details>\r\n\r\nLooks like it's used to know if the resize observer has been initialized, we should investigate if it's required.\r\n\r\n**EDIT:** This is not required in the mobile version.\r\n\r\n### HTML Doc\r\n\r\n**✅ It doesn't require further implementation.**\r\n\r\n<details><summary>Related code</summary>\r\n\r\nhttps://github.com/WordPress/gutenberg/blob/105dc1dfe41ed8fe85c147c1c3c204f9fb683990/packages/components/src/sandbox/index.js#L137-L168\r\n\r\n</details>\r\n\r\nThis is the HTML injected into the webview, the current code is ok but I included the following meta tag to fit the content:\r\n\r\nhttps://github.com/WordPress/gutenberg/blob/0d35c24bfd797185926e465eb040d935834e6454/packages/components/src/sandbox/index.native.js#L122-L125\r\n\r\n## Resize message handling\r\n\r\n**✅ It doesn't require further implementation.**\r\n\r\n<details><summary>Related code</summary>\r\n\r\nhttps://github.com/WordPress/gutenberg/blob/105dc1dfe41ed8fe85c147c1c3c204f9fb683990/packages/components/src/sandbox/index.js#L185-L210\r\n\r\n</details>\r\n\r\nThis is the callback used for handling resize events from the resize JS observer. I'd like to note that I removed a part that is used to verify that the origin of the message is the resize observer, in native, this is not really necessary as the resize message it's the only one that we're receiving.\r\n\r\n## Load event listener\r\n\r\n**✅ It doesn't require further implementation.**\r\n\r\n<details><summary>Related code</summary>\r\n\r\nhttps://github.com/WordPress/gutenberg/blob/105dc1dfe41ed8fe85c147c1c3c204f9fb683990/packages/components/src/sandbox/index.js#L215-L219\r\n\r\n</details>\r\n\r\nThe load event is used to call the `trySandbox` function after the load in the web version, as far as I checked, this is not required but it would be nice to investigate it further.\r\n\r\n**EDIT:** This is not required in the mobile version.\r\n\r\n## Message event listener\r\n\r\n**✅ It doesn't require further implementation.**\r\n\r\n<details><summary>Related code</summary>\r\n\r\nhttps://github.com/WordPress/gutenberg/blob/105dc1dfe41ed8fe85c147c1c3c204f9fb683990/packages/components/src/sandbox/index.js#L220\r\n\r\n</details>\r\n\r\nIn this case, we use the webview component message system so it's not required.\r\n\r\n## IFrame extra props\r\n\r\n**✅ It doesn't require further implementation.**\r\n\r\n<details><summary>Related code</summary>\r\n\r\nhttps://github.com/WordPress/gutenberg/blob/105dc1dfe41ed8fe85c147c1c3c204f9fb683990/packages/components/src/sandbox/index.js#L241-L249\r\n\r\n</details>\r\n\r\nIn the web version, we have the following extra props passed to the Iframe:\r\n- `className=\"components-sandbox\"`\r\n- `sandbox=\"allow-scripts allow-same-origin allow-presentation\"`\r\n- Size (width and height)\r\n\r\nWe should verify if they're required in the native version.\r\n\r\n**NOTE:** The size in the native version is handled by passing an inline style with the aspect ratio calculated from the preview size.\r\n\r\nhttps://github.com/WordPress/gutenberg/blob/0d35c24bfd797185926e465eb040d935834e6454/packages/components/src/sandbox/index.native.js#L188-L190\r\n\r\n**EDIT:** This is not required in the mobile version.\r\n\r\n</details>\r\n\r\n## How has this been tested?\r\n<!-- Please describe in detail how you tested your changes. -->\r\n<!-- Include details of your testing environment, tests ran to see how -->\r\n<!-- your change affects other areas of the code, etc. -->\r\n\r\n### Test all providers\r\n1. Switch to HTML mode\r\n2. Add the following HTML which includes all providers\r\n<details><summary>HTML code</summary>\r\n\r\n```\r\n<!-- wp:embed {\"url\":\"https://www.amazon.com/dp/B086V2NKW6/ref=cm_sw_em_r_mt_dp_T9CZKRCGX4XFCGT31VAM\",\"type\":\"rich\",\"providerNameSlug\":\"amazon\"} -->\r\n<figure class=\"wp-block-embed is-type-rich is-provider-amazon wp-block-embed-amazon\"><div class=\"wp-block-embed__wrapper\">\r\nhttps://www.amazon.com/dp/B086V2NKW6/ref=cm_sw_em_r_mt_dp_T9CZKRCGX4XFCGT31VAM\r\n</div><figcaption>Amazon Kindle instant previews</figcaption></figure>\r\n<!-- /wp:embed -->\r\n\r\n<!-- wp:embed {\"url\":\"https://animoto.com/play/sbONyhv5XN2fn26GGA061A\",\"type\":\"video\",\"providerNameSlug\":\"animoto\"} -->\r\n<figure class=\"wp-block-embed is-type-video is-provider-animoto wp-block-embed-animoto\"><div class=\"wp-block-embed__wrapper\">\r\nhttps://animoto.com/play/sbONyhv5XN2fn26GGA061A\r\n</div></figure>\r\n<!-- /wp:embed -->\r\n\r\n<!-- wp:embed {\"url\":\"https://cloudup.com/iGdvFflihj0\",\"type\":\"rich\",\"providerNameSlug\":\"cloudup\",\"responsive\":true,\"align\":\"wide\",\"className\":\"wp-embed-aspect-4-3 wp-has-aspect-ratio\"} -->\r\n<figure class=\"wp-block-embed alignwide is-type-rich is-provider-cloudup wp-block-embed-cloudup wp-embed-aspect-4-3 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\r\nhttps://cloudup.com/iGdvFflihj0\r\n</div><figcaption>CloudUp</figcaption></figure>\r\n<!-- /wp:embed -->\r\n\r\n<!-- wp:embed {\"url\":\"https://poll.fm/10575316\",\"type\":\"rich\",\"providerNameSlug\":\"crowdsignal\",\"responsive\":true} -->\r\n<figure class=\"wp-block-embed is-type-rich is-provider-crowdsignal wp-block-embed-crowdsignal\"><div class=\"wp-block-embed__wrapper\">\r\nhttps://poll.fm/10575316\r\n</div><figcaption>Crowdsignal</figcaption></figure>\r\n<!-- /wp:embed -->\r\n\r\n<!-- wp:embed {\"url\":\"https://www.dailymotion.com/video/x7zktsb\",\"type\":\"video\",\"providerNameSlug\":\"dailymotion\",\"responsive\":true,\"className\":\"wp-embed-aspect-16-9 wp-has-aspect-ratio\"} -->\r\n<figure class=\"wp-block-embed is-type-video is-provider-dailymotion wp-block-embed-dailymotion wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\r\nhttps://www.dailymotion.com/video/x7zktsb\r\n</div><figcaption>Dailymotion</figcaption></figure>\r\n<!-- /wp:embed -->\r\n\r\n<!-- wp:embed {\"url\":\"https://www.facebook.com/WordPress/posts/10157978031167911?cft_[0]=AZVvIZnOgLmO0aGMW4l_KcldOSSTnnoKogx7sWLpwpMpQjGresqAxd8KVMTBbKyX95DiRBKMPVZKmVUYHpvuK2AK73LkLoLxKRXHhHR73LMAAdy8X13RWJuUbTE4ISBAOQ96wDsk6Fz-VNRLG8Vp-2vJiXSVd4sfYiuGEkNizSmaXg\\u0026amp; _tn_=%2CO%2CP-R \",\"type\":\"rich\",\"providerNameSlug\":\"embed-handler\",\"responsive\":true,\"previewable\":false} -->\r\n<figure class=\"wp-block-embed is-type-rich is-provider-embed-handler wp-block-embed-embed-handler\"><div class=\"wp-block-embed__wrapper\">\r\nhttps://www.facebook.com/WordPress/posts/10157978031167911?cft_[0]=AZVvIZnOgLmO0aGMW4l_KcldOSSTnnoKogx7sWLpwpMpQjGresqAxd8KVMTBbKyX95DiRBKMPVZKmVUYHpvuK2AK73LkLoLxKRXHhHR73LMAAdy8X13RWJuUbTE4ISBAOQ96wDsk6Fz-VNRLG8Vp-2vJiXSVd4sfYiuGEkNizSmaXg& _tn_=%2CO%2CP-R \r\n</div><figcaption>Facebook</figcaption></figure>\r\n<!-- /wp:embed -->\r\n\r\n<!-- wp:embed {\"url\":\"https://flic.kr/p/2h93TrK\",\"type\":\"photo\",\"providerNameSlug\":\"flickr\",\"responsive\":true} -->\r\n<figure class=\"wp-block-embed is-type-photo is-provider-flickr wp-block-embed-flickr\"><div class=\"wp-block-embed__wrapper\">\r\nhttps://flic.kr/p/2h93TrK\r\n</div><figcaption>Flickr</figcaption></figure>\r\n<!-- /wp:embed -->\r\n\r\n<!-- wp:embed {\"url\":\"https://media.giphy.com/media/1d7F9xyq6j7C1ojbC5/giphy.gif\",\"type\":\"rich\",\"providerNameSlug\":\"embed-handler\"} -->\r\n<figure class=\"wp-block-embed is-type-rich is-provider-embed-handler wp-block-embed-embed-handler\"><div class=\"wp-block-embed__wrapper\">\r\nhttps://media.giphy.com/media/1d7F9xyq6j7C1ojbC5/giphy.gif\r\n</div><figcaption>Giphy</figcaption></figure>\r\n<!-- /wp:embed -->\r\n\r\n<!-- wp:paragraph -->\r\n<p><strong>Imgur provider doesn’t work:</strong><br />https://imgur.com/gallery/Tfj5BzO</p>\r\n<!-- /wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>https://imgur.com/gallery/Tfj5BzO</p>\r\n<!-- /wp:paragraph -->\r\n\r\n<!-- wp:embed {\"url\":\"https://www.instagram.com/p/Bl6LgZgFDOm\",\"type\":\"rich\",\"providerNameSlug\":\"instagram\",\"responsive\":true} -->\r\n<figure class=\"wp-block-embed is-type-rich is-provider-instagram wp-block-embed-instagram\"><div class=\"wp-block-embed__wrapper\">\r\nhttps://www.instagram.com/p/Bl6LgZgFDOm\r\n</div><figcaption>Instagram</figcaption></figure>\r\n<!-- /wp:embed -->\r\n\r\n<!-- wp:embed {\"url\":\"https://issuu.com/sneha-3213/docs/react_native_0.64.2_released_discover_what_s_new_\",\"type\":\"rich\",\"providerNameSlug\":\"issuu\",\"responsive\":true} -->\r\n<figure class=\"wp-block-embed is-type-rich is-provider-issuu wp-block-embed-issuu\"><div class=\"wp-block-embed__wrapper\">\r\nhttps://issuu.com/sneha-3213/docs/react_native_0.64.2_released_discover_what_s_new_\r\n</div><figcaption>Issuu</figcaption></figure>\r\n<!-- /wp:embed -->\r\n\r\n<!-- wp:embed {\"url\":\"https://www.kickstarter.com/projects/elanlee/exploding-kittens?ref=discovery\\u0026amp;term=exploding%20kittens\",\"type\":\"rich\",\"providerNameSlug\":\"kickstarter\",\"responsive\":true,\"className\":\"wp-embed-aspect-16-9 wp-has-aspect-ratio\"} -->\r\n<figure class=\"wp-block-embed is-type-rich is-provider-kickstarter wp-block-embed-kickstarter wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\r\nhttps://www.kickstarter.com/projects/elanlee/exploding-kittens?ref=discovery&term=exploding%20kittens\r\n</div><figcaption>Kickstarter</figcaption></figure>\r\n<!-- /wp:embed -->\r\n\r\n<!-- wp:paragraph -->\r\n<p><strong>Meetup.com provider doesn’t work:</strong><br />https://www.meetup.com/es/The-Reno-WordPress-Meetup-Group/events/smpbksycckblc/</p>\r\n<!-- /wp:paragraph -->\r\n\r\n<!-- wp:paragraph -->\r\n<p>https://www.meetup.com/es/The-Reno-WordPress-Meetup-Group/events/smpbksycckblc/</p>\r\n<!-- /wp:paragraph -->\r\n\r\n<!-- wp:embed {\"url\":\"https://www.mixcloud.com/maxvibes/nu-jazz-lounge/\",\"type\":\"rich\",\"providerNameSlug\":\"mixcloud\",\"responsive\":true,\"className\":\"wp-embed-aspect-21-9 wp-has-aspect-ratio\"} -->\r\n<figure class=\"wp-block-embed is-type-rich is-provider-mixcloud wp-block-embed-mixcloud wp-embed-aspect-21-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\r\nhttps://www.mixcloud.com/maxvibes/nu-jazz-lounge/\r\n</div><figcaption>Mixcloud</figcaption></figure>\r\n<!-- /wp:embed -->\r\n\r\n<!-- wp:embed {\"url\":\"https://www.reddit.com/r/reactnative/comments/oovdxz/typescript_or_javascript_for_rn/?utm_source=share\\u0026amp;utm_medium=web2x\\u0026amp;context=3\",\"type\":\"rich\",\"providerNameSlug\":\"reddit\",\"responsive\":true} -->\r\n<figure class=\"wp-block-embed is-type-rich is-provider-reddit wp-block-embed-reddit\"><div class=\"wp-block-embed__wrapper\">\r\nhttps://www.reddit.com/r/reactnative/comments/oovdxz/typescript_or_javascript_for_rn/?utm_source=share&utm_medium=web2x&context=3\r\n</div><figcaption>Reddit</figcaption></figure>\r\n<!-- /wp:embed -->\r\n\r\n<!-- wp:embed {\"url\":\"https://www.reverbnation.com/hmsurf/song/27456133-sids-lesson\",\"type\":\"rich\",\"providerNameSlug\":\"embed\",\"responsive\":true} -->\r\n<figure class=\"wp-block-embed is-type-rich is-provider-embed wp-block-embed-embed\"><div class=\"wp-block-embed__wrapper\">\r\nhttps://www.reverbnation.com/hmsurf/song/27456133-sids-lesson\r\n</div><figcaption>Reverbnation</figcaption></figure>\r\n<!-- /wp:embed -->\r\n\r\n<!-- wp:embed {\"url\":\"https://www.scribd.com/document/430258318/Professional-Javascript\",\"type\":\"rich\",\"providerNameSlug\":\"scribd\",\"responsive\":true} -->\r\n<figure class=\"wp-block-embed is-type-rich is-provider-scribd wp-block-embed-scribd\"><div class=\"wp-block-embed__wrapper\">\r\nhttps://www.scribd.com/document/430258318/Professional-Javascript\r\n</div><figcaption>Scribd</figcaption></figure>\r\n<!-- /wp:embed -->\r\n\r\n<!-- wp:embed {\"url\":\"https://www.slideshare.net/brianhousand/game-on-iagc-2016\",\"type\":\"rich\",\"providerNameSlug\":\"slideshare\",\"responsive\":true} -->\r\n<figure class=\"wp-block-embed is-type-rich is-provider-slideshare wp-block-embed-slideshare\"><div class=\"wp-block-embed__wrapper\">\r\nhttps://www.slideshare.net/brianhousand/game-on-iagc-2016\r\n</div><figcaption>Slideshare</figcaption></figure>\r\n<!-- /wp:embed -->\r\n\r\n<!-- wp:embed {\"url\":\"https://soundcloud.com/dillonfrancis/daft-punk-harder-better-faster-stronger-dillon-francis-remix\",\"type\":\"rich\",\"providerNameSlug\":\"soundcloud\",\"responsive\":true} -->\r\n<figure class=\"wp-block-embed is-type-rich is-provider-soundcloud wp-block-embed-soundcloud\"><div class=\"wp-block-embed__wrapper\">\r\nhttps://soundcloud.com/dillonfrancis/daft-punk-harder-better-faster-stronger-dillon-francis-remix\r\n</div><figcaption>Soundcloud</figcaption></figure>\r\n<!-- /wp:embed -->\r\n\r\n<!-- wp:embed {\"url\":\"https://speakerdeck.com/notwaldorf/how-to-train-your-dragon-web-standard\",\"type\":\"rich\",\"providerNameSlug\":\"speaker-deck\",\"responsive\":true,\"className\":\"wp-embed-aspect-16-9 wp-has-aspect-ratio\"} -->\r\n<figure class=\"wp-block-embed is-type-rich is-provider-speaker-deck wp-block-embed-speaker-deck wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\r\nhttps://speakerdeck.com/notwaldorf/how-to-train-your-dragon-web-standard\r\n</div><figcaption>Speakerdeck</figcaption></figure>\r\n<!-- /wp:embed -->\r\n\r\n<!-- wp:embed {\"url\":\"https://open.spotify.com/track/5sICkBXVmaCQk5aISGR3x1\",\"type\":\"rich\",\"providerNameSlug\":\"spotify\",\"responsive\":true,\"className\":\"wp-embed-aspect-21-9 wp-has-aspect-ratio\"} -->\r\n<figure class=\"wp-block-embed is-type-rich is-provider-spotify wp-block-embed-spotify wp-embed-aspect-21-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\r\nhttps://open.spotify.com/track/5sICkBXVmaCQk5aISGR3x1\r\n</div><figcaption>Spotify</figcaption></figure>\r\n<!-- /wp:embed -->\r\n\r\n<!-- wp:embed {\"url\":\"https://www.ted.com/talks/max_hawkins_i_let_algorithms_randomize_my_life_for_two_years?utm_source=tedcomshare\\u0026amp;utm_medium=social\\u0026amp;utm_campaign=tedspread\",\"type\":\"video\",\"providerNameSlug\":\"ted\",\"responsive\":true,\"className\":\"wp-embed-aspect-16-9 wp-has-aspect-ratio\"} -->\r\n<figure class=\"wp-block-embed is-type-video is-provider-ted wp-block-embed-ted wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\r\nhttps://www.ted.com/talks/max_hawkins_i_let_algorithms_randomize_my_life_for_two_years?utm_source=tedcomshare&utm_medium=social&utm_campaign=tedspread\r\n</div><figcaption>Ted</figcaption></figure>\r\n<!-- /wp:embed -->\r\n\r\n<!-- wp:embed {\"url\":\"https://www.tiktok.com/@25pesetas/video/6946150795909893381\",\"type\":\"video\",\"providerNameSlug\":\"tiktok\",\"responsive\":true} -->\r\n<figure class=\"wp-block-embed is-type-video is-provider-tiktok wp-block-embed-tiktok\"><div class=\"wp-block-embed__wrapper\">\r\nhttps://www.tiktok.com/@25pesetas/video/6946150795909893381\r\n</div><figcaption>Tiktok</figcaption></figure>\r\n<!-- /wp:embed -->\r\n\r\n<!-- wp:embed {\"url\":\"https://popelickva.tumblr.com/post/646024560144171008/the-sega-cd-version-of-monkey-island-has-some\",\"type\":\"rich\",\"providerNameSlug\":\"tumblr\"} -->\r\n<figure class=\"wp-block-embed is-type-rich is-provider-tumblr wp-block-embed-tumblr\"><div class=\"wp-block-embed__wrapper\">\r\nhttps://popelickva.tumblr.com/post/646024560144171008/the-sega-cd-version-of-monkey-island-has-some\r\n</div><figcaption>Tumblr</figcaption></figure>\r\n<!-- /wp:embed -->\r\n\r\n<!-- wp:embed {\"url\":\"https://twitter.com/automattic/status/1395447061336711181\",\"type\":\"rich\",\"providerNameSlug\":\"twitter\",\"responsive\":true} -->\r\n<figure class=\"wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter\"><div class=\"wp-block-embed__wrapper\">\r\nhttps://twitter.com/automattic/status/1395447061336711181\r\n</div><figcaption>Twitter</figcaption></figure>\r\n<!-- /wp:embed -->\r\n\r\n<!-- wp:embed {\"url\":\"https://vimeo.com/278150343\",\"type\":\"video\",\"providerNameSlug\":\"vimeo\",\"responsive\":true,\"className\":\"wp-embed-aspect-16-9 wp-has-aspect-ratio\"} -->\r\n<figure class=\"wp-block-embed is-type-video is-provider-vimeo wp-block-embed-vimeo wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\r\nhttps://vimeo.com/278150343\r\n</div><figcaption>Vimeo</figcaption></figure>\r\n<!-- /wp:embed -->\r\n\r\n<!-- wp:embed {\"url\":\"https://videopress.com/v/rFm2ce4R\",\"type\":\"video\",\"providerNameSlug\":\"videopress\",\"responsive\":true,\"className\":\"wp-embed-aspect-16-9 wp-has-aspect-ratio\"} -->\r\n<figure class=\"wp-block-embed is-type-video is-provider-videopress wp-block-embed-videopress wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\r\nhttps://videopress.com/v/rFm2ce4R\r\n</div><figcaption>WordPress.tv</figcaption></figure>\r\n<!-- /wp:embed -->\r\n\r\n<!-- wp:embed {\"url\":\"https://www.youtube.com/watch?v=ssfHW5lwFZg\",\"type\":\"video\",\"providerNameSlug\":\"youtube\",\"responsive\":true,\"className\":\"wp-embed-aspect-16-9 wp-has-aspect-ratio\"} -->\r\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\r\nhttps://www.youtube.com/watch?v=ssfHW5lwFZg\r\n</div><figcaption>YouTube</figcaption></figure>\r\n<!-- /wp:embed -->\r\n\r\n<!-- wp:embed {\"url\":\"https://www.screencast.com/t/F6R333xrD3BQ\",\"type\":\"video\",\"providerNameSlug\":\"screencast-com\"} -->\r\n<figure class=\"wp-block-embed is-type-video is-provider-screencast-com wp-block-embed-screencast-com\"><div class=\"wp-block-embed__wrapper\">\r\nhttps://www.screencast.com/t/F6R333xrD3BQ\r\n</div><figcaption>Screencast</figcaption></figure>\r\n<!-- /wp:embed -->\r\n\r\n<!-- wp:embed {\"url\":\"https://wordpress.org/news/2021/07/tatum/\",\"type\":\"wp-embed\",\"providerNameSlug\":\"wordpress-news\"} -->\r\n<figure class=\"wp-block-embed is-type-wp-embed is-provider-wordpress-news wp-block-embed-wordpress-news\"><div class=\"wp-block-embed__wrapper\">\r\nhttps://wordpress.org/news/2021/07/tatum/\r\n</div><figcaption>WP-embed (not supported yet)</figcaption></figure>\r\n<!-- /wp:embed -->\r\n\r\n<!-- wp:embed {\"url\":\"https://www.educreations.com/lesson/view/science/25630392/?s=UkHL9p\\u0026amp;ref=app\",\"type\":\"video\",\"providerNameSlug\":\"educreations\"} -->\r\n<figure class=\"wp-block-embed is-type-video is-provider-educreations wp-block-embed-educreations\"><div class=\"wp-block-embed__wrapper\">\r\nhttps://www.educreations.com/lesson/view/science/25630392/?s=UkHL9p&ref=app\r\n</div><figcaption>Educreations</figcaption></figure>\r\n<!-- /wp:embed -->\r\n\r\n<!-- wp:embed {\"url\":\"https://sproutvideo-example.vids.io/videos/189bdbb01e1ce7c790/video-websites-by-sproutvideo\",\"type\":\"video\",\"providerNameSlug\":\"sproutvideo\"} -->\r\n<figure class=\"wp-block-embed is-type-video is-provider-sproutvideo wp-block-embed-sproutvideo\"><div class=\"wp-block-embed__wrapper\">\r\nhttps://sproutvideo-example.vids.io/videos/189bdbb01e1ce7c790/video-websites-by-sproutvideo\r\n</div><figcaption>SproutVideo</figcaption></figure>\r\n<!-- /wp:embed -->\r\n\r\n<!-- wp:embed {\"url\":\"http://automattic-2.wistia.com/medias/mqf9c9147u\",\"type\":\"video\",\"providerNameSlug\":\"wistia-inc\"} -->\r\n<figure class=\"wp-block-embed is-type-video is-provider-wistia-inc wp-block-embed-wistia-inc\"><div class=\"wp-block-embed__wrapper\">\r\nhttp://automattic-2.wistia.com/medias/mqf9c9147u\r\n</div><figcaption>Wistia</figcaption></figure>\r\n<!-- /wp:embed -->\r\n```\r\n\r\n</details>\r\n\r\n3. Observer that embed blocks are displaying a preview for each provider.\r\n **NOTE:** The following providers are not working on both platforms:\r\n - Facebook\r\n - Imgur\r\n - Meetup.com\r\n\r\n### Interaction is disabled\r\n1. Add an Embed block\r\n2. Set a URL that can be previewed (example: https://www.youtube.com/watch?v=ssfHW5lwFZg)\r\n3. Observe that the content preview is displayed\r\n4. Tap on any UI element (like the play button) within the preview content\r\n5. Observe that interaction is disabled\r\n\r\n### Inline preview disabled in production mode\r\n1. Use an installable build to test production mode\r\n2. Add an Embed block\r\n2. Set a URL that can be previewed (example: https://www.youtube.com/watch?v=ssfHW5lwFZg)\r\n3. Observe that the block's content displays a message that inline preview is coming soon and the text \"PREVIEW POST\"\r\n4. Tap on the block to edit it\r\n5. Observe that an info modal shows up explaining that previews are coming soon\r\n6. Observe that tapping on the dismiss button closes the modal\r\n7. Tap on the block again to open the previous modal\r\n8. Tap on \"Preview post\"\r\n9. Observe that the modal is closed and the preview modal is opened displaying the embed block\r\n\r\n### Performance\r\n\r\n**Preparation:**\r\n1. Add a high number of embed blocks that will display a preview like the previous HTML code from \"Test all providers\" test case\r\n2. Save the post/page\r\n\r\n#### Opening a post/page\r\n1. Open the post/page\r\n2. Observe that performance is not degraded when loading a high number of embed blocks\r\n\r\n#### Scrolling content\r\n1. Open the post/page\r\n2. Scroll the post/page content from top to bottom and vice-versa\r\n3. Observe that performance is not degraded when scrolling\r\n\r\n## Screenshots <!-- if applicable -->\r\n\r\niOS|Android\r\n--|--\r\n<video src=https://user-images.githubusercontent.com/14905380/127003200-8cb4dc72-c194-4792-ad18-acaa077378df.mp4>|<video src=https://user-images.githubusercontent.com/14905380/127010789-ba7e794e-69bb-4fc9-806f-4509f4a16d6c.mp4>\r\n\r\n## Types of changes\r\n<!-- What types of changes does your code introduce? -->\r\n<!-- Bug fix (non-breaking change which fixes an issue) -->\r\n<!-- New feature (non-breaking change which adds functionality) -->\r\n<!-- Breaking change (fix or feature that would cause existing functionality to not work as expected) -->\r\nNew feature\r\n\r\n## Checklist:\r\n- [x] My code is tested.\r\n- [x] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [x] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [ ] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [x] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [x] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [x] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33418", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33418/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33418/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33418/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33418", + "id": 944243830, + "node_id": "MDExOlB1bGxSZXF1ZXN0Njg5NzUzODQ2", + "number": 33418, + "title": "Refactor the HierarchicalTermSelector so that it does not cause unnecessary loading of terms.", + "user": { + "login": "torounit", + "id": 1908815, + "node_id": "MDQ6VXNlcjE5MDg4MTU=", + "avatar_url": "https://avatars.githubusercontent.com/u/1908815?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/torounit", + "html_url": "https://github.com/torounit", + "followers_url": "https://api.github.com/users/torounit/followers", + "following_url": "https://api.github.com/users/torounit/following{/other_user}", + "gists_url": "https://api.github.com/users/torounit/gists{/gist_id}", + "starred_url": "https://api.github.com/users/torounit/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/torounit/subscriptions", + "organizations_url": "https://api.github.com/users/torounit/orgs", + "repos_url": "https://api.github.com/users/torounit/repos", + "events_url": "https://api.github.com/users/torounit/events{/privacy}", + "received_events_url": "https://api.github.com/users/torounit/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 596964332, + "node_id": "MDU6TGFiZWw1OTY5NjQzMzI=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/General%20Interface", + "name": "General Interface", + "color": "bfdadc", + "default": false, + "description": "Parts of the UI which don't fall neatly under other labels." + }, + { + "id": 731693674, + "node_id": "MDU6TGFiZWw3MzE2OTM2NzQ=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Performance", + "name": "[Type] Performance", + "color": "f3f4fe", + "default": false, + "description": "" + }, + { + "id": 1013395453, + "node_id": "MDU6TGFiZWwxMDEzMzk1NDUz", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Package]%20Editor", + "name": "[Package] Editor", + "color": "ed2572", + "default": false, + "description": "/packages/editor" + }, + { + "id": 1293579839, + "node_id": "MDU6TGFiZWwxMjkzNTc5ODM5", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/Needs%20Dev%20Note", + "name": "Needs Dev Note", + "color": "b910f2", + "default": false, + "description": "" + } + ], + "state": "closed", + "locked": false, + "assignee": { + "login": "torounit", + "id": 1908815, + "node_id": "MDQ6VXNlcjE5MDg4MTU=", + "avatar_url": "https://avatars.githubusercontent.com/u/1908815?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/torounit", + "html_url": "https://github.com/torounit", + "followers_url": "https://api.github.com/users/torounit/followers", + "following_url": "https://api.github.com/users/torounit/following{/other_user}", + "gists_url": "https://api.github.com/users/torounit/gists{/gist_id}", + "starred_url": "https://api.github.com/users/torounit/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/torounit/subscriptions", + "organizations_url": "https://api.github.com/users/torounit/orgs", + "repos_url": "https://api.github.com/users/torounit/repos", + "events_url": "https://api.github.com/users/torounit/events{/privacy}", + "received_events_url": "https://api.github.com/users/torounit/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "torounit", + "id": 1908815, + "node_id": "MDQ6VXNlcjE5MDg4MTU=", + "avatar_url": "https://avatars.githubusercontent.com/u/1908815?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/torounit", + "html_url": "https://github.com/torounit", + "followers_url": "https://api.github.com/users/torounit/followers", + "following_url": "https://api.github.com/users/torounit/following{/other_user}", + "gists_url": "https://api.github.com/users/torounit/gists{/gist_id}", + "starred_url": "https://api.github.com/users/torounit/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/torounit/subscriptions", + "organizations_url": "https://api.github.com/users/torounit/orgs", + "repos_url": "https://api.github.com/users/torounit/repos", + "events_url": "https://api.github.com/users/torounit/events{/privacy}", + "received_events_url": "https://api.github.com/users/torounit/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 17, + "created_at": "2021-07-14T09:44:47Z", + "updated_at": "2021-08-04T03:04:55Z", + "closed_at": "2021-07-28T05:23:06Z", + "author_association": "MEMBER", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33418", + "html_url": "https://github.com/WordPress/gutenberg/pull/33418", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33418.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33418.patch" + }, + "body": "<!-- Learn the overall process and best practices for pull requests at https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/repository-management.md#pull-requests. -->\r\n\r\n<!-- Gutenberg's license is in the process of updating to be dual-licensed under the GPL and MPL. As part of that transition, all new contributions are dual-licensed. For more information, see: https://github.com/WordPress/gutenberg/blob/trunk/LICENSE.md -->\r\n\r\n## Description\r\n\r\nRelated: #10169, #16268\r\n\r\n* Refactor the HierarchicalTermSelector so that it does not cause unnecessary loading of terms. Use the data from the first set of terms we get.\r\n* Changed from class components to functional components.\r\n\r\n<!-- Please describe what you have changed or added -->\r\n\r\n## How has this been tested?\r\n1. Go edit post.\r\n2. Close and open the panel for categories.\r\n3. Check request for wp-api.\r\n\r\n## Screenshots <!-- if applicable -->\r\n\r\n## Types of changes\r\n<!-- What types of changes does your code introduce? -->\r\nBug fix\r\n<!-- New feature (non-breaking change which adds functionality) -->\r\n<!-- Breaking change (fix or feature that would cause existing functionality to not work as expected) -->\r\n\r\n## Checklist:\r\n- [x] My code is tested.\r\n- [x] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [x] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [x] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [x] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [x] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [ ] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33392", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33392/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33392/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33392/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33392", + "id": 943611535, + "node_id": "MDExOlB1bGxSZXF1ZXN0Njg5MjE4MDcy", + "number": 33392, + "title": "Template: Only show post template actions to users with correct capabilities", + "user": { + "login": "walbo", + "id": 1415747, + "node_id": "MDQ6VXNlcjE0MTU3NDc=", + "avatar_url": "https://avatars.githubusercontent.com/u/1415747?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/walbo", + "html_url": "https://github.com/walbo", + "followers_url": "https://api.github.com/users/walbo/followers", + "following_url": "https://api.github.com/users/walbo/following{/other_user}", + "gists_url": "https://api.github.com/users/walbo/gists{/gist_id}", + "starred_url": "https://api.github.com/users/walbo/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/walbo/subscriptions", + "organizations_url": "https://api.github.com/users/walbo/orgs", + "repos_url": "https://api.github.com/users/walbo/repos", + "events_url": "https://api.github.com/users/walbo/events{/privacy}", + "received_events_url": "https://api.github.com/users/walbo/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 531680823, + "node_id": "MDU6TGFiZWw1MzE2ODA4MjM=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Bug", + "name": "[Type] Bug", + "color": "d93f0b", + "default": false, + "description": "An existing feature is broken." + }, + { + "id": 2978205898, + "node_id": "MDU6TGFiZWwyOTc4MjA1ODk4", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Feature]%20Template%20Editing%20Mode", + "name": "[Feature] Template Editing Mode", + "color": "FBCA04", + "default": false, + "description": "" + } + ], + "state": "closed", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 5, + "created_at": "2021-07-13T16:29:08Z", + "updated_at": "2021-08-09T16:51:20Z", + "closed_at": "2021-08-09T16:31:48Z", + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33392", + "html_url": "https://github.com/WordPress/gutenberg/pull/33392", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33392.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33392.patch" + }, + "body": "<!-- Learn the overall process and best practices for pull requests at https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/repository-management.md#pull-requests. -->\r\n\r\n<!-- Gutenberg's license is in the process of updating to be dual-licensed under the GPL and MPL. As part of that transition, all new contributions are dual-licensed. For more information, see: https://github.com/WordPress/gutenberg/blob/trunk/LICENSE.md -->\r\n\r\n## Description\r\nPost template actions shows on user that doesn't have correct capabilities. Ex editors has a `New` button but when they try to create a new template nothing happens. (See screenshot)\r\n\r\n## How has this been tested?\r\nLocally with a `editor` user and with a `adminitrator` user.\r\n\r\n## Screenshots <!-- if applicable -->\r\n### Before\r\n![template-new](https://user-images.githubusercontent.com/1415747/125489869-5bb2340b-29c9-402f-92ec-b79612a61d84.gif)\r\n\r\n### After\r\n![image](https://user-images.githubusercontent.com/1415747/126469473-ba4e2d7e-0a16-47c2-b62a-d0c78464ca3b.png)\r\n\r\n\r\n## Types of changes\r\nBug fix. Only show post template actions for users with correct capabilities\r\n<!-- What types of changes does your code introduce? -->\r\n<!-- Bug fix (non-breaking change which fixes an issue) -->\r\n<!-- New feature (non-breaking change which adds functionality) -->\r\n<!-- Breaking change (fix or feature that would cause existing functionality to not work as expected) -->\r\n\r\n## Checklist:\r\n- [x] My code is tested.\r\n- [x] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [ ] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [ ] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [ ] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [ ] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [ ] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33308", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33308/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33308/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33308/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33308", + "id": 940125152, + "node_id": "MDExOlB1bGxSZXF1ZXN0Njg2MjQzNDQ3", + "number": 33308, + "title": "link fix: block editor Sidebar Tutorial", + "user": { + "login": "rbrishabh", + "id": 22501334, + "node_id": "MDQ6VXNlcjIyNTAxMzM0", + "avatar_url": "https://avatars.githubusercontent.com/u/22501334?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rbrishabh", + "html_url": "https://github.com/rbrishabh", + "followers_url": "https://api.github.com/users/rbrishabh/followers", + "following_url": "https://api.github.com/users/rbrishabh/following{/other_user}", + "gists_url": "https://api.github.com/users/rbrishabh/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rbrishabh/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rbrishabh/subscriptions", + "organizations_url": "https://api.github.com/users/rbrishabh/orgs", + "repos_url": "https://api.github.com/users/rbrishabh/repos", + "events_url": "https://api.github.com/users/rbrishabh/events{/privacy}", + "received_events_url": "https://api.github.com/users/rbrishabh/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 567484057, + "node_id": "MDU6TGFiZWw1Njc0ODQwNTc=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Documentation", + "name": "[Type] Documentation", + "color": "bfd4f2", + "default": false, + "description": "" + } + ], + "state": "closed", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 1, + "created_at": "2021-07-08T18:41:23Z", + "updated_at": "2021-07-30T16:18:04Z", + "closed_at": "2021-07-30T16:17:40Z", + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33308", + "html_url": "https://github.com/WordPress/gutenberg/pull/33308", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33308.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33308.patch" + }, + "body": "Fixes #33265\r\nHey @talldan! how does this look?\r\nlet me know if this needs any changes! thanks!", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33119", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33119/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33119/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33119/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33119", + "id": 934255450, + "node_id": "MDExOlB1bGxSZXF1ZXN0NjgxMzQ1NjIy", + "number": 33119, + "title": "[RNMobile] Add new block type badge to block inserter list", + "user": { + "login": "dcalhoun", + "id": 438664, + "node_id": "MDQ6VXNlcjQzODY2NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/438664?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/dcalhoun", + "html_url": "https://github.com/dcalhoun", + "followers_url": "https://api.github.com/users/dcalhoun/followers", + "following_url": "https://api.github.com/users/dcalhoun/following{/other_user}", + "gists_url": "https://api.github.com/users/dcalhoun/gists{/gist_id}", + "starred_url": "https://api.github.com/users/dcalhoun/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/dcalhoun/subscriptions", + "organizations_url": "https://api.github.com/users/dcalhoun/orgs", + "repos_url": "https://api.github.com/users/dcalhoun/repos", + "events_url": "https://api.github.com/users/dcalhoun/events{/privacy}", + "received_events_url": "https://api.github.com/users/dcalhoun/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 596962434, + "node_id": "MDU6TGFiZWw1OTY5NjI0MzQ=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Feature]%20Inserter", + "name": "[Feature] Inserter", + "color": "fbca04", + "default": false, + "description": "" + }, + { + "id": 982506020, + "node_id": "MDU6TGFiZWw5ODI1MDYwMjA=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/Mobile%20App%20-%20i.e.%20Android%20or%20iOS", + "name": "Mobile App - i.e. Android or iOS", + "color": "a3ef7a", + "default": false, + "description": "Native mobile impl of the block editor. (Note: used in scripts, ping mobile folks to change)" + }, + { + "id": 1789344476, + "node_id": "MDU6TGFiZWwxNzg5MzQ0NDc2", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Feature", + "name": "[Type] Feature", + "color": "2e8daa", + "default": false, + "description": "New feature to highlight in changelogs." + } + ], + "state": "closed", + "locked": false, + "assignee": { + "login": "dcalhoun", + "id": 438664, + "node_id": "MDQ6VXNlcjQzODY2NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/438664?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/dcalhoun", + "html_url": "https://github.com/dcalhoun", + "followers_url": "https://api.github.com/users/dcalhoun/followers", + "following_url": "https://api.github.com/users/dcalhoun/following{/other_user}", + "gists_url": "https://api.github.com/users/dcalhoun/gists{/gist_id}", + "starred_url": "https://api.github.com/users/dcalhoun/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/dcalhoun/subscriptions", + "organizations_url": "https://api.github.com/users/dcalhoun/orgs", + "repos_url": "https://api.github.com/users/dcalhoun/repos", + "events_url": "https://api.github.com/users/dcalhoun/events{/privacy}", + "received_events_url": "https://api.github.com/users/dcalhoun/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "dcalhoun", + "id": 438664, + "node_id": "MDQ6VXNlcjQzODY2NA==", + "avatar_url": "https://avatars.githubusercontent.com/u/438664?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/dcalhoun", + "html_url": "https://github.com/dcalhoun", + "followers_url": "https://api.github.com/users/dcalhoun/followers", + "following_url": "https://api.github.com/users/dcalhoun/following{/other_user}", + "gists_url": "https://api.github.com/users/dcalhoun/gists{/gist_id}", + "starred_url": "https://api.github.com/users/dcalhoun/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/dcalhoun/subscriptions", + "organizations_url": "https://api.github.com/users/dcalhoun/orgs", + "repos_url": "https://api.github.com/users/dcalhoun/repos", + "events_url": "https://api.github.com/users/dcalhoun/events{/privacy}", + "received_events_url": "https://api.github.com/users/dcalhoun/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 7, + "created_at": "2021-07-01T01:06:56Z", + "updated_at": "2021-08-03T19:31:40Z", + "closed_at": "2021-08-03T19:31:03Z", + "author_association": "MEMBER", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33119", + "html_url": "https://github.com/WordPress/gutenberg/pull/33119", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33119.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33119.patch" + }, + "body": "* **Gutenberg:** Self\r\n* **Gutenberg Mobile:** https://github.com/wordpress-mobile/gutenberg-mobile/pull/3720\r\n* **WPiOS:** https://github.com/wordpress-mobile/WordPress-iOS/pull/16857\r\n* **WPAndroid:** https://github.com/wordpress-mobile/WordPress-Android/pull/15038\r\n\r\n## Description\r\nFixes #30627. Add new block type badge to the native block inserter list. A \"new\" badge is displayed for block types configured as new. The configuration resides in the JavaScript and is provided to the native host app for storage. Once a given block type is inserted, it is no longer considered new. \r\n\r\nhttps://github.com/WordPress/gutenberg/issues/33528 is planned to further improve this feature by having publishing multiple posts also remove the \"new\" badge from block types. That feature is not included in this PR. \r\n\r\n## How has this been tested?\r\n1. Delete previous WP app installations from device. \r\n2. Install WPiOS/WPAndroid build from sibling PRs. \r\n3. Log into account and open the Gutenberg Editor. \r\n4. ℹ️ **Expected:** Block inserter tooltip displayed.<sup>1</sup> \r\n4. Tap + button to open block inserter. \r\n5. ℹ️ **Expected:** Observe a \"new\" badge on the Embed, Search, and Audio blocks. \r\n6. Inserting one of these blocks. \r\n7. Reopen the block inserter. \r\n8. ℹ️ **Expected:** The block inserted no longer has a \"new\" badge. \r\n9. Exit the Gutenberg Editor. \r\n10. Reopen the Gutenberg Editor. \r\n12. ℹ️ **Expected:** Block inserter tooltip not displayed. \r\n11. Open the block inserter. \r\n12. ℹ️ **Expected:** The block inserted still does not have a \"new\" badge, but the other unused block types do have a \"new\" badge. \r\n\r\n[1]: ⚠️ The Editor Onboarding features, including the \"new\" block badge, is only visible for user's within in the \"cohort.\" This consists of 50% of users based upon the user's ID. If the user is not in the cohort, the \"new\" block badge should not show up. \r\n\r\n## Screenshots \r\n| iOS | Android |\r\n| --- | --- |\r\n| ![ios-new-block](https://user-images.githubusercontent.com/438664/128043293-446b3868-7356-4c02-98f3-a92611fd3685.PNG) | ![android-new-block](https://user-images.githubusercontent.com/438664/128042132-111011d9-1e6b-42fc-99aa-9d5439e7b006.jpg) |\r\n| ![ios-new-block-dark](https://user-images.githubusercontent.com/438664/128043346-51be74ff-4dde-4492-b4d2-de96be518e68.PNG) | ![android-new-block-dark](https://user-images.githubusercontent.com/438664/128042089-fa336025-85d8-4fd6-80d4-02948bd08f90.jpg) |\r\n\r\n## Types of changes\r\nNew feature\r\n\r\n## Checklist:\r\n- [x] My code is tested.\r\n- [x] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [x] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [ ] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [x] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [x] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [x] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33086", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33086/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33086/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33086/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33086", + "id": 933440008, + "node_id": "MDExOlB1bGxSZXF1ZXN0NjgwNjQ1Njkx", + "number": 33086, + "title": "Enable rich previews for internal links", + "user": { + "login": "getdave", + "id": 444434, + "node_id": "MDQ6VXNlcjQ0NDQzNA==", + "avatar_url": "https://avatars.githubusercontent.com/u/444434?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/getdave", + "html_url": "https://github.com/getdave", + "followers_url": "https://api.github.com/users/getdave/followers", + "following_url": "https://api.github.com/users/getdave/following{/other_user}", + "gists_url": "https://api.github.com/users/getdave/gists{/gist_id}", + "starred_url": "https://api.github.com/users/getdave/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/getdave/subscriptions", + "organizations_url": "https://api.github.com/users/getdave/orgs", + "repos_url": "https://api.github.com/users/getdave/repos", + "events_url": "https://api.github.com/users/getdave/events{/privacy}", + "received_events_url": "https://api.github.com/users/getdave/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 1838782557, + "node_id": "MDU6TGFiZWwxODM4NzgyNTU3", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Feature]%20Link%20Editing", + "name": "[Feature] Link Editing", + "color": "fbca04", + "default": false, + "description": "Link components (LinkControl, URLInput) and integrations (RichText link formatting)" + } + ], + "state": "closed", + "locked": false, + "assignee": { + "login": "getdave", + "id": 444434, + "node_id": "MDQ6VXNlcjQ0NDQzNA==", + "avatar_url": "https://avatars.githubusercontent.com/u/444434?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/getdave", + "html_url": "https://github.com/getdave", + "followers_url": "https://api.github.com/users/getdave/followers", + "following_url": "https://api.github.com/users/getdave/following{/other_user}", + "gists_url": "https://api.github.com/users/getdave/gists{/gist_id}", + "starred_url": "https://api.github.com/users/getdave/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/getdave/subscriptions", + "organizations_url": "https://api.github.com/users/getdave/orgs", + "repos_url": "https://api.github.com/users/getdave/repos", + "events_url": "https://api.github.com/users/getdave/events{/privacy}", + "received_events_url": "https://api.github.com/users/getdave/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "getdave", + "id": 444434, + "node_id": "MDQ6VXNlcjQ0NDQzNA==", + "avatar_url": "https://avatars.githubusercontent.com/u/444434?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/getdave", + "html_url": "https://github.com/getdave", + "followers_url": "https://api.github.com/users/getdave/followers", + "following_url": "https://api.github.com/users/getdave/following{/other_user}", + "gists_url": "https://api.github.com/users/getdave/gists{/gist_id}", + "starred_url": "https://api.github.com/users/getdave/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/getdave/subscriptions", + "organizations_url": "https://api.github.com/users/getdave/orgs", + "repos_url": "https://api.github.com/users/getdave/repos", + "events_url": "https://api.github.com/users/getdave/events{/privacy}", + "received_events_url": "https://api.github.com/users/getdave/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 3, + "created_at": "2021-06-30T08:29:04Z", + "updated_at": "2021-07-30T10:03:59Z", + "closed_at": "2021-07-30T10:03:32Z", + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33086", + "html_url": "https://github.com/WordPress/gutenberg/pull/33086", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33086.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33086.patch" + }, + "body": "<!-- Learn the overall process and best practices for pull requests at https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/repository-management.md#pull-requests. -->\r\n\r\n<!-- Gutenberg's license is in the process of updating to be dual-licensed under the GPL and MPL. As part of that transition, all new contributions are dual-licensed. For more information, see: https://github.com/WordPress/gutenberg/blob/trunk/LICENSE.md -->\r\n\r\n## Description\r\nThis PR enables rich previews in the link UI for _internal_ links. Currently we have a \"middleman\" method which short-circuits any attempts to fetch rich previews for internal URLs. However based on discussion in https://github.com/WordPress/gutenberg/issues/32689 this is not needed as the only thing that originally made me think those requests did not work was the `wp-env` environment setup.\r\n\r\nCloses https://github.com/WordPress/gutenberg/issues/32689\r\n\r\n## How has this been tested?\r\n\r\n### Testing environment\r\n\r\n⚠️ **Please do not use `wp-env` to test this PR.**\r\n\r\nThe best way to test this is on a site that is accessible to the internet or has a local hosts file mapping to ensure traffic can be routed to it. I recommend MAMP or Local by Flywheel (which is now free!). \r\n\r\nIf you attempt to test this using the default `wp-env` setup on `localhost:8888` then **it will not work**. That's _not_ a failure of the code, it's just a facet of the way WP ENV and Docker work.\r\n\r\nAside: you _could_ use ngrok if using `wp-env` but it's fairly \"involved\".\r\n\r\n### Awareness of caching\r\n\r\nAlso when testing this be aware that there are x2 caches involved:\r\n\r\n* Local in memory cache - will cache a request for a rich preview until you refresh the page.\r\n* Server side transient cache - will cache a request for a given URL for 1hr. You can turn this off by [shortcutting this conditional](https://github.com/WordPress/gutenberg/blob/a125447b6383e0a186e3614fdd886c61f2651a1c/lib/class-wp-rest-url-details-controller.php#L123) to make testing easier.\r\n\r\n### Testing Steps\r\n\r\n* Install the Gutenberg Plugin generated by GitHub action for this PR. You can [follow these steps](https://make.wordpress.org/design/2021/03/03/testing-a-gutenberg-pull-request-pr/) to guide you.\r\n* Ensure your site is **accessible to the internet**.\r\n* Go to the Customizer and set a `Site Icon` under `Site Identity`.\r\n* Create and publish a few Posts/Pages - make sure you assign a featured image and add a title, excerpt and some post content. I used FakerPress Plugin to do this for me.\r\n* Create a _fresh_ Post with some text.\r\n* Create a link to one of the Posts you previously created.\r\n* Click away from the link to close the link UI.\r\n* Click on the same link again to open the rich preview.\r\n* You should see a rich preview of that URL even though it is internal. By default you should see:\r\n - correct page title\r\n - correct site icon\r\n\r\n**Note**: unfortunately out of the box WP doesn't set a meta description or a reference to the canonical image for the page so we cannot reliably retrieve these items to display in the rich preview. @hellofromtonya any idea why this is? Why don't we set these by default?\r\n\r\n### Bonus: testing even richer previews!\r\n\r\nIn order to prove this feature _does_ work if the correct meta data is made available in the page HTML, you can install a SEO Plugin to set these items for you.\r\n\r\n* Try installing ~Yoast SEO~ (don't install Yoast as they [overide the inline link UI](https://github.com/Yoast/wordpress-seo/blob/13c4be0b65b5d7efd7bc87ff211dc063f9879465/packages/js/src/inline-links/inline.js#L259-L264) so they won't get rich previews) **The SEO Framework** Plugin.\r\n* Remember the notes above regarding caches. You will probably want to disable these at this point to ensure you are seeing the latest data rather than a cache.\r\n* Retry the above and see the new previews with more metadata including:\r\n - image of the page\r\n - description of the page.\r\n\r\n\r\n## Screenshots <!-- if applicable -->\r\n\r\n### Out of the box (no SEO Plugin)\r\n\r\nhttps://user-images.githubusercontent.com/444434/127491380-e40c7ef8-cfb4-4641-aa23-d1bc8fa7baa4.mov\r\n\r\n### With SEO Plugin \r\n\r\n\r\nhttps://user-images.githubusercontent.com/444434/127491423-e8a3639c-a8f4-46db-9c64-938793e0d1c4.mp4\r\n\r\n\r\n\r\n\r\n\r\n## Types of changes\r\nNew feature (non-breaking change which adds functionality)\r\n\r\n## Checklist:\r\n- [ ] My code is tested.\r\n- [ ] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [ ] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [ ] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [ ] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [ ] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [ ] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33076", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33076/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33076/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33076/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33076", + "id": 933014755, + "node_id": "MDExOlB1bGxSZXF1ZXN0NjgwMjg3MDQ0", + "number": 33076, + "title": "Template Mode: Add busy state to template creation modal", + "user": { + "login": "Mamaduka", + "id": 240569, + "node_id": "MDQ6VXNlcjI0MDU2OQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/240569?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Mamaduka", + "html_url": "https://github.com/Mamaduka", + "followers_url": "https://api.github.com/users/Mamaduka/followers", + "following_url": "https://api.github.com/users/Mamaduka/following{/other_user}", + "gists_url": "https://api.github.com/users/Mamaduka/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Mamaduka/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Mamaduka/subscriptions", + "organizations_url": "https://api.github.com/users/Mamaduka/orgs", + "repos_url": "https://api.github.com/users/Mamaduka/repos", + "events_url": "https://api.github.com/users/Mamaduka/events{/privacy}", + "received_events_url": "https://api.github.com/users/Mamaduka/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 531680825, + "node_id": "MDU6TGFiZWw1MzE2ODA4MjU=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Enhancement", + "name": "[Type] Enhancement", + "color": "3993a3", + "default": false, + "description": "A suggestion for improvement." + }, + { + "id": 2978205898, + "node_id": "MDU6TGFiZWwyOTc4MjA1ODk4", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Feature]%20Template%20Editing%20Mode", + "name": "[Feature] Template Editing Mode", + "color": "FBCA04", + "default": false, + "description": "" + } + ], + "state": "closed", + "locked": false, + "assignee": { + "login": "Mamaduka", + "id": 240569, + "node_id": "MDQ6VXNlcjI0MDU2OQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/240569?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Mamaduka", + "html_url": "https://github.com/Mamaduka", + "followers_url": "https://api.github.com/users/Mamaduka/followers", + "following_url": "https://api.github.com/users/Mamaduka/following{/other_user}", + "gists_url": "https://api.github.com/users/Mamaduka/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Mamaduka/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Mamaduka/subscriptions", + "organizations_url": "https://api.github.com/users/Mamaduka/orgs", + "repos_url": "https://api.github.com/users/Mamaduka/repos", + "events_url": "https://api.github.com/users/Mamaduka/events{/privacy}", + "received_events_url": "https://api.github.com/users/Mamaduka/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "Mamaduka", + "id": 240569, + "node_id": "MDQ6VXNlcjI0MDU2OQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/240569?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Mamaduka", + "html_url": "https://github.com/Mamaduka", + "followers_url": "https://api.github.com/users/Mamaduka/followers", + "following_url": "https://api.github.com/users/Mamaduka/following{/other_user}", + "gists_url": "https://api.github.com/users/Mamaduka/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Mamaduka/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Mamaduka/subscriptions", + "organizations_url": "https://api.github.com/users/Mamaduka/orgs", + "repos_url": "https://api.github.com/users/Mamaduka/repos", + "events_url": "https://api.github.com/users/Mamaduka/events{/privacy}", + "received_events_url": "https://api.github.com/users/Mamaduka/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 5, + "created_at": "2021-06-29T18:53:51Z", + "updated_at": "2021-08-12T08:12:44Z", + "closed_at": "2021-08-11T13:12:10Z", + "author_association": "MEMBER", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33076", + "html_url": "https://github.com/WordPress/gutenberg/pull/33076", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33076.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33076.patch" + }, + "body": "## Description\r\nAdds busy state to the \"Create custom template\" modal — part of #32813.\r\n\r\nWhile this improves UX, it's not much. \r\n\r\nThe \"Edit\" template action is much faster, even when using network throttling. I think bottleneck here might be `getEditedPostTemplate()`. The selector has to re-fetch all the templates and find the new one by slug.\r\n\r\nhttps://github.com/WordPress/gutenberg/blob/a125447b6383e0a186e3614fdd886c61f2651a1c/packages/edit-post/src/editor.js#L98-L101\r\n\r\n## How has this been tested?\r\n1. Enable TT1 Blocks theme.\r\n2. Create page.\r\n3. Throttle network to 3G via DevTools.\r\n4. Create a new template.\r\n5. Name input filed should be disabled.\r\n6. Create button should have a busy state.\r\n\r\n## Screenshots <!-- if applicable -->\r\n\r\nhttps://user-images.githubusercontent.com/240569/123904119-01415700-d981-11eb-8074-1e10100c0f7a.mp4\r\n\r\n## Types of changes\r\nNew feature\r\n\r\n## Checklist:\r\n- [x] My code is tested.\r\n- [x] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [x] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [ ] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [x] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [x] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [x] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33057", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33057/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33057/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33057/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33057", + "id": 932056398, + "node_id": "MDExOlB1bGxSZXF1ZXN0Njc5NDU4NTIz", + "number": 33057, + "title": "[RNMobile] Prevent \"Undo Level\" after Setting Featured Image via Image Block", + "user": { + "login": "SiobhyB", + "id": 2998162, + "node_id": "MDQ6VXNlcjI5OTgxNjI=", + "avatar_url": "https://avatars.githubusercontent.com/u/2998162?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/SiobhyB", + "html_url": "https://github.com/SiobhyB", + "followers_url": "https://api.github.com/users/SiobhyB/followers", + "following_url": "https://api.github.com/users/SiobhyB/following{/other_user}", + "gists_url": "https://api.github.com/users/SiobhyB/gists{/gist_id}", + "starred_url": "https://api.github.com/users/SiobhyB/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/SiobhyB/subscriptions", + "organizations_url": "https://api.github.com/users/SiobhyB/orgs", + "repos_url": "https://api.github.com/users/SiobhyB/repos", + "events_url": "https://api.github.com/users/SiobhyB/events{/privacy}", + "received_events_url": "https://api.github.com/users/SiobhyB/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 531680823, + "node_id": "MDU6TGFiZWw1MzE2ODA4MjM=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Bug", + "name": "[Type] Bug", + "color": "d93f0b", + "default": false, + "description": "An existing feature is broken." + }, + { + "id": 982506020, + "node_id": "MDU6TGFiZWw5ODI1MDYwMjA=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/Mobile%20App%20-%20i.e.%20Android%20or%20iOS", + "name": "Mobile App - i.e. Android or iOS", + "color": "a3ef7a", + "default": false, + "description": "Native mobile impl of the block editor. (Note: used in scripts, ping mobile folks to change)" + }, + { + "id": 1022744205, + "node_id": "MDU6TGFiZWwxMDIyNzQ0MjA1", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Package]%20Block%20library", + "name": "[Package] Block library", + "color": "ed2572", + "default": false, + "description": "/packages/block-library" + }, + { + "id": 1101518360, + "node_id": "MDU6TGFiZWwxMTAxNTE4MzYw", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Block]%20Image", + "name": "[Block] Image", + "color": "6767e5", + "default": false, + "description": "" + }, + { + "id": 1141559759, + "node_id": "MDU6TGFiZWwxMTQxNTU5NzU5", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Feature]%20History", + "name": "[Feature] History", + "color": "fbca04", + "default": false, + "description": "History, undo, redo, revisions, autosave." + } + ], + "state": "closed", + "locked": false, + "assignee": { + "login": "SiobhyB", + "id": 2998162, + "node_id": "MDQ6VXNlcjI5OTgxNjI=", + "avatar_url": "https://avatars.githubusercontent.com/u/2998162?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/SiobhyB", + "html_url": "https://github.com/SiobhyB", + "followers_url": "https://api.github.com/users/SiobhyB/followers", + "following_url": "https://api.github.com/users/SiobhyB/following{/other_user}", + "gists_url": "https://api.github.com/users/SiobhyB/gists{/gist_id}", + "starred_url": "https://api.github.com/users/SiobhyB/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/SiobhyB/subscriptions", + "organizations_url": "https://api.github.com/users/SiobhyB/orgs", + "repos_url": "https://api.github.com/users/SiobhyB/repos", + "events_url": "https://api.github.com/users/SiobhyB/events{/privacy}", + "received_events_url": "https://api.github.com/users/SiobhyB/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "SiobhyB", + "id": 2998162, + "node_id": "MDQ6VXNlcjI5OTgxNjI=", + "avatar_url": "https://avatars.githubusercontent.com/u/2998162?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/SiobhyB", + "html_url": "https://github.com/SiobhyB", + "followers_url": "https://api.github.com/users/SiobhyB/followers", + "following_url": "https://api.github.com/users/SiobhyB/following{/other_user}", + "gists_url": "https://api.github.com/users/SiobhyB/gists{/gist_id}", + "starred_url": "https://api.github.com/users/SiobhyB/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/SiobhyB/subscriptions", + "organizations_url": "https://api.github.com/users/SiobhyB/orgs", + "repos_url": "https://api.github.com/users/SiobhyB/repos", + "events_url": "https://api.github.com/users/SiobhyB/events{/privacy}", + "received_events_url": "https://api.github.com/users/SiobhyB/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 24, + "created_at": "2021-06-28T22:57:48Z", + "updated_at": "2021-08-09T13:14:07Z", + "closed_at": "2021-08-09T13:13:40Z", + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33057", + "html_url": "https://github.com/WordPress/gutenberg/pull/33057", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33057.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33057.patch" + }, + "body": "This PR is intended as a temporary workaround for https://github.com/WordPress/gutenberg/issues/32937\r\n\r\n`gutenberg-mobile`: https://github.com/wordpress-mobile/gutenberg-mobile/pull/3682\r\n\r\n## Description\r\n\r\nAs outlined in https://github.com/WordPress/gutenberg/issues/32937, the undo/redo functionality doesn't work as expected after setting a featured image via the image block.\r\n\r\nAfter setting a featured image via the block and then tapping undo, it appears as though the action has successfully reverted, as the **Featured** banner is removed from the block. However, the image still remains as the post's featured image.\r\n\r\nWith this PR, the issue is worked around by preventing an \"undo level\" from being created after a featured image is set via the image block. Tapping **undo** or **redo** immediately after setting a featured image via the image block should no longer have any effect.\r\n\r\nNote, this PR doesn't solve the original issue. In fact, it will introduce a new UX issue, since the undo/redo buttons won’t work as the user would expect i.e. an undo will revert changes they made just before setting a featured image, rather than the featured setting, and may be confusing. However, this inconvenience should be considered preferable to the current experience in production, where changes to the featured image via the image block are not saved, despite the UI indicating the undo is successful. \r\n\r\nThe **Future Considerations** section of this PR can be referred to for further hopes/considerations for any future iterations.\r\n\r\n## How has this been tested?\r\n\r\n* In the app, navigate to _Home_ → _Blog Posts_ to create a new blog post, one which doesn't already have a featured image set.\r\n* Add a new image block and upload an image to it.\r\n* Tap the image block's cog/gear icon to access its settings and then tap the **Set as Featured** button at the bottom.\r\n* Verify that you see a confirmation message about the newly set featured image and that the block now has a **Featured** banner overlaying it.\r\n* Tap the **undo** button in the app's toolbar.\r\n* With this PR, tapping undo should have _no effect_ on the post's featured image. Verify that tapping **undo** or **redo** _doesn't_ change the featured image by observing whether there are any changes to the **Featured** banner and verifying that the image remains the same via _Post Settings_.\r\n\r\n## Screenshots <!-- if applicable -->\r\n\r\nThe following screenshots show the before and after footer in the image settings, with the updated footer noting that the undo/redo buttons won't work as expected for users:\r\n\r\n| Before | After |\r\n| ------------- | ------------- |\r\n| <img src=\"https://user-images.githubusercontent.com/2998162/113282237-8fecfc00-92de-11eb-9618-3f84c10e1720.png\" width=\"100%\"> | <img src=\"https://user-images.githubusercontent.com/2998162/128494892-5a44daa7-a097-445d-8beb-d86a0c6671c0.png\" width=\"100%\"> |\r\n\r\n## Types of changes\r\n\r\nThis PR introduces a bug fix (a non-breaking change that fixes an issue), with the following main changes to the code:\r\n\r\n* [A call to `editEntityRecord` is currently triggered](https://github.com/WordPress/gutenberg/pull/33057/files#diff-d45b169f7a1824d1f08790b97680e012bb30be66ed5714994a3959ba23cdee94R96) whenever a request to change the featured image is received from the apps (i.e. when the `Set/Remove as Featured` button is tapped from the image block). That action creator [includes an `undoIgnore` parameter](https://developer.wordpress.org/block-editor/reference-guides/data/data-core/#editEntityRecord) that makes it possible to ignore an edit in the undo history. For our purposes, that parameter is set to true so that a new undo level *isn't* created after the featured image is updated via the app.\r\n* Additional text has also been added to the bottom of the image block's settings. [The additional text](https://github.com/WordPress/gutenberg/pull/33057/files#diff-7126ae03000a022bcefa0d2a5fb03b6aca56ed4047e3a49d2131babf229cf6c1R568) reads as follows: `Changes to featured image will not be affected by the undo/redo buttons `\r\n\r\n## Future Considerations\r\n\r\nAs a more permanent fix for the original problem, the team discussed adding side effects to the undo/redo buttons, however, this deviates a lot from existing patterns in Gutenberg and is something we decided against pursuing.\r\n\r\nThe ideal fix would involve completely refactoring the existing data flow so that Gutenberg’s store is the primary location that the apps read from. A refactor would involve the following non-trivial changes:\r\n\r\n* Refactoring the _Post Settings_ flow will require changes in the Android and iOS codebases, with careful testing to account for all the unknowns. There’s also the possibility of this raising a wider architectural debate around the _Post Settings_ panel in the apps, potentially including redesigning the whole user flow.\r\n* The logic around a confirmation dialog currently exists on the native side of each app ([here](https://github.com/wordpress-mobile/WordPress-Android/blob/develop/libs/editor/WordPressEditor/src/main/java/org/wordpress/android/editor/gutenberg/GutenbergEditorFragment.java#L820) for Android and [here](https://href.li/?https://github.com/wordpress-mobile/WordPress-iOS/pull/16427/files#diff-beacfffc3f8a87edf94895da980a81e356f1b5aa7998f70791bc7baec9a11731R695) for iOS). This will need to be refactored so that it lives on the JS side. Again, this would be a desirable endpoint that would actually aid in implementing [this enhancement](https://github.com/WordPress/gutenberg/issues/30410). It has also been suggested that the confirmation dialog could be removed completely, which would be an interesting idea to explore with the design team.\r\n\r\n## Checklist:\r\n- [x] My code is tested.\r\n- [x] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [x] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [x] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [x] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [x] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [x] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/33021", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33021/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33021/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/33021/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/33021", + "id": 931251741, + "node_id": "MDExOlB1bGxSZXF1ZXN0Njc4Nzc0OTI4", + "number": 33021, + "title": "Fix navigation margin collapsing.", + "user": { + "login": "jasmussen", + "id": 1204802, + "node_id": "MDQ6VXNlcjEyMDQ4MDI=", + "avatar_url": "https://avatars.githubusercontent.com/u/1204802?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jasmussen", + "html_url": "https://github.com/jasmussen", + "followers_url": "https://api.github.com/users/jasmussen/followers", + "following_url": "https://api.github.com/users/jasmussen/following{/other_user}", + "gists_url": "https://api.github.com/users/jasmussen/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jasmussen/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jasmussen/subscriptions", + "organizations_url": "https://api.github.com/users/jasmussen/orgs", + "repos_url": "https://api.github.com/users/jasmussen/repos", + "events_url": "https://api.github.com/users/jasmussen/events{/privacy}", + "received_events_url": "https://api.github.com/users/jasmussen/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 1105588141, + "node_id": "MDU6TGFiZWwxMTA1NTg4MTQx", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Block]%20Columns", + "name": "[Block] Columns", + "color": "6767e5", + "default": false, + "description": "" + }, + { + "id": 1225853227, + "node_id": "MDU6TGFiZWwxMjI1ODUzMjI3", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Block]%20Navigation", + "name": "[Block] Navigation", + "color": "6767e5", + "default": false, + "description": "" + } + ], + "state": "closed", + "locked": false, + "assignee": { + "login": "jasmussen", + "id": 1204802, + "node_id": "MDQ6VXNlcjEyMDQ4MDI=", + "avatar_url": "https://avatars.githubusercontent.com/u/1204802?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jasmussen", + "html_url": "https://github.com/jasmussen", + "followers_url": "https://api.github.com/users/jasmussen/followers", + "following_url": "https://api.github.com/users/jasmussen/following{/other_user}", + "gists_url": "https://api.github.com/users/jasmussen/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jasmussen/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jasmussen/subscriptions", + "organizations_url": "https://api.github.com/users/jasmussen/orgs", + "repos_url": "https://api.github.com/users/jasmussen/repos", + "events_url": "https://api.github.com/users/jasmussen/events{/privacy}", + "received_events_url": "https://api.github.com/users/jasmussen/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "jasmussen", + "id": 1204802, + "node_id": "MDQ6VXNlcjEyMDQ4MDI=", + "avatar_url": "https://avatars.githubusercontent.com/u/1204802?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jasmussen", + "html_url": "https://github.com/jasmussen", + "followers_url": "https://api.github.com/users/jasmussen/followers", + "following_url": "https://api.github.com/users/jasmussen/following{/other_user}", + "gists_url": "https://api.github.com/users/jasmussen/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jasmussen/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jasmussen/subscriptions", + "organizations_url": "https://api.github.com/users/jasmussen/orgs", + "repos_url": "https://api.github.com/users/jasmussen/repos", + "events_url": "https://api.github.com/users/jasmussen/events{/privacy}", + "received_events_url": "https://api.github.com/users/jasmussen/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 2, + "created_at": "2021-06-28T07:15:15Z", + "updated_at": "2021-08-10T10:46:43Z", + "closed_at": "2021-08-10T10:46:21Z", + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/33021", + "html_url": "https://github.com/WordPress/gutenberg/pull/33021", + "diff_url": "https://github.com/WordPress/gutenberg/pull/33021.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/33021.patch" + }, + "body": "## Description\r\n\r\nFixes #33002, but is blocked on #32659 landing first.\r\n\r\nWhen the navigation block is used inside a columns block, menu items collapse like so:\r\n\r\n<img width=\"821\" alt=\"Screenshot 2021-06-28 at 08 50 49\" src=\"https://user-images.githubusercontent.com/1204802/123593933-58afbd80-d7ef-11eb-9070-6695ebe1443f.png\">\r\n\r\nThis is because navigation menu items have low specificity margins and paddings, and those paddings are overridden by some classic styles we have in place. Observe:\r\n\r\n![issue](https://user-images.githubusercontent.com/1204802/123594207-b9d79100-d7ef-11eb-9901-15ef72d3ab81.gif)\r\n\r\nThese styles specifically:\r\n\r\n<img width=\"398\" alt=\"Screenshot 2021-06-28 at 08 52 16\" src=\"https://user-images.githubusercontent.com/1204802/123594244-c22fcc00-d7ef-11eb-897b-6e6fdb27acce.png\">\r\n\r\nThose styles exist to unset the auto margins classic themes use to center in the main column, and since they have high specificity, they win this battle.\r\n\r\nIn #32659, `:where` is introduced to lower the specificity of the two \"reset\" stylesheets we have. The behavior is best demonstrated in [this codepen](https://codepen.io/joen/pen/abJVrGX), but it can be described as lowering the specificity to a \"use these styles if nothing else styles it\", which makes it a great tool to provide default styles or baseline styles. This PR does the same for this rule, fixing the problem:\r\n\r\n<img width=\"805\" alt=\"Screenshot 2021-06-28 at 08 59 06\" src=\"https://user-images.githubusercontent.com/1204802/123594860-7d586500-d7f0-11eb-967e-c7fef916f2e2.png\">\r\n\r\nNote that this PR alone will only fix the issue for block themes. In order for the problem to also be fixed for classic themes, the specificity of the resets will also need to be reduced, or _they_ will take precedence. So #32659 will need to land as well. \r\n\r\n**Why not just increase specificity?**\r\n\r\nThis has been our go-to so far, but as more and more properties are absorbed by global styles, this strategy won't work. For global styles to be able to affect paddings and margins of blocks, those block need to have minimal specificity or the global styles won't work at all. See also #32574.\r\n\r\n\r\n## How has this been tested?\r\n\r\nInsert two navigation blocks, one of them inside a column. Both navigation blocks should have the same margin between them.\r\n\r\n## Checklist:\r\n- [x] My code is tested.\r\n- [x] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [x] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [x] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [x] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [x] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [ ] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/32659", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/32659/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/32659/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/32659/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/32659", + "id": 920292495, + "node_id": "MDExOlB1bGxSZXF1ZXN0NjY5NDYzNDEx", + "number": 32659, + "title": "Try: Reduce specificity of reset & classic styles.", + "user": { + "login": "jasmussen", + "id": 1204802, + "node_id": "MDQ6VXNlcjEyMDQ4MDI=", + "avatar_url": "https://avatars.githubusercontent.com/u/1204802?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jasmussen", + "html_url": "https://github.com/jasmussen", + "followers_url": "https://api.github.com/users/jasmussen/followers", + "following_url": "https://api.github.com/users/jasmussen/following{/other_user}", + "gists_url": "https://api.github.com/users/jasmussen/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jasmussen/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jasmussen/subscriptions", + "organizations_url": "https://api.github.com/users/jasmussen/orgs", + "repos_url": "https://api.github.com/users/jasmussen/repos", + "events_url": "https://api.github.com/users/jasmussen/events{/privacy}", + "received_events_url": "https://api.github.com/users/jasmussen/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 1999059055, + "node_id": "MDU6TGFiZWwxOTk5MDU5MDU1", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/CSS%20Styling", + "name": "CSS Styling", + "color": "63e2d2", + "default": false, + "description": "Related to editor and front end styles, CSS-specific issues." + } + ], + "state": "closed", + "locked": false, + "assignee": { + "login": "jasmussen", + "id": 1204802, + "node_id": "MDQ6VXNlcjEyMDQ4MDI=", + "avatar_url": "https://avatars.githubusercontent.com/u/1204802?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jasmussen", + "html_url": "https://github.com/jasmussen", + "followers_url": "https://api.github.com/users/jasmussen/followers", + "following_url": "https://api.github.com/users/jasmussen/following{/other_user}", + "gists_url": "https://api.github.com/users/jasmussen/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jasmussen/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jasmussen/subscriptions", + "organizations_url": "https://api.github.com/users/jasmussen/orgs", + "repos_url": "https://api.github.com/users/jasmussen/repos", + "events_url": "https://api.github.com/users/jasmussen/events{/privacy}", + "received_events_url": "https://api.github.com/users/jasmussen/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "jasmussen", + "id": 1204802, + "node_id": "MDQ6VXNlcjEyMDQ4MDI=", + "avatar_url": "https://avatars.githubusercontent.com/u/1204802?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jasmussen", + "html_url": "https://github.com/jasmussen", + "followers_url": "https://api.github.com/users/jasmussen/followers", + "following_url": "https://api.github.com/users/jasmussen/following{/other_user}", + "gists_url": "https://api.github.com/users/jasmussen/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jasmussen/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jasmussen/subscriptions", + "organizations_url": "https://api.github.com/users/jasmussen/orgs", + "repos_url": "https://api.github.com/users/jasmussen/repos", + "events_url": "https://api.github.com/users/jasmussen/events{/privacy}", + "received_events_url": "https://api.github.com/users/jasmussen/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 35, + "created_at": "2021-06-14T10:55:33Z", + "updated_at": "2021-08-09T07:00:20Z", + "closed_at": "2021-08-09T06:59:54Z", + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/32659", + "html_url": "https://github.com/WordPress/gutenberg/pull/32659", + "diff_url": "https://github.com/WordPress/gutenberg/pull/32659.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/32659.patch" + }, + "body": "## Description\r\n\r\nWe have two stylesheets that are created to normalize the editing canvas: `reset.scss` and `classic.scss`.\r\n\r\n- The first one exists because the editing canvas in the post editor is not inside an iframe, so it is subject to CSS bleed from wp-admin and other styles. The reset unsets a number of element styles to provide a blank canvas to build theme styles on.\r\n- The other one, `classic.scss` is loaded for classic themes, and primarily serves to provide left/right/wide/full-wide alignment styles. Block themes do not need these, as those alignments are served by a `layout` property and handled by the system.\r\n\r\nIn both cases, while the styles are necessary, they should have as low specificity as is possible. The lower the specificity, the easier it is for a theme to style things in a nice way. \r\n\r\nThere is a new selector, called `:where`, which is able to provide default styles with lowered specificity. Some of the details on how that works are outlined in [this article](https://css-tricks.com/almanac/selectors/w/where/), but you can also check out [this codepen for an example](https://codepen.io/joen/pen/abJVrGX). That selector is theoretically ideal for these resets, because it allows us to reduce the specificity quite a bit, letting both theme and block styles win any specificity fight they get into. In this PR, I tried employing that selector for those resets. \r\n\r\nOverall, it worked very well, especially for the reset which just feels perfect. Here's before and after using \"empty theme\" — and they should look identical, only with the new version having lower specificity:\r\n\r\n<img width=\"932\" alt=\"Screenshot 2021-06-14 at 12 39 12\" src=\"https://user-images.githubusercontent.com/1204802/121880710-9e0fbd80-cd0e-11eb-85e0-c14fc7e20837.png\">\r\n\r\nAfter:\r\n\r\n<img width=\"947\" alt=\"Screenshot 2021-06-14 at 12 40 05\" src=\"https://user-images.githubusercontent.com/1204802/121880715-a0721780-cd0e-11eb-81b5-421897181e96.png\">\r\n\r\nFor other themes, here I tested TT1, it solved [this problem](https://github.com/WordPress/gutenberg/pull/32574#pullrequestreview-682298435) surfaced by @carolinan, where `margin-left: auto; margin-right: auto;` overrides the default navigation item margin, causing them to collapse. Before:\r\n\r\n<img width=\"885\" alt=\"beftt1\" src=\"https://user-images.githubusercontent.com/1204802/121880874-d0b9b600-cd0e-11eb-9a37-4836c3d2d22e.png\">\r\n\r\n(don't mind the padding, that's a separate issue)\r\n\r\nAfter:\r\n\r\n<img width=\"832\" alt=\"afttt1\" src=\"https://user-images.githubusercontent.com/1204802/121880915-db744b00-cd0e-11eb-9d7a-3b3f868c4229.png\">\r\n\r\n_In these screenshots, the navigation menu is justified right_.\r\n\r\nThe primary \"gotcha\" I encountered is that themes commonly apply a `margin-left: 0;` on `ol` and `ul` elements, which seems an innocent and sensible change over the defaults. The problem is that for classic themes, the `margin-left: auto; margin-right: auto;` rules exist (along with a `max-width`) to center a _block_ inside a post content column that supports wide and fullwide images. When left margins are zeroed out, it effectively means a left-aligned list block. In trunk, the auto-margins win due to their intrinsic specificity. But with the lowered specificity of this branch, the zero margin now wins. \r\n\r\nFor that reason, I included [a targeted](https://github.com/WordPress/gutenberg/compare/try/reduced-specificity-resets?expand=1#diff-5763ee427967f4474bd5a1cd169547cd483a1955b2b705e8c61b898da999f5cbR11) rule for `ol` and `ul` elements, to keep their specificity. It's not an inclusion I love, but it feels necessary as the change feels very common. What do you think?\r\n\r\n## How has this been tested?\r\n\r\n- Please test a variety of blocks and content in this branch. The demo content is good, but please at least include a justified-right navigation block, an image, and a list block. \r\n- Please test wide and fullwide blocks.\r\n- Please test primarily in classic themes like TT1 or older.\r\n- Please also test Empty Theme and verify that before and after are identical.\r\n\r\n## Checklist:\r\n- [x] My code is tested.\r\n- [x] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [x] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [x] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [x] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [x] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [ ] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/32392", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/32392/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/32392/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/32392/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/32392", + "id": 909265961, + "node_id": "MDExOlB1bGxSZXF1ZXN0NjU5ODY1MDk0", + "number": 32392, + "title": "Dimensions Panel: Add new ToolsPanel component and update spacing supports", + "user": { + "login": "aaronrobertshaw", + "id": 60436221, + "node_id": "MDQ6VXNlcjYwNDM2MjIx", + "avatar_url": "https://avatars.githubusercontent.com/u/60436221?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/aaronrobertshaw", + "html_url": "https://github.com/aaronrobertshaw", + "followers_url": "https://api.github.com/users/aaronrobertshaw/followers", + "following_url": "https://api.github.com/users/aaronrobertshaw/following{/other_user}", + "gists_url": "https://api.github.com/users/aaronrobertshaw/gists{/gist_id}", + "starred_url": "https://api.github.com/users/aaronrobertshaw/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/aaronrobertshaw/subscriptions", + "organizations_url": "https://api.github.com/users/aaronrobertshaw/orgs", + "repos_url": "https://api.github.com/users/aaronrobertshaw/repos", + "events_url": "https://api.github.com/users/aaronrobertshaw/events{/privacy}", + "received_events_url": "https://api.github.com/users/aaronrobertshaw/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 531680825, + "node_id": "MDU6TGFiZWw1MzE2ODA4MjU=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Enhancement", + "name": "[Type] Enhancement", + "color": "3993a3", + "default": false, + "description": "A suggestion for improvement." + }, + { + "id": 546156315, + "node_id": "MDU6TGFiZWw1NDYxNTYzMTU=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Feature]%20Block%20API", + "name": "[Feature] Block API", + "color": "fbca04", + "default": false, + "description": "" + }, + { + "id": 1800807983, + "node_id": "MDU6TGFiZWwxODAwODA3OTgz", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/Global%20Styles", + "name": "Global Styles", + "color": "2100b7", + "default": false, + "description": "" + }, + { + "id": 1894493554, + "node_id": "MDU6TGFiZWwxODk0NDkzNTU0", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Feature]%20Design%20Tools", + "name": "[Feature] Design Tools", + "color": "f7f771", + "default": false, + "description": "Tools that manipulate visual aspects of blocks." + } + ], + "state": "closed", + "locked": false, + "assignee": { + "login": "aaronrobertshaw", + "id": 60436221, + "node_id": "MDQ6VXNlcjYwNDM2MjIx", + "avatar_url": "https://avatars.githubusercontent.com/u/60436221?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/aaronrobertshaw", + "html_url": "https://github.com/aaronrobertshaw", + "followers_url": "https://api.github.com/users/aaronrobertshaw/followers", + "following_url": "https://api.github.com/users/aaronrobertshaw/following{/other_user}", + "gists_url": "https://api.github.com/users/aaronrobertshaw/gists{/gist_id}", + "starred_url": "https://api.github.com/users/aaronrobertshaw/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/aaronrobertshaw/subscriptions", + "organizations_url": "https://api.github.com/users/aaronrobertshaw/orgs", + "repos_url": "https://api.github.com/users/aaronrobertshaw/repos", + "events_url": "https://api.github.com/users/aaronrobertshaw/events{/privacy}", + "received_events_url": "https://api.github.com/users/aaronrobertshaw/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "aaronrobertshaw", + "id": 60436221, + "node_id": "MDQ6VXNlcjYwNDM2MjIx", + "avatar_url": "https://avatars.githubusercontent.com/u/60436221?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/aaronrobertshaw", + "html_url": "https://github.com/aaronrobertshaw", + "followers_url": "https://api.github.com/users/aaronrobertshaw/followers", + "following_url": "https://api.github.com/users/aaronrobertshaw/following{/other_user}", + "gists_url": "https://api.github.com/users/aaronrobertshaw/gists{/gist_id}", + "starred_url": "https://api.github.com/users/aaronrobertshaw/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/aaronrobertshaw/subscriptions", + "organizations_url": "https://api.github.com/users/aaronrobertshaw/orgs", + "repos_url": "https://api.github.com/users/aaronrobertshaw/repos", + "events_url": "https://api.github.com/users/aaronrobertshaw/events{/privacy}", + "received_events_url": "https://api.github.com/users/aaronrobertshaw/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 58, + "created_at": "2021-06-02T09:02:27Z", + "updated_at": "2021-08-12T15:13:34Z", + "closed_at": "2021-08-10T23:44:00Z", + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/32392", + "html_url": "https://github.com/WordPress/gutenberg/pull/32392", + "diff_url": "https://github.com/WordPress/gutenberg/pull/32392.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/32392.patch" + }, + "body": "Part of: https://github.com/WordPress/gutenberg/issues/28356\r\n\r\n## Description\r\n\r\n- Adds new `ToolsPanel` components\r\n- Uses the new components to refactor spacing block supports into a \"Dimensions\" panel.\r\n\r\nThe new panel component offers progressive discovery options for `ToolsPanelItem` wrapped components e.g. those provided through block supports. \r\n\r\nIt uses callbacks passed as props on the panel's children to check for values, handle child selection/deselection in the menu etc. In the case of block support controls, the `onDeselect` callback can reset the block attribute value. \r\n\r\nThe `ToolsPanel` automatically generates its menu from children that register themselves via the panel's context. The initial state managing which controls are displayed and therefore selected in the menu is based off the `hasValue` callback and an `isShownByDefault` prop.\r\n\r\nA custom `resetAll` callback is passed to the panel and called when the associated menu item is selected. For the a panel displaying block support controls such as the dimensions panel, the `resetAll` callback will reset all block attributes for the dimensions related support. \r\n\r\n#### G2 Components\r\nThe [demo typography panel](https://g2-components.xyz/?path=/story/designtools-presentation-typographypanel--default) from the G2 project still needs a few underlying components and systems to be imported into Gutenberg. The approach in this PR works now and may unblock other block supports work.\r\n\r\nNew designs/G2 components for the individual block support controls can be iterated on separately.\r\n\r\n## How has this been tested?\r\nProgrammatic tests are available for the new panel: \r\n- `npm run test-unit packages/components/src/tools-panel/test/`\r\n\r\nStorybook: \r\n- `npm run storybook:dev`\r\n- http://localhost:50240/?path=/story/components-toolspanel--default\r\n\r\nManual testing is required for the updates switching the spacing block support UI to the new panel and \"Dimensions\" naming.\r\n\r\n#### Testing Setup\r\n\r\nThe easiest block to test with is the group block. \r\n\r\n1. Turn on `settings.spacing.customMargin` under your theme.json file.\r\n2. Update the group block's `block.json` and turn on margin support under `supports.spacing`.\r\n3. Add new `__experimentalDefaultControls` flag under `settings.spacing` in block.json to specify which block support controls are displayed by default.\r\n\r\nThe example below configures only the padding control to show by default.\r\n```json\r\n\t\t\"spacing\": {\r\n\t\t\t\"margin\": true,\r\n\t\t\t\"padding\": true,\r\n\t\t\t\"__experimentalDefaultControls\": {\r\n\t\t\t\t\"padding\": true\r\n\t\t\t}\r\n\t\t},\r\n```\r\n\r\n#### Testing Instructions\r\n\r\nThe following instructions assume the padding control was enabled by default as per the snippet above.\r\n\r\n1. Edit a post, add a group block and select it\r\n2. Confirm there is a new \"Dimensions\" panel in the sidebar in place of the old \"Spacing\" panel\r\n3. Ensure the padding control is already displayed in the Dimensions panel\r\n4. Select margin control for display via the \"Dimensions\" panel's \"more\" menu\r\n5. Adjust padding and margin, confirming they update the block appropriately\r\n6. Open the more menu and toggle off the padding control\r\n7. Confirm the padding control is no longer shown\r\n8. Open the more menu once more and toggle off the margin control\r\n9. The margin control should be removed as well\r\n10. Toggle both controls back on and confirm they've been reset\r\n11. Adjust both padding and margin values, then select the \"reset all\" option from the more menu\r\n12. Confirm only the padding control is displayed but has been cleared\r\n13. Toggling margin back on and adjust both values again, then save\r\n14. Confirm margin and padding are displayed correctly on the frontend\r\n15. Reload the editor and confirm that the \"Dimensions\" panel has both fields displayed\r\n16. Choose the \"Reset all\" option from the panel menu again and save\r\n17. Reload both the editor and frontend checking the padding and margin were cleared\r\n18. Open the full site editor, open the Global Styles sidebar, then the \"By block type\" tab\r\n19. Expand the Group block's panel and confirm the \"Dimensions\" panel is present with both margin and padding shown by default. \r\n\r\n## Screenshots <!-- if applicable -->\r\n#### With Default Controls\r\n<img src=\"https://user-images.githubusercontent.com/60436221/120792288-9e72c080-c578-11eb-81ff-1d165e21f185.gif\" width=\"300\" />\r\n\r\n#### Without Default Controls\r\n<img src=\"https://user-images.githubusercontent.com/60436221/120450642-fe7c3200-c3d3-11eb-9f61-a578999f84c2.gif\" width=\"500\"/>\r\n\r\n\r\n## Types of changes\r\nNew feature.\r\n\r\n## Checklist:\r\n- [x] My code is tested.\r\n- [x] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [x] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [x] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [x] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [x] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [x] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/31774", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/31774/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/31774/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/31774/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/31774", + "id": 890567655, + "node_id": "MDExOlB1bGxSZXF1ZXN0NjQzNTcwNzYw", + "number": 31774, + "title": "[Button Block]: Add padding block support", + "user": { + "login": "stacimc", + "id": 63313398, + "node_id": "MDQ6VXNlcjYzMzEzMzk4", + "avatar_url": "https://avatars.githubusercontent.com/u/63313398?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/stacimc", + "html_url": "https://github.com/stacimc", + "followers_url": "https://api.github.com/users/stacimc/followers", + "following_url": "https://api.github.com/users/stacimc/following{/other_user}", + "gists_url": "https://api.github.com/users/stacimc/gists{/gist_id}", + "starred_url": "https://api.github.com/users/stacimc/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/stacimc/subscriptions", + "organizations_url": "https://api.github.com/users/stacimc/orgs", + "repos_url": "https://api.github.com/users/stacimc/repos", + "events_url": "https://api.github.com/users/stacimc/events{/privacy}", + "received_events_url": "https://api.github.com/users/stacimc/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 1112969457, + "node_id": "MDU6TGFiZWwxMTEyOTY5NDU3", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Block]%20Buttons", + "name": "[Block] Buttons", + "color": "6767e5", + "default": false, + "description": "" + } + ], + "state": "closed", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 11, + "created_at": "2021-05-12T23:38:47Z", + "updated_at": "2021-08-02T06:34:50Z", + "closed_at": "2021-07-29T01:55:06Z", + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/31774", + "html_url": "https://github.com/WordPress/gutenberg/pull/31774", + "diff_url": "https://github.com/WordPress/gutenberg/pull/31774.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/31774.patch" + }, + "body": "<!-- Learn the overall process and best practices for pull requests at https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/repository-management.md#pull-requests. -->\r\n\r\n<!-- Gutenberg's license is in the process of updating to be dual-licensed under the GPL and MPL. As part of that transition, all new contributions are dual-licensed. For more information, see: https://github.com/WordPress/gutenberg/blob/trunk/LICENSE.md -->\r\n\r\n## Description\r\n<!-- Please describe what you have changed or added -->\r\nAdds padding support to the Button block using the spacing block support.\r\nIssue #31731\r\n\r\n**Notes:**\r\nThe block support currently allows arbitrarily large padding values which can cause blocks implementing it to overflow the page. See #31773\r\n\r\n## How has this been tested?\r\n<!-- Please describe in detail how you tested your changes. -->\r\n<!-- Include details of your testing environment, tests ran to see how -->\r\n<!-- your change affects other areas of the code, etc. -->\r\nManually.\r\n\r\n**Test Setup**\r\nYour theme will need to opt into padding support. You can do this by updating your `theme.json` to enable padding under the spacing control, in either your default settings or the block context for button:\r\n```\r\n\"settings\": {\r\n \"spacing\": {\r\n \"customPadding\": true,\r\n \"units\": [\r\n \"px\",\r\n \"em\",\r\n \"rem\",\r\n \"vh\",\r\n \"vw\"\r\n ]\r\n }\r\n}\r\n```\r\n\r\n**Test Instructions**\r\n\r\n1. Create a post, add a buttons block with a button.\r\n2. Select the button block and confirm padding controls in the sidebar work, adjusting units/padding per side.\r\n3. Add another button and confirm that its padding is default. Update its padding and verify that it does not affect the padding of the first button.\r\n3. Save the post and confirm the padding is visually correct on the frontend.\r\n\r\n## Screenshots <!-- if applicable -->\r\n![Screen Capture on 2021-05-27 at 13-55-29](https://user-images.githubusercontent.com/63313398/119896035-522ddd80-bef3-11eb-889e-417861d7ea9a.gif)\r\n\r\n## Types of changes\r\n<!-- What types of changes does your code introduce? -->\r\n<!-- Bug fix (non-breaking change which fixes an issue) -->\r\n<!-- New feature (non-breaking change which adds functionality) -->\r\n<!-- Breaking change (fix or feature that would cause existing functionality to not work as expected) -->\r\n\r\n## Checklist:\r\n- [ ] My code is tested.\r\n- [ ] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [ ] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [ ] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [ ] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [ ] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [ ] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/31634", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/31634/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/31634/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/31634/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/31634", + "id": 882056479, + "node_id": "MDExOlB1bGxSZXF1ZXN0NjM1NjE3NTQ3", + "number": 31634, + "title": "[Block Library - Post Featured Image]: Add basic dimension controls", + "user": { + "login": "ntsekouras", + "id": 16275880, + "node_id": "MDQ6VXNlcjE2Mjc1ODgw", + "avatar_url": "https://avatars.githubusercontent.com/u/16275880?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/ntsekouras", + "html_url": "https://github.com/ntsekouras", + "followers_url": "https://api.github.com/users/ntsekouras/followers", + "following_url": "https://api.github.com/users/ntsekouras/following{/other_user}", + "gists_url": "https://api.github.com/users/ntsekouras/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ntsekouras/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ntsekouras/subscriptions", + "organizations_url": "https://api.github.com/users/ntsekouras/orgs", + "repos_url": "https://api.github.com/users/ntsekouras/repos", + "events_url": "https://api.github.com/users/ntsekouras/events{/privacy}", + "received_events_url": "https://api.github.com/users/ntsekouras/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 531680825, + "node_id": "MDU6TGFiZWw1MzE2ODA4MjU=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Enhancement", + "name": "[Type] Enhancement", + "color": "3993a3", + "default": false, + "description": "A suggestion for improvement." + }, + { + "id": 1022744205, + "node_id": "MDU6TGFiZWwxMDIyNzQ0MjA1", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Package]%20Block%20library", + "name": "[Package] Block library", + "color": "ed2572", + "default": false, + "description": "/packages/block-library" + }, + { + "id": 1894493554, + "node_id": "MDU6TGFiZWwxODk0NDkzNTU0", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Feature]%20Design%20Tools", + "name": "[Feature] Design Tools", + "color": "f7f771", + "default": false, + "description": "Tools that manipulate visual aspects of blocks." + }, + { + "id": 2085610453, + "node_id": "MDU6TGFiZWwyMDg1NjEwNDUz", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Block]%20Post%20Featured%20Image", + "name": "[Block] Post Featured Image", + "color": "6767e5", + "default": false, + "description": "" + } + ], + "state": "closed", + "locked": false, + "assignee": { + "login": "ntsekouras", + "id": 16275880, + "node_id": "MDQ6VXNlcjE2Mjc1ODgw", + "avatar_url": "https://avatars.githubusercontent.com/u/16275880?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/ntsekouras", + "html_url": "https://github.com/ntsekouras", + "followers_url": "https://api.github.com/users/ntsekouras/followers", + "following_url": "https://api.github.com/users/ntsekouras/following{/other_user}", + "gists_url": "https://api.github.com/users/ntsekouras/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ntsekouras/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ntsekouras/subscriptions", + "organizations_url": "https://api.github.com/users/ntsekouras/orgs", + "repos_url": "https://api.github.com/users/ntsekouras/repos", + "events_url": "https://api.github.com/users/ntsekouras/events{/privacy}", + "received_events_url": "https://api.github.com/users/ntsekouras/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "ntsekouras", + "id": 16275880, + "node_id": "MDQ6VXNlcjE2Mjc1ODgw", + "avatar_url": "https://avatars.githubusercontent.com/u/16275880?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/ntsekouras", + "html_url": "https://github.com/ntsekouras", + "followers_url": "https://api.github.com/users/ntsekouras/followers", + "following_url": "https://api.github.com/users/ntsekouras/following{/other_user}", + "gists_url": "https://api.github.com/users/ntsekouras/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ntsekouras/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ntsekouras/subscriptions", + "organizations_url": "https://api.github.com/users/ntsekouras/orgs", + "repos_url": "https://api.github.com/users/ntsekouras/repos", + "events_url": "https://api.github.com/users/ntsekouras/events{/privacy}", + "received_events_url": "https://api.github.com/users/ntsekouras/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 21, + "created_at": "2021-05-09T09:22:15Z", + "updated_at": "2021-07-31T08:57:37Z", + "closed_at": "2021-07-30T20:03:45Z", + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/31634", + "html_url": "https://github.com/WordPress/gutenberg/pull/31634", + "diff_url": "https://github.com/WordPress/gutenberg/pull/31634.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/31634.patch" + }, + "body": "<!-- Learn the overall process and best practices for pull requests at https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/repository-management.md#pull-requests. -->\r\n\r\n<!-- Gutenberg's license is in the process of updating to be dual-licensed under the GPL and MPL. As part of that transition, all new contributions are dual-licensed. For more information, see: https://github.com/WordPress/gutenberg/blob/trunk/LICENSE.md -->\r\n\r\n## Description\r\nResolves: https://github.com/WordPress/gutenberg/issues/27620\r\n\r\nThis PR enables basic dimension controls (`width`, `height`) and allow `object-fit` properties to be configured. \r\nI believe landing at least a basic handling for now like this would be okay for now and gives value, in order to make it to 5.8.\r\n\r\n## Notes\r\n1. The `scale` control from the design does not exists now, so I've added some adhoc styles. We might improve those styles or consider adding a new component to match the design.\r\n2. In order to set some `object-fit` properties we need to have set both `width` and `height` (see [comment](https://github.com/WordPress/gutenberg/issues/27620#issuecomment-833336369)).\r\n3. In `scale` control I've implemented `toggle/unset` functionality. We can keep this or add a `reset/clear` button.\r\n4. `height` in percentage (`%`) feels a bit unintuitive IMO - any suggestions?\r\n\r\n## Testing instructions\r\n1. Insert `Post Featured Image` block (single or in a `Query` block) and set `width`, `height` and `scale`. What feels natural to me is having `width` in `%` and `height` in `px`, but this is just subjective.\r\n2. Observe editor and front-end changes.\r\n\r\n\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/31345", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/31345/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/31345/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/31345/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/31345", + "id": 871207978, + "node_id": "MDExOlB1bGxSZXF1ZXN0NjI2MjY1NDU2", + "number": 31345, + "title": "[RNMobile] Parent PR: Add Setting to Set/Remove a Featured Image Directly from Image Block (iOS Only)", + "user": { + "login": "SiobhyB", + "id": 2998162, + "node_id": "MDQ6VXNlcjI5OTgxNjI=", + "avatar_url": "https://avatars.githubusercontent.com/u/2998162?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/SiobhyB", + "html_url": "https://github.com/SiobhyB", + "followers_url": "https://api.github.com/users/SiobhyB/followers", + "following_url": "https://api.github.com/users/SiobhyB/following{/other_user}", + "gists_url": "https://api.github.com/users/SiobhyB/gists{/gist_id}", + "starred_url": "https://api.github.com/users/SiobhyB/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/SiobhyB/subscriptions", + "organizations_url": "https://api.github.com/users/SiobhyB/orgs", + "repos_url": "https://api.github.com/users/SiobhyB/repos", + "events_url": "https://api.github.com/users/SiobhyB/events{/privacy}", + "received_events_url": "https://api.github.com/users/SiobhyB/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 531680825, + "node_id": "MDU6TGFiZWw1MzE2ODA4MjU=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Enhancement", + "name": "[Type] Enhancement", + "color": "3993a3", + "default": false, + "description": "A suggestion for improvement." + }, + { + "id": 982506020, + "node_id": "MDU6TGFiZWw5ODI1MDYwMjA=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/Mobile%20App%20-%20i.e.%20Android%20or%20iOS", + "name": "Mobile App - i.e. Android or iOS", + "color": "a3ef7a", + "default": false, + "description": "Native mobile impl of the block editor. (Note: used in scripts, ping mobile folks to change)" + }, + { + "id": 1101518360, + "node_id": "MDU6TGFiZWwxMTAxNTE4MzYw", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Block]%20Image", + "name": "[Block] Image", + "color": "6767e5", + "default": false, + "description": "" + } + ], + "state": "closed", + "locked": false, + "assignee": { + "login": "SiobhyB", + "id": 2998162, + "node_id": "MDQ6VXNlcjI5OTgxNjI=", + "avatar_url": "https://avatars.githubusercontent.com/u/2998162?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/SiobhyB", + "html_url": "https://github.com/SiobhyB", + "followers_url": "https://api.github.com/users/SiobhyB/followers", + "following_url": "https://api.github.com/users/SiobhyB/following{/other_user}", + "gists_url": "https://api.github.com/users/SiobhyB/gists{/gist_id}", + "starred_url": "https://api.github.com/users/SiobhyB/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/SiobhyB/subscriptions", + "organizations_url": "https://api.github.com/users/SiobhyB/orgs", + "repos_url": "https://api.github.com/users/SiobhyB/repos", + "events_url": "https://api.github.com/users/SiobhyB/events{/privacy}", + "received_events_url": "https://api.github.com/users/SiobhyB/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "SiobhyB", + "id": 2998162, + "node_id": "MDQ6VXNlcjI5OTgxNjI=", + "avatar_url": "https://avatars.githubusercontent.com/u/2998162?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/SiobhyB", + "html_url": "https://github.com/SiobhyB", + "followers_url": "https://api.github.com/users/SiobhyB/followers", + "following_url": "https://api.github.com/users/SiobhyB/following{/other_user}", + "gists_url": "https://api.github.com/users/SiobhyB/gists{/gist_id}", + "starred_url": "https://api.github.com/users/SiobhyB/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/SiobhyB/subscriptions", + "organizations_url": "https://api.github.com/users/SiobhyB/orgs", + "repos_url": "https://api.github.com/users/SiobhyB/repos", + "events_url": "https://api.github.com/users/SiobhyB/events{/privacy}", + "received_events_url": "https://api.github.com/users/SiobhyB/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 1, + "created_at": "2021-04-29T16:18:14Z", + "updated_at": "2021-08-02T16:26:34Z", + "closed_at": "2021-08-02T16:26:05Z", + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/31345", + "html_url": "https://github.com/WordPress/gutenberg/pull/31345", + "diff_url": "https://github.com/WordPress/gutenberg/pull/31345.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/31345.patch" + }, + "body": "Fixes the iOS side of the following issue: wordpress-mobile/gutenberg-mobile#1011\r\n\r\n`gutenberg-mobile`: https://github.com/wordpress-mobile/gutenberg-mobile/pull/3449\r\n`WordPress-iOS`: https://github.com/wordpress-mobile/WordPress-iOS/pull/16427\r\n\r\n## Description\r\n\r\nIntroduces an option to set/remove an image as featured from the image block's settings, with a \"featured\" banner to denote when an image is already featured. The end goal is to make it easier for users to both identify and set/remove featured images directly from the post editor.\r\n\r\nThis PR builds on the work done in https://github.com/WordPress/gutenberg/pull/30806 and https://github.com/WordPress/gutenberg/pull/28854 to introduce this functionality to Android. For iOS, the work has been split up into the following PRs:\r\n\r\nGutenberg PR | Gutenberg Mobile PR | iOS PR | Merged\r\n-- | -- | -- | --\r\n[Display a `Featured` banner over any image block containing a post's featured image](https://github.com/WordPress/gutenberg/pull/31347) | https://github.com/wordpress-mobile/gutenberg-mobile/pull/3390 | https://github.com/wordpress-mobile/WordPress-iOS/pull/16332 | ✅ \r\n[Include a `Set/Remove as Featured` option in the image block's settings](https://github.com/WordPress/gutenberg/pull/31415) | https://github.com/wordpress-mobile/gutenberg-mobile/pull/3450 | https://github.com/wordpress-mobile/WordPress-iOS/pull/16426 | ✅ \r\n\r\n_- Once the PR has been merged it will be updated with a_ ✅ \r\n\r\n## How has this been tested? Screenshots? Types of changes?\r\n\r\nPlease refer to the first PR in each row (the Gutenberg PR) for test cases, screenshots, and further details of the types of changes involved.\r\n\r\n## Checklist:\r\n- [x] My code is tested.\r\n- [x] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [x] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [x] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [x] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [x] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [x] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + }, + { + "url": "https://api.github.com/repos/WordPress/gutenberg/issues/30542", + "repository_url": "https://api.github.com/repos/WordPress/gutenberg", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/issues/30542/labels{/name}", + "comments_url": "https://api.github.com/repos/WordPress/gutenberg/issues/30542/comments", + "events_url": "https://api.github.com/repos/WordPress/gutenberg/issues/30542/events", + "html_url": "https://github.com/WordPress/gutenberg/pull/30542", + "id": 851617346, + "node_id": "MDExOlB1bGxSZXF1ZXN0NjEwMDA5NDAx", + "number": 30542, + "title": "Refactor MetaBoxesArea to to functional components using hooks.", + "user": { + "login": "torounit", + "id": 1908815, + "node_id": "MDQ6VXNlcjE5MDg4MTU=", + "avatar_url": "https://avatars.githubusercontent.com/u/1908815?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/torounit", + "html_url": "https://github.com/torounit", + "followers_url": "https://api.github.com/users/torounit/followers", + "following_url": "https://api.github.com/users/torounit/following{/other_user}", + "gists_url": "https://api.github.com/users/torounit/gists{/gist_id}", + "starred_url": "https://api.github.com/users/torounit/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/torounit/subscriptions", + "organizations_url": "https://api.github.com/users/torounit/orgs", + "repos_url": "https://api.github.com/users/torounit/repos", + "events_url": "https://api.github.com/users/torounit/events{/privacy}", + "received_events_url": "https://api.github.com/users/torounit/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 930001208, + "node_id": "MDU6TGFiZWw5MzAwMDEyMDg=", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Type]%20Code%20Quality", + "name": "[Type] Code Quality", + "color": "e5e04b", + "default": false, + "description": "Gotta shave those yaks." + }, + { + "id": 1298994603, + "node_id": "MDU6TGFiZWwxMjk4OTk0NjAz", + "url": "https://api.github.com/repos/WordPress/gutenberg/labels/[Package]%20Edit%20Post", + "name": "[Package] Edit Post", + "color": "ed2572", + "default": false, + "description": "packages/edit-post" + } + ], + "state": "closed", + "locked": false, + "assignee": null, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156", + "html_url": "https://github.com/WordPress/gutenberg/milestone/156", + "labels_url": "https://api.github.com/repos/WordPress/gutenberg/milestones/156/labels", + "id": 7010087, + "node_id": "MI_kwDOBNHdeM4Aavcn", + "number": 156, + "title": "Gutenberg 11.3", + "description": null, + "creator": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 113, + "state": "open", + "created_at": "2021-07-28T05:12:51Z", + "updated_at": "2021-08-11T14:18:41Z", + "due_on": "2021-08-11T07:00:00Z", + "closed_at": null + }, + "comments": 7, + "created_at": "2021-04-06T16:55:51Z", + "updated_at": "2021-08-02T16:23:34Z", + "closed_at": "2021-08-02T16:23:07Z", + "author_association": "MEMBER", + "active_lock_reason": null, + "pull_request": { + "url": "https://api.github.com/repos/WordPress/gutenberg/pulls/30542", + "html_url": "https://github.com/WordPress/gutenberg/pull/30542", + "diff_url": "https://github.com/WordPress/gutenberg/pull/30542.diff", + "patch_url": "https://github.com/WordPress/gutenberg/pull/30542.patch" + }, + "body": "<!-- Learn the overall process and best practices for pull requests at https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/repository-management.md#pull-requests. -->\r\n\r\n## Description\r\n<!-- Please describe what you have changed or added -->\r\n\r\nRelated: #22890 his PR refactors the `MetaBoxesArea` component into a function component using React hooks.\r\n\r\n## How has this been tested?\r\n<!-- Please describe in detail how you tested your changes. -->\r\n<!-- Include details of your testing environment, tests ran to see how -->\r\n<!-- your change affects other areas of the code, etc. -->\r\n\r\nShow block editor and check custom field metabox and others.\r\n\r\n## Checklist:\r\n- [x] My code is tested.\r\n- [x] My code follows the WordPress code style. <!-- Check code: `npm run lint`, Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/ -->\r\n- [x] My code follows the accessibility standards. <!-- Guidelines: https://developer.wordpress.org/coding-standards/wordpress-coding-standards/accessibility/ -->\r\n- [x] I've tested my changes with keyboard and screen readers. <!-- Instructions: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/accessibility-testing.md -->\r\n- [ ] My code has proper inline documentation. <!-- Guidelines: https://developer.wordpress.org/coding-standards/inline-documentation-standards/javascript/ -->\r\n- [ ] I've included developer documentation if appropriate. <!-- Handbook: https://developer.wordpress.org/block-editor/ -->\r\n- [ ] I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all `*.native.js` files for terms that need renaming or removal). <!-- React Native mobile Gutenberg guidelines: https://github.com/WordPress/gutenberg/blob/HEAD/docs/contributors/code/native-mobile.md -->\r\n", + "performed_via_github_app": null + } +] diff --git a/bin/plugin/config.js b/bin/plugin/config.js index 678599e0efaa7..aa252aa989466 100644 --- a/bin/plugin/config.js +++ b/bin/plugin/config.js @@ -5,13 +5,13 @@ const gitRepoOwner = 'WordPress'; * * @property {string} slug Slug. * @property {string} name Name. - * @property {string} team Github Team Name. + * @property {string} team GitHub Team Name. * @property {string} versionMilestoneFormat printf template for milestone * version name. Expected to be called * with a merged object of the config * and semver-parsed version parts. - * @property {string} githubRepositoryOwner Github Repository Owner. - * @property {string} githubRepositoryName Github Repository Name. + * @property {string} githubRepositoryOwner GitHub Repository Owner. + * @property {string} githubRepositoryName GitHub Repository Name. * @property {string} pluginEntryPoint Plugin Entry Point File. * @property {string} buildZipCommand Build Plugin ZIP command. * @property {string} githubRepositoryURL GitHub Repository URL. diff --git a/bin/plugin/lib/git.js b/bin/plugin/lib/git.js index 3b16df953ab42..8208efa7164d1 100644 --- a/bin/plugin/lib/git.js +++ b/bin/plugin/lib/git.js @@ -10,7 +10,7 @@ const SimpleGit = require( 'simple-git' ); const { getRandomTemporaryPath } = require( './utils' ); /** - * Clones a Github repository. + * Clones a GitHub repository. * * @param {string} repositoryUrl * @@ -136,18 +136,32 @@ async function resetLocalBranchAgainstOrigin( await simpleGit.pull( 'origin', branchName ); } +/** + * Gets the commit hash for the last commit in the current branch. + * + * @param {string} gitWorkingDirectoryPath Local repository path. + * + * @return {string} Commit hash. + */ +async function getLastCommitHash( gitWorkingDirectoryPath ) { + const simpleGit = SimpleGit( gitWorkingDirectoryPath ); + return await simpleGit.revparse( [ '--short', 'HEAD' ] ); +} + /** * Cherry-picks a commit into trunk * * @param {string} gitWorkingDirectoryPath Local repository path. - * @param {string} commitHash Branch Name + * @param {string} branchName Branch name. + * @param {string} commitHash Commit hash. */ async function cherrypickCommitIntoBranch( gitWorkingDirectoryPath, + branchName, commitHash ) { const simpleGit = SimpleGit( gitWorkingDirectoryPath ); - await simpleGit.checkout( 'trunk' ); + await simpleGit.checkout( branchName ); await simpleGit.raw( [ 'cherry-pick', commitHash ] ); } @@ -182,6 +196,7 @@ module.exports = { pushTagsToOrigin, discardLocalChanges, resetLocalBranchAgainstOrigin, + getLastCommitHash, cherrypickCommitIntoBranch, replaceContentFromRemoteBranch, }; diff --git a/bin/plugin/lib/logger.js b/bin/plugin/lib/logger.js index 6ade44f74e2f2..bbf48f20c4548 100644 --- a/bin/plugin/lib/logger.js +++ b/bin/plugin/lib/logger.js @@ -3,7 +3,7 @@ */ const chalk = require( 'chalk' ); -// Formats +// Formats. const title = chalk.bold; const error = chalk.bold.red; const warning = chalk.bold.keyword( 'orange' ); diff --git a/bin/plugin/lib/utils.js b/bin/plugin/lib/utils.js index ab4f51f1d416a..4a75437a60694 100644 --- a/bin/plugin/lib/utils.js +++ b/bin/plugin/lib/utils.js @@ -17,10 +17,13 @@ const { log, formats } = require( './logger' ); /** * Utility to run a child script * + * @typedef {NodeJS.ProcessEnv} Env + * * @param {string} script Script to run. * @param {string=} cwd Working directory. + * @param {Env=} env Additional environment variables to pass to the script. */ -function runShellScript( script, cwd ) { +function runShellScript( script, cwd, env = {} ) { return new Promise( ( resolve, reject ) => { childProcess.exec( script, @@ -30,6 +33,7 @@ function runShellScript( script, cwd ) { NO_CHECKS: 'true', PATH: process.env.PATH, HOME: process.env.HOME, + ...env, }, }, function ( error, _, stderr ) { diff --git a/bin/plugin/utils/.wp-env.performance.json b/bin/plugin/utils/.wp-env.performance.json new file mode 100644 index 0000000000000..112c2684f64a4 --- /dev/null +++ b/bin/plugin/utils/.wp-env.performance.json @@ -0,0 +1,13 @@ +{ + "core": "WordPress/WordPress", + "plugins": [ "./plugin" ], + "themes": [ "../../tests/test/emptytheme" ], + "env": { + "tests": { + "mappings": { + "wp-content/mu-plugins": "../../tests/packages/e2e-tests/mu-plugins", + "wp-content/plugins/gutenberg-test-plugins": "../../tests/packages/e2e-tests/plugins" + } + } + } +} diff --git a/bin/process-git-diff.js b/bin/process-git-diff.js index 6505954143e33..cce2b0cffb344 100644 --- a/bin/process-git-diff.js +++ b/bin/process-git-diff.js @@ -23,7 +23,6 @@ // - "dev": true // + "dev": true, // + "optional": true - const hasNonOptionalDiff = !! ( process.argv[ 2 ] || '' ) // Strip individual diffs of optional-only. .replace( /@@ .+ @@\n(-.+\n\+.+,\n)?\+.+\"optional\": true,?\n/gm, '' ) diff --git a/bin/test-create-block.sh b/bin/test-create-block.sh index b6e22fdb42031..e17bdbb2d6694 100755 --- a/bin/test-create-block.sh +++ b/bin/test-create-block.sh @@ -15,15 +15,52 @@ status () { echo -e "\n\033[1;34m$1\033[0m\n" } +error () { + echo -e "\n\033[1;31m$1\033[0m\n" +} + cleanup() { - rm -rf "$DIRECTORY/esnext-test" + rm -rf "$DIRECTORY/example-static-es5" + rm -rf "$DIRECTORY/example-static" } trap cleanup EXIT -status "Scaffolding block..." -npx wp-create-block esnext-test --no-wp-scripts -cd esnext-test +# First test block + +status "Scaffolding Example Static (ES5) block..." +npx wp-create-block example-static-es5 -t es5 +cd example-static-es5 + +status "Verifying project..." +expected=8 +actual=$( find . -maxdepth 1 -type f | wc -l ) +if [ "$expected" -ne "$actual" ]; then + error "Expected $expected files in the project root, but found $actual." + exit 1 +fi + +cd .. + +# Second test block + +status "Scaffolding Example Static block..." +npx wp-create-block example-static --no-wp-scripts +cd example-static + +status "Verifying project..." +expected=5 +actual=$( find . -maxdepth 1 -type f | wc -l ) +if [ "$expected" -ne "$actual" ]; then + error "Expected $expected files in the project root, but found $actual." + exit 1 +fi +expected=6 +actual=$( find src -maxdepth 1 -type f | wc -l ) +if [ "$expected" -ne "$actual" ]; then + error "Expected $expected files in the \`src\` directory, but found $actual." + exit 1 +fi status "Formatting files..." ../node_modules/.bin/wp-scripts format @@ -31,8 +68,19 @@ status "Formatting files..." status "Building block..." ../node_modules/.bin/wp-scripts build -status "Lintig CSS files..." +status "Verifying build..." +expected=5 +actual=$( find build -maxdepth 1 -type f | wc -l ) +if [ "$expected" -ne "$actual" ]; then + error "Expected $expected files in the \`build\` directory, but found $actual." + exit 1 +fi + +status "Linting CSS files..." ../node_modules/.bin/wp-scripts lint-style status "Linting JavaScript files..." ../node_modules/.bin/wp-scripts lint-js + +status "Creating a plugin zip file..." +../node_modules/.bin/wp-scripts plugin-zip diff --git a/changelog.txt b/changelog.txt index b2b44525377a8..9e78d02a4db8c 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,6 +1,7564 @@ == Changelog == -= 11.2.0-rc.1 = += 13.2.2 = + + + +## Changelog + +### Bug Fixes + +#### Block Library +- Blocks: Don't abort registering blocks when a missing block file is found. ([41122](https://github.com/WordPress/gutenberg/pull/41122)) + +## Contributors + +The following contributors merged PRs in this release: + +@dd32 + + += 13.3.0-rc.1 = + + + +## Changelog + +### Enhancements + +- Avoid persisting preference every time the sidebar tab is changed. ([40923](https://github.com/WordPress/gutenberg/pull/40923)) +- Editor preferences: Update order and copy. ([40981](https://github.com/WordPress/gutenberg/pull/40981)) +- Update the block overlay to rely on useDisabled hook. ([40649](https://github.com/WordPress/gutenberg/pull/40649)) +- dependency-extraction-webpack-plugin: Calculate vendor hash from file output rather than Webpack internal state. ([34969](https://github.com/WordPress/gutenberg/pull/34969)) + +#### Components +- BorderControl: Fix focus styling. ([40951](https://github.com/WordPress/gutenberg/pull/40951)) +- BorderControl: Make border color consistent with other controls. ([40921](https://github.com/WordPress/gutenberg/pull/40921)) +- BorderControl: Make height consistent with other controls. ([40920](https://github.com/WordPress/gutenberg/pull/40920)) +- BorderControl: Make reset to default button only display when required. ([40917](https://github.com/WordPress/gutenberg/pull/40917)) +- ButtonGroup: Convert to TypeScript. ([41007](https://github.com/WordPress/gutenberg/pull/41007)) +- CheckboxControl: Convert component to TypeScript. ([40915](https://github.com/WordPress/gutenberg/pull/40915)) +- CircularOptionPicker: Fix focused styles. ([40990](https://github.com/WordPress/gutenberg/pull/40990)) +- Refactor the Popover component to use the floatingUI library. ([40740](https://github.com/WordPress/gutenberg/pull/40740)) + +#### Block Library +- Add an explicit error message if an image block fails to load the image. ([40982](https://github.com/WordPress/gutenberg/pull/40982)) +- Add transform between cover and media & text. ([38458](https://github.com/WordPress/gutenberg/pull/38458)) +- Post Terms: Add dynamic variations of custom taxonomies. ([39837](https://github.com/WordPress/gutenberg/pull/39837)) +- Query Loop: Add `parents` filter. ([40933](https://github.com/WordPress/gutenberg/pull/40933)) + +#### Design Tools +- BorderRadiusControl: Add tooltips to split border radius controls. ([40983](https://github.com/WordPress/gutenberg/pull/40983)) +- Color Controls: Merge color dropdown components. ([40084](https://github.com/WordPress/gutenberg/pull/40084)) + +#### CSS & Styling +- BorderRadiusControl: Tweak spacing between input and range control to line up with BorderControl. ([40958](https://github.com/WordPress/gutenberg/pull/40958)) +- Table of Contents block: Remove editor-only wrapper `<div>`. ([40899](https://github.com/WordPress/gutenberg/pull/40899)) + +#### Template Editor +- Use the label 'Clear customizations' when changes are revertable. ([40935](https://github.com/WordPress/gutenberg/pull/40935)) + +#### npm Packages +- Packages: Add command to publish to npm targeting WP major release. ([40927](https://github.com/WordPress/gutenberg/pull/40927)) + +#### Post Editor +- DevicePreview: Remove unnecessary div tag. ([40911](https://github.com/WordPress/gutenberg/pull/40911)) + +#### List View +- Block list: Add option in editor settings to show open list view as default. ([40757](https://github.com/WordPress/gutenberg/pull/40757)) + + +### Bug Fixes + +- Add missing styling panels for uncontrolled navigation. ([41114](https://github.com/WordPress/gutenberg/pull/41114)) +- DOM: Allow copying text from non-text input elements. ([40192](https://github.com/WordPress/gutenberg/pull/40192)) +- DOM: Deprecate `isNumberInput` and fix its handling of value=0. ([40896](https://github.com/WordPress/gutenberg/pull/40896)) +- Dependency Extraction Webpack Plugin: Use OpenSSL provider supported in Node 17+. ([40503](https://github.com/WordPress/gutenberg/pull/40503)) +- FlatTermSelector: Avoid errors when returned terms aren't iterable. ([41099](https://github.com/WordPress/gutenberg/pull/41099)) +- Provide translators comment for Font size and Letter Case. ([40879](https://github.com/WordPress/gutenberg/pull/40879)) + +#### Block Library +- Add missing "type" to the search field on the editor. ([40782](https://github.com/WordPress/gutenberg/pull/40782)) +- Comments Title: Fix post title translation. ([40972](https://github.com/WordPress/gutenberg/pull/40972)) +- Comments Title: Make non-editable. ([40817](https://github.com/WordPress/gutenberg/pull/40817)) +- Cover: Update background type when using featured image. ([40873](https://github.com/WordPress/gutenberg/pull/40873)) +- Fix Comments Form Title text alignment. ([40795](https://github.com/WordPress/gutenberg/pull/40795)) +- Fix external styles leaking into Warning component. ([40868](https://github.com/WordPress/gutenberg/pull/40868)) +- Image Editor: Remove HTML from error messages. ([40812](https://github.com/WordPress/gutenberg/pull/40812)) +- Post Comments Block: Allow placeholders to reorder items in translations. ([40849](https://github.com/WordPress/gutenberg/pull/40849)) +- Post Comments: Fix invalid date format in placeholder. ([40929](https://github.com/WordPress/gutenberg/pull/40929)) +- Quote: Fix the embed discovery. ([41134](https://github.com/WordPress/gutenberg/pull/41134)) +- Return immediately from Avatar block's render_callback if `$comment` is null. ([40835](https://github.com/WordPress/gutenberg/pull/40835)) +- Use `get_the_post_thumbnail` function in the cover block.. ([40853](https://github.com/WordPress/gutenberg/pull/40853)) +- List v2: Fix outdent on empty list item if we press enter. ([40939](https://github.com/WordPress/gutenberg/pull/40939)) +- List v2: Focus new list item added from sibling inserter. ([41051](https://github.com/WordPress/gutenberg/pull/41051)) +- List v2: Fixes an issue where pressing enter deletes innerblocks. ([41109](https://github.com/WordPress/gutenberg/pull/41109)) + +#### Site Editor +- Avoid previous content flash when a new template is created. ([40841](https://github.com/WordPress/gutenberg/pull/40841)) +- Decode entities in the site title. ([40956](https://github.com/WordPress/gutenberg/pull/40956)) +- Fix opinionated block styles loading in editor. ([40937](https://github.com/WordPress/gutenberg/pull/40937)) +- Post Comments: Fix Older/Newer comments links styling. ([40948](https://github.com/WordPress/gutenberg/pull/40948)) +- Template List: Fix word break for the 'Added by' column. ([40959](https://github.com/WordPress/gutenberg/pull/40959)) +- Template editor: Show the inserter if the template part is empty. ([41024](https://github.com/WordPress/gutenberg/pull/41024)) + +#### Accessibility +- Prevent navigation on URL input suggestion selection via enter key. ([40906](https://github.com/WordPress/gutenberg/pull/40906)) +- Table block: Fix focus loss after Create Table button is selected. ([40399](https://github.com/WordPress/gutenberg/pull/40399)) +- Block Library - Latest Posts: Prevent opening the links in editor. ([40593](https://github.com/WordPress/gutenberg/pull/40593)) + +#### Global Styles +- Fix: Global Styles are always resettable. ([40887](https://github.com/WordPress/gutenberg/pull/40887)) +- Fix: Global Styles: Impossible to open welcome guide if global styles are empty. ([40888](https://github.com/WordPress/gutenberg/pull/40888)) +- Site editor: Preset custom color duplicates. ([40837](https://github.com/WordPress/gutenberg/pull/40837)) +- Reduce active tab accent weight. ([40998](https://github.com/WordPress/gutenberg/pull/40998)) + +#### Post Editor +- Fix typo in the test description didPostSaveRequestSucceed. ([41064](https://github.com/WordPress/gutenberg/pull/41064)) +- Post saved draft button: Overwrite default button component margin. ([40834](https://github.com/WordPress/gutenberg/pull/40834)) + +#### Themes +- Theme Export: Use a better method to determine the theme name. ([40829](https://github.com/WordPress/gutenberg/pull/40829)) +- Theme Export: Use basename when determining the theme slug. ([41058](https://github.com/WordPress/gutenberg/pull/41058)) + +#### Template Editor +- Create single template via site editor if not existing. ([40830](https://github.com/WordPress/gutenberg/pull/40830)) +- Templates: Only allow renaming user-created and non-default templates. ([40881](https://github.com/WordPress/gutenberg/pull/40881)) + +#### Components +- Fix Storybook builds. ([41089](https://github.com/WordPress/gutenberg/pull/41089)) + +#### Design Tools +- Layout: Remove double output of align-items in horizontal layouts. ([41018](https://github.com/WordPress/gutenberg/pull/41018)) + +#### Code Editor +- Fix save shortcut. ([40848](https://github.com/WordPress/gutenberg/pull/40848)) + + +### Performance + +#### Block Library +- Ensure that post thumbnail is cached in latest post block. ([40571](https://github.com/WordPress/gutenberg/pull/40571)) +- Ensure that post thumbnail is cached in post template block. ([40572](https://github.com/WordPress/gutenberg/pull/40572)) +- Navigation link: Prime caches for all posts in menu items. ([40752](https://github.com/WordPress/gutenberg/pull/40752)) +- useShortCodeTransform: Fetch media data in single request. ([40945](https://github.com/WordPress/gutenberg/pull/40945)) + + +### Experiments + +- Style Engine: Add typography and color to frontend. ([40665](https://github.com/WordPress/gutenberg/pull/40665)) + +#### Block Library +- List v2: Indent multiple list items. ([40991](https://github.com/WordPress/gutenberg/pull/40991)) +- List v2: Outdent list item when pressing `Backspace` at the start. ([40962](https://github.com/WordPress/gutenberg/pull/40962)) + + +### Documentation + +- Add "How To Get Your Pull Request Reviewed?" to developer handbook. ([40589](https://github.com/WordPress/gutenberg/pull/40589)) +- Add link to npm release details to the release documentation. ([40867](https://github.com/WordPress/gutenberg/pull/40867)) +- Corrected the order in the code tabs. ([40569](https://github.com/WordPress/gutenberg/pull/40569)) +- Docs: Git.io deprecation - Replace links. ([40734](https://github.com/WordPress/gutenberg/pull/40734)) +- Document useEntityRecord/s in README.md and CHANGELOG.md. ([40932](https://github.com/WordPress/gutenberg/pull/40932)) +- Fix typo in `Panel` readme. ([41111](https://github.com/WordPress/gutenberg/pull/41111)) +- Remove mid-paragraph line breaks from 2-building-a-list-of-pages.md markdown. ([41025](https://github.com/WordPress/gutenberg/pull/41025)) +- Typo - enqueue to enqueued. ([40880](https://github.com/WordPress/gutenberg/pull/40880)) +- Update broken links. ([41071](https://github.com/WordPress/gutenberg/pull/41071)) +- [Gutenberg Data Tutorial] Part 4: Building a new record form. ([39261](https://github.com/WordPress/gutenberg/pull/39261)) + +#### Components +- Use TypeScript and controls for `DateTimePicker`'s stories. ([40986](https://github.com/WordPress/gutenberg/pull/40986)) + + +### Code Quality + +- Convert core-data selectors from jsDoc annotations into TypeScript type signatures. ([40025](https://github.com/WordPress/gutenberg/pull/40025)) +- Dependency extraction: Improve calculation of contentHash. ([40930](https://github.com/WordPress/gutenberg/pull/40930)) +- Dependency extraction: Respect hashDigestLength option for version field. ([40977](https://github.com/WordPress/gutenberg/pull/40977)) +- Improve function name for finding navigation links that use the featured image. ([40904](https://github.com/WordPress/gutenberg/pull/40904)) +- Interface: Fix deprecation messages. ([40825](https://github.com/WordPress/gutenberg/pull/40825)) +- Make the useDisabled hook stable. ([40890](https://github.com/WordPress/gutenberg/pull/40890)) +- Packages [Dependency Extraction Webpack Plugin]: Add new line at the end of *.assets.php. ([40753](https://github.com/WordPress/gutenberg/pull/40753)) +- Remove unreachable inserter component. ([41103](https://github.com/WordPress/gutenberg/pull/41103)) +- Styles hook: Swap out lodash methods with their JS equivalents. ([40918](https://github.com/WordPress/gutenberg/pull/40918)) +- Update react-resize-aware with use-resize-observer. ([40509](https://github.com/WordPress/gutenberg/pull/40509)) +- useRefEffect: Replace undefined with void in callback return type. ([40798](https://github.com/WordPress/gutenberg/pull/40798)) +- Remove Flyout leftovers. ([41129](https://github.com/WordPress/gutenberg/pull/41129)) +- Send registered patterns in HTML and combine them with REST ones. ([40818](https://github.com/WordPress/gutenberg/pull/40818)) + +#### Block Library +- Cover: Refactor controls. ([40832](https://github.com/WordPress/gutenberg/pull/40832)) +- Cover: Correct resizeable spelling to US resizable. ([41100](https://github.com/WordPress/gutenberg/pull/41100)) +- Post Terms: Add wp_kses_post to prefix/suffix for consistency. ([40803](https://github.com/WordPress/gutenberg/pull/40803)) +- Replace hardcoded core/paragraph with getDefaultBlockName in onSplitAtEnd callbacks. ([40954](https://github.com/WordPress/gutenberg/pull/40954)) +- Post Terms: Insert defaultBlock on suffix end split. ([40934](https://github.com/WordPress/gutenberg/pull/40934)) +- Query Loop: Move sticky control to separate file. ([41101](https://github.com/WordPress/gutenberg/pull/41101)) + +#### Components +- Add jest-console typings and convert DateTimePicker tests to TypeScript. ([40957](https://github.com/WordPress/gutenberg/pull/40957)) +- Rewrite DatePicker, TimePicker and DateTimePicker in TypeScript. ([40775](https://github.com/WordPress/gutenberg/pull/40775)) +- Update `react-dates` to 21.8.0. ([40801](https://github.com/WordPress/gutenberg/pull/40801)) +- Stabilize useEntityRecord and useEntityRecords. ([40162](https://github.com/WordPress/gutenberg/pull/40162)) + +#### Plugin +- Declare blocks as __experimental in block.json to automate syncing Gutenberg packages to WordPress. ([40655](https://github.com/WordPress/gutenberg/pull/40655)) +- Tools: Improve configuration for formatting files. ([40994](https://github.com/WordPress/gutenberg/pull/40994)) + +#### Code Editor +- Don't commit 'non-dirty' changes. ([41092](https://github.com/WordPress/gutenberg/pull/41092)) + +#### Media +- Media Utils: Don't convert error messages into an array. ([39448](https://github.com/WordPress/gutenberg/pull/39448)) + +#### Block Editor +- Add constants for link entry types. ([36490](https://github.com/WordPress/gutenberg/pull/36490)) + + +### Tools + +- Fix pull-request-automation CI check (temporarily until an upstream fix lands). ([41044](https://github.com/WordPress/gutenberg/pull/41044)) +- Update package-lock.json. ([41045](https://github.com/WordPress/gutenberg/pull/41045)) +- env :: Support ssh protocol for github repos. ([40451](https://github.com/WordPress/gutenberg/pull/40451)) +- Add @fabiankaegy as a code owner for the docs/ directory. ([41057](https://github.com/WordPress/gutenberg/pull/41057)) + +#### Testing +- Add eslint warning about use of waitForTimeout to playwright eslint. ([40802](https://github.com/WordPress/gutenberg/pull/40802)) +- Comment Template: Reorganize block tests to ease backport process. ([40739](https://github.com/WordPress/gutenberg/pull/40739)) +- Fix: Env unit test fails on Windows. ([41070](https://github.com/WordPress/gutenberg/pull/41070)) +- Migrate 'block-locking' to Playwright. ([41050](https://github.com/WordPress/gutenberg/pull/41050)) +- Migrate and refactor image block end-to-end tests to Playwright. ([40804](https://github.com/WordPress/gutenberg/pull/40804)) +- Migrated popovers.test.js to Playwright. ([39910](https://github.com/WordPress/gutenberg/pull/39910)) +- Reorganize playwright utils and make canvas utils usable in the site editor. ([40815](https://github.com/WordPress/gutenberg/pull/40815)) +- Setup user-event inline once per test. ([40839](https://github.com/WordPress/gutenberg/pull/40839)) +- Test block insertion after title post blur. ([32944](https://github.com/WordPress/gutenberg/pull/32944)) +- Tests: Remove comment template unit tests. ([40965](https://github.com/WordPress/gutenberg/pull/40965)) + +#### npm Packages +- Packages: Add GitHub workflow for publishing to npm. ([40976](https://github.com/WordPress/gutenberg/pull/40976)) +- Packages: Add more npm release types to the GitHub workflow. ([41046](https://github.com/WordPress/gutenberg/pull/41046)) + +#### Build Tooling +- Build Tools: Update actions/setup-node GitHub action. ([40816](https://github.com/WordPress/gutenberg/pull/40816)) + +#### Block Library +- Add: Raw handling to the new list block. ([39954](https://github.com/WordPress/gutenberg/pull/39954)) +- Add: Space to indent list item. ([39949](https://github.com/WordPress/gutenberg/pull/39949)) +- Gallery block: Fix bug with initial image size. ([41079](https://github.com/WordPress/gutenberg/pull/41079)) +- Gallery block: Include image caption when converting a classic block gallery. ([40872](https://github.com/WordPress/gutenberg/pull/40872)) +- Heading block - add font family support. ([40970](https://github.com/WordPress/gutenberg/pull/40970)) +- Mark Table of Contents block as experimental using `block.json` flag. ([40905](https://github.com/WordPress/gutenberg/pull/40905)) +- Only allow template part to be replaced if its a header or footer. ([40787](https://github.com/WordPress/gutenberg/pull/40787)) +- Post Author block: Hide select author controle if there is no postId. ([40910](https://github.com/WordPress/gutenberg/pull/40910)) +- Search Block: Remove id attribute from svg. ([40828](https://github.com/WordPress/gutenberg/pull/40828)) +- Separator Block: Add border property for dots style to editor stylesheet. ([40855](https://github.com/WordPress/gutenberg/pull/40855)) +- ToC block: Re-enable + use static markup and only support core Heading and Page Break blocks. ([29739](https://github.com/WordPress/gutenberg/pull/29739)) +- Try a single icon for title blocks. ([40596](https://github.com/WordPress/gutenberg/pull/40596)) + +#### Data Layer +- Add suspense support to the data module. ([37261](https://github.com/WordPress/gutenberg/pull/37261)) +- useSelect: Add unit tests for usage without deps. ([40732](https://github.com/WordPress/gutenberg/pull/40732)) + +#### Components +- Select Component: Remove the lineheight setting to fix issue with font descenders being cut off. ([40985](https://github.com/WordPress/gutenberg/pull/40985)) + +#### Global Styles +- Theme Json: Don't output double selectors for elements inside blocks. ([40889](https://github.com/WordPress/gutenberg/pull/40889)) + +#### Design Tools +- Button: Add text transform control. ([40858](https://github.com/WordPress/gutenberg/pull/40858)) + + +## First time contributors + +The following PRs were merged by first time contributors: + +- @anomiex: dependency-extraction-webpack-plugin: Calculate vendor hash from file output rather than Webpack internal state. ([34969](https://github.com/WordPress/gutenberg/pull/34969)) +- @damiencarbery: Typo - enqueue to enqueued. ([40880](https://github.com/WordPress/gutenberg/pull/40880)) +- @JessicaGosselin: Fix typo in `Panel` readme. ([41111](https://github.com/WordPress/gutenberg/pull/41111)) +- @luminuu: Create single template via site editor if not existing. ([40830](https://github.com/WordPress/gutenberg/pull/40830)) +- @n3f: env :: Support ssh protocol for github repos. ([40451](https://github.com/WordPress/gutenberg/pull/40451)) +- @SavPhill: Update broken links. ([41071](https://github.com/WordPress/gutenberg/pull/41071)) +- @shanjidah: Migrated popovers.test.js to Playwright. ([39910](https://github.com/WordPress/gutenberg/pull/39910)) +- @tomjdv: Corrected the order in the code tabs. ([40569](https://github.com/WordPress/gutenberg/pull/40569)) + + +## Contributors + +The following contributors merged PRs in this release: + +@aaronrobertshaw @adamziel @Addison-Stavlo @alexstine @amustaque97 @andrewserong @anomiex @aristath @c4rl0sbr4v0 @carolinan @ciampo @damiencarbery @DAreRodz @dcalhoun @draganescu @fabiankaegy @fluiddot @geriux @getdave @glendaviesnz @gziolo @jameskoster @JessicaGosselin @jffng @jhnstn @jorgefilipecosta @jostnes @jsnajdr @kevin940726 @luisherranz @luminuu @Mamaduka @mauriac @mchowning @mcsf @michalczaplinski @mikachan @n3f @noisysocks @ntsekouras @ockham @ramonjd @SavPhill @scruffian @shanjidah @SiobhyB @Soean @spacedmonkey @t-hamano @talldan @tomasztunik @tomjdv @walbo @youknowriad @ZebulanStanphill + + += 13.2.1 = + +## Changelog + +### Bug Fixes + +- Fix the position of the block inserter in between blocks ([40919](https://github.com/WordPress/gutenberg/pull/40919)) + + += 13.2.0 = + +## Changelog + +### Features + +- Add new preferences persistence API, and save editor preferences in user meta. ([39795](https://github.com/WordPress/gutenberg/pull/39795)) + +### Enhancements + +- Add visualizers for padding and margin for all blocks. ([40505](https://github.com/WordPress/gutenberg/pull/40505)) +- Remove the spotlight mode from template parts. ([40652](https://github.com/WordPress/gutenberg/pull/40652)) + +#### Block Library + +- Placeholders: + - Update post content placeholder. ([40177](https://github.com/WordPress/gutenberg/pull/40177)) + - Update the placeholder for post excerpt. ([40178](https://github.com/WordPress/gutenberg/pull/40178)) + - Add placeholder to Post Comments block. ([40484](https://github.com/WordPress/gutenberg/pull/40484)) + - Improve the logic for warnings for Post Comments Form placeholder. ([40563](https://github.com/WordPress/gutenberg/pull/40563)) + - Post Comments Form: Add "proper" visual representation in the editor. ([40368](https://github.com/WordPress/gutenberg/pull/40368)) +- Comments Query Loop: Add Post Comments Form block to Comments Query Loop template. ([40256](https://github.com/WordPress/gutenberg/pull/40256)) +- Post Comments block: Enqueue comment-reply script. ([40366](https://github.com/WordPress/gutenberg/pull/40366)) +- Cover: Avoid unnecessary wrapping when transformed from Group. ([40602](https://github.com/WordPress/gutenberg/pull/40602)) +- Quote v2: Implement exiting on Enter at end. ([39911](https://github.com/WordPress/gutenberg/pull/39911)) +- Separator Block: Add top & bottom margin support. ([40551](https://github.com/WordPress/gutenberg/pull/40551)) + +#### Components + +- Fix async timing in tests using `user-event`. ([40790](https://github.com/WordPress/gutenberg/pull/40790)) +- Add flag for larger default size. (InputControl: [40622](https://github.com/WordPress/gutenberg/pull/40622), UnitControl: [40627](https://github.com/WordPress/gutenberg/pull/40627)) + +#### Site Editor + +- Use default cursor for non-editable text blocks. ([40785](https://github.com/WordPress/gutenberg/pull/40785)) + +#### Block Editor + +- Show add pattern label when patterns are being prioritised. ([40598](https://github.com/WordPress/gutenberg/pull/40598)) +- Improve button spacing in the top right corner of the editor. ([40411](https://github.com/WordPress/gutenberg/pull/40411)) + +#### Document Settings + +- Design tweaks to Post Visibility popover. ([40530](https://github.com/WordPress/gutenberg/pull/40530)) + +#### Global Styles + +- Global Styles Sidebar: Tweak separator margin. ([40526](https://github.com/WordPress/gutenberg/pull/40526)) + +#### Webfonts + +- Register all fonts before enqueing any. ([40489](https://github.com/WordPress/gutenberg/pull/40489)) +- Turn off WP 6.0 stopgap handler to use Webfonts API. ([40555](https://github.com/WordPress/gutenberg/pull/40555)) + +#### Block API + +- Allow using a custom domainpath for viewscripts. ([40136](https://github.com/WordPress/gutenberg/pull/40136)) +- Add `settings` hook. ([40547](https://github.com/WordPress/gutenberg/pull/40547)) + +#### Post Editor + +- Editor: Refactor PostFeaturedImage component to improve uploading state ([40126](https://github.com/WordPress/gutenberg/pull/40126)) + +### Bug Fixes + +#### Block Library + +- Audio: Correctly handle drag and drop upload errors. ([40623](https://github.com/WordPress/gutenberg/pull/40623)) +- Comments: + - Comment Content: Show moderation message. ([40612](https://github.com/WordPress/gutenberg/pull/40612)) + - Comment Template: With pagination, make sure to request page 1 if there are no comments. ([40759](https://github.com/WordPress/gutenberg/pull/40759)) + - Comments Title: Count toggle working in 'Singular' editing mode (fix). ([40728](https://github.com/WordPress/gutenberg/pull/40728)) + - Comments block: Fix glitches found while backporting. ([40628](https://github.com/WordPress/gutenberg/pull/40628)) + - Fix alignment issue with comment author name. ([40610](https://github.com/WordPress/gutenberg/pull/40610)) + - Fix alignment issue with the comment edit link. ([40584](https://github.com/WordPress/gutenberg/pull/40584)) + - Fix alignment issue with the comment reply link. ([40582](https://github.com/WordPress/gutenberg/pull/40582)) + - Fix an alignment issue with the post comments form. ([40613](https://github.com/WordPress/gutenberg/pull/40613)) + - Fix style comment awaiting moderation indentation. ([40681](https://github.com/WordPress/gutenberg/pull/40681)) + - Prevent comments rendering on password protected posts. ([40755](https://github.com/WordPress/gutenberg/pull/40755)) + - Display paragraph breaks in comment contents block.. ([40667](https://github.com/WordPress/gutenberg/pull/40667)) + - Prevent spam links of author's name in pending moderation comments. ([40702](https://github.com/WordPress/gutenberg/pull/40702)) +- Cover Block: Fix focal point error when the Featured Image is applied. ([40643](https://github.com/WordPress/gutenberg/pull/40643)) +- Cover: Avoid adding a wrapper Group block when transforming to Group, where possible. ([40293](https://github.com/WordPress/gutenberg/pull/40293)) +- Cover Block: Fixed iOS bug handling background-attachment to properly work with iOS 13+. ([40087](https://github.com/WordPress/gutenberg/pull/40087)) +- Navigation block "Open on click": Inherit font style and font weight. ([40671](https://github.com/WordPress/gutenberg/pull/40671)) +- Post Author: Switch byline to use kses so that rich text elements are rendered correctly. ([40776](https://github.com/WordPress/gutenberg/pull/40776)) +- Latest Post: Fix regression with featured images in latest posts. ([40662](https://github.com/WordPress/gutenberg/pull/40662)) +- Video: Fix drag and drop upload error state. ([40552](https://github.com/WordPress/gutenberg/pull/40552)) +- Heading: Include text alignment when transforming from paragraph to header and back. ([40709](https://github.com/WordPress/gutenberg/pull/40709)) +- No Results: Remove a typo from the no results block. ([40573](https://github.com/WordPress/gutenberg/pull/40573)) + +#### Components + +- UnitControl + - Avoid calling onChange callback twice when unit changes. ([40796](https://github.com/WordPress/gutenberg/pull/40796)) + - Show unit label when `units` prop has only one unit. ([40784](https://github.com/WordPress/gutenberg/pull/40784)) +- Gradient Tool: Fix closing of popover when the angle control is clicked. ([40735](https://github.com/WordPress/gutenberg/pull/40735)) +- Simpler clear button ([40437](https://github.com/WordPress/gutenberg/pull/40437)) + +#### Block Editor + +- Fix dragging in inspector causing block deselection. ([40604](https://github.com/WordPress/gutenberg/pull/40604)) +- [RichText]: Ignore selection changes on non contentEditable nodes. ([40611](https://github.com/WordPress/gutenberg/pull/40611)) +- [Writing Flow]: Try to fix multi-selection with `shift+click`. ([40687](https://github.com/WordPress/gutenberg/pull/40687)) +- Fix the styles compatibility hook for the editor iframes. ([40842](https://github.com/WordPress/gutenberg/pull/40842)) + +#### Patterns + +- Fix core 'Featured' pattern category registration. ([40650](https://github.com/WordPress/gutenberg/pull/40650)) +- Fix: Page patterns don't show when only one pattern is available. ([40707](https://github.com/WordPress/gutenberg/pull/40707)) + +#### Block Locking + +- Avoid 'lock' attribute registration warning. ([40654](https://github.com/WordPress/gutenberg/pull/40654)) +- Register the 'lock' attribute on the server. ([40468](https://github.com/WordPress/gutenberg/pull/40468)) + +#### Code Editor + +- Commit changes upon switching editors to avoid content loss. ([40730](https://github.com/WordPress/gutenberg/pull/40730)) + +#### Navigation Menu Sidebar + +- Fix Nav Sidebar Site Editor error. ([40722](https://github.com/WordPress/gutenberg/pull/40722)) +- Close overlay menu when clicking an anchor link. ([39625](https://github.com/WordPress/gutenberg/pull/39625)) + +#### Icons + +- Fix/block meta icon prop errors. ([40710](https://github.com/WordPress/gutenberg/pull/40710)) +- Fix the Icon component mobile icon. ([40748](https://github.com/WordPress/gutenberg/pull/40748)) + +#### Global Styles + +- Element styles: Prevent the WordPress filter callback from being executed. ([40594](https://github.com/WordPress/gutenberg/pull/40594)) +- Global Styles Sidebar: Fix nav header styles and semantics. ([40592](https://github.com/WordPress/gutenberg/pull/40592)) +- Global Styles Sidebar: Tweak spacing. ([40588](https://github.com/WordPress/gutenberg/pull/40588)) + +#### Data Layer + +- useSelect: Prevent nested component update after unmount. ([40677](https://github.com/WordPress/gutenberg/pull/40677)) +- core-data: Change "include" type in getQueryParts. ([40570](https://github.com/WordPress/gutenberg/pull/40570)) + +#### Themes + +- Theme Export: Bug: Add .DS_Store to the list of ignored files. ([40539](https://github.com/WordPress/gutenberg/pull/40539)) + +#### Reusable Blocks + +- Fix template part / reusable block click through on non-safari browsers. ([40339](https://github.com/WordPress/gutenberg/pull/40339)) + +#### Block API + +- Check that a transform matches at the time of running the transform. ([40497](https://github.com/WordPress/gutenberg/pull/40497)) + +### Accessibility + +#### Components + +- Improve tools panel accessibility. ([40716](https://github.com/WordPress/gutenberg/pull/40716)) + +#### Block Editor + +- URLInput now always has an ID and accessible label. ([40310](https://github.com/WordPress/gutenberg/pull/40310)) + +#### Block Library + +- Post Comments block: Fix missing label in placeholder. ([40527](https://github.com/WordPress/gutenberg/pull/40527)) + +### Performance + +#### Block Editor + +- getBlockTransformItems: Support single block object. ([40718](https://github.com/WordPress/gutenberg/pull/40718)) + +#### Block Library + +- Navigation Link: Avoid unnecessary re-renders. ([40696](https://github.com/WordPress/gutenberg/pull/40696)) +- Navigation: Improve selector performance. ([40700](https://github.com/WordPress/gutenberg/pull/40700)) + +### Experiments + +#### CSS & Styling + +- Style Engine: Add typography and color to backend. ([40332](https://github.com/WordPress/gutenberg/pull/40332)) + +### Documentation + +- Docs: Omit name from settings object in registerPlugin. ([40629](https://github.com/WordPress/gutenberg/pull/40629)) +- Docs: Update the Block Metadata title. ([40482](https://github.com/WordPress/gutenberg/pull/40482)) +- Fix ColorPalette component's documentation. ([40620](https://github.com/WordPress/gutenberg/pull/40620)) +- Fix indentation inconsistency in documentation for block variations. ([40515](https://github.com/WordPress/gutenberg/pull/40515)) +- Fix broken links. ([40578](https://github.com/WordPress/gutenberg/pull/40578)) + +#### Components + +- Add TypeScript refactor guidelines. ([40153](https://github.com/WordPress/gutenberg/pull/40153)) +- InputControl: Remove default value argument from Storybook. ([40410](https://github.com/WordPress/gutenberg/pull/40410)) +- Components: Fix error in CONTRIBUTING guide. ([40682](https://github.com/WordPress/gutenberg/pull/40682)) +- Components: Update changelog for [#40735](https://github.com/WordPress/gutenberg/pull/40735). ([40797](https://github.com/WordPress/gutenberg/pull/40797)) +- Fix/typos in documentation. ([40579](https://github.com/WordPress/gutenberg/pull/40579)) + +#### Themes + +- Adding schema info to theme.json reference. ([40599](https://github.com/WordPress/gutenberg/pull/40599)) + +### Code Quality + +- Block Editor: Deprecate 'BlockColorsStyleSelector' component. ([40502](https://github.com/WordPress/gutenberg/pull/40502)) +- Global Styles Sidebar: Rename `NavigationButton` so semantics are clearer. ([40590](https://github.com/WordPress/gutenberg/pull/40590)) +- Handle promise rejections from preferences persistence if the user is offline or the REST API errors. ([40641](https://github.com/WordPress/gutenberg/pull/40641)) +- Improve the useDisabled hook and Disabled component. ([40631](https://github.com/WordPress/gutenberg/pull/40631)) +- Preferences persistence - mark modified property as not readonly in schema. ([40637](https://github.com/WordPress/gutenberg/pull/40637)) +- Preferences: Improve initial configuration for the new persistence package. ([40715](https://github.com/WordPress/gutenberg/pull/40715)) +- Remove padding prop from popover. ([40544](https://github.com/WordPress/gutenberg/pull/40544)) + +#### Components + +- Add `DatePicker` tests using React Testing Library. ([40754](https://github.com/WordPress/gutenberg/pull/40754)) +- Borders: Remove unused BorderStyleControl component. ([40635](https://github.com/WordPress/gutenberg/pull/40635)) +- Migrate `ConfirmDialog` component's Stories from knobs to controls. ([40164](https://github.com/WordPress/gutenberg/pull/40164)) +- SelectControl: Finish typescript migration. ([40737](https://github.com/WordPress/gutenberg/pull/40737)) +- [components] Use internal `Icon` component for `ToggleGroupControlOptionIcon`. ([40717](https://github.com/WordPress/gutenberg/pull/40717)) +- TextControl: Covert component to TypeScript. ([40633](https://github.com/WordPress/gutenberg/pull/40633)) + + +#### Block Library + +- Comments Query Loop block: Rename to Comments (but keep ID). ([40763](https://github.com/WordPress/gutenberg/pull/40763)) +- Post Comments Form Block: Mark as stable. ([40452](https://github.com/WordPress/gutenberg/pull/40452)) +- Remove Navigation Area block. ([40645](https://github.com/WordPress/gutenberg/pull/40645)) +- Remove testid and update tests. ([40534](https://github.com/WordPress/gutenberg/pull/40534)) +- Refactor: Reuse code of the editor placeholder across Post Comments and Post Comments Form. ([40560](https://github.com/WordPress/gutenberg/pull/40560)) + +#### Data Layer + +- useSelect: Improve transition from async to sync mode. ([40680](https://github.com/WordPress/gutenberg/pull/40680)) + +#### List View + +- Rename list view prop `expandNested` to `isExpanded`. ([40731](https://github.com/WordPress/gutenberg/pull/40731)) +- Tidy list view props and deprecate `BlockNavigationDropdown`. ([40777](https://github.com/WordPress/gutenberg/pull/40777)) + +#### Post Editor + +- Edit Post: Remove unused code. ([40499](https://github.com/WordPress/gutenberg/pull/40499)) + +#### Plugin + +- Remove experimental PWA support for WP-Admin. ([40475](https://github.com/WordPress/gutenberg/pull/40475)) + +### Tools + +- Remove [@mkaz](https://github.com/mkaz) from CODEOWNERS 😢. ([40685](https://github.com/WordPress/gutenberg/pull/40685)) +- Scripts: Add `--dist-tag` flag to the `packages-update` command. ([40514](https://github.com/WordPress/gutenberg/pull/40514)) +- Scripts: Remove broken `lint-md-js` command. ([40511](https://github.com/WordPress/gutenberg/pull/40511)) +- Scripts: Remove deprecated `format-js` command. ([40512](https://github.com/WordPress/gutenberg/pull/40512)) +- Update `oandregal` notifications. ([40549](https://github.com/WordPress/gutenberg/pull/40549)) +- Update native mobile wrangler in rich-text CODEOWNER. ([40783](https://github.com/WordPress/gutenberg/pull/40783)) +- Export hydrate in `@wordpress/element`. ([40723](https://github.com/WordPress/gutenberg/pull/40723)) + +#### Storybook + +- Storybook: Make description-loader more reliable. ([40616](https://github.com/WordPress/gutenberg/pull/40616)) + +#### Testing + +- Comment Template Unit Test: Cover odd/even classes. ([40471](https://github.com/WordPress/gutenberg/pull/40471)) +- Comments block end-to-end test: Remove now-obsolete Post Comments Form block. ([40793](https://github.com/WordPress/gutenberg/pull/40793)) +- Migrate Image Size to Playwright. ([40467](https://github.com/WordPress/gutenberg/pull/40467)) +- Migrate paragraph test to Playwright. ([40779](https://github.com/WordPress/gutenberg/pull/40779)) +- Refactor image-size test to follow Playwright's best practices. ([40644](https://github.com/WordPress/gutenberg/pull/40644)) +- Remove require editor hooks line from full-content test setup. ([40772](https://github.com/WordPress/gutenberg/pull/40772)) +- Tests: Restore real timers after using Jest's fake timers. ([40760](https://github.com/WordPress/gutenberg/pull/40760)) +- Update @testing-library/user-event to stable version (14.1.1). ([40761](https://github.com/WordPress/gutenberg/pull/40761)) +- [Automated Testing]: Fix partial selection copy flaky tests. ([40607](https://github.com/WordPress/gutenberg/pull/40607)) +- Retain Playwright end-to-end test's trace on failure on CI. ([40586](https://github.com/WordPress/gutenberg/pull/40586)) +- Rewrite UnitControl tests in TypeScript. ([40697](https://github.com/WordPress/gutenberg/pull/40697)) +- Fix `batchRest` not throwing errors in Playwright. ([40668](https://github.com/WordPress/gutenberg/pull/40668)) +- Fix replacing with undefined in stripAnsi. ([40384](https://github.com/WordPress/gutenberg/pull/40384)) +- Nav link block PHP tests replace prefixed function with non-prefixed. ([40657](https://github.com/WordPress/gutenberg/pull/40657)) +- Fix the html data is wrong in clipboard emulation in Playwright. ([40638](https://github.com/WordPress/gutenberg/pull/40638)) +- Fix incorrect results in the flaky tests reporter. ([40567](https://github.com/WordPress/gutenberg/pull/40567)) + +#### Build Tooling + +- Eslint: Add TypeScript tests and stories to development files. ([40504](https://github.com/WordPress/gutenberg/pull/40504)) +- Fix: npm script(dev:Package) is not working on Windows. ([40566](https://github.com/WordPress/gutenberg/pull/40566)) +- ESLint Plugin: Fix `recommended` preset when `prettier` is not installed. ([40634](https://github.com/WordPress/gutenberg/pull/40634)) + +## First time contributors + +The following PRs were merged by first time contributors: + +- [@chriszarate](https://github.com/chriszarate): ESLint Plugin: Fix `recommended` preset when `prettier` is not installed. ([40634](https://github.com/WordPress/gutenberg/pull/40634)) +- [@danieliser](https://github.com/danieliser): Fix/block meta icon prop errors. ([40710](https://github.com/WordPress/gutenberg/pull/40710)) +- [@gvgvgvijayan](https://github.com/gvgvgvijayan): Fixes broken links. ([40578](https://github.com/WordPress/gutenberg/pull/40578)) +- [@iansvo](https://github.com/iansvo): URLInput now always has an ID and accessible label. ([40310](https://github.com/WordPress/gutenberg/pull/40310)) +- [@juhi123](https://github.com/juhi123): Migrate Image Size to Playwright. ([40467](https://github.com/WordPress/gutenberg/pull/40467)) +- [@Trapsta](https://github.com/Trapsta): Close overlay menu when clicking an anchor link. ([39625](https://github.com/WordPress/gutenberg/pull/39625)) + + += 13.1.0 = + +## Changelog + +### Enhancements + +- Block Editor: Removed the logic that was preventing the toolbar from hiding when typing within formats. ([40476](https://github.com/WordPress/gutenberg/pull/40476)) +- Block settings: Remove redundant block name from "settings" panels. ([40275](https://github.com/WordPress/gutenberg/pull/40275)) +- Components: Unified black color to gray-900. ([40391](https://github.com/WordPress/gutenberg/pull/40391)) +- Design Tools, Borders: Use new border control components in block support. ([37770](https://github.com/WordPress/gutenberg/pull/37770)) +- Document Setting: Removed plugin icon fallback. ([40355](https://github.com/WordPress/gutenberg/pull/40355)) +- Icons: Added new duotone filter icon. ([40435](https://github.com/WordPress/gutenberg/pull/40435)) + +#### Block Library + +- Categories: Added new option to show or hide empty categories. ([39426](https://github.com/WordPress/gutenberg/pull/39426)) +- Column: Add border support to column blocks. ([39967](https://github.com/WordPress/gutenberg/pull/39967)) +- Comments: Create comments title with simple styling. ([40419](https://github.com/WordPress/gutenberg/pull/40419)) +- Media & Text: Removed font size declaration from template. ([40329](https://github.com/WordPress/gutenberg/pull/40329)) +- Navigation: Renamed Navigation Menus to Navigation. ([40413](https://github.com/WordPress/gutenberg/pull/40413)) + +### Bug Fixes + +- Patterns API: Add 'inserter' to the schema. ([40416](https://github.com/WordPress/gutenberg/pull/40416)) +- Toolbar: Fixed block toolbar text button padding. ([40438](https://github.com/WordPress/gutenberg/pull/40438)) + +#### Block Library + +- Post Featured Image: Used translatable post type label. ([40378](https://github.com/WordPress/gutenberg/pull/40378)) +- Comments: + - Comment template: Call `comment_class()` before recursing into child comments. ([40455](https://github.com/WordPress/gutenberg/pull/40455)) + - Fixed comments query loop pagination not respecting Discussion Settings. ([40284](https://github.com/WordPress/gutenberg/pull/40284)) + - Fixed comments no results placeholder not appearing. ([40234](https://github.com/WordPress/gutenberg/pull/40234)) + - Post Comments Form: Fix layout quirks. ([40359](https://github.com/WordPress/gutenberg/pull/40359)) +- Embed: + - Fixed inline preview cut-off when editing URL. ([35326](https://github.com/WordPress/gutenberg/pull/35326)) + - Use preview html for flickr embed previews in editor. ([40187](https://github.com/WordPress/gutenberg/pull/40187)) +- Image: Added window to the optional chaining. ([40394](https://github.com/WordPress/gutenberg/pull/40394)) + +### Styles + +- Add a debounce to the custom color onChange event. ([40285](https://github.com/WordPress/gutenberg/pull/40285)) +- Do not render global styles coming from the server in the site editor. ([40185](https://github.com/WordPress/gutenberg/pull/40185)) +- Elements: Add styles to the footer before the block is rendered. ([37728](https://github.com/WordPress/gutenberg/pull/37728)) +- Fixed duotone rendering in site editor. ([37727](https://github.com/WordPress/gutenberg/pull/37727)) + +### Site Editor + +- Don't render the secondary sidebar in text mode. ([40337](https://github.com/WordPress/gutenberg/pull/40337)) +- Fixed webfont loading in the Site Editor. ([40262](https://github.com/WordPress/gutenberg/pull/40262)) + +### Block Editor + +- Block Locking, useBlockLock: Always check inherited 'templateLock' status. ([40263](https://github.com/WordPress/gutenberg/pull/40263)) +- i18n: Fix incorrect '_n' usage. ([40292](https://github.com/WordPress/gutenberg/pull/40292)) +- List View, useBlockDisplayInformation: Return anchor for block variations in list view. ([40458](https://github.com/WordPress/gutenberg/pull/40458)) +- Multi-selection: Copy whole block when selection is collapsed. ([40374](https://github.com/WordPress/gutenberg/pull/40374)) +- Add optional chaining in case taxonomy visibility is not defined. ([40532](https://github.com/WordPress/gutenberg/pull/40532)) + +### Accessibility + +- Post editing: After closing welcome dialog, if content is empty, focus title field. ([40195](https://github.com/WordPress/gutenberg/pull/40195)) +- Fixed focus loss happening when installing blocks from the directory. ([40340](https://github.com/WordPress/gutenberg/pull/40340)) +- Fixed focus loss when creating pages from link control search results. ([40342](https://github.com/WordPress/gutenberg/pull/40342)) +- Fixed focus loss when navigating the guide component. ([40324](https://github.com/WordPress/gutenberg/pull/40324)) +- Navigation block: After choosing an option from Select Menu, focus after block rerender. ([40390](https://github.com/WordPress/gutenberg/pull/40390)) +- Block Styles: Remove unnecessary button role and 'onKeyDown' handler. ([40427](https://github.com/WordPress/gutenberg/pull/40427)) + +### Performance + +- Added a context param to sidebar entity request. ([40148](https://github.com/WordPress/gutenberg/pull/40148)) + +### Developer Experience + +- [wp-env]: Add support to override `core` by the `WP_ENV_CORE` environment variable. ([40407](https://github.com/WordPress/gutenberg/pull/40407)) +- Create Block: Fix warnings and errors reported during scaffolding and validation. ([40479](https://github.com/WordPress/gutenberg/pull/40479)) + +### Documentation + +- Added README for Gradient and NavigableToolbar. ([25580](https://github.com/WordPress/gutenberg/pull/25580)) +- Added documentation for `ancestor` property in block metadata. ([40027](https://github.com/WordPress/gutenberg/pull/40027)) +- Fixed OnNumberOfItemsChange event docs error. ([39942](https://github.com/WordPress/gutenberg/pull/39942)) +- InputControl: Improved type annotations and stories. ([40119](https://github.com/WordPress/gutenberg/pull/40119)) +- Patterns: Documented 'inserter' argument. ([40425](https://github.com/WordPress/gutenberg/pull/40425)) +- Removed WordPress 5.9 specific warning from FSE documentation. ([40274](https://github.com/WordPress/gutenberg/pull/40274)) +- Replaced fixtures with inline parsed code. ([40428](https://github.com/WordPress/gutenberg/pull/40428)) +- Updated individual block locking section. ([40372](https://github.com/WordPress/gutenberg/pull/40372)) +- Updates `theme.json` documentation for theme authors. ([40005](https://github.com/WordPress/gutenberg/pull/40005)) +- Unwrapped wrapped selectors when inferring types of JSDoc params. ([40236](https://github.com/WordPress/gutenberg/pull/40236)) + +### Code Quality + +#### Block Library + +- Navigation: Remove async useEffect. ([40373](https://github.com/WordPress/gutenberg/pull/40373)) +- HTML: Remove pointless `<span>`s in Custom HTML block controls. ([39820](https://github.com/WordPress/gutenberg/pull/39820)) +- Comments Query Loop: comment meta data isn’t queued for lazy loading. ([40242](https://github.com/WordPress/gutenberg/pull/40242)) +- Split navigation block view script. ([40135](https://github.com/WordPress/gutenberg/pull/40135)) +- Spacer: Added constants file to Spacer block. ([40446](https://github.com/WordPress/gutenberg/pull/40446)) + +#### Components + +- Stop exporting individual color objects from color values file. ([40387](https://github.com/WordPress/gutenberg/pull/40387)) +- Added reusable BlockPopover and BlockPopoverInbetween components. ([40441](https://github.com/WordPress/gutenberg/pull/40441)) +- Cleaned BlockMover component and styles. ([40379](https://github.com/WordPress/gutenberg/pull/40379)) + +#### Packages + +- Block Editor: Remove unused sub-components in list view. ([40448](https://github.com/WordPress/gutenberg/pull/40448)) +- Data: Cancel render queue in a more straightforward way. ([40433](https://github.com/WordPress/gutenberg/pull/40433)) + +#### Plugin + +- Added `edit` context to patterns REST controllers. ([40259](https://github.com/WordPress/gutenberg/pull/40259)) +- Add @talldan as a codeowner for wordpress/preferences. ([40295](https://github.com/WordPress/gutenberg/pull/40295)) +- Cleaned up non-dynamic block registration list. ([40426](https://github.com/WordPress/gutenberg/pull/40426)) +- Moved list and quote block registration to experimental blocks. ([40350](https://github.com/WordPress/gutenberg/pull/40350)) +- Moved the logic for iframed editor to WP 6.0 compat. ([40278](https://github.com/WordPress/gutenberg/pull/40278)) +- Post WordPress 6.0 Beta 1 cleanup. ([40349](https://github.com/WordPress/gutenberg/pull/40349)) +- Rename `wp_translate_settings_using_i18n_schema` to `translate_settings_using_i18n_schema`. ([40227](https://github.com/WordPress/gutenberg/pull/40227)) +- Plugin: Fix fatal error for older WP/PHP versions. ([40538](https://github.com/WordPress/gutenberg/pull/40538)) + +### Tools + +#### Testing + +- Playwright migration: + - Fixed outdated playwright snapshot directory. ([40422](https://github.com/WordPress/gutenberg/pull/40422)) + - Tried to fix flaky playwright tests not being reported. ([40290](https://github.com/WordPress/gutenberg/pull/40290)) + - E2E: Cross-platform support for Playwright end-to-end tests. ([39765](https://github.com/WordPress/gutenberg/pull/39765)) + - Migrate `post-editor-template-mode` to Playwright. ([40175](https://github.com/WordPress/gutenberg/pull/40175)) + - Migrate block api test to Playwright. ([40217](https://github.com/WordPress/gutenberg/pull/40217)) + - Migrate document settings test to playwright. ([40258](https://github.com/WordPress/gutenberg/pull/40258)) + - Migrate style variation test to Playwright. ([40216](https://github.com/WordPress/gutenberg/pull/40216)) +- Quote: Verify that user can type right after inserting the quote block. ([40466](https://github.com/WordPress/gutenberg/pull/40466)) +- `useSelect`: + - Add async mode test suite and fix two bugs. ([40321](https://github.com/WordPress/gutenberg/pull/40321)) + - Update unit tests to testing-library. ([40229](https://github.com/WordPress/gutenberg/pull/40229)) +- Block supports: Unregister block in PHP unit tests. ([40239](https://github.com/WordPress/gutenberg/pull/40239)) +- CreateBlock: Fix escaping for error message in create block test. ([40473](https://github.com/WordPress/gutenberg/pull/40473)) +- Comments Query Loop: Add end-to-end comments tests to stable, wait for selector on set option. ([40405](https://github.com/WordPress/gutenberg/pull/40405)) + +#### Build Tooling + +- Added the missing class-wp-style-engine-gutenberg.php in the plugin build. ([40191](https://github.com/WordPress/gutenberg/pull/40191)) +- Fixed commands containing dot-slashes in npm scripts. ([39739](https://github.com/WordPress/gutenberg/pull/39739)) +- Added new TypeScript project for unit tests. ([39436](https://github.com/WordPress/gutenberg/pull/39436)) +- Fixed the flaky template editor mode test. ([40325](https://github.com/WordPress/gutenberg/pull/40325)) +- Excluded BEM class from stylelint @wordpress/scripts. ([37531](https://github.com/WordPress/gutenberg/pull/37531)) + +## First time contributors + +The following PRs were merged by first time contributors: + +- @chintu51: OnNumberOfItemsChange event attribute issue. ([39942](https://github.com/WordPress/gutenberg/pull/39942)) +- @khoipro: Scripts: Exclude BEM class from stylelint @wordpress/scripts. ([37531](https://github.com/WordPress/gutenberg/pull/37531)) +- @mauriac: Add new option to show or hide empty categories. ([39426](https://github.com/WordPress/gutenberg/pull/39426)) +- @roseg43: Media & Text: Remove font size declaration from template. ([40329](https://github.com/WordPress/gutenberg/pull/40329)) +- @zutigrm: Update `theme.json` documentation for theme authors. ([40005](https://github.com/WordPress/gutenberg/pull/40005)) + +## Contributors + +The following contributors merged PRs in this release: + +@aaronrobertshaw @adamziel @ajlende @alexstine @aristath @c4rl0sbr4v0 @chintu51 @ciampo @dmsnell @EliezerSPP @fabiankaegy @fluiddot @georgeh @geriux @glendaviesnz @gziolo @jasmussen @jsnajdr @JustinyAhin @kevin940726 @khoipro @Mamaduka @mashikag @mauriac @mchowning @michalczaplinski @mirka @ntsekouras @oandregal @ockham @peterwilsoncc @ramonjd @roseg43 @scruffian @SiobhyB @t-hamano @talldan @tomasztunik @torounit @youknowriad @ZebulanStanphill @zutigrm + + += 13.0.0 = + +## Changelog + +### Enhancements + +#### Block Library +- Archives: Add yearly, weekly and daily archive settings to the archives block. ([38440](https://github.com/WordPress/gutenberg/pull/38440)) +- Avatar: Increase the size of the Avatar image to be 2x of the width chosen. ([39728](https://github.com/WordPress/gutenberg/pull/39728)) +- Code: Preserves source of unrecognized blocks inside of Code Editor. ([39523](https://github.com/WordPress/gutenberg/pull/39523)) +- Column Block: Add blockGap support. ([40122](https://github.com/WordPress/gutenberg/pull/40122)) +- Comment blocks: Update block descriptions. ([39735](https://github.com/WordPress/gutenberg/pull/39735)) +- Comments Query Loop: +- Always inherit from core Discussion settings. ([39664](https://github.com/WordPress/gutenberg/pull/39664)) +- Update default template. ([40165](https://github.com/WordPress/gutenberg/pull/40165)) +- Cover: Makes cover block dynamic and adds featured image binding. ([39658](https://github.com/WordPress/gutenberg/pull/39658)) +- Gallery: Add css var to enable theme authors to set a default gallery gap. ([40008](https://github.com/WordPress/gutenberg/pull/40008)) +- Group: +- New Group, Stack, Row block descriptions. ([40176](https://github.com/WordPress/gutenberg/pull/40176)) +- Cover: Always allow transform from Group block, add handling for Row and Stack variations. ([40212](https://github.com/WordPress/gutenberg/pull/40212)) +- Add the stack block variation to the group block. ([39690](https://github.com/WordPress/gutenberg/pull/39690)) +- Add group block variations to Group toolbar. ([39920](https://github.com/WordPress/gutenberg/pull/39920)) +- Block Variations Transforms: Display as icon buttons if each block variation has a unique icon. ([40036](https://github.com/WordPress/gutenberg/pull/40036)) +- Improve Stack and Row setup states. ([39935](https://github.com/WordPress/gutenberg/pull/39935)) +- Turn the wrap to multiple lines option off by default on the row block. ([40171](https://github.com/WordPress/gutenberg/pull/40171)) +- List: Add a box-sizing border-box to lists. ([39895](https://github.com/WordPress/gutenberg/pull/39895)) +- Navigation: +- Avoid automatic saving of uncontrolled Nav blocks. ([39883](https://github.com/WordPress/gutenberg/pull/39883)) +- Auto set first Navigation Menu as current if only 1 exists. ([39880](https://github.com/WordPress/gutenberg/pull/39880)) +- Enable navigation nesting to be filtered and manually set. ([38621](https://github.com/WordPress/gutenberg/pull/38621)) +- Improve feedback on Nav Menu deletion. ([39677](https://github.com/WordPress/gutenberg/pull/39677)) +- Skip text decoration support serialization and apply as CSS class. ([36345](https://github.com/WordPress/gutenberg/pull/36345)) +- Navigation Link: Add support for navigation-link descriptions. ([39808](https://github.com/WordPress/gutenberg/pull/39808)) +- Post Comments: Deprecate the Post Comments block. ([40167](https://github.com/WordPress/gutenberg/pull/40167)) +- Post Tags: Update the Post Tags block icon. ([40096](https://github.com/WordPress/gutenberg/pull/40096)) +- Query Loop: Update query block creation and replacement flows. ([38997](https://github.com/WordPress/gutenberg/pull/38997)) +- Query page numbers block: Add same supports that next/prev page have. ([39835](https://github.com/WordPress/gutenberg/pull/39835)) +- Quote: Add color support to the quote block. ([39899](https://github.com/WordPress/gutenberg/pull/39899)) +- Read more: Add support for text color. ([39796](https://github.com/WordPress/gutenberg/pull/39796)) +- RSS: +- Add missing classnames. ([39716](https://github.com/WordPress/gutenberg/pull/39716)) +- Try prepending HTTP to a URL. ([39758](https://github.com/WordPress/gutenberg/pull/39758)) +- Update max items. ([39819](https://github.com/WordPress/gutenberg/pull/39819)) +- Site Logo and Featured Image: Add duotone to placeholders. ([40085](https://github.com/WordPress/gutenberg/pull/40085)) +- Social Links: Disable vertical alignment controls for navigation and social links. ([40182](https://github.com/WordPress/gutenberg/pull/40182)) +- Template Part: Adjust the layout of thumbnails in the template part replacement modal. ([39766](https://github.com/WordPress/gutenberg/pull/39766)) + +#### Components  +- Borders: Add new BorderControl component. ([37769](https://github.com/WordPress/gutenberg/pull/37769)) +- Borders: Add BorderBoxControl component. ([38876](https://github.com/WordPress/gutenberg/pull/38876)) +- BorderControl: Add ability to apply custom CSS classes to popover content. ([39753](https://github.com/WordPress/gutenberg/pull/39753)) +- BorderControl: Fix vertical alignment of inner slider control. ([39750](https://github.com/WordPress/gutenberg/pull/39750)) +- Card: Adjust border radius size. ([40032](https://github.com/WordPress/gutenberg/pull/40032)) +- ColorPalette: Add SlotFillProvider to story to correct tooltip positioning. ([39674](https://github.com/WordPress/gutenberg/pull/39674)) +- UnitControl: Forward onBlur prop as expected. ([39589](https://github.com/WordPress/gutenberg/pull/39589)) +- Add ToggleGroupControlOptionIcon component. ([39760](https://github.com/WordPress/gutenberg/pull/39760)) +- CustomSelectControl: Make chevron consistent with SelectControl. ([40049](https://github.com/WordPress/gutenberg/pull/40049)) + +#### Styles Sidebar + +- Add search in the block types list. ([39117](https://github.com/WordPress/gutenberg/pull/39117)) +- Add labels to the global styles variations. ([39322](https://github.com/WordPress/gutenberg/pull/39322)) +- Show translated strings coming from global styles variations. ([39960](https://github.com/WordPress/gutenberg/pull/39960)) +- Adjust icon vertical alignment with labels. ([39982](https://github.com/WordPress/gutenberg/pull/39982)) +- Tweak preview box. ([39978](https://github.com/WordPress/gutenberg/pull/39978)) +- Update Other styles to Browse styles. ([39752](https://github.com/WordPress/gutenberg/pull/39752)) +- Wrap the preview box in the CardMedia component. ([39980](https://github.com/WordPress/gutenberg/pull/39980)) + +#### Block Editor + +- BlockToolbar: Show Group button in toolbar when multiple blocks are selected. ([39710](https://github.com/WordPress/gutenberg/pull/39710)) +- Improvements to use-focus-first-element and utils (dom). ([39461](https://github.com/WordPress/gutenberg/pull/39461)) +- Multi-selection: Allow partial block selection. ([38892](https://github.com/WordPress/gutenberg/pull/38892)) +- [Multi-selection]: Copy/cut partial selected blocks. ([40098](https://github.com/WordPress/gutenberg/pull/40098))- Order ids in getClientIdsOfDescendants and getClientIdsWithDescendants selectors. ([39985](https://github.com/WordPress/gutenberg/pull/39985)) +- Revert Try: Summary panel excerpt max-height.. ([40127](https://github.com/WordPress/gutenberg/pull/40127)) +- Link directly to files stored in the Media Library using the Link UI. ([39701](https://github.com/WordPress/gutenberg/pull/39701)) +- Partial multi-select: Fix error with dead key. ([39850](https://github.com/WordPress/gutenberg/pull/39850)) + +#### Post Editor + +- Document Settings: Summary panel excerpt max-height. ([40090](https://github.com/WordPress/gutenberg/pull/40090)) +- Migrate editor package isPublishSidebarEnabled to preferences store. ([39707](https://github.com/WordPress/gutenberg/pull/39707)) +- Migrate post editor panels state to preferences store. ([39604](https://github.com/WordPress/gutenberg/pull/39604)) +- Migrate interface enableItems data to preferences package. ([39449](https://github.com/WordPress/gutenberg/pull/39449)) +- Try: Remove iframe 100% width rule. ([38614](https://github.com/WordPress/gutenberg/pull/38614)) + +#### Site Editor + +- Add a dedicated sidebar for managing layout of navigation menus. ([39290](https://github.com/WordPress/gutenberg/pull/39290), [40083](https://github.com/WordPress/gutenberg/pull/40083)) + +#### Block Locking + +- Add the useBlockLock hook. ([40210](https://github.com/WordPress/gutenberg/pull/40210), [40220](https://github.com/WordPress/gutenberg/pull/40220)) +- Display lock status in List View. ([40088](https://github.com/WordPress/gutenberg/pull/40088)) +- Styling changes for modal. ([39998](https://github.com/WordPress/gutenberg/pull/39998)) +- Try: Reusable block edit locking. ([39950](https://github.com/WordPress/gutenberg/pull/39950)) +- Block Toolbar: Fix lock icon focus. ([40302](https://github.com/WordPress/gutenberg/pull/40302)) +#### Reusable Blocks + +- Make the Cancel button tertiary. ([39872](https://github.com/WordPress/gutenberg/pull/39872)) +- Use the symbol icon for Reusable Block menu item. ([40020](https://github.com/WordPress/gutenberg/pull/40020)) + +#### CSS & Styling + +- Revert Global styles: Remove block gap control. ([39845](https://github.com/WordPress/gutenberg/pull/39845)) +- Block Styles: Revert changing default overflow-wrap to all headers, lists, and paragraphs. ([39846](https://github.com/WordPress/gutenberg/pull/39846)) +- Style Engine: +- Add margin support. ([39790](https://github.com/WordPress/gutenberg/pull/39790)) +- Block supports backend. ([39446](https://github.com/WordPress/gutenberg/pull/39446)) + +#### Design Tools + +- Add vertical alignment to blocks using flex control. ([40013](https://github.com/WordPress/gutenberg/pull/40013)) +- Block Supports: Allow skipping serialization of individual features. ([36293](https://github.com/WordPress/gutenberg/pull/36293)) + +#### Block API + +- Allow multiple view scripts per block. ([36176](https://github.com/WordPress/gutenberg/pull/36176)) + +#### Patterns + +- Option to pick a pattern on page creation. ([40034](https://github.com/WordPress/gutenberg/pull/40034)) +- Translate pattern metadata (title & description). ([40047](https://github.com/WordPress/gutenberg/pull/40047)) +- Remove batch support declaration from block patterns REST, fix navigation areas. ([39834](https://github.com/WordPress/gutenberg/pull/39834)) + +#### Theme Export + +- Change the schema URL. ([40106](https://github.com/WordPress/gutenberg/pull/40106)) +- Convert spaces to tabs in theme.json. ([39751](https://github.com/WordPress/gutenberg/pull/39751)) +- If the theme declares a version number then add a schema. ([39775](https://github.com/WordPress/gutenberg/pull/39775)) +- Remove default theme.json properties on export. ([39848](https://github.com/WordPress/gutenberg/pull/39848)) +- Restore appearanceTools when exporting a theme. ([39840](https://github.com/WordPress/gutenberg/pull/39840)) +- Sort theme.json properties. ([39842](https://github.com/WordPress/gutenberg/pull/39842)) +- Backport changes for Theme Export from 6.0. ([40215](https://github.com/WordPress/gutenberg/pull/40215)) + +#### Webfonts + +- Do not trigger warning on already enqueued font families. ([40060](https://github.com/WordPress/gutenberg/pull/40060)) +- Register webfonts defined in styles variations. ([39886](https://github.com/WordPress/gutenberg/pull/39886)) +- Register and enqueue fonts by font-family. ([39559](https://github.com/WordPress/gutenberg/pull/39559)) +- Return font family slug when registering a webfont. ([40120](https://github.com/WordPress/gutenberg/pull/40120)) + +### Bug Fixes + +#### Block Library + +- Avatar: +- Do not show User Selection inside Comments Loop, on the Site Editor. ([40100](https://github.com/WordPress/gutenberg/pull/40100)) +- Fix wrong aligment. ([39794](https://github.com/WordPress/gutenberg/pull/39794)) +- Buttons: Fix focus on insert. ([39684](https://github.com/WordPress/gutenberg/pull/39684)) +- Comments Query Loop: Fix pagination setting not being applied on frontend. ([40146](https://github.com/WordPress/gutenberg/pull/40146)) +- Group: Fix variation isActive check to cover case where type is not set, but inherit is. ([40065](https://github.com/WordPress/gutenberg/pull/40065)) +- Post Author: Fix duplicate Additional CSS classes post author, etc. ([39759](https://github.com/WordPress/gutenberg/pull/39759)) +- Post Comments Form: Allow to add it to the Site Editor. ([40108](https://github.com/WordPress/gutenberg/pull/40108)) +- Post Template: Add missing wp-block-post class in the editor. ([40010](https://github.com/WordPress/gutenberg/pull/40010)) +- Post Terms: Use variation title in placeholder. ([40092](https://github.com/WordPress/gutenberg/pull/40092)) +- Query Loop: Fix some missing term sanitizations. ([39970](https://github.com/WordPress/gutenberg/pull/39970)) +- RSS: Add missing self-URL check. ([39756](https://github.com/WordPress/gutenberg/pull/39756)) +- Site Logo: +- Correctly reset the site icon. ([40046](https://github.com/WordPress/gutenberg/pull/40046)) +- Fix duplicate Additional CSS classes site-logo Block & social-link Block. ([39777](https://github.com/WordPress/gutenberg/pull/39777)) +- Fix adding the site icon. ([40041](https://github.com/WordPress/gutenberg/pull/40041)) +- Template Parts: Limit slug to Latin chars. ([38861](https://github.com/WordPress/gutenberg/pull/38861)) + +#### Components + +- Components utils: Use Object.assign instead of { ...spread } syntax. ([39932](https://github.com/WordPress/gutenberg/pull/39932)) +- ToggleGroupControl: Reintroduce backdrop animation. ([40021](https://github.com/WordPress/gutenberg/pull/40021)) + +#### Block Editor + +- List View: +- Only show ellipsis on first selected item or when focused. ([40174](https://github.com/WordPress/gutenberg/pull/40174)) +- Wrap title of block in \<ListView\> in a span. ([39687](https://github.com/WordPress/gutenberg/pull/39687)) +- Disable dragging when block movement is locked. ([40086](https://github.com/WordPress/gutenberg/pull/40086)) +- Fix list-view focus radius. ([39969](https://github.com/WordPress/gutenberg/pull/39969)) +- MultiSelectSidebar: Fix spacing of color panel items. ([40071](https://github.com/WordPress/gutenberg/pull/40071)) +- Fix Block Editor Iframe component to render in standards mode. ([38855](https://github.com/WordPress/gutenberg/pull/38855)) +- Fix collapsing issue with the URL input suggestion container. ([40147](https://github.com/WordPress/gutenberg/pull/40147)) +- Try: Fix regression with mover and block control sizes. ([40037](https://github.com/WordPress/gutenberg/pull/40037)) + +#### Site Editor + +- Add block styles slot to the site editor so block style previews can be rendered. ([40245](https://github.com/WordPress/gutenberg/pull/40245)) + +#### Block Locking + +- Reusable Blocks: Hide Convert to Blocks when locked. ([39939](https://github.com/WordPress/gutenberg/pull/39939)) +- Template Parts: Hide Detach blocks when locked. ([40000](https://github.com/WordPress/gutenberg/pull/40000)) +- Stabilize settings. ([40145](https://github.com/WordPress/gutenberg/pull/40145)) +- Display block title when no switcher is available. ([40207](https://github.com/WordPress/gutenberg/pull/40207)) + +#### Styles Sidebar + +- Fix global style variations previews not showing correct height. ([39737](https://github.com/WordPress/gutenberg/pull/39737)) +- Restore defaultPalette/defaultGradients to only hide UI. ([39966](https://github.com/WordPress/gutenberg/pull/39966)) +- Global Styles: Fix alignment of Global Styles color controls. ([40081](https://github.com/WordPress/gutenberg/pull/40081)) +- Global Styles: Fix black inconsistencies in sidebar. ([40055](https://github.com/WordPress/gutenberg/pull/40055)) + +#### Design Tools + +- Block gap: Check for splitOnAxis in the onChange callback. ([39788](https://github.com/WordPress/gutenberg/pull/39788)) +- Duotone: Backport changes made to duotone in core. ([40067](https://github.com/WordPress/gutenberg/pull/40067)) +- Layout: Only show inherit toggle in default layout (hide on Row block variation). ([39665](https://github.com/WordPress/gutenberg/pull/39665)) + +#### Meta Boxes + +- Fix incorrect meta box position when switching device preview. ([38910](https://github.com/WordPress/gutenberg/pull/38910)) + +#### Other packages + +- Data: Exclude all meta-selectors, handle selectors without resolvers. ([39976](https://github.com/WordPress/gutenberg/pull/39976)) +- Date: Fix ordinal token (S), RFC2822 token (r), and timezone offset handling. ([39670](https://github.com/WordPress/gutenberg/pull/39670)) +- RichText: Fix splitValue with undefined selection. ([39822](https://github.com/WordPress/gutenberg/pull/39822)) +- Scripts: Add vendor/ to .markdownlintignore. ([39724](https://github.com/WordPress/gutenberg/pull/39724)) + +### Plugin + +- Fix REST API class redeclaration. ([40265](https://github.com/WordPress/gutenberg/pull/40265)) + +### Accessibility + +- Add select-parent button to block toolbar More options menu. ([40105](https://github.com/WordPress/gutenberg/pull/40105)) +- Hide block movers in new navigation sidebar. ([40039](https://github.com/WordPress/gutenberg/pull/40039)) +- Accessibility improvements to the query pagination block. ([39536](https://github.com/WordPress/gutenberg/pull/39536)) +- Conditionally set secondary sidebar landmark region labels. ([40296](https://github.com/WordPress/gutenberg/pull/40296)) +- List View: Indicate locked status in block label. ([40270](https://github.com/WordPress/gutenberg/pull/40270)) + +### Performance + +- Optimize getClientIdsOfDescendants and getClientIdsWithDescendants selectors. ([40054](https://github.com/WordPress/gutenberg/pull/40054)) +- Try to optimize getClientIdsOfDescendants using createSelector memoization. ([40112](https://github.com/WordPress/gutenberg/pull/40112)) + +### Developer Experience + +- create-block: Add npmDevDependencies as a template variable. ([39723](https://github.com/WordPress/gutenberg/pull/39723)) +- Schemas, block.json: +- Add ancestor prop to schema. ([39894](https://github.com/WordPress/gutenberg/pull/39894)) +- Add supports.lock to schema. ([40161](https://github.com/WordPress/gutenberg/pull/40161)) +- Schemas, theme.json: +- Add Avatar to schema. ([40189](https://github.com/WordPress/gutenberg/pull/40189)) +- Add title key to i18n schema. ([39936](https://github.com/WordPress/gutenberg/pull/39936)) +- Scripts: Add new flag to allow customization of the src directory. ([39618](https://github.com/WordPress/gutenberg/pull/39618)) + +### Experiments + +- List v2: +- Add migration from v1 to v2. ([39799](https://github.com/WordPress/gutenberg/pull/39799), [39892](https://github.com/WordPress/gutenberg/pull/39892)) +- Add new list item icon. ([39929](https://github.com/WordPress/gutenberg/pull/39929)) +- Avoid using global select. ([39821](https://github.com/WordPress/gutenberg/pull/39821), [39849](https://github.com/WordPress/gutenberg/pull/39849)) +- Handle Enter in empty list items. ([39858](https://github.com/WordPress/gutenberg/pull/39858)) +- Outdent and Indent actions for the list block v2. ([39773](https://github.com/WordPress/gutenberg/pull/39773)) +- Quote v2: +- Add \_\_experimentalEnableQuoteBlockV2 flag. ([40089](https://github.com/WordPress/gutenberg/pull/40089)) +- Add align feature to have feature parity with v1. ([39876](https://github.com/WordPress/gutenberg/pull/39876)) +- Add innerblocks support. ([39704](https://github.com/WordPress/gutenberg/pull/39704)) +- Add migration. ([39844](https://github.com/WordPress/gutenberg/pull/39844)) +- Add transforms. ([39718](https://github.com/WordPress/gutenberg/pull/39718)) +- Bootstrap flag in experiments page. ([39703](https://github.com/WordPress/gutenberg/pull/39703)) +- Retain selection after transform. ([39838](https://github.com/WordPress/gutenberg/pull/39838)) +- Revert markup changes. ([39824](https://github.com/WordPress/gutenberg/pull/39824)) +- Fix how attributes are registered. ([39729](https://github.com/WordPress/gutenberg/pull/39729)) +- \_\_experimentalBlockPatterns: Load them with REST API. ([39185](https://github.com/WordPress/gutenberg/pull/39185)) + +### Documentation + +- Add missing props mediaPreview in the ReadMe. ([38114](https://github.com/WordPress/gutenberg/pull/38114)) +- Add note to Handbook themes page about FSE eligible themes. ([39662](https://github.com/WordPress/gutenberg/pull/39662)) +- Adds links to contributing pages to README file. ([39959](https://github.com/WordPress/gutenberg/pull/39959)) +- Block-Editor Docs: Link to component readme. ([37975](https://github.com/WordPress/gutenberg/pull/37975)) +- Components: Add changelogs for new border control components. ([39747](https://github.com/WordPress/gutenberg/pull/39747)) +- Components: Add more prominent documentation around popover use. ([39709](https://github.com/WordPress/gutenberg/pull/39709)) +- Disabled: Add documentation for Disabled.Context. ([39627](https://github.com/WordPress/gutenberg/pull/39627)) +- Docs: Update README.md for FormToggle component. ([36932](https://github.com/WordPress/gutenberg/pull/36932)) +- Docs: Update block-filters.md. ([38462](https://github.com/WordPress/gutenberg/pull/38462)) +- FIX missing images of Gutenberg Data Apps document. ([39499](https://github.com/WordPress/gutenberg/pull/39499)) +- Fix grammar error in documentation. ([40009](https://github.com/WordPress/gutenberg/pull/40009)) +- Fix linguistic error in theme-json.md. ([39995](https://github.com/WordPress/gutenberg/pull/39995)) +- Import the Notice package in the example. ([40022](https://github.com/WordPress/gutenberg/pull/40022)) +- Sidebar: Update post editor help links to use newer documentation. ([39688](https://github.com/WordPress/gutenberg/pull/39688)) +- Style Engine: Remove since 6.0 comment. ([40006](https://github.com/WordPress/gutenberg/pull/40006)) +- Update typo in the code comment. ([39429](https://github.com/WordPress/gutenberg/pull/39429)) +- Updating versions in WordPress to add 5.9.x & 6.0. ([39866](https://github.com/WordPress/gutenberg/pull/39866)) + +### Code Quality + +#### Block Library +- Avatar: Two unneeded spaces removed. ([39902](https://github.com/WordPress/gutenberg/pull/39902)) +- List: List block indent outdent naming. ([39956](https://github.com/WordPress/gutenberg/pull/39956)) +- HTML: Use Disabled.Context. ([39669](https://github.com/WordPress/gutenberg/pull/39669)) +- Gallery: Use wp\_unique\_id() instead of uniqid() in block\_core\_gallery\_render(). ([39983](https://github.com/WordPress/gutenberg/pull/39983)) + +#### Block Editor + +- Block Lock toolbar remove leftovers. ([39881](https://github.com/WordPress/gutenberg/pull/39881)) +- List View: Remove unwanted default false in ListView branch component. ([39719](https://github.com/WordPress/gutenberg/pull/39719)) + +#### Components + +- BaseControl: Migrate to TypeScript. ([39468](https://github.com/WordPress/gutenberg/pull/39468)) + +#### Plugin + +- Add the missing class-wp-style-engine-gutenberg.php in the plugin build ([40191](https://github.com/WordPress/gutenberg/pull/40191)) +- Block Editor: Stabilize generateAnchors setting. ([40143](https://github.com/WordPress/gutenberg/pull/40143)) +- Correctly classify functionality in the lib folder. ([39972](https://github.com/WordPress/gutenberg/pull/39972)) +- Consolidate WP\_Theme\_JSON\_Resolver changes in both lib/compat/wordpress-6.0 and lib/experimental. ([40140](https://github.com/WordPress/gutenberg/pull/40140)) +- Don't run preg\_match() on null values. ([39927](https://github.com/WordPress/gutenberg/pull/39927)) +- Guard code from redeclaration errors after WP core merge. ([39888](https://github.com/WordPress/gutenberg/pull/39888)) +- Move files from lib to the compat subfolder. ([39904](https://github.com/WordPress/gutenberg/pull/39904)) +- Move changes from [\#38681](https://github.com/WordPress/gutenberg/pull/38681) and [\#39966](https://github.com/WordPress/gutenberg/pull/39966) to compat 6.0. ([40123](https://github.com/WordPress/gutenberg/pull/40123)) +- Plugin: Ensure that PHP code for blocks is correctly assigned to WP releases. ([40179](https://github.com/WordPress/gutenberg/pull/40179)) +- Remove the experimental Progressive Web Apps (PWA) integration. ([38810](https://github.com/WordPress/gutenberg/pull/38810)) +- Revert Plugin: Remove the experimental Progressive Web Apps (PWA) integration. ([39930](https://github.com/WordPress/gutenberg/pull/39930)) +- Theme JSON compat: Refer to static instead of self for ROOT\_BLOCK\_SELECTOR const. ([39921](https://github.com/WordPress/gutenberg/pull/39921)) +- i18n: Add context to 'None' strings. ([40273](https://github.com/WordPress/gutenberg/pull/40273)) + +#### Packages + +- Core Data: +- Migrate entities.js to Typescript. ([39547](https://github.com/WordPress/gutenberg/pull/39547)) +- Rename core-data/src/selectors.js to selectors.ts (TypeScript). ([40026](https://github.com/WordPress/gutenberg/pull/40026)) +- Fixes necessary for converting to TypeScript. ([39211](https://github.com/WordPress/gutenberg/pull/39211)) +- Create type for undo state and initialize atomically. ([39659](https://github.com/WordPress/gutenberg/pull/39659)) +- Expand type signature of useQuerySelect. ([39656](https://github.com/WordPress/gutenberg/pull/39656)) +- Fix minor type issue in onSubKey. ([39655](https://github.com/WordPress/gutenberg/pull/39655)) +- Data: +- Mark/data apis unstable. ([40028](https://github.com/WordPress/gutenberg/pull/40028)) +- Two code improvements. ([39975](https://github.com/WordPress/gutenberg/pull/39975)) +- Scripts: Fix typo in the webpack configuration. ([39867](https://github.com/WordPress/gutenberg/pull/39867)) + +#### REST API + +- Block patterns REST endpoint: Use snake case for field names. ([40254](https://github.com/WordPress/gutenberg/pull/40254)) +- Update patterns REST controllers namespace to stable. ([40252](https://github.com/WordPress/gutenberg/pull/40252)) + +#### Styles + +- Rename name to title in the global style variations. ([39715](https://github.com/WordPress/gutenberg/pull/39715)) + +### Tools + +#### Linting + +- Revert unwanted breaking changes in eslint-plugin. ([39745](https://github.com/WordPress/gutenberg/pull/39745)) +- UseBlockDisplayTitle fix ESLint warning. ([39815](https://github.com/WordPress/gutenberg/pull/39815)) +- UseEntityRecord(s) fix ESLint warning. ([39852](https://github.com/WordPress/gutenberg/pull/39852)) + +#### Testing + +- ActivateTheme wait for the user to switch. ([39873](https://github.com/WordPress/gutenberg/pull/39873)) +- Add a unit test for wp\_recursive\_ksort. ([40149](https://github.com/WordPress/gutenberg/pull/40149)) +- Check for missing figcaption before clicking gallery image again from list view. ([39666](https://github.com/WordPress/gutenberg/pull/39666)) +- Comments Query Loop: Add end-to-end tests for the block. ([39502](https://github.com/WordPress/gutenberg/pull/39502)) +- waitForNavigation in Comments Query Loop test. ([39818](https://github.com/WordPress/gutenberg/pull/39818)) +- Fix flaky issue reporter not splitting ... separator. ([40129](https://github.com/WordPress/gutenberg/pull/40129)) +- Fix flaky test results overflowing the character limits of GitHub's issue. ([39928](https://github.com/WordPress/gutenberg/pull/39928)) +- ListView: Fix end-to-end flakiness. ([39742](https://github.com/WordPress/gutenberg/pull/39742)) +- Migrate customizing-widgets to Playwright. ([39540](https://github.com/WordPress/gutenberg/pull/39540)) +- Migrate cut-copy-paste-whole-blocks to Playwright. ([39807](https://github.com/WordPress/gutenberg/pull/39807)) +- Migrate new-post to Playwright. ([39539](https://github.com/WordPress/gutenberg/pull/39539)) +- Navigaton block: Fix flaky test by finalising request resolution in Nav block end-to-end test. ([39633](https://github.com/WordPress/gutenberg/pull/39633)) +- Navigation Editor: Skip failing navigation editor tests. ([39746](https://github.com/WordPress/gutenberg/pull/39746)) +- Style variations: Apply style variations using labels. ([39725](https://github.com/WordPress/gutenberg/pull/39725)) +- Template Mode: Try fix flaky tests. ([39711](https://github.com/WordPress/gutenberg/pull/39711)) +- Template parts: Try fixing template part tests again. ([40007](https://github.com/WordPress/gutenberg/pull/40007)) +- Use a description that matches the filename for the annotations end-to-end tests. ([40011](https://github.com/WordPress/gutenberg/pull/40011)) +- Use templates endpoint to delete templates. ([39965](https://github.com/WordPress/gutenberg/pull/39965)) + +#### Build Tooling + +- Add peer deps for postcss and end-to-end tests. ([39080](https://github.com/WordPress/gutenberg/pull/39080)) +- Plugin: Pin dependencies that slipped into trunk. ([39865](https://github.com/WordPress/gutenberg/pull/39865)) +- Mark new blocks to be included in WordPress core. ([40186](https://github.com/WordPress/gutenberg/pull/40186)) +- Style engine: Move backend scripts to package. ([39736](https://github.com/WordPress/gutenberg/pull/39736)) +- Scripts: Add .jsx file extension to Webpack. ([39613](https://github.com/WordPress/gutenberg/pull/39613)) +- Tooling: Escape quotes in npm scripts. ([39447](https://github.com/WordPress/gutenberg/pull/39447)) + +#### Project management + +- Remove Antonis as codeowner. ([39697](https://github.com/WordPress/gutenberg/pull/39697)) + +## Contributors + +The following contributors merged PRs in this release: + +@aaronrobertshaw @adamziel @ajlende @alexstine @andrewserong @annezazu @arcangelini @aristath @arthur791004 @atachibana @c4rl0sbr4v0 @carolinan @chintu51 @ciampo @dali-rajab @DAreRodz @dd32 @delowardev @dmsnell @draganescu @EliezerSPP @ellatrix @fluiddot @geriux @getdave @glendaviesnz @grappler @gwwar @gziolo @HILAYTRIVEDI @hypest @imangm @jakeparis @jameskoster @jasmussen @jezemery @jorgefilipecosta @jostnes @jsnajdr @JustinyAhin @kadimi @karolinakulinska @kevin940726 @MaggieCabrera @Mamaduka @mburridge @mchowning @michalczaplinski @mirka @ndiego @NekoJonez @noahtallen @noisysocks @ntsekouras @oandregal @ockham @ramonjd @ryanwelcher @scruffian @shimotmk @SiobhyB @sunil25393 @t-hamano @talldan @tomalec @tomasztunik @westonruter @youknowriad @zaguiini @ZebulanStanphill + + + + += 12.9.0 = + + + +## **Changelog** + + +### **Features** + + +#### **Block Library** + +* Block Editor: Introduce block locking UI. ([39183](https://github.com/WordPress/gutenberg/pull/39183)) +* Post Date: Allow user to pick Site Default, a suggested date format, or a custom date format. ([39209](https://github.com/WordPress/gutenberg/pull/39209)) +* Try: "No results" block container for the query block. ([38806](https://github.com/WordPress/gutenberg/pull/38806)) + + +### **Enhancements** + + +#### **Accessibility** + +* Add aria label to Nav block on front of site. ([39161](https://github.com/WordPress/gutenberg/pull/39161)) +* Add button text labels to site editor. ([38317](https://github.com/WordPress/gutenberg/pull/38317)) +* Prevent focus loss after removing a block from List View. ([39031](https://github.com/WordPress/gutenberg/pull/39031)) + + +#### **Components** + +* Add onClick prop to FormFileUpload. ([39268](https://github.com/WordPress/gutenberg/pull/39268)) +* CheckboxControl: Support indeterminate state. ([39462](https://github.com/WordPress/gutenberg/pull/39462)) +* List View: Add multi-select support for shift + Home and End keys. ([39272](https://github.com/WordPress/gutenberg/pull/39272)) +* `BoxControl`: Stop using `UnitControl`'s deprecated `unit` prop. ([39511](https://github.com/WordPress/gutenberg/pull/39511)) +* `FocalPointPicker`: Stop using `UnitControl`'s deprecated `unit` prop. ([39504](https://github.com/WordPress/gutenberg/pull/39504)) +* `ColorPalette`: Refine the label of the custom color button. ([39386](https://github.com/WordPress/gutenberg/pull/39386)) +* Rich text: Allow behaviour to be overridden by ref. ([39631](https://github.com/WordPress/gutenberg/pull/39631)) +* Add id prop to ListView. ([39494](https://github.com/WordPress/gutenberg/pull/39494)) +* Collapse list view by default in Site Editor. ([39573](https://github.com/WordPress/gutenberg/pull/39573)) +* Collapse list view by default in all editors. ([39611](https://github.com/WordPress/gutenberg/pull/39611)) +* Add prop to control default expand/collapse state of ListView nodes. ([39486](https://github.com/WordPress/gutenberg/pull/39486)) +* BaseControl: Add opt-in prop for margin-free styles. ([39325](https://github.com/WordPress/gutenberg/pull/39325)) +* CustomSelectControl: Add flag for larger default size. ([39401](https://github.com/WordPress/gutenberg/pull/39401)) +* RangeControl: Refactor stories to use Controls. ([39357](https://github.com/WordPress/gutenberg/pull/39357)) + + +#### **Block Library** + +* Cover: Use Snackbar to display upload errors. ([39428](https://github.com/WordPress/gutenberg/pull/39428)) +* Spacer block: Use same `min` value resizable box and controls, remove `max` limit. ([39577](https://github.com/WordPress/gutenberg/pull/39577)) +* Block Title: truncate all block labels/titles. ([39416](https://github.com/WordPress/gutenberg/pull/39416)) +* Add `NumberControl` to support min/max font size for `Tag Cloud Block`. ([37311](https://github.com/WordPress/gutenberg/pull/37311)) +* Embeds: Update the Wolfram embed name. ([39528](https://github.com/WordPress/gutenberg/pull/39528)) +* Flag invalid Navigation Link items. ([31716](https://github.com/WordPress/gutenberg/pull/31716)) +* Gallery block: Add gap support. ([38164](https://github.com/WordPress/gutenberg/pull/38164)) +* Separator block: Refactor to use color block supports. ([38428](https://github.com/WordPress/gutenberg/pull/38428)) + + +#### **Post Editor** + +* Migrate post editor `editorMode` to use preferences store and remove `localAutosaveInterval` preference. ([39180](https://github.com/WordPress/gutenberg/pull/39180)) +* Migrate post editor preferred style variations to preferences store. ([39337](https://github.com/WordPress/gutenberg/pull/39337)) +* Show 'View Preview' link for 'Draft Saved' Snackbar notice. ([39482](https://github.com/WordPress/gutenberg/pull/39482)) + + +#### **Site editor** + +* Add preferences modal to site editor. ([39485](https://github.com/WordPress/gutenberg/pull/39485)) +* Site Editor: Add more template types. ([39353](https://github.com/WordPress/gutenberg/pull/39353)) +* Theme Export: Export the whole theme. ([39202](https://github.com/WordPress/gutenberg/pull/39202)) +* Theme Export: Use the theme name for the zip file. ([39471](https://github.com/WordPress/gutenberg/pull/39471)) + + +#### **Navigation editor** + +* Migrate navigation editor selected menu to preferences store. ([39606](https://github.com/WordPress/gutenberg/pull/39606)) + + +#### **Testing** + +* Add `@testing-library/user-event` to the project. ([39360](https://github.com/WordPress/gutenberg/pull/39360)) + + +#### **Webfonts** + +* Change class properties from static to instance members. ([39361](https://github.com/WordPress/gutenberg/pull/39361)) + + +#### **Icons** + +* Update lock and unlock icons to be smaller. ([39252](https://github.com/WordPress/gutenberg/pull/39252)) + + +#### **Extensibility** + +* Set $name on WP_Block_Editor_Context. ([39299](https://github.com/WordPress/gutenberg/pull/39299)) + + +#### **CSS & Styling** + +* Layout: Use CSS logical properties for margin top and bottom. ([38816](https://github.com/WordPress/gutenberg/pull/38816)) + + +#### **Design Tools** + +* Block spacing: Block-level axial gap block support. ([37736](https://github.com/WordPress/gutenberg/pull/37736)) + + +### **New APIs** + + +#### **Block API** + +* Blocks: Deprecate `isValidBlockContent`. ([38794](https://github.com/WordPress/gutenberg/pull/38794)) +* Blocks: Remember raw source block for invalid blocks. ([38923](https://github.com/WordPress/gutenberg/pull/38923)) +* Blocks: Add flag in `parse` to skip logging migration details from patterns parsing. ([39404](https://github.com/WordPress/gutenberg/pull/39404)) + + +#### **Block Library** + +* Block Patterns: Automatically load files with headers from a theme's `/patterns` directory. ([36751](https://github.com/WordPress/gutenberg/pull/36751)) + + +### **Bug Fixes** + + +#### **Core data** + +* Revert addition of Navigation entity. ([39572](https://github.com/WordPress/gutenberg/pull/39572)) +* Add raw attributes configuration for media entity. ([39512](https://github.com/WordPress/gutenberg/pull/39512)) + + +#### **Block editor** + +* Revert: Fix/editor content z-index stack context. ([39620](https://github.com/WordPress/gutenberg/pull/39620)) + + +#### **Widgets editor** + +* Preload paths: Avoid fatal error on Widgets page. ([39470](https://github.com/WordPress/gutenberg/pull/39470)) + + +#### **Block Library** + +* Fix `Comments` blocks pagination. ([39227](https://github.com/WordPress/gutenberg/pull/39227)) +* Fix center aligned images styles. ([39422](https://github.com/WordPress/gutenberg/pull/39422)) +* Fix experimental full site editing blocks not being registered. ([39415](https://github.com/WordPress/gutenberg/pull/39415)) +* Fix: `Comment Query Loop`'s inner block selection and duplicate inspector control settings. ([39472](https://github.com/WordPress/gutenberg/pull/39472)) +* Fix: `Table` block doesn't keep background color. ([39445](https://github.com/WordPress/gutenberg/pull/39445)) +* `Gallery` block: Disable edit as html support. ([39318](https://github.com/WordPress/gutenberg/pull/39318)) +* `Gallery` block: Fix image upload bug. ([39269](https://github.com/WordPress/gutenberg/pull/39269)) +* `Image`: Allow authors to select image sizes from dropdown. ([39580](https://github.com/WordPress/gutenberg/pull/39580)) +* `Image`: Restore baseline responsiveness in the block. ([39340](https://github.com/WordPress/gutenberg/pull/39340)) +* `Media & Text`: Allow authors to select image sizes from dropdown. ([39608](https://github.com/WordPress/gutenberg/pull/39608)) +* `Pullquote` block: Fix citation markup in Editor. ([39414](https://github.com/WordPress/gutenberg/pull/39414)) +* `Pullquote` block: Remove deprecated pullquote style. ([39413](https://github.com/WordPress/gutenberg/pull/39413)) +* [Site Logo] Fix center alignment. ([39579](https://github.com/WordPress/gutenberg/pull/39579)) +* Hide the orientation switcher from the group block. ([39650](https://github.com/WordPress/gutenberg/pull/39650)) +* Image Block: Move any is-style and custom classnames up to deprecated alignment wrapper. ([39330](https://github.com/WordPress/gutenberg/pull/39330)) +* Social Icons: Avoid loss of previously selected background color when switching back from "Logos Only" style. ([39276](https://github.com/WordPress/gutenberg/pull/39276)) +* Fix the block toolbar styles to evenly space buttons. ([39630](https://github.com/WordPress/gutenberg/pull/39630)) +* Fix Image block link rel handling. ([39319](https://github.com/WordPress/gutenberg/pull/39319)) + + +#### **Components** + +* `BlockSettingsMenuControls` don't render empty `MenuGroup`. ([39537](https://github.com/WordPress/gutenberg/pull/39537)) +* Fix `UnitControl` resets unit when value is cleared. ([39531](https://github.com/WordPress/gutenberg/pull/39531)) +* Fix changelog entry in wrong version. ([39450](https://github.com/WordPress/gutenberg/pull/39450)) +* `ResizableBox`: Ensure tooltip text remains on a single line. ([39623](https://github.com/WordPress/gutenberg/pull/39623)) +* [Block Library]: Use `UnitControl` from `components` package in Cover and Search blocks. ([39383](https://github.com/WordPress/gutenberg/pull/39383)) +* `NumberControl`: Commit (and constrain) value on `blur` event. ([39186](https://github.com/WordPress/gutenberg/pull/39186)) + + +#### **Testing** + +* Fix Gallery block flaky test image captions. ([39689](https://github.com/WordPress/gutenberg/pull/39689)) +* Fix performance tests - attempt 2. ([39333](https://github.com/WordPress/gutenberg/pull/39333)) +* Env: Fix PHP unit tests for "non-standard" cloned directories. ([39362](https://github.com/WordPress/gutenberg/pull/39362)) + + +#### **Accessibility** + +* Fix `useFocusFirstElement` in non-`contenteditable` Blocks. ([37934](https://github.com/WordPress/gutenberg/pull/37934)) +* Use the post-title as the featured-image's alt text when linked to the post. ([39634](https://github.com/WordPress/gutenberg/pull/39634)) + + +#### **Design Tools** + +* Fix Border Radius Control showing Mixed when switching between units in an empty control. ([39563](https://github.com/WordPress/gutenberg/pull/39563)) +* Flex Layout: Fix visibility control of allowOrientation. ([39532](https://github.com/WordPress/gutenberg/pull/39532)) + + +#### **Block Conversion** + +* Blocks: Disable Grouping when block removal is locked. ([39541](https://github.com/WordPress/gutenberg/pull/39541)) + + +#### **Post Editor** + +* Add default `as` prop to `PluginMoreMenuItem` component. ([39517](https://github.com/WordPress/gutenberg/pull/39517)) + + +#### **Patterns** + +* [Patterns]: Load theme patterns only in block and site editor. ([39493](https://github.com/WordPress/gutenberg/pull/39493)) + + +#### **npm Packages** + +* Packages: Ensure that `@wordpress/preferences` gets published to npm. ([39390](https://github.com/WordPress/gutenberg/pull/39390)) + + +#### **Global Styles** + +* Fix display of color palettes for border panel. ([38798](https://github.com/WordPress/gutenberg/pull/38798)) + + +### **Performance** + + +#### **Block editor and site editor** + +* Optimise preload paths for post and site editors. ([39256](https://github.com/WordPress/gutenberg/pull/39256)) + + +#### **Parsing** + +* Optimise block parser by avoiding repeated HTML parsing and matcher creation. ([39424](https://github.com/WordPress/gutenberg/pull/39424)) + + +### **Experiments** + + +#### **Block Library** + +* New block: list block v2. Add an empty list block v2. ([39459](https://github.com/WordPress/gutenberg/pull/39459)), implement the nested block behaviour in list block v2. ([39487](https://github.com/WordPress/gutenberg/pull/39487)), add transforms for the list v2 block. ([39652](https://github.com/WordPress/gutenberg/pull/39652)), add start, ordered and reversed list block attributes. ([39605](https://github.com/WordPress/gutenberg/pull/39605)), add simple list item splitting and merging. ([39542](https://github.com/WordPress/gutenberg/pull/39542)). +* New block: Generic Avatar. Create a Generic Avatar block for Authors. ([38591](https://github.com/WordPress/gutenberg/pull/38591)) + + +#### **Block editor** + +* Add __experimentalGetGlobalBlocksByName selector. ([39610](https://github.com/WordPress/gutenberg/pull/39610)) + + +### **Documentation** + + +#### **Themes** + +* Add some detail to handbook about different theme types. ([39562](https://github.com/WordPress/gutenberg/pull/39562)) +* Remove duplicate theme documentation. ([38800](https://github.com/WordPress/gutenberg/pull/38800)) + + +#### **Block library** + +* Block Title: Update documentation. ([39328](https://github.com/WordPress/gutenberg/pull/39328)) +* Dependency `wp-editor` should be `wp-block-editor` in the code example. ([39505](https://github.com/WordPress/gutenberg/pull/39505)) +* Document `__experimentalGenerateAnchors` default setting. ([39554](https://github.com/WordPress/gutenberg/pull/39554)) + + +#### **Contributing** + +* Plugin: Document the project structure and conventions used in the `lib` folder for PHP code. ([39603](https://github.com/WordPress/gutenberg/pull/39603)) +* Update plugin `readme.txt` content for intended audience. ([38724](https://github.com/WordPress/gutenberg/pull/38724)) +* Fix the missing page in the manifest file. ([39507](https://github.com/WordPress/gutenberg/pull/39507)) + + +#### **Components** + +* Divider: Improve default behaviour when in vertical orientation. ([39316](https://github.com/WordPress/gutenberg/pull/39316)) +* `UnitControl`: Convert Storybook example to TypeScript and Controls. ([39320](https://github.com/WordPress/gutenberg/pull/39320)) +* `UnitControl`: Mark `unit` prop as deprecated. ([39503](https://github.com/WordPress/gutenberg/pull/39503)) +* Add missing `}` to LinkControl code example. ([39469](https://github.com/WordPress/gutenberg/pull/39469)) + + +### **Code Quality** + +#### **Core data** + +* Use consistent terminology across @wordpress/core-data. ([39349](https://github.com/WordPress/gutenberg/pull/39349)) without renaming useEntityId hook. ([39683](https://github.com/WordPress/gutenberg/pull/39683)) +* Add an "enabled" option to useEntityRecord and useEntityRecords. ([39288](https://github.com/WordPress/gutenberg/pull/39288)) +* Add Navigation menu to known entities. ([39498](https://github.com/WordPress/gutenberg/pull/39498)) +* Use the word `record` for the entity record TypeScript types. ([39251](https://github.com/WordPress/gutenberg/pull/39251)) +* throwOnError option for saveEntityRecord and deleteEntityRecord actions. ([39258](https://github.com/WordPress/gutenberg/pull/39258)) +* Fix preferences actions/selectors deprecated calls. ([39640](https://github.com/WordPress/gutenberg/pull/39640)) +* Check for nullity in experimental fetch methods. ([39480](https://github.com/WordPress/gutenberg/pull/39480)) +* Check for presence of entity configuration before testing plural form. ([39476](https://github.com/WordPress/gutenberg/pull/39476)) +* Import types before exporting them. ([39479](https://github.com/WordPress/gutenberg/pull/39479)) +* Pass explicit `undefined` initial value to `createContext`. ([39526](https://github.com/WordPress/gutenberg/pull/39526)) +* Replace spread arguments with non-spread variants. ([39477](https://github.com/WordPress/gutenberg/pull/39477)) +* Fix minor type-related issues. ([39525](https://github.com/WordPress/gutenberg/pull/39525)) +* Do not suppress errors in the getEntityRecord and getEntityRecords resolvers. ([39317](https://github.com/WordPress/gutenberg/pull/39317)) + + +#### **Block Library** + +* `Cover` block: Stop using `UnitControl`'s deprecated `unit` prop. ([39522](https://github.com/WordPress/gutenberg/pull/39522)) +* `Search` block: Stop using `UnitControl`'s deprecated `unit` prop. ([39514](https://github.com/WordPress/gutenberg/pull/39514)) +* `Spacer` block: Stop using `UnitControl`'s deprecated `unit` prop. ([39513](https://github.com/WordPress/gutenberg/pull/39513)) +* [Blocks]: Add flag in `parse` to skip logging migration details from patterns parsing. ([39404](https://github.com/WordPress/gutenberg/pull/39404)) +* Use block specific filters for the backward compatibility markup hooks. ([39321](https://github.com/WordPress/gutenberg/pull/39321)) + +#### **Testing** + +* Fix Nav block flaky end-to-end test by correctly waiting on menu creation resolution. ([39637](https://github.com/WordPress/gutenberg/pull/39637)) + +#### **Plugin** + +* Fix PHP notice in `gutenberg_get_block_editor_settings`. ([39543](https://github.com/WordPress/gutenberg/pull/39543)) + + +#### **Components** + +* Drop `composeStateReducers`. ([39262](https://github.com/WordPress/gutenberg/pull/39262)) +* `BorderRadiusControl`: Stop using `UnitControl`’s deprecated `unit` prop. ([39549](https://github.com/WordPress/gutenberg/pull/39549)) + + +### **Tools** + +#### **Codeowners updates** + +* Add [@michalczaplinski](https://github.com/michalczaplinski) to codeowners. ([39440](https://github.com/WordPress/gutenberg/pull/39440)) +* Add [@juanmaguitar](https://github.com/juanmaguitar) as codeowners of gutenberg documentation. ([39453](https://github.com/WordPress/gutenberg/pull/39453)) + + +#### **Testing** + +* Add infrastructure for writing Playwright end-to-end tests. ([38570](https://github.com/WordPress/gutenberg/pull/38570)) +* Gallery block: Reduce end-to-end flakiness. ([39565](https://github.com/WordPress/gutenberg/pull/39565)) + + +#### **Build Tooling** + +* Simplify vendor scripts handling. ([39534](https://github.com/WordPress/gutenberg/pull/39534)) +* ing: Remove unused npm scripts. ([39369](https://github.com/WordPress/gutenberg/pull/39369)) +* Use android artefacts for react-native libraries in react-native-bridge. ([39294](https://github.com/WordPress/gutenberg/pull/39294)) +* ESlint: Exempt TS files from `jsdoc/require-param`. ([39458](https://github.com/WordPress/gutenberg/pull/39458)) + + +#### **NPM Packages** + +* Packages: Finalise the revised strategy for NPM publishing. ([39389](https://github.com/WordPress/gutenberg/pull/39389)) + + +## First time contributors + +The following PRs were merged by first time contributors: + +- @alefesouza: Add onClick prop to FormFileUpload. ([39268](https://github.com/WordPress/gutenberg/pull/39268)) +- @brookewp: Show 'View Preview' link for 'Draft Saved' snackbar notice. ([39482](https://github.com/WordPress/gutenberg/pull/39482)) +- @HILAYTRIVEDI: Social Icons: Avoid loss of previously selected background color when switching back from "Logos Only" style. ([39276](https://github.com/WordPress/gutenberg/pull/39276)) +- @ironprogrammer: Update plugin `readme.txt` content for intended audience. ([38724](https://github.com/WordPress/gutenberg/pull/38724)) +- @mhimon: Add missing `}` to LinkControl code example. ([39469](https://github.com/WordPress/gutenberg/pull/39469)) +- @ParaskP7: ([39508](https://github.com/WordPress/gutenberg/pull/39508)) +- @SantosGuillamot: Fix Comments blocks pagination. ([39227](https://github.com/WordPress/gutenberg/pull/39227)) +- @stefanolissa: Dependency "wp-editor" should be "wp-block-editor" in the code example. ([39505](https://github.com/WordPress/gutenberg/pull/39505)) + + +## Contributors + +The following contributors merged PRs in this release: + +@aaronrobertshaw @adamziel @alefesouza @alexstine @amustaque97 @andrewserong @AnthonyLedesma @aristath @brookewp @c4rl0sbr4v0 @carolinan @ciampo @delowardev @dmsnell @ellatrix @fluiddot @getdave @glendaviesnz @gziolo @HILAYTRIVEDI @hypest @ironprogrammer @jarcos @jasmussen @jeherve @jhnstn @jorgefilipecosta @jostnes @jsnajdr @juanmaguitar @kevin940726 @kjellr @Mamaduka @mcsf @mhimon @michalczaplinski @mirka @ndiego @noisysocks @ntsekouras @oguzkocer @ParaskP7 @pento @ramonjd @SantosGuillamot @scruffian @SiobhyB @stefanolissa @stokesman @t-hamano @talldan @tellthemachines @vcanales @xknown @youknowriad @zaguiini + + + + += 12.8.1 = + +## Changelog + +### Bug Fixes + +- Templates page: reduce z-index of content area [39331](https://github.com/WordPress/gutenberg/pull/39331) + + += 12.8.0 = + + +## Changelog + +### Enhancements + +#### Block Library +- Group: Show `group` option in `Group` blocks. ([39094](https://github.com/WordPress/gutenberg/pull/39094)) +- Navigation: Improve loading and placeholder states. ([38907](https://github.com/WordPress/gutenberg/pull/38907)) +- Navigation: Improve create new UI feedback in Nav block. ([39219](https://github.com/WordPress/gutenberg/pull/39219)) +- Media & Text: Display media while uploading. ([39275](https://github.com/WordPress/gutenberg/pull/39275)) +- Tag Cloud: Use flex for the Outline style. ([38995](https://github.com/WordPress/gutenberg/pull/38995)) + +#### Components +- ConfirmDialog: add custom button text. ([38994](https://github.com/WordPress/gutenberg/pull/38994)) +- InputControl: Allow onBlur for empty values to commit the change, move reset behaviour to ESCAPE key. ([39109](https://github.com/WordPress/gutenberg/pull/39109)) + +#### Block Editor +- Add a link completer for inline links to posts. ([29172](https://github.com/WordPress/gutenberg/pull/29172)) + +#### Site Editor +- Add theme.json to export file. ([39048](https://github.com/WordPress/gutenberg/pull/39048)) +- Resolve homepage template on server-side. ([38817](https://github.com/WordPress/gutenberg/pull/38817)) +- Theme Export: Add index.php and style.css. ([39173](https://github.com/WordPress/gutenberg/pull/39173)) + +#### Icons +- Update drag handle footprint. ([39342](https://github.com/WordPress/gutenberg/pull/39342)) +- Update Pin icon, add new Post icon. ([39139](https://github.com/WordPress/gutenberg/pull/39139)) + +#### General Interface +- Raise z-index of content div relative to sidebars. ([38893](https://github.com/WordPress/gutenberg/pull/38893)) + +#### Media +- MediaReplaceFlow: Add 'onError' prop to handle error notifications. ([39197](https://github.com/WordPress/gutenberg/pull/39197)) + +### Accessibility + +- Block settings dropdown: Use block display title in remove label. ([39110](https://github.com/WordPress/gutenberg/pull/39110)) +- Try allowing tab into block placeholder. ([39085](https://github.com/WordPress/gutenberg/pull/39085)) + +### New APIs + +- Webfonts API. ([37140](https://github.com/WordPress/gutenberg/pull/37140)) +- Add new `@wordpress/preferences` package. ([38873](https://github.com/WordPress/gutenberg/pull/38873)) +- Add reusable preferences modal to interface package. ([39153](https://github.com/WordPress/gutenberg/pull/39153)) + - Add interface preferences modal to edit post. ([39176](https://github.com/WordPress/gutenberg/pull/39176)) + - Migrate hidden block types (block manager data) to new preferences packages. ([39132](https://github.com/WordPress/gutenberg/pull/39132)) + - Migrate post editor feature preferences to use new preferences package. ([39115](https://github.com/WordPress/gutenberg/pull/39115)) + - Migrate customize widgets editor to use new preferences package. ([39112](https://github.com/WordPress/gutenberg/pull/39112)) + - Migrate standalone widgets editor to use new preferences package. ([39084](https://github.com/WordPress/gutenberg/pull/39084)) + - Migrate site editor to use new preferences package. ([39158](https://github.com/WordPress/gutenberg/pull/39158)) + - Deprecate interface package's preference APIs. ([39418](https://github.com/WordPress/gutenberg/pull/39418)) +- Create Block: Add support for more plugin header fields. ([39096](https://github.com/WordPress/gutenberg/pull/39096)) + + +### Bug Fixes + +#### Block Library +- Buttons: Added aria label to the button block with icon. ([38966](https://github.com/WordPress/gutenberg/pull/38966)) +- Buttons: Fixes Button highlight popover overflow conflict with link popover. ([38771](https://github.com/WordPress/gutenberg/pull/38771)) +- Buttons: Don't set a placeholder text color. ([39034](https://github.com/WordPress/gutenberg/pull/39034)) +- Code: Restructure code bock styling. ([38712](https://github.com/WordPress/gutenberg/pull/38712)) +- Comments Pagination Number_ Fix Comments Pagination Number with no pagination settings. ([39204](https://github.com/WordPress/gutenberg/pull/39204)) +- Cover: Fix keep selected unit on deleting minHeight value. ([39145](https://github.com/WordPress/gutenberg/pull/39145)) +- Cover: Fixes #38761 by removing obsolete `::Before` pseudo element. ([38762](https://github.com/WordPress/gutenberg/pull/38762)) +- File: Check if 'fileId' exists before setting the attribute. ([39088](https://github.com/WordPress/gutenberg/pull/39088)) +- File: Don't display loading animation on upload error. ([39213](https://github.com/WordPress/gutenberg/pull/39213)) +- File: Fix file block validation error by not outputting aria-describedby if there's no description. ([39083](https://github.com/WordPress/gutenberg/pull/39083)) +- File: Fix the undo trap. ([39215](https://github.com/WordPress/gutenberg/pull/39215)) +- Hide border panel when all border features have been disabled. ([36791](https://github.com/WordPress/gutenberg/pull/36791)) +- Hide current menu from dropdown list in Nav block. ([38916](https://github.com/WordPress/gutenberg/pull/38916)) +- Image: Fix image responsive rules. ([39045](https://github.com/WordPress/gutenberg/pull/39045)) +- Image: Display errors after failed upload. ([39178](https://github.com/WordPress/gutenberg/pull/39178)) +- Media & Text: Display errors after failed upload. ([39245](https://github.com/WordPress/gutenberg/pull/39245)) +- Navigation: Fix navigation menu error when menus are not yet fetched. ([39151](https://github.com/WordPress/gutenberg/pull/39151)) +- Post Comments Form: Show correctwarning relative to post/page context. ([38011](https://github.com/WordPress/gutenberg/pull/38011)) +- Post Expert: Fix missing class in post excerpt. ([38747](https://github.com/WordPress/gutenberg/pull/38747)) +- Post Terms: Unescape HTML entities in term names. ([39216](https://github.com/WordPress/gutenberg/pull/39216)) +- Widget Group: Make `save()` markup the same as `render_callback` markup. ([38510](https://github.com/WordPress/gutenberg/pull/38510)) + +#### Styles +- Fix Blocks list ordering in Global Styles. ([39093](https://github.com/WordPress/gutenberg/pull/39093)) +- Fix default duotone preset SVG and style generation. ([38681](https://github.com/WordPress/gutenberg/pull/38681)) +- Fix header panel height. ([39119](https://github.com/WordPress/gutenberg/pull/39119)) +- Fix Global styles overriding block's element styles. ([39012](https://github.com/WordPress/gutenberg/pull/39012)) + +#### Components +- Update drag gesture of `InputControl`-based controls with axial constraint. ([38968](https://github.com/WordPress/gutenberg/pull/38968)) +- `UnitControl`: Fix controlled `unit` behavior. ([39148](https://github.com/WordPress/gutenberg/pull/39148)) +- Normalize font-family. ([38969](https://github.com/WordPress/gutenberg/pull/38969)) + +#### Block Editor +- Fixes block highlight after block move. ([38915](https://github.com/WordPress/gutenberg/pull/38915)) +- Improve in_footer handling in gutenberg_override_script(). ([39497](https://github.com/WordPress/gutenberg/pull/39497)) + +#### Post Editor +- Avoid error when 'styles' settings are removed. ([39091](https://github.com/WordPress/gutenberg/pull/39091)) +- URL: Fix code drift in the Editor package by removing duplicate cleanForSlug function. ([39033](https://github.com/WordPress/gutenberg/pull/39033)) + +#### Site Editor +- Expose plugin area to site editor's List page. ([39078](https://github.com/WordPress/gutenberg/pull/39078)) + +#### Other Packages +- `apiFetch`: Handle urlencoded and rest_route query params. ([38914](https://github.com/WordPress/gutenberg/pull/38914)) +- Base Styles: Add a resolvable JavaScript entry point to base-styles. ([39240](https://github.com/WordPress/gutenberg/pull/39240)) +- Compose: Avoid memory leak in use-drop-zone. ([39038](https://github.com/WordPress/gutenberg/pull/39038)) +- Render SVG props that have dashes correctly. ([38936](https://github.com/WordPress/gutenberg/pull/38936)) +- Url: Improvement to prototype handling. ([39365](https://github.com/WordPress/gutenberg/pull/39365)) + + +### Developer experience +- Change copying PHP files to dist directory to opt-in via a CLI flag. ([39171](https://github.com/WordPress/gutenberg/pull/39171)) +- Create Block: Add confirm prompt before showing the plugin options. ([39105](https://github.com/WordPress/gutenberg/pull/39105)) +- Create Block: Improve custom project template configuration. ([39049](https://github.com/WordPress/gutenberg/pull/39049)) +- Handle resolution errors in @wordpress/data. ([38669](https://github.com/WordPress/gutenberg/pull/38669)) + + +### Documentation + +- Add import useBlockProps. ([39072](https://github.com/WordPress/gutenberg/pull/39072)) +- Components: Update changelog follow up for #38985. ([39013](https://github.com/WordPress/gutenberg/pull/39013)) +- Emphasized requirement to enclose in quotation marks wp-env run…. ([39101](https://github.com/WordPress/gutenberg/pull/39101)) +- Element: Add changelog notes for serialize attribute casing. ([39141](https://github.com/WordPress/gutenberg/pull/39141)) +- Gutenberg Data Tutorial Part 3: Building an edit form. ([38581](https://github.com/WordPress/gutenberg/pull/38581)) +- Fix code example in flyout component. ([39156](https://github.com/WordPress/gutenberg/pull/39156)) +- Missing `,toggleFormat` from last code block. ([39146](https://github.com/WordPress/gutenberg/pull/39146)) +- Move recent CHANGELOG entry to `Unreleased` section. ([39169](https://github.com/WordPress/gutenberg/pull/39169)) +- Spelling error in `JustifyContentControl` example. ([39234](https://github.com/WordPress/gutenberg/pull/39234)) +- Storybook: Support proper extraction of TypeScript prop types. ([38842](https://github.com/WordPress/gutenberg/pull/38842)) +- Storybook: Add webpack loader for easier story descriptions. ([39165](https://github.com/WordPress/gutenberg/pull/39165)) + + +### Code Quality + +- Componentes, UnitControl: Tidy up utils and types. ([38987](https://github.com/WordPress/gutenberg/pull/38987)) +- Components, FontSizePicker: Refactor stories to use Controls. ([38727](https://github.com/WordPress/gutenberg/pull/38727)) +- Components, ToggleGroupControlOption: Calculate width from button content and remove `LabelPlaceholderView`. ([39345](https://github.com/WordPress/gutenberg/pull/39345)) +- Core Data: Rename `types` directory to `entity-types`. ([39225](https://github.com/WordPress/gutenberg/pull/39225)) +- Core data: Fix some typing issues. ([39212](https://github.com/WordPress/gutenberg/pull/39212)) +- Core data: Fix some typing issues. ([39214](https://github.com/WordPress/gutenberg/pull/39214)) +- Fix `@wordpress/comment-case` ESlint errors but without adding the disable-rule pragma. ([37006](https://github.com/WordPress/gutenberg/pull/37006)) +- Delete widget editor redundant css for more menu. ([39113](https://github.com/WordPress/gutenberg/pull/39113)) +- Layout: Remove duplicate var declaration. ([39111](https://github.com/WordPress/gutenberg/pull/39111)) +- Move editor settings code to compat folder. ([39030](https://github.com/WordPress/gutenberg/pull/39030)) +- Refactor useSelect usages to useEntityRecords. ([38827](https://github.com/WordPress/gutenberg/pull/38827)) +- Refactor classic menu conversion process. ([38858](https://github.com/WordPress/gutenberg/pull/38858)) +- Post author name: Add "post" prefix to CSS class. ([38320](https://github.com/WordPress/gutenberg/pull/38320)) +- TreeGrid: Update callback unit tests to use TreeGridRow and TreeGridCell sub components. ([39002](https://github.com/WordPress/gutenberg/pull/39002)) +- Update framer motion to 6.2.8. ([38999](https://github.com/WordPress/gutenberg/pull/38999)) +- useBlockEditorSettings: Remove unused unstableBase fetch. ([39221](https://github.com/WordPress/gutenberg/pull/39221)) + + +### Tools + +#### Project Management +- Code owners: Remove users without write access and fix typos. ([39238](https://github.com/WordPress/gutenberg/pull/39238)) +- Simplify Pull Request template. ([39229](https://github.com/WordPress/gutenberg/pull/39229)) + +#### Testing +- Add end-to-end testing for experimental nav menu deletion. ([38955](https://github.com/WordPress/gutenberg/pull/38955)) +- Add Home/End keyboard end-to-end test for List View. ([39265](https://github.com/WordPress/gutenberg/pull/39265)) +- Add some tests for TreeGrid. Update README to reflect latest functionality. ([39302](https://github.com/WordPress/gutenberg/pull/39302)) +- Add test case for post locking feature saving. ([39022](https://github.com/WordPress/gutenberg/pull/39022)) +- Add tests for media replace flow. ([39005](https://github.com/WordPress/gutenberg/pull/39005)) +- Block Test Fixtures: Add additional error message for serialized test fixtures that reserialize identically. ([39039](https://github.com/WordPress/gutenberg/pull/39039)) +- ESLint Plugin: Make Prettier integration optional. ([39244](https://github.com/WordPress/gutenberg/pull/39244)) +- Fix performance tests by adding backwards compatibility to welcome guide utility. ([39300](https://github.com/WordPress/gutenberg/pull/39300)) +- Improve switch to draft button end-to-end test robustness. ([38971](https://github.com/WordPress/gutenberg/pull/38971)) +- Remove rename rn UI tests. ([39042](https://github.com/WordPress/gutenberg/pull/39042)) +- Social Icons: Begin Automating Existing Manual Test Cases. ([39027](https://github.com/WordPress/gutenberg/pull/39027)) +- Update 'clickMenuItem' test util to use full label matching. ([39274](https://github.com/WordPress/gutenberg/pull/39274)) +- Update preview test to wait for publish panel to appear before closing it. ([39100](https://github.com/WordPress/gutenberg/pull/39100)) + +#### Build Tooling +- Fix spelling of contributors in changelog script. ([39029](https://github.com/WordPress/gutenberg/pull/39029)) +- Resolve peer dependency warnings. ([39043](https://github.com/WordPress/gutenberg/pull/39043)) + +#### npm Packages +- Fix `npm run docs:Build` crashing when a `block.json` lacks `supports` key. ([39241](https://github.com/WordPress/gutenberg/pull/39241)) +- Packages: Automate npm publishing as part of Gutenberg release workflow. ([39259](https://github.com/WordPress/gutenberg/pull/39259)) +- Packages: Automatically acceppt all Lerna commands when run with CI flag. ([39199](https://github.com/WordPress/gutenberg/pull/39199)) +- Packages: Update CLI publishing tool to run in CI mode. ([38993](https://github.com/WordPress/gutenberg/pull/38993)) + +#### Plugin +- Account for upcoming changes in styles metadata in WordPress 5.9. ([36327](https://github.com/WordPress/gutenberg/pull/36327)) +- Don't filter 'theme_templates' when running WP 5.9. ([39017](https://github.com/WordPress/gutenberg/pull/39017)) + + +## First time contributors + +The following PRs were merged by first time contributors: + +- @ahsanshaheen199: fix: Code example in flyout component. ([39156](https://github.com/WordPress/gutenberg/pull/39156)) +- @alshakerM: Render SVG props that have dashes correctly. ([38936](https://github.com/WordPress/gutenberg/pull/38936)) +- @awps: Missing `,toggleFormat` from last code block. ([39146](https://github.com/WordPress/gutenberg/pull/39146)) +- @francisei: Docs: Emphasized requirement to enclose in quotation marks wp-env run…. ([39101](https://github.com/WordPress/gutenberg/pull/39101)) +- @ironprogrammer: Raise z-index of content div relative to sidebars. ([38893](https://github.com/WordPress/gutenberg/pull/38893)) +- @joshuafredrickson: Add a resolvable JavaScript entry point to base-styles. ([39240](https://github.com/WordPress/gutenberg/pull/39240)) +- @jostnes: Remove rename rn UI tests. ([39042](https://github.com/WordPress/gutenberg/pull/39042)) +- @mashikag: Fix Blocks list ordering in Global Styles. ([39093](https://github.com/WordPress/gutenberg/pull/39093)) +- @tomasztunik: Fix Global styles overriding block's element styles. ([39012](https://github.com/WordPress/gutenberg/pull/39012)) +- @Tumas2: Spelling error in `JustifyContentControl` example. ([39234](https://github.com/WordPress/gutenberg/pull/39234)) + + +## Contributors + +The following contributors merged PRs in this release: + +@adamziel @ahsanshaheen199 @ajlende @alexstine @alshakerM @amustaque97 @andrewserong @aristath @awps @c4rl0sbr4v0 @carolinan @chad1008 @ciampo @delowardev @dmsnell @draganescu @fluiddot @francisei @getdave @gwwar @gziolo @illusaen @ironprogrammer @jasmussen @joshuafredrickson @jostnes @jsnajdr @Mamaduka @mashikag @mirka @ndiego @noahtallen @noisysocks @ntsekouras @oandregal @ocean90 @opr @priethor @ramonjd @ryanwelcher @scruffian @Sidsector9 @SiobhyB @Sisanu @stokesman @talldan @tellthemachines @tomasztunik @ttahmouch @Tumas2 @walbo @webmandesign @zaguiini @ZebulanStanphill + + += 12.7.2 = + + + +## Changelog + +### Enhancements + +- Block Editor: Improve Global Styles filtering order. ([39364](https://github.com/WordPress/gutenberg/pull/39364)) +- getQueryArgs: Improvement to prototype handling. ([39365](https://github.com/WordPress/gutenberg/pull/39365)) + +## Contributors + +The following contributors merged PRs in this release: + +@jorgefilipecosta + + += 12.8.0-rc.1 = + + + +## Changelog + +### Enhancements + +- Change copying PHP files to dist directory to opt-in via a CLI flag. ([39171](https://github.com/WordPress/gutenberg/pull/39171)) +- Raise z-index of content div relative to sidebars. ([38893](https://github.com/WordPress/gutenberg/pull/38893)) + +#### Components +- Enhance/confirmdialog add custom button text. ([38994](https://github.com/WordPress/gutenberg/pull/38994)) +- InputControl: Allow onBlur for empty values to commit the change, move reset behaviour to ESCAPE key. ([39109](https://github.com/WordPress/gutenberg/pull/39109)) +- Update framer motion to 6.2.8. ([38999](https://github.com/WordPress/gutenberg/pull/38999)) +- `UnitControl`: Tidy up utils and types. ([38987](https://github.com/WordPress/gutenberg/pull/38987)) + +#### Post Editor +- Add interface preferences modal to edit post. ([39176](https://github.com/WordPress/gutenberg/pull/39176)) +- Migrate hidden block types (block manager data) to new preferences packages. ([39132](https://github.com/WordPress/gutenberg/pull/39132)) +- Migrate post editor feature preferences to use new preferences package. ([39115](https://github.com/WordPress/gutenberg/pull/39115)) + +#### Block Library +- Improve create new UI feedback in Nav block. ([39219](https://github.com/WordPress/gutenberg/pull/39219)) +- Media & Text: Display media while uploading. ([39275](https://github.com/WordPress/gutenberg/pull/39275)) + +#### Testing +- Add Home/End keyboard end-to-end test for List View. ([39265](https://github.com/WordPress/gutenberg/pull/39265)) +- Improve switch to draft button end-to-end test robustness. ([38971](https://github.com/WordPress/gutenberg/pull/38971)) + +#### Site Editor +- Migrate site editor to use new preferences package. ([39158](https://github.com/WordPress/gutenberg/pull/39158)) +- Resolve homepage template on server-side. ([38817](https://github.com/WordPress/gutenberg/pull/38817)) + +#### Widgets Editor +- Migrate customize widgets editor to use new preferences package. ([39112](https://github.com/WordPress/gutenberg/pull/39112)) +- Migrate standalone widgets editor to use new preferences package. ([39084](https://github.com/WordPress/gutenberg/pull/39084)) + +#### Media +- MediaReplaceFlow: Add 'onError' prop to handle error notifications. ([39197](https://github.com/WordPress/gutenberg/pull/39197)) + +#### Accessibility +- Block settings dropdown: Use block display title in remove label. ([39110](https://github.com/WordPress/gutenberg/pull/39110)) + +#### Global Styles +- Site Editor: Add theme.json to export file. ([39048](https://github.com/WordPress/gutenberg/pull/39048)) + +#### npm Packages +- Packages: Update CLI publishing tool to run in CI mode. ([38993](https://github.com/WordPress/gutenberg/pull/38993)) + +#### Block Editor +- Add a link completer for inline links to posts. ([29172](https://github.com/WordPress/gutenberg/pull/29172)) + + +### New APIs + +- Add new `@wordpress/preferences` package. ([38873](https://github.com/WordPress/gutenberg/pull/38873)) +- Create Block: Add support for more plugin header fields. ([39096](https://github.com/WordPress/gutenberg/pull/39096)) + + +### Bug Fixes + +- Compose: Avoid memory leak in use-drop-zone. ([39038](https://github.com/WordPress/gutenberg/pull/39038)) +- Fix Global styles overriding block's element styles. ([39012](https://github.com/WordPress/gutenberg/pull/39012)) +- Fix: Button highlight popover overflow conflict with link popover. ([38771](https://github.com/WordPress/gutenberg/pull/38771)) +- Fixes block highlight after block move. ([38915](https://github.com/WordPress/gutenberg/pull/38915)) +- Render SVG props that have dashes correctly. ([38936](https://github.com/WordPress/gutenberg/pull/38936)) +- apiFetch preloading middleware: Handle urlencoded and rest_route query params. ([38914](https://github.com/WordPress/gutenberg/pull/38914)) + +#### Block Library +- Added aria label to the button block with icon. ([38966](https://github.com/WordPress/gutenberg/pull/38966)) +- File: Check if 'fileId' exists before setting the attribute. ([39088](https://github.com/WordPress/gutenberg/pull/39088)) +- File: Don't display loading animation on upload error. ([39213](https://github.com/WordPress/gutenberg/pull/39213)) +- File: Fix the undo trap. ([39215](https://github.com/WordPress/gutenberg/pull/39215)) +- Fix Comments Pagination Number with no pagination settings. ([39204](https://github.com/WordPress/gutenberg/pull/39204)) +- Fix file block validation error by not outputting aria-describedby if there's no description. ([39083](https://github.com/WordPress/gutenberg/pull/39083)) +- Fix navigation menu error when menus are not yet fetched. ([39151](https://github.com/WordPress/gutenberg/pull/39151)) +- Hide border panel when all border features have been disabled. ([36791](https://github.com/WordPress/gutenberg/pull/36791)) +- Hide current menu from dropdown list in Nav block. ([38916](https://github.com/WordPress/gutenberg/pull/38916)) +- Image: Display errors after failed upload. ([39178](https://github.com/WordPress/gutenberg/pull/39178)) +- Media & Text: Display errors after failed upload. ([39245](https://github.com/WordPress/gutenberg/pull/39245)) +- Post Expert: Fix missing class in post excerpt. ([38747](https://github.com/WordPress/gutenberg/pull/38747)) +- Post Terms: Unescape HTML entities in term names. ([39216](https://github.com/WordPress/gutenberg/pull/39216)) +- Restructure code bock styling. ([38712](https://github.com/WordPress/gutenberg/pull/38712)) +- Try: Fix image responsive rules. ([39045](https://github.com/WordPress/gutenberg/pull/39045)) +- Widget Group: Make `save()` markup the same as `render_callback` markup. ([38510](https://github.com/WordPress/gutenberg/pull/38510)) +- [Cover]: Fix keep selected unit on deleting minHeight value. ([39145](https://github.com/WordPress/gutenberg/pull/39145)) + +#### Global Styles +- Fix Blocks list ordering in Global Styles. ([39093](https://github.com/WordPress/gutenberg/pull/39093)) +- Fix default duotone preset SVG and style generation. ([38681](https://github.com/WordPress/gutenberg/pull/38681)) +- [Global Styles]: Fix header panel height. ([39119](https://github.com/WordPress/gutenberg/pull/39119)) + +#### Testing +- Fix performance tests by adding backwards compatibility to welcome guide utility. ([39300](https://github.com/WordPress/gutenberg/pull/39300)) +- e2e-tests: Update preview test to wait for publish panel to appear before closing it. ([39100](https://github.com/WordPress/gutenberg/pull/39100)) + +#### Components +- Update drag gesture of `InputControl`-based controls with axial constraint. ([38968](https://github.com/WordPress/gutenberg/pull/38968)) +- `UnitControl`: Fix controlled `unit` behavior. ([39148](https://github.com/WordPress/gutenberg/pull/39148)) + +#### Post Editor +- Avoid error when 'styles' settings are removed. ([39091](https://github.com/WordPress/gutenberg/pull/39091)) +- URL: Fix code drift in the Editor package by removing duplicate cleanForSlug function. ([39033](https://github.com/WordPress/gutenberg/pull/39033)) + +#### Build Tooling +- Fix `npm run docs:Build` crashing when a `block.json` lacks `supports` key. ([39241](https://github.com/WordPress/gutenberg/pull/39241)) + +#### npm Packages +- Packages: Automatically acceppt all Lerna commands when run with CI flag. ([39199](https://github.com/WordPress/gutenberg/pull/39199)) + +#### CSS & Styling +- Fixes #38761 by removing obsolete `::Before` pseudo element. ([38762](https://github.com/WordPress/gutenberg/pull/38762)) + + +### Documentation + +- Add import useBlockProps. ([39072](https://github.com/WordPress/gutenberg/pull/39072)) +- Docs: Emphasized requirement to enclose in quotation marks wp-env run…. ([39101](https://github.com/WordPress/gutenberg/pull/39101)) +- Spelling error in `JustifyContentControl` example. ([39234](https://github.com/WordPress/gutenberg/pull/39234)) +- [Gutenberg Data Tutorial] Part 3: Building an edit form. ([38581](https://github.com/WordPress/gutenberg/pull/38581)) + +#### Components +- Move recent CHANGELOG entry to `Unreleased` section. ([39169](https://github.com/WordPress/gutenberg/pull/39169)) +- Storybook: Support proper extraction of TypeScript prop types. ([38842](https://github.com/WordPress/gutenberg/pull/38842)) +- fix: Code example in flyout component. ([39156](https://github.com/WordPress/gutenberg/pull/39156)) + + +### Code Quality + +- Core Data: Rename `types` directory to `entity-types`. ([39225](https://github.com/WordPress/gutenberg/pull/39225)) +- Core data: Fix some typing issues. ([39212](https://github.com/WordPress/gutenberg/pull/39212)) +- Core data: Fix some typing issues. ([39214](https://github.com/WordPress/gutenberg/pull/39214)) +- Fix `@wordpress/comment-case` ESlint errors but without adding the disable-rule pragma. ([37006](https://github.com/WordPress/gutenberg/pull/37006)) +- Refactor useSelect usages to useEntityRecords. ([38827](https://github.com/WordPress/gutenberg/pull/38827)) + +#### Post Editor +- useBlockEditorSettings: Remove unused unstableBase fetch. ([39221](https://github.com/WordPress/gutenberg/pull/39221)) + +#### Widgets Editor +- Delete widget editor redundant css for more menu. ([39113](https://github.com/WordPress/gutenberg/pull/39113)) + +#### Plugin +- Layout: Remove duplicate var declaration. ([39111](https://github.com/WordPress/gutenberg/pull/39111)) + +#### Global Styles +- Move editor settings code to compat folder. ([39030](https://github.com/WordPress/gutenberg/pull/39030)) + +#### Themes +- Don't filter 'theme_templates' when running WP 5.9. ([39017](https://github.com/WordPress/gutenberg/pull/39017)) + +#### Components +- TreeGrid: Update callback unit tests to use TreeGridRow and TreeGridCell sub components. ([39002](https://github.com/WordPress/gutenberg/pull/39002)) + +#### Block Library +- Improve Nav block loading and placeholder states. ([38907](https://github.com/WordPress/gutenberg/pull/38907)) + + +### Tools + +- Code owners: Remove users without write access and fix typos. ([39238](https://github.com/WordPress/gutenberg/pull/39238)) +- Simplify Pull Request template. ([39229](https://github.com/WordPress/gutenberg/pull/39229)) + +#### Testing +- Add end-to-end testing for experimental nav menu deletion. ([38955](https://github.com/WordPress/gutenberg/pull/38955)) +- Add test case for post locking feature saving. ([39022](https://github.com/WordPress/gutenberg/pull/39022)) +- Add tests for media replace flow. ([39005](https://github.com/WordPress/gutenberg/pull/39005)) +- Block Test Fixtures: Add additional error message for serialized test fixtures that reserialize identically. ([39039](https://github.com/WordPress/gutenberg/pull/39039)) +- Update 'clickMenuItem' test util to use full label matching. ([39274](https://github.com/WordPress/gutenberg/pull/39274)) + +#### Build Tooling +- Fix spelling of contributors in changelog script. ([39029](https://github.com/WordPress/gutenberg/pull/39029)) +- Resolve peer dependency warnings. ([39043](https://github.com/WordPress/gutenberg/pull/39043)) + +#### npm Packages +- Packages: Automate npm publishing as part of Gutenberg release workflow. ([39259](https://github.com/WordPress/gutenberg/pull/39259)) + + +### Various + +- Add a resolvable JavaScript entry point to base-styles. ([39240](https://github.com/WordPress/gutenberg/pull/39240)) +- Add reusable preferences modal to interface package. ([39153](https://github.com/WordPress/gutenberg/pull/39153)) +- Create Block: Add confirm prompt before showing the plugin options. ([39105](https://github.com/WordPress/gutenberg/pull/39105)) +- Create Block: Improve custom project template configuration. ([39049](https://github.com/WordPress/gutenberg/pull/39049)) +- Element: Add changelog notes for serialize attribute casing. ([39141](https://github.com/WordPress/gutenberg/pull/39141)) +- Missing `,toggleFormat` from last code block. ([39146](https://github.com/WordPress/gutenberg/pull/39146)) +- Remove rename rn UI tests. ([39042](https://github.com/WordPress/gutenberg/pull/39042)) + +#### Block Library +- Adding a GIF badge to image blocks with gifs in them. ([38996](https://github.com/WordPress/gutenberg/pull/38996)) +- Buttons: Don't set a placeholder text color. ([39034](https://github.com/WordPress/gutenberg/pull/39034)) +- Post author name: Add "post" prefix to CSS class. ([38320](https://github.com/WordPress/gutenberg/pull/38320)) +- Post comments form block show warning wrt to post/page. ([38011](https://github.com/WordPress/gutenberg/pull/38011)) +- Refactor classic menu conversion process. ([38858](https://github.com/WordPress/gutenberg/pull/38858)) +- Social Icons - Begin Automating Existing Manual Test Cases. ([39027](https://github.com/WordPress/gutenberg/pull/39027)) +- Tag Cloud: Use flex for the Outline style. ([38995](https://github.com/WordPress/gutenberg/pull/38995)) + +#### Components +- FontSizePicker: Refactor stories to use Controls. ([38727](https://github.com/WordPress/gutenberg/pull/38727)) +- Normalize font-family. ([38969](https://github.com/WordPress/gutenberg/pull/38969)) +- Storybook: Add webpack loader for easier story descriptions. ([39165](https://github.com/WordPress/gutenberg/pull/39165)) +- [Components]: Update changelog follow up for #38985. ([39013](https://github.com/WordPress/gutenberg/pull/39013)) + +#### Themes +- Theme Export: Add index.php and style.css. ([39173](https://github.com/WordPress/gutenberg/pull/39173)) + +#### Icons +- Update Pin icon, add new Post icon. ([39139](https://github.com/WordPress/gutenberg/pull/39139)) + +#### Block Conversion +- [Block Conversion]: Show `group` option in `Group` blocks. ([39094](https://github.com/WordPress/gutenberg/pull/39094)) + +#### Accessibility +- Try allowing tab into block placeholder. ([39085](https://github.com/WordPress/gutenberg/pull/39085)) + +#### Full Site Editing +- Expose plugin area to site editor's List page. ([39078](https://github.com/WordPress/gutenberg/pull/39078)) + +#### Data Layer +- Handle resolution errors in @wordpress/data. ([38669](https://github.com/WordPress/gutenberg/pull/38669)) + +#### Design Tools +- Webfonts API. ([37140](https://github.com/WordPress/gutenberg/pull/37140)) + +#### Global Styles +- Account for upcoming changes in styles metadata in WordPress 5.9. ([36327](https://github.com/WordPress/gutenberg/pull/36327)) + + +## First time contributors + +The following PRs were merged by first time contributors: + +- @ahsanshaheen199: fix: Code example in flyout component. ([39156](https://github.com/WordPress/gutenberg/pull/39156)) +- @alshakerM: Render SVG props that have dashes correctly. ([38936](https://github.com/WordPress/gutenberg/pull/38936)) +- @awps: Missing `,toggleFormat` from last code block. ([39146](https://github.com/WordPress/gutenberg/pull/39146)) +- @francisei: Docs: Emphasized requirement to enclose in quotation marks wp-env run…. ([39101](https://github.com/WordPress/gutenberg/pull/39101)) +- @ironprogrammer: Raise z-index of content div relative to sidebars. ([38893](https://github.com/WordPress/gutenberg/pull/38893)) +- @joshuafredrickson: Add a resolvable JavaScript entry point to base-styles. ([39240](https://github.com/WordPress/gutenberg/pull/39240)) +- @jostnes: Remove rename rn UI tests. ([39042](https://github.com/WordPress/gutenberg/pull/39042)) +- @mashikag: Fix Blocks list ordering in Global Styles. ([39093](https://github.com/WordPress/gutenberg/pull/39093)) +- @tomasztunik: Fix Global styles overriding block's element styles. ([39012](https://github.com/WordPress/gutenberg/pull/39012)) +- @Tumas2: Spelling error in `JustifyContentControl` example. ([39234](https://github.com/WordPress/gutenberg/pull/39234)) + + +## Contributors + +The following contributors merged PRs in this release: + +@adamziel @ahsanshaheen199 @ajlende @alexstine @alshakerM @amustaque97 @andrewserong @aristath @awps @c4rl0sbr4v0 @carolinan @chad1008 @ciampo @delowardev @dmsnell @draganescu @fluiddot @francisei @getdave @gwwar @gziolo @illusaen @ironprogrammer @jasmussen @joshuafredrickson @jostnes @jsnajdr @Mamaduka @mashikag @mirka @ndiego @noahtallen @noisysocks @ntsekouras @oandregal @ocean90 @opr @priethor @ramonjd @ryanwelcher @scruffian @Sidsector9 @SiobhyB @Sisanu @stokesman @talldan @tellthemachines @tomasztunik @ttahmouch @Tumas2 @walbo @webmandesign @zaguiini @ZebulanStanphill + + += 12.7.1 = + + + +## Changelog + +### Bug Fixes + +#### Block Library +- Image block: Add additional selector to account for the move of is-style classes. ([39295](https://github.com/WordPress/gutenberg/pull/39295)) + +## Contributors + +The following contributors merged PRs in this release: + +@glendaviesnz + + += 12.7.0 = + +## Changelog + +### Enhancements + +#### Block Library +- Columns: Add border support. ([31737](https://github.com/WordPress/gutenberg/pull/31737)) +- Comment Template: Fix comment pagination with nested replies. ([38187](https://github.com/WordPress/gutenberg/pull/38187)) +- Comments Query Loop: Show placeholder comments on site editor. ([38072](https://github.com/WordPress/gutenberg/pull/38072)) +- Group Blocks: Add margin support (top/bottom). ([37344](https://github.com/WordPress/gutenberg/pull/37344)) +- Navigation: Try unifying submenu arrow positioning. ([37003](https://github.com/WordPress/gutenberg/pull/37003)) +- Page List: Simplify loading state. ([38983](https://github.com/WordPress/gutenberg/pull/38983)) +- Submenu: Add revert button. ([38203](https://github.com/WordPress/gutenberg/pull/38203)) + +#### Components +- FocalPointPicker: Allow updating its value while dragging. ([38247](https://github.com/WordPress/gutenberg/pull/38247)) +- General Interface: Simplify site icon animation on hover. ([38783](https://github.com/WordPress/gutenberg/pull/38783)) +- Navigator: Add `NavigatorButton` and `NavigatorBackButton` components. ([38634](https://github.com/WordPress/gutenberg/pull/38634)) +- Type Refactor: Use `forwardedRef` type for all forwarded refs in @wordpress/components. ([38948](https://github.com/WordPress/gutenberg/pull/38948)) + +#### Block Editor +- Block Editor: Add settings to enable/disable auto anchor generation. ([38780](https://github.com/WordPress/gutenberg/pull/38780)) +- Block Transforms: Keep additional HTML classes during a block transform. ([38964](https://github.com/WordPress/gutenberg/pull/38964)) +- LineHeightControl: Enhance interactions by migrating internals to `NumberControl` on Style options. ([37160](https://github.com/WordPress/gutenberg/pull/37160)) +- List View: Add multi-select behaviour for blocks when shift key is selected. ([38314](https://github.com/WordPress/gutenberg/pull/38314)) +- Quick Inserter: Prioritize showing patterns instead of blocks. ([38709](https://github.com/WordPress/gutenberg/pull/38709)) +- Template Parts: Show existing template parts and a list of block patterns at creation flow. ([38814](https://github.com/WordPress/gutenberg/pull/38814)) + +#### Styles +- Add initial version of the style engine. ([37978](https://github.com/WordPress/gutenberg/pull/37978)) +- Style engine: Refine `Box` type. ([38894](https://github.com/WordPress/gutenberg/pull/38894)) + +#### Post Editor +- Enable tooltip for the main dashboard button. ([38790](https://github.com/WordPress/gutenberg/pull/38790)) + +#### Themes +- Lowered specificity of alignment rules for support layout so wide alignments work. ([38947](https://github.com/WordPress/gutenberg/pull/38947)) +- Remove data-align divs for themes that support layout. ([38613](https://github.com/WordPress/gutenberg/pull/38613)) +- Remove the div wrapper from the aligned image blocks. ([38657](https://github.com/WordPress/gutenberg/pull/38657)) + +#### Patterns +- Allow pattern registration from directory with theme.json. ([38323](https://github.com/WordPress/gutenberg/pull/38323)) + +#### List View +- Expand block list tree on selection. ([35817](https://github.com/WordPress/gutenberg/pull/35817)) + +### Bug Fixes + +#### Block Library +- Block Transforms: Fix Image and Video to Cover block transformations. ([38959](https://github.com/WordPress/gutenberg/pull/38959)) +- Cover: Fix gradient overlay (remove black background color) ([38765](https://github.com/WordPress/gutenberg/pull/38765)) +- File: Fix PDF file block full content fixture. ([38725](https://github.com/WordPress/gutenberg/pull/38725)) +- Latest Posts: Add missing class to post title. ([38740](https://github.com/WordPress/gutenberg/pull/38740)) +- Logo: Avoid division by zero in site logo. ([38808](https://github.com/WordPress/gutenberg/pull/38808)) +- Post navigation link: Use correct closing tag. ([38976](https://github.com/WordPress/gutenberg/pull/38976)) +- Query Loop: Display nothing if we want only sticky posts but no stickies exist. ([38909](https://github.com/WordPress/gutenberg/pull/38909)) +- Template Parts: Decode entities in labels. ([38805](https://github.com/WordPress/gutenberg/pull/38805)) +- Social Links: Only apply the social links block migration if there's a need for a migration. ([38561](https://github.com/WordPress/gutenberg/pull/38561)) + +#### Block Editor +- Backport from core: Global styles duotone not rendering in post editor. ([38897](https://github.com/WordPress/gutenberg/pull/38897)) +- Block Editor: insertDefaultBlock should not trigger an error if the default block is not registered. ([38886](https://github.com/WordPress/gutenberg/pull/38886)) +- Inserter: Fix focus loss after closing patterns explorer from modal. ([38884](https://github.com/WordPress/gutenberg/pull/38884)) +- Multi-selection: avoid RichText instances becoming disabled after multi selection. ([38821](https://github.com/WordPress/gutenberg/pull/38821)) +- Rehabilitate drag gesture in `LineHeightControl`. ([38930](https://github.com/WordPress/gutenberg/pull/38930)) +- RichText: Fix wrong block merging when pressing `delete` consecutively. ([38991](https://github.com/WordPress/gutenberg/pull/38991)) + +#### Site Editor +- Add site editor initial redirect error handling. ([38655](https://github.com/WordPress/gutenberg/pull/38655)) +- Add template check to 'setPage' action. ([38656](https://github.com/WordPress/gutenberg/pull/38656)) +- Adds additional check to guard against incompete presets. ([38902](https://github.com/WordPress/gutenberg/pull/38902)) +- Limit template part slugs to Latin chars. ([38695](https://github.com/WordPress/gutenberg/pull/38695)) +- Template List: Decode entities in record titles. ([38863](https://github.com/WordPress/gutenberg/pull/38863)) + +#### Styles +- Allow child classes to be called instead of the parents. ([38857](https://github.com/WordPress/gutenberg/pull/38857)) +- Backport: Allow for classic themes using default presets. ([38701](https://github.com/WordPress/gutenberg/pull/38701)) +- Fix global styles loading logic. ([38745](https://github.com/WordPress/gutenberg/pull/38745)) + +#### Components +- Fix unexpected dragging triggered on spinner buttons on hover in Safari. ([38840](https://github.com/WordPress/gutenberg/pull/38840)) +- Show tooltip on toggle custom size in FontSizePicker. ([38985](https://github.com/WordPress/gutenberg/pull/38985)) + +#### List View +- Fix error triggering after duplicating a block making it unselectable. ([38760](https://github.com/WordPress/gutenberg/pull/38760)) +- Fix UI broken due to error when deleting first item in canvas. ([38775](https://github.com/WordPress/gutenberg/pull/38775)) + +#### CSS & Styling +- Fix button width on Widgets Editor. ([38846](https://github.com/WordPress/gutenberg/pull/38846)) +- Load block support styles in the `<head>` for block themes. ([38750](https://github.com/WordPress/gutenberg/pull/38750)) +- Change location of block support styles in `<head>`. ([39164](https://github.com/WordPress/gutenberg/pull/39164)) +- Reduce the margin of the block toolbar. ([38746](https://github.com/WordPress/gutenberg/pull/38746)) + +#### Block Directory +- Fix the block activation when metadata registered on server. ([38697](https://github.com/WordPress/gutenberg/pull/38697)) + +#### Colors +- Strip double # char on HexInput. ([38335](https://github.com/WordPress/gutenberg/pull/38335)) + +#### Packages +- Core Data: CanUser resolver always use the OPTIONS method. ([38901](https://github.com/WordPress/gutenberg/pull/38901)) +- Dom: Avoid RangeError in findPrevious method. ([38961](https://github.com/WordPress/gutenberg/pull/38961)) + +#### Apps +- Fix Custom Palette colors and support multiple origins and theme cache issues. ([38417](https://github.com/WordPress/gutenberg/pull/38417)) + +### Accessibility +- Adds aria-label to the search button, as accessibility enhancement. ([38136](https://github.com/WordPress/gutenberg/pull/38136)) +- Avoid duplicate labels for "Save Draft" and "Save as pending" buttons. ([38776](https://github.com/WordPress/gutenberg/pull/38776)) +- RichText: Reverse disableLineBreaks to determine aria-multiline state. ([38652](https://github.com/WordPress/gutenberg/pull/38652)) +- TreeGrid: Add Home/End keys to jump to start/end of grid. ([38679](https://github.com/WordPress/gutenberg/pull/38679)) + +### Performance + +#### CSS & Styling +- Use `wp_unique_id()` instead of `uniqid()` to generate CSS class names. ([38891](https://github.com/WordPress/gutenberg/pull/38891)) + +### Experiments + +#### New APIs in Core Data +- Propose useEntityRecords (experimental). ([38782](https://github.com/WordPress/gutenberg/pull/38782)) +- UseEntityRecord (experimental). ([38522](https://github.com/WordPress/gutenberg/pull/38522)) + +### Documentation + +#### Handbook +- Add documentation for deprecating styles. ([38540](https://github.com/WordPress/gutenberg/pull/38540)) +- Add documentation about the `patterns` field of `theme.json`. ([38700](https://github.com/WordPress/gutenberg/pull/38700)) +- Add more info about contextual patterns and pattern transformations. ([38809](https://github.com/WordPress/gutenberg/pull/38809)) +- Add semantic patterns documentation. ([38778](https://github.com/WordPress/gutenberg/pull/38778)) +- Clarify deprecations documentation. ([38683](https://github.com/WordPress/gutenberg/pull/38683)) +- Fix hyperlink in block `Metadata` page. ([38941](https://github.com/WordPress/gutenberg/pull/38941)) +- Improve point release documentation to include even more detail. ([38631](https://github.com/WordPress/gutenberg/pull/38631)) +- Increase support for `experimental-link-color` until WordPress 5.9 is the minimum version. ([38711](https://github.com/WordPress/gutenberg/pull/38711)) +- Group: Update block supports. ([38962](https://github.com/WordPress/gutenberg/pull/38962)) +- Links changed for Developer.wordpress.org on block editor section. ([38841](https://github.com/WordPress/gutenberg/pull/38841)) +- Removing comma so that the code snippet of `theme.json` represents standard JSON. ([38938](https://github.com/WordPress/gutenberg/pull/38938)) +- `theme.json` Update version section docs to v2 ([38937](https://github.com/WordPress/gutenberg/pull/38937)) +- Update Getting Started with more granular options. ([38682](https://github.com/WordPress/gutenberg/pull/38682)) + +#### Block Library +- Add instructions on how to add new core blocks to block-library. ([38868](https://github.com/WordPress/gutenberg/pull/38868)) + +#### Components +- FormFileUpload: Add Storybook stories. ([38734](https://github.com/WordPress/gutenberg/pull/38734)) +- Storybook: Move experimental components to correct section. ([38640](https://github.com/WordPress/gutenberg/pull/38640)) +- Storybook: Remove story for Typography Panel. ([38867](https://github.com/WordPress/gutenberg/pull/38867)) +- wp-env: Document some caveats when using xdebug with VSCode. ([38882](https://github.com/WordPress/gutenberg/pull/38882)) + + +### Code Quality + +#### Block Library +- Cover: Remove unnecessary `temporaryMinHeight`. ([38887](https://github.com/WordPress/gutenberg/pull/38887)) +- Cover block: Update deprecated gradient fixture. ([38728](https://github.com/WordPress/gutenberg/pull/38728)) +- Gallery: Register gallery in block_names dynamic block array. ([38689](https://github.com/WordPress/gutenberg/pull/38689)) +- Navigation: Improve consistency of block hook. ([38705](https://github.com/WordPress/gutenberg/pull/38705)) +- Navigation: Select dropdown encapsulation and further consolidation. ([38627](https://github.com/WordPress/gutenberg/pull/38627)) +- Navigation: Update wp_kses usage to be consistent (use wp_kses_post). ([38732](https://github.com/WordPress/gutenberg/pull/38732)) +- Post Navigation Link: Prefer kses to blanket esc_html on label. ([38696](https://github.com/WordPress/gutenberg/pull/38696)) +- Remove data-controls mock from Image block RN tests. ([38852](https://github.com/WordPress/gutenberg/pull/38852)) + +#### Components +- Block Supports: Improve image block regex. ([38742](https://github.com/WordPress/gutenberg/pull/38742)) +- Block Supports: Load Styles on `<head>` backport to core. ([38880](https://github.com/WordPress/gutenberg/pull/38880)) +- Context: Omit `as` prop in types. ([38844](https://github.com/WordPress/gutenberg/pull/38844)) +- Core Data: Remove fallback for OPTIONS response headers in canUser resolver. ([38881](https://github.com/WordPress/gutenberg/pull/38881)) +- Core Data: TypeScript definitions for entity records. ([38666](https://github.com/WordPress/gutenberg/pull/38666)) +- Data: Normalize selector args when handling metadata selectors/actions. ([38945](https://github.com/WordPress/gutenberg/pull/38945)) +- Edit Site: Migrate store to thunks. ([38812](https://github.com/WordPress/gutenberg/pull/38812)) +- Icons: Deprecate duplicate icons. ([38849](https://github.com/WordPress/gutenberg/pull/38849)) +- PostTrash: Call trashPost action with no arguments, rewrite to hooks. ([38615](https://github.com/WordPress/gutenberg/pull/38615)) + +#### npm Packages +- Packages: Automate cherry-picking to `trunk` commits created during publishing. ([38977](https://github.com/WordPress/gutenberg/pull/38977)) +- Packages: Ensure that private packages do not update when publishing to npm. ([38946](https://github.com/WordPress/gutenberg/pull/38946)) + + +### Tools + +#### Testing +- Add end-to-end test for merging paragraphs and soft line break afterwards. ([39009](https://github.com/WordPress/gutenberg/pull/39009)) +- Post Visibility end-to-end test: Improve XPath selector to avoid reliance on DOM structure. ([38717](https://github.com/WordPress/gutenberg/pull/38717)) +- Replace no-shadow eslint rule with @typescript-eslint/no-shadow. ([38665](https://github.com/WordPress/gutenberg/pull/38665)) +- Remove client ID from fixtures. ([38685](https://github.com/WordPress/gutenberg/pull/38685)) +- Remove `originalContent` from fixtures. ([38638](https://github.com/WordPress/gutenberg/pull/38638)) +- RichText: Add test for merging and then splitting paragraphs. ([39007](https://github.com/WordPress/gutenberg/pull/39007)) +- Site Editor Tests: Use REST API to delete templates and template parts. ([38524](https://github.com/WordPress/gutenberg/pull/38524)) +- TreeGrid: Add tests for callback functions. ([38942](https://github.com/WordPress/gutenberg/pull/38942)) + +#### Build Tooling +- Build separate full contributors list. ([38777](https://github.com/WordPress/gutenberg/pull/38777)) +- Bump @svgr/webpack from ^5.5.0 to ^6.2.1 ([38866](https://github.com/WordPress/gutenberg/pull/38866)) +- Generate full release contributors list in release changelog. ([38704](https://github.com/WordPress/gutenberg/pull/38704)) +- Generate sourcemap for production plugin builds. ([33718](https://github.com/WordPress/gutenberg/pull/33718)) +- Mobile: Improve npm clean scripts for react-native-editor. ([38752](https://github.com/WordPress/gutenberg/pull/38752)) +- PWA: Fix URL query param issue. ([38755](https://github.com/WordPress/gutenberg/pull/38755)) +- Scripts: Do not exit `build` when no entry found in `src` directory. ([38737](https://github.com/WordPress/gutenberg/pull/38737)) +- Scripts: Fix Entry points are not detected in Windows OS. ([38781](https://github.com/WordPress/gutenberg/pull/38781)) +- Scripts: Copy PHP files from `src` into `build`. ([38715](https://github.com/WordPress/gutenberg/pull/38715)) + +#### Components +- BaseControl: Refactor stories to use Controls. ([38741](https://github.com/WordPress/gutenberg/pull/38741)) +- Migrate Post Template Delete button from `confirm()` to `ConfirmDialog`. ([37535](https://github.com/WordPress/gutenberg/pull/37535)) +- Migrate the Post 'Switch to draft' button to `ConfirmDialog` component. ([37491](https://github.com/WordPress/gutenberg/pull/37491)) +- Storybook: Ensure rerender for RTL switcher. ([38963](https://github.com/WordPress/gutenberg/pull/38963)) + +#### Post Editor +- Edit Post: Migrate store actions to thunks. ([36551](https://github.com/WordPress/gutenberg/pull/36551)) +- Editor store: Remove a noop SETUP_EDITOR action. ([38622](https://github.com/WordPress/gutenberg/pull/38622)) +- Migrate editor store to thunks. ([35929](https://github.com/WordPress/gutenberg/pull/35929)) + +#### Styles +- Allow to extend the `WP_Theme_JSON_Gutenberg` class. ([38671](https://github.com/WordPress/gutenberg/pull/38671)) +- Global Styles: Fix PHP warning in WP_REST_Global_Styles_Controller. ([38888](https://github.com/WordPress/gutenberg/pull/38888)) +- Update Global Styles code to continue adding settings & styles. ([38883](https://github.com/WordPress/gutenberg/pull/38883)) + +#### Block Library +- Change Gallery block code ownership. ([38722](https://github.com/WordPress/gutenberg/pull/38722)) + +## First time contributors + +The following PRs were merged by first time contrbutors: + +- @Alex-Kostov: Fix for widget customizer panel,. ([38746](https://github.com/WordPress/gutenberg/pull/38746)) +- @HasnainAshfaq: Version section update. ([38937](https://github.com/WordPress/gutenberg/pull/38937)) +- @mjstoney: (Issue #38390) Fixed CSS position property to fix button width. ([38846](https://github.com/WordPress/gutenberg/pull/38846)) +- @razwan: Add resolvePoint prop to FocalPointPicker component to allow updating value while dragging. ([38247](https://github.com/WordPress/gutenberg/pull/38247)) +- @sanzeeb3: Fix hyperlink in block `Metadata` page. ([38941](https://github.com/WordPress/gutenberg/pull/38941)) +- @Sisanu: Adds aria-label to the search button, as accessibility enhancement. ([38136](https://github.com/WordPress/gutenberg/pull/38136)) + + +## Contributors + +The following contributors merged PRs in this release: + +@aaronrobertshaw @adamziel @ajlende @Alex-Kostov @alexstine @andrewserong @annezazu @audrasjb @bph @c4rl0sbr4v0 @chad1008 @ciampo @DAreRodz @delowardev @dmsnell @ellatrix @fluiddot @geriux @getdave @glendaviesnz @gziolo @HasnainAshfaq @jasmussen @jeherve @jorgefilipecosta @jsnajdr @KevinBatdorf @MaggieCabrera @Mamaduka @mchowning @michalczaplinski @mirka @mjstoney @mkevins @ndiego @noahtallen @ntsekouras @oandregal @ocean90 @PatelUtkarsh @ramonjd @razwan @ryanwelcher @sanzeeb3 @Sisanu @stokesman @t-hamano @talldan @twstokes @webmandesign @westonruter @youknowriad + + += 12.6.1 = + +### Bug Fixes + +**Block Editor** +- Fix an issue where content copied from certain editors (like MS Word) would paste as an image rather than the actual content. ([38992](https://github.com/WordPress/gutenberg/pull/38992)) + + += 12.7.0-rc.1 = + + + +## Changelog + +### Enhancements + +- Remove data-align divs for themes that support layout. ([38613](https://github.com/WordPress/gutenberg/pull/38613)) +- Scripts: Copy PHP files from `src` into `build`. ([38715](https://github.com/WordPress/gutenberg/pull/38715)) +- Update template part creation and replacement flows. ([38814](https://github.com/WordPress/gutenberg/pull/38814)) +- Update: Keep additional classes during a block transform. ([38964](https://github.com/WordPress/gutenberg/pull/38964)) + +#### Block Library +- Add margin support (top/bottom) to group blocks. ([37344](https://github.com/WordPress/gutenberg/pull/37344)) +- Add revert button to submenu block. ([38203](https://github.com/WordPress/gutenberg/pull/38203)) +- Block Editor: Add settings to enable/disable auto anchor generation. ([38780](https://github.com/WordPress/gutenberg/pull/38780)) +- Navigation: Try unifying submenu arrow positioning. ([37003](https://github.com/WordPress/gutenberg/pull/37003)) +- Page List: Simplify loading state. ([38983](https://github.com/WordPress/gutenberg/pull/38983)) +- [Comments Query Loop] Show placeholder comments on site editor. ([38072](https://github.com/WordPress/gutenberg/pull/38072)) + +#### Components +- Add resolvePoint prop to FocalPointPicker component to allow updating value while dragging. ([38247](https://github.com/WordPress/gutenberg/pull/38247)) +- LineHeightControl: Migrate internals to `NumberControl` (Part 1: Styles). ([37160](https://github.com/WordPress/gutenberg/pull/37160)) +- Use `forwardedRef` type for all forwarded refs. ([38948](https://github.com/WordPress/gutenberg/pull/38948)) +- `Navigator`: Add `NavigatorButton` and `NavigatorBackButton` components. ([38634](https://github.com/WordPress/gutenberg/pull/38634)) + +#### Block Editor +- List View: Add multi-select behaviour for blocks when shift key is selected. ([38314](https://github.com/WordPress/gutenberg/pull/38314)) +- Update: Prioritize patterns on quick inserter. ([38709](https://github.com/WordPress/gutenberg/pull/38709)) + +#### Accessibility +- RichText: Reverse disableLineBreaks to determine aria-multiline state. ([38652](https://github.com/WordPress/gutenberg/pull/38652)) +- TreeGrid: Add Home/End keys to jump to start/end of grid. ([38679](https://github.com/WordPress/gutenberg/pull/38679)) + +#### Global Styles +- Style engine: Refine `Box` type. ([38894](https://github.com/WordPress/gutenberg/pull/38894)) + +#### Post Editor +- Enable tooltip for the main dashboard button. ([38790](https://github.com/WordPress/gutenberg/pull/38790)) + +#### Themes +- Remove the div wrapper from the aligned image blocks. ([38657](https://github.com/WordPress/gutenberg/pull/38657)) + +#### Patterns +- [Pattern Directory]: Allow pattern registration from directory with theme.json. ([38323](https://github.com/WordPress/gutenberg/pull/38323)) + +#### REST API +- Comment Template: Optimize comment pagination with nested replies. ([38187](https://github.com/WordPress/gutenberg/pull/38187)) + +#### List View +- Try/expand block list tree on selection. ([35817](https://github.com/WordPress/gutenberg/pull/35817)) + +#### Build Tooling +- Generate sourcemap for production plugin builds. ([33718](https://github.com/WordPress/gutenberg/pull/33718)) + +#### Design Tools +- Columns: Add border support. ([31737](https://github.com/WordPress/gutenberg/pull/31737)) + + +### New APIs + +- Propose useEntityRecords (experimental). ([38782](https://github.com/WordPress/gutenberg/pull/38782)) +- UseEntityRecord (experimental). ([38522](https://github.com/WordPress/gutenberg/pull/38522)) + + +### Bug Fixes + +- Block Editor: Fix Redux error. ([38886](https://github.com/WordPress/gutenberg/pull/38886)) +- Core Data: CanUser resolver always use the OPTIONS method. ([38901](https://github.com/WordPress/gutenberg/pull/38901)) +- Dom: Avoid RangeError in findPrevious method. ([38961](https://github.com/WordPress/gutenberg/pull/38961)) +- Edit Site: Add template check to 'setPage' action. ([38656](https://github.com/WordPress/gutenberg/pull/38656)) +- Rehabilitate drag gesture in `LineHeightControl`. ([38930](https://github.com/WordPress/gutenberg/pull/38930)) +- Scripts: Do not exit `build` when no entry found in `src` directory. ([38737](https://github.com/WordPress/gutenberg/pull/38737)) +- Scripts: Fix Entry points are not detected in Windows OS. ([38781](https://github.com/WordPress/gutenberg/pull/38781)) +- admin-manifest: Fix URL query param issue. ([38755](https://github.com/WordPress/gutenberg/pull/38755)) + +#### Block Library +- Avoid division by zero in site logo block. ([38808](https://github.com/WordPress/gutenberg/pull/38808)) +- Fixes #38764 by setting transparent bg color on gradient overlay. ([38765](https://github.com/WordPress/gutenberg/pull/38765)) +- Latest Posts: Add missing class to post title. ([38740](https://github.com/WordPress/gutenberg/pull/38740)) +- Only apply the social links block migration if there's a need for a migration. ([38561](https://github.com/WordPress/gutenberg/pull/38561)) +- Post navigation link: Use correct closing tag. ([38976](https://github.com/WordPress/gutenberg/pull/38976)) +- Template Parts: Decode entities in labels. ([38805](https://github.com/WordPress/gutenberg/pull/38805)) +- [Query Loop]: Display nothing if we want only sticky posts but no stickies exist. ([38909](https://github.com/WordPress/gutenberg/pull/38909)) + +#### Block Editor +- Multi-selection: Avoid rich text contentEditable toggling. ([38821](https://github.com/WordPress/gutenberg/pull/38821)) +- [Inserter]: Fix focus loss after closing patterns explorer from modal. ([38884](https://github.com/WordPress/gutenberg/pull/38884)) +- [RichText]: Fix wrong block merging when pressing `delete` consecutively. ([38991](https://github.com/WordPress/gutenberg/pull/38991)) + +#### Site Editor +- Add site editor initial redirect error handling. ([38655](https://github.com/WordPress/gutenberg/pull/38655)) +- Limit template part slugs to Latin chars. ([38695](https://github.com/WordPress/gutenberg/pull/38695)) +- Template List: Decode entities in record titles. ([38863](https://github.com/WordPress/gutenberg/pull/38863)) + +#### Global Styles +- Fix for classic themes using default presets. ([38701](https://github.com/WordPress/gutenberg/pull/38701)) +- Fix for late static binding in the resolver. ([38857](https://github.com/WordPress/gutenberg/pull/38857)) +- Fix global styles loading logic. ([38745](https://github.com/WordPress/gutenberg/pull/38745)) + +#### Components +- Fix spin buttons of number inputs in Safari. ([38840](https://github.com/WordPress/gutenberg/pull/38840)) +- [Components]: Show tooltip on toggle custom size in FontSizePicker. ([38985](https://github.com/WordPress/gutenberg/pull/38985)) + +#### List View +- Fix list view error when deleting first item in canvas. ([38775](https://github.com/WordPress/gutenberg/pull/38775)) +- Fix: Select block after duplicate. ([38760](https://github.com/WordPress/gutenberg/pull/38760)) + +#### CSS & Styling +- Fix for widget customizer panel,. ([38746](https://github.com/WordPress/gutenberg/pull/38746)) +- Load block support styles in the head for block themes. ([38750](https://github.com/WordPress/gutenberg/pull/38750)) + +#### Widgets Editor +- (Issue #38390) Fixed CSS position property to fix button width. ([38846](https://github.com/WordPress/gutenberg/pull/38846)) + +#### Accessibility +- Avoid duplicate labels for "Save Draft" and "Save as pending" buttons. ([38776](https://github.com/WordPress/gutenberg/pull/38776)) + +#### Testing +- Fix file block full content fixture. ([38725](https://github.com/WordPress/gutenberg/pull/38725)) + +#### Block Directory +- Fix the block activation when metadata registered on server. ([38697](https://github.com/WordPress/gutenberg/pull/38697)) + +#### Colors +- Strip double # char on HexInput. ([38335](https://github.com/WordPress/gutenberg/pull/38335)) + + +### Performance + +#### CSS & Styling +- Use `wp_unique_id()` instead of `uniqid()` to generate CSS class names. ([38891](https://github.com/WordPress/gutenberg/pull/38891)) + + +### Experiments + +#### Global Styles +- Add initial version of the style engine. ([37978](https://github.com/WordPress/gutenberg/pull/37978)) + + +### Documentation + +- Add documentation about the `patterns` field of `theme.json`. ([38700](https://github.com/WordPress/gutenberg/pull/38700)) +- Add documentation for deprecating styles. ([38540](https://github.com/WordPress/gutenberg/pull/38540)) +- Add more info about contextual patterns and pattern transformations. ([38809](https://github.com/WordPress/gutenberg/pull/38809)) +- Add semantic patterns documentation. ([38778](https://github.com/WordPress/gutenberg/pull/38778)) +- Docs: Add instructions on how to add new core blocks to block-library. ([38868](https://github.com/WordPress/gutenberg/pull/38868)) +- Docs: Update Group block supports. ([38962](https://github.com/WordPress/gutenberg/pull/38962)) +- Fix hyperlink in block `Metadata` page. ([38941](https://github.com/WordPress/gutenberg/pull/38941)) +- Improve point release documentation to include even more detail. ([38631](https://github.com/WordPress/gutenberg/pull/38631)) +- Increase support for `experimental-link-color` until WordPress 5.9 is the minimum version. ([38711](https://github.com/WordPress/gutenberg/pull/38711)) +- Links changed for Develeoper.wordpress.org. ([38841](https://github.com/WordPress/gutenberg/pull/38841)) +- Removing comma so that the code snippet represents standard JSON. ([38938](https://github.com/WordPress/gutenberg/pull/38938)) +- Try and clarify deprecations documentation. ([38683](https://github.com/WordPress/gutenberg/pull/38683)) +- Update Getting Started with more granular options. ([38682](https://github.com/WordPress/gutenberg/pull/38682)) +- Version section update. ([38937](https://github.com/WordPress/gutenberg/pull/38937)) + +#### Components +- FormFileUpload: Add Storybook stories. ([38734](https://github.com/WordPress/gutenberg/pull/38734)) +- Storybook: Move experimental components to correct section. ([38640](https://github.com/WordPress/gutenberg/pull/38640)) + + +### Code Quality + +- Improve image block regex. ([38742](https://github.com/WordPress/gutenberg/pull/38742)) + +#### Block Library +- - Cover]: Remove unnecessary `temporaryMinHeight`. ([38887](https://github.com/WordPress/gutenberg/pull/38887)) +- Cover block: Update deprecated gradient fixture. ([38728](https://github.com/WordPress/gutenberg/pull/38728)) +- Gallery: Register gallery in block_names dynamic block array. ([38689](https://github.com/WordPress/gutenberg/pull/38689)) +- Improve consistency of Navigation block hook. ([38705](https://github.com/WordPress/gutenberg/pull/38705)) +- Nav block menu select dropdown encapsulation and further consolidation. ([38627](https://github.com/WordPress/gutenberg/pull/38627)) +- Prefer kses to blanket esc_html on label. ([38696](https://github.com/WordPress/gutenberg/pull/38696)) +- Update wp_kses usage to be consistent in navigation blocks (use wp_kses_post). ([38732](https://github.com/WordPress/gutenberg/pull/38732)) + +#### Components +- Context: Omit `as` prop in types. ([38844](https://github.com/WordPress/gutenberg/pull/38844)) +- Storybook: Remove story for Typography Panel. ([38867](https://github.com/WordPress/gutenberg/pull/38867)) + +#### npm Packages +- Packages: Ensure that private packages do not update when publishing to npm. ([38946](https://github.com/WordPress/gutenberg/pull/38946)) + + +### Tools + +- Scripts: Update to @svgr/webpack v6. ([38866](https://github.com/WordPress/gutenberg/pull/38866)) +- wp-env: Document some caveats when using xdebug with VSCode. ([38882](https://github.com/WordPress/gutenberg/pull/38882)) + +#### Testing +- Post Visibility end-to-end test: Improve XPath selector to avoid reliance on DOM structure. ([38717](https://github.com/WordPress/gutenberg/pull/38717)) +- Replace no-shadow eslint rule with @typescript-eslint/no-shadow. ([38665](https://github.com/WordPress/gutenberg/pull/38665)) +- RichText: Add test for merging and then splitting paragraphs. ([39007](https://github.com/WordPress/gutenberg/pull/39007)) +- Tests: Use REST API to delete templates and template parts. ([38524](https://github.com/WordPress/gutenberg/pull/38524)) +- [Automated Testing]: Add end-to-end test for merging paragraphs and soft line break afterwards. ([39009](https://github.com/WordPress/gutenberg/pull/39009)) + +#### Build Tooling +- Build separate full contributors list. ([38777](https://github.com/WordPress/gutenberg/pull/38777)) +- Generate full release contributors list in release changelog. ([38704](https://github.com/WordPress/gutenberg/pull/38704)) + +#### Components +- TreeGrid: Add tests for callback functions. ([38942](https://github.com/WordPress/gutenberg/pull/38942)) + + +### Various + +- Backport from core: Global styles duotone not rendering in post editor. ([38897](https://github.com/WordPress/gutenberg/pull/38897)) +- Block support styles: Port changes from core to Gutenberg. ([38880](https://github.com/WordPress/gutenberg/pull/38880)) +- Data: Enable thunks by default and remove the experimental flag. ([38853](https://github.com/WordPress/gutenberg/pull/38853)) +- Editor: Adds additional check to guard against incompete presets. ([38902](https://github.com/WordPress/gutenberg/pull/38902)) +- Integration tests: Remove client ID from fixtures. ([38685](https://github.com/WordPress/gutenberg/pull/38685)) +- Lowered specificity of alignment rules. ([38947](https://github.com/WordPress/gutenberg/pull/38947)) +- Mobile - Fix Custom Palette colors and support multiple origins and theme cache issues. ([38417](https://github.com/WordPress/gutenberg/pull/38417)) +- Mobile: Improve npm clean scripts for react-native-editor. ([38752](https://github.com/WordPress/gutenberg/pull/38752)) +- PostTrash: Call trashPost action with no arguments, rewrite to hooks. ([38615](https://github.com/WordPress/gutenberg/pull/38615)) +- Simplify site icon animation on hover. ([38783](https://github.com/WordPress/gutenberg/pull/38783)) +- Tests: Remove `originalContent` from fixtures. ([38638](https://github.com/WordPress/gutenberg/pull/38638)) +- Theme.json `styles` check: Port changes from core to Gutenberg. ([38888](https://github.com/WordPress/gutenberg/pull/38888)) +- TypeScript definitions for core-data entity records. ([38666](https://github.com/WordPress/gutenberg/pull/38666)) +- Upgrade react-native-video and drop jetifier on Android. ([38426](https://github.com/WordPress/gutenberg/pull/38426)) +- canUser resolver: Remove fallback for OPTIONS response headers. ([38881](https://github.com/WordPress/gutenberg/pull/38881)) +- edit-site store: Migrate to thunks. ([38812](https://github.com/WordPress/gutenberg/pull/38812)) + +#### Components +- BaseControl: Refactor stories to use Controls. ([38741](https://github.com/WordPress/gutenberg/pull/38741)) +- Migrate Post Template Delete button from `confirm()` to `ConfirmDialog`. ([37535](https://github.com/WordPress/gutenberg/pull/37535)) +- Migrate the Post 'Switch to draft' button to `ConfirmDialog` component. ([37491](https://github.com/WordPress/gutenberg/pull/37491)) +- Storybook: Ensure rerender for RTL switcher. ([38963](https://github.com/WordPress/gutenberg/pull/38963)) + +#### Post Editor +- Editor store: Remove a noop SETUP_EDITOR action. ([38622](https://github.com/WordPress/gutenberg/pull/38622)) +- Migrate editor store to thunks. ([35929](https://github.com/WordPress/gutenberg/pull/35929)) +- [Edit Post]: Migrate store actions to thunks. ([36551](https://github.com/WordPress/gutenberg/pull/36551)) + +#### Global Styles +- Allow to extend the `WP_Theme_JSON_Gutenberg` class. ([38671](https://github.com/WordPress/gutenberg/pull/38671)) +- Update Global Styles code to continue adding settings & styles. ([38883](https://github.com/WordPress/gutenberg/pull/38883)) + +#### Block Library +- Change Gallery block code ownership. ([38722](https://github.com/WordPress/gutenberg/pull/38722)) +- Remove data-controls mock from Image block RN tests. ([38852](https://github.com/WordPress/gutenberg/pull/38852)) + +#### npm Packages +- Packages: Automate cherry-picking to `trunk` commits created during publishing. ([38977](https://github.com/WordPress/gutenberg/pull/38977)) + +#### Block Conversion +- [Block Conversion]: Fix Image and Video to Cover block transformations. ([38959](https://github.com/WordPress/gutenberg/pull/38959)) + +#### Data Layer +- Data: Normalize selector args when handling metadata selectors/actions. ([38945](https://github.com/WordPress/gutenberg/pull/38945)) + +#### Icons +- Deprecate duplicate icons. ([38849](https://github.com/WordPress/gutenberg/pull/38849)) + +#### Accessibility +- Adds aria-label to the search button, as accessibility enhancement. ([38136](https://github.com/WordPress/gutenberg/pull/38136)) + + +## First time contributors + +The following PRs were merged by first time contrbutors: + +- @Alex-Kostov: Fix for widget customizer panel,. ([38746](https://github.com/WordPress/gutenberg/pull/38746)) +- @HasnainAshfaq: Version section update. ([38937](https://github.com/WordPress/gutenberg/pull/38937)) +- @mjstoney: (Issue #38390) Fixed CSS position property to fix button width. ([38846](https://github.com/WordPress/gutenberg/pull/38846)) +- @razwan: Add resolvePoint prop to FocalPointPicker component to allow updating value while dragging. ([38247](https://github.com/WordPress/gutenberg/pull/38247)) +- @sanzeeb3: Fix hyperlink in block `Metadata` page. ([38941](https://github.com/WordPress/gutenberg/pull/38941)) +- @Sisanu: Adds aria-label to the search button, as accessibility enhancement. ([38136](https://github.com/WordPress/gutenberg/pull/38136)) + + +## Contributors + +The following contributors merged PRs in this release: + +@aaronrobertshaw @adamziel @ajlende @Alex-Kostov @alexstine @andrewserong @annezazu @audrasjb @bph @c4rl0sbr4v0 @chad1008 @ciampo @DAreRodz @delowardev @dmsnell @ellatrix @fluiddot @geriux @getdave @glendaviesnz @gziolo @HasnainAshfaq @jasmussen @jeherve @jorgefilipecosta @jsnajdr @KevinBatdorf @MaggieCabrera @Mamaduka @mchowning @michalczaplinski @mirka @mjstoney @mkevins @ndiego @noahtallen @ntsekouras @oandregal @ocean90 @PatelUtkarsh @ramonjd @razwan @ryanwelcher @sanzeeb3 @Sisanu @stokesman @t-hamano @talldan @twstokes @webmandesign @westonruter @youknowriad + + += 12.6.0 = + +## Changelog + +### Enhancements + +#### Block Library +- Add transform between calendar and archives. ([38324](https://github.com/WordPress/gutenberg/pull/38324)) +- Add: Mechanism to keep styles during block transforms. ([37596](https://github.com/WordPress/gutenberg/pull/37596)) +- Code block: Add `core/paragraph` in transforms object. ([38295](https://github.com/WordPress/gutenberg/pull/38295)) +- Heading: Omit anchor when transforming to paragraph. ([38604](https://github.com/WordPress/gutenberg/pull/38604)) +- Navigation: Try removing "Add all pages" from placeholder. ([36775](https://github.com/WordPress/gutenberg/pull/36775)) +- Remove the Large style option from the quote block. ([37580](https://github.com/WordPress/gutenberg/pull/37580)) +- Social Icons: Add the ability to show/hide labels. ([38152](https://github.com/WordPress/gutenberg/pull/38152)) +- [Block Library]: Add transform between `Tag Cloud` and `Categories`. ([38566](https://github.com/WordPress/gutenberg/pull/38566)) +- [Block: Group] Add transform to row variation. ([36202](https://github.com/WordPress/gutenberg/pull/36202)) +- Add post author biography block. ([38269](https://github.com/WordPress/gutenberg/pull/38269)) +- Prompt to keep or replace Featured Image when replacing Image block media that is set as the Featured Image. ([34666](https://github.com/WordPress/gutenberg/pull/34666)) +- Block Library: Add new `Read More` block (post link). ([37649](https://github.com/WordPress/gutenberg/pull/37649)) +- Images: Try moving responsive rule to common.scss. ([38399](https://github.com/WordPress/gutenberg/pull/38399)) + +#### Components +- Dropdown: Tweak prop destructuring to be TypeScript friendly. ([38431](https://github.com/WordPress/gutenberg/pull/38431)) +- Tools Panel: Only show header ➕ icon when all items are optional. ([38262](https://github.com/WordPress/gutenberg/pull/38262)) +- Update the Spinner design. ([37551](https://github.com/WordPress/gutenberg/pull/37551)) +- `Navigator`: Add focus restoration. ([38149](https://github.com/WordPress/gutenberg/pull/38149)) +- `Navigator`: Rename `push`/`pop` to `goTo`/`goBack`. ([38582](https://github.com/WordPress/gutenberg/pull/38582)) +- Migrate Edit Navigation screen "Delete menu" button from `confirm()` …. ([37492](https://github.com/WordPress/gutenberg/pull/37492)) + +#### Post Editor +- Editor: Export FlatTermSelector and HierarchicalTermSelector. ([38419](https://github.com/WordPress/gutenberg/pull/38419)) +- Migrate post privacy confirmation from `confirm()` to `ConfirmDialog`. ([37602](https://github.com/WordPress/gutenberg/pull/37602)) +- Most Used Terms: Update show terms condition. ([38513](https://github.com/WordPress/gutenberg/pull/38513)) + +#### Testing +- Refactor Site Editor test utils to the `e2e-test-utils` package. ([38463](https://github.com/WordPress/gutenberg/pull/38463)) +- Test Create Block with more OS and Node versions. ([38368](https://github.com/WordPress/gutenberg/pull/38368)) +- Include tests-mysql port in dev:Start output. ([38590](https://github.com/WordPress/gutenberg/pull/38590)) + +#### Accessibility +- Accessibility improvements for List View Part 2. ([38358](https://github.com/WordPress/gutenberg/pull/38358)) +- Contrast Checker: Check link color. ([38100](https://github.com/WordPress/gutenberg/pull/38100)) + +#### Block Editor +- [Inserter]: Prioritize core blocks over core block variations when they have the same rank. ([38616](https://github.com/WordPress/gutenberg/pull/38616)) + +#### Design Tools +- Block Support: Update color panel default controls. ([38511](https://github.com/WordPress/gutenberg/pull/38511)) +- Duotone: Allow users to specify custom filters. ([38442](https://github.com/WordPress/gutenberg/pull/38442)) + +#### Site Editor +- Update footer breadcrumb text. ([38477](https://github.com/WordPress/gutenberg/pull/38477)) + +#### Extensibility +- Plugins: Add error boundary. ([38397](https://github.com/WordPress/gutenberg/pull/38397)) + +#### Widgets Editor +- Add tools slot on the navigation and widgets page settings menu. ([37928](https://github.com/WordPress/gutenberg/pull/37928)) + +#### Global Styles +- Color Block Support: Switch to ToolsPanel for displaying UI. ([34027](https://github.com/WordPress/gutenberg/pull/34027)) +- Allow child classes to use the private methods and constants. ([38625](https://github.com/WordPress/gutenberg/pull/38625)) +- Use the theme.json classes defined by the plugin in the REST controller. ([38663](https://github.com/WordPress/gutenberg/pull/38663)) + +#### Icons +- Add Tip icon to library and use in the Tip component. ([38424](https://github.com/WordPress/gutenberg/pull/38424)) +- Update pagination icons, add new query title and post terms icons. ([38521](https://github.com/WordPress/gutenberg/pull/38521)) + +#### WP-Env +- Adding the "env" script when --wp-env or wpEnv is present. ([38530](https://github.com/WordPress/gutenberg/pull/38530)) + +### New APIs + +- Introduce the `customScripts` property to allow templates to define additional scripts in package.json. ([38535](https://github.com/WordPress/gutenberg/pull/38535)) + +### Bug Fixes + +#### Block Library +- Audio: Avoid error when locked. ([38282](https://github.com/WordPress/gutenberg/pull/38282)) +- Comment Template: Improve UX of inner block selection. ([38263](https://github.com/WordPress/gutenberg/pull/38263)) +- Cover block :Add back missing styles. ([38362](https://github.com/WordPress/gutenberg/pull/38362)) +- Fix filtering of content when rendering read more block. ([38650](https://github.com/WordPress/gutenberg/pull/38650)) +- Fix search block html handling for label and button text. ([38649](https://github.com/WordPress/gutenberg/pull/38649)) +- Gallery block: Copy all attributes when transforming to Image blocks. ([38642](https://github.com/WordPress/gutenberg/pull/38642)) +- Gallery block: Fix bug with link destination default option not being set. ([38310](https://github.com/WordPress/gutenberg/pull/38310)) +- Gallery block: Fix bug with uploaded images being replaced with same image during selection phase. ([38259](https://github.com/WordPress/gutenberg/pull/38259)) +- Navigation: Try fixing issue with submenu button in dark contexts. ([38270](https://github.com/WordPress/gutenberg/pull/38270)) +- Navigation: Try inheriting orientation in setup state. ([36778](https://github.com/WordPress/gutenberg/pull/36778)) +- Gallery: Ensure last image takes up all available space. ([38189](https://github.com/WordPress/gutenberg/pull/38189)) +- Navigation: Remove blobs that look like a loading state. ([37099](https://github.com/WordPress/gutenberg/pull/37099)) +- Navigation: Try always showing appender even when child is selected. ([37637](https://github.com/WordPress/gutenberg/pull/37637)) +- Separator block: Remove width from wide style. ([38635](https://github.com/WordPress/gutenberg/pull/38635)) +- Tag Cloud: Add the style to the block.json file. ([38403](https://github.com/WordPress/gutenberg/pull/38403)) +- Block Library: Remove unnecessary usages of `RawHTML`. ([38527](https://github.com/WordPress/gutenberg/pull/38527)) +- Site Tagline: Disable line breaks. ([38475](https://github.com/WordPress/gutenberg/pull/38475)) + +#### Components +- Add `cx` as a dependency of `useMemo` across `@wordpress/components` package. ([38541](https://github.com/WordPress/gutenberg/pull/38541)) +- Fix `Slot`/`Fill` Emotion `StyleProvider`. ([38237](https://github.com/WordPress/gutenberg/pull/38237)) +- UnitControl: Add __unstableInputWidth to prop types. ([38429](https://github.com/WordPress/gutenberg/pull/38429)) +- `ComboBox`: Fix `reset` button's height. ([38020](https://github.com/WordPress/gutenberg/pull/38020)) +- `DateTimePicker`: Fix date format when switching to 12-hour time format. ([37465](https://github.com/WordPress/gutenberg/pull/37465)) + +#### Testing +- First Time Contributor check: Update args for getByUsername. ([38467](https://github.com/WordPress/gutenberg/pull/38467)) +- Silence editor initialization act warnings triggered by asynchronous resolvers during unmount. ([38344](https://github.com/WordPress/gutenberg/pull/38344)) +- Tests: Enable post type UI for templates and template parts. ([38486](https://github.com/WordPress/gutenberg/pull/38486)) + +#### Accessibility +- Block Manager: Announce search results. ([38654](https://github.com/WordPress/gutenberg/pull/38654)) +- TreeGrid accessibility: Improve browser support for Left Arrow focus to parent row in child row. ([38639](https://github.com/WordPress/gutenberg/pull/38639)) +- Ensure placeholder description is read by VoiceOver. ([38366](https://github.com/WordPress/gutenberg/pull/38366)) +- Remove role attributes on SVGs meant for "decoration" to improve a11y. ([38301](https://github.com/WordPress/gutenberg/pull/38301)) + +#### Block Editor +- Don't ignore legitimate files when pasting mixed content. ([38459](https://github.com/WordPress/gutenberg/pull/38459)) +- Handle the absence of href attrib in links. ([37034](https://github.com/WordPress/gutenberg/pull/37034)) +- Block preview: Fix resize listener. ([38516](https://github.com/WordPress/gutenberg/pull/38516)) +- Guard against undefined entity in site editor page setter. ([38503](https://github.com/WordPress/gutenberg/pull/38503)) +- Page for Posts: Display notice in template panel. ([38607](https://github.com/WordPress/gutenberg/pull/38607)) +- Editor store: Remove createUndoLevel and refreshPost actions. ([38585](https://github.com/WordPress/gutenberg/pull/38585)) + +#### Template Editor +- Template Editing Mode: Fix horizontal scrollbar. ([38612](https://github.com/WordPress/gutenberg/pull/38612)) +- Full Site Editing: Improve compat with 3rd party Customizer links. ([38598](https://github.com/WordPress/gutenberg/pull/38598)) +- Site Editor: Remove extra div on post content. ([38451](https://github.com/WordPress/gutenberg/pull/38451)) + +#### Design Tools +- Search Block: Fix border radius reset. ([38478](https://github.com/WordPress/gutenberg/pull/38478)) + +#### Scripts +- Avoid first time contributor workflows for bots. ([38393](https://github.com/WordPress/gutenberg/pull/38393)) +- Fix: Wp-scripts command does not generate assets on Windows OS. ([38348](https://github.com/WordPress/gutenberg/pull/38348)) +- Script: Ensure that `start` works when React Fast Refresh scripts missing. ([38318](https://github.com/WordPress/gutenberg/pull/38318)) +- Scripts: Fallback to `src/index.js` when no valid scripts in metadata for `build` command. ([38367](https://github.com/WordPress/gutenberg/pull/38367)) +- Scripts: Improve the handling for build entry points. ([38584](https://github.com/WordPress/gutenberg/pull/38584)) + +#### Apps +- Declare package visibility to query URL handler apps. ([38377](https://github.com/WordPress/gutenberg/pull/38377)) +- Drop jcenter repository from react-native Android projects. ([38142](https://github.com/WordPress/gutenberg/pull/38142)) +- Mobile - Rich Text - Validate link colors. ([38474](https://github.com/WordPress/gutenberg/pull/38474)) + + +### Performance + +#### Block Library +- Latest Posts: Avoid unnecessary re-renders. ([38402](https://github.com/WordPress/gutenberg/pull/38402)) +- Site Logo: Avoid unnecessary re-renders. ([38316](https://github.com/WordPress/gutenberg/pull/38316)) + +#### Post Editor +- Avoid unnecessary Post Formats re-renders. ([38285](https://github.com/WordPress/gutenberg/pull/38285)) +- Avoid unnecessary Template panel re-renders. ([38292](https://github.com/WordPress/gutenberg/pull/38292)) + +### Documentation +- Add a block supports chapter to the block creation tutorial. ([38210](https://github.com/WordPress/gutenberg/pull/38210)) +- Add a block supports for dynamic blocks chapter to the block creation tutorial. ([38249](https://github.com/WordPress/gutenberg/pull/38249)) +- Add a high-level intro to styles in the block editor. ([38208](https://github.com/WordPress/gutenberg/pull/38208)) +- Add contributing information to packages. ([38122](https://github.com/WordPress/gutenberg/pull/38122)) +- Add the Gutenberg data tutorial to the block editor handbook. ([38587](https://github.com/WordPress/gutenberg/pull/38587)) +- Docs: Move design documentation to user interface explanations. ([37807](https://github.com/WordPress/gutenberg/pull/37807)) +- Fix components package README contributing link and duplicate footers. ([38605](https://github.com/WordPress/gutenberg/pull/38605)) +- Fix relative links in main package READMEs so that they work in npm. ([38609](https://github.com/WordPress/gutenberg/pull/38609)) +- Fix: npm script error on Windows (api-docs:Ref). ([38326](https://github.com/WordPress/gutenberg/pull/38326)) +- Move backward compatibility documentation under Contributors Guide. ([37654](https://github.com/WordPress/gutenberg/pull/37654)) +- Provide proper path to image in the handbook. ([38480](https://github.com/WordPress/gutenberg/pull/38480)) +- Remove reference to `upcoming` WordPress 5.9 release. ([38272](https://github.com/WordPress/gutenberg/pull/38272)) +- Scripts: Fix copypasta typo in README file. ([38531](https://github.com/WordPress/gutenberg/pull/38531)) +- Show the block supports for static blocks tutorial in the handbook. ([38452](https://github.com/WordPress/gutenberg/pull/38452)) +- ToolsPanel StoryBook: Removing knobs in favour of controls. ([38308](https://github.com/WordPress/gutenberg/pull/38308)) +- Tutorial: Create your First App with Gutenberg Data. ([38250](https://github.com/WordPress/gutenberg/pull/38250)) +- Update attributes.md. ([38626](https://github.com/WordPress/gutenberg/pull/38626)) +- Update core/archive block schema to reflect no block-level settings support. ([37778](https://github.com/WordPress/gutenberg/pull/37778)) +- Update explanation of block.json file scanning. ([38379](https://github.com/WordPress/gutenberg/pull/38379)) +- Update theme support documentation. ([38514](https://github.com/WordPress/gutenberg/pull/38514)) +- VisuallyHidden: Remove stray readme file. ([38641](https://github.com/WordPress/gutenberg/pull/38641)) +- [Docs]: Add documentation for `schema` in block API. ([36839](https://github.com/WordPress/gutenberg/pull/36839)) +- Update Contributing Guidelines to reflect Dual-License. ([38303](https://github.com/WordPress/gutenberg/pull/38303)) +- Update version required before gutenberg_safe_style_attrs filter can be removed. ([38359](https://github.com/WordPress/gutenberg/pull/38359)) +- Updated changelog to reflect new tip icon. ([38450](https://github.com/WordPress/gutenberg/pull/38450)) +- Use a fixed link to the latest release in readme.txt. ([38550](https://github.com/WordPress/gutenberg/pull/38550)) + +#### Components +- Add CHANGELOG entries for recent `TreeGrid` improvements. ([38661](https://github.com/WordPress/gutenberg/pull/38661)) +- Add missing changelog entry. ([38325](https://github.com/WordPress/gutenberg/pull/38325)) +- Changelog: Add missed entries for recent typing fixes and tweaks. ([38469](https://github.com/WordPress/gutenberg/pull/38469)) +- Fix missing link in `@wordpress/components`'s CHANGELOG. ([38611](https://github.com/WordPress/gutenberg/pull/38611)) + +### Code Quality +- Chore: Fix: Remove isReversed usage. ([38484](https://github.com/WordPress/gutenberg/pull/38484)) +- Remove APIs deprecated on WordPress 5.4. ([38564](https://github.com/WordPress/gutenberg/pull/38564)) +- Update the minimum supported version to WordPress 5.8. ([38273](https://github.com/WordPress/gutenberg/pull/38273)) + +#### Plugin +- Bump bl from 4.0.2 to 4.1.0. ([38396](https://github.com/WordPress/gutenberg/pull/38396)) +- Bump follow-redirects from 1.14.1 to 1.14.7. ([38371](https://github.com/WordPress/gutenberg/pull/38371)) +- Bump jszip from 3.6.0 to 3.7.1. ([38410](https://github.com/WordPress/gutenberg/pull/38410)) +- Bump ssri from 6.0.1 to 6.0.2. ([38382](https://github.com/WordPress/gutenberg/pull/38382)) + +#### Components +- ColorIndicator: Add ts-nocheck to color indicator. ([38433](https://github.com/WordPress/gutenberg/pull/38433)) +- ColorPicker: Fix typing errors. ([38430](https://github.com/WordPress/gutenberg/pull/38430)) +- Refresh `object-keys` version in package-lock. ([38645](https://github.com/WordPress/gutenberg/pull/38645)) + +#### Block Library +- Consolidate select menus dropdown in Nav block code. ([38179](https://github.com/WordPress/gutenberg/pull/38179)) +- Cover block: Background element's classname consistency. ([38392](https://github.com/WordPress/gutenberg/pull/38392)) +- Image Block: Explicitly check for false from strpos(). ([38505](https://github.com/WordPress/gutenberg/pull/38505)) + +#### npm Packages +- Remove unused dependencies. ([38388](https://github.com/WordPress/gutenberg/pull/38388)) + +### Tools + +#### Testing +- Add: End to end test for the block transforms. ([38300](https://github.com/WordPress/gutenberg/pull/38300)) +- Add: End to end tests for style variations. ([38485](https://github.com/WordPress/gutenberg/pull/38485)) +- E2E: Fix flakey gallery and template end-to-end specs. ([38342](https://github.com/WordPress/gutenberg/pull/38342)) +- Minor retouches to test-create-block script. ([38482](https://github.com/WordPress/gutenberg/pull/38482)) +- Scripts: Update Puppeteer to v13. ([37078](https://github.com/WordPress/gutenberg/pull/37078)) + +#### Build Tooling +- Build workflow: Don't update version in readme.txt. ([38596](https://github.com/WordPress/gutenberg/pull/38596)) +- Changelog: Append a generated list of first time contributors by PR label. ([38372](https://github.com/WordPress/gutenberg/pull/38372)) +- Rename `GUTENBERG_PHASE` to `IS_GUTENBERG_PLUGIN`. ([38202](https://github.com/WordPress/gutenberg/pull/38202)) +- Bump axios from 0.21.1 to 0.21.4. ([38369](https://github.com/WordPress/gutenberg/pull/38369)) +- Bump hosted-git-info from 2.7.1 to 2.8.9. ([38327](https://github.com/WordPress/gutenberg/pull/38327)) +- Bump addressable from 2.7.0 to 2.8.0 in /packages/react-native-editor/ios. ([38234](https://github.com/WordPress/gutenberg/pull/38234)) +- Bump shelljs from 0.8.4 to 0.8.5. ([38370](https://github.com/WordPress/gutenberg/pull/38370)) +- Update kotlin version for react-native Android projects to 1.5.32. ([37970](https://github.com/WordPress/gutenberg/pull/37970)) +- ESLint Plugin: Add flanking whitespace and hyphenated range rules. ([38225](https://github.com/WordPress/gutenberg/pull/38225)) +- WP Env: Fix infinite redirection with custom site URL. ([38352](https://github.com/WordPress/gutenberg/pull/38352)) + +### People +- Add @ryanwelcher as code owner to three packages and docs. ([38532](https://github.com/WordPress/gutenberg/pull/38532)) + +## First time contributors + +The following PRs were merged by first time contrbutors: + +- @JeffMatsonPagely: Scripts: Fix copypasta typo in README file. ([38531](https://github.com/WordPress/gutenberg/pull/38531)) +- @angelistudio: Update attributes.md. ([38626](https://github.com/WordPress/gutenberg/pull/38626)) +- @sunyatasattva: Refactor Site Editor test utils to the `e2e-test-utils` package. ([38463](https://github.com/WordPress/gutenberg/pull/38463)) + + + + + += 12.5.4 = + +### Bug Fixes + +#### Block Library +- Fix and refine core function escaping in block output. ([38569](https://github.com/WordPress/gutenberg/pull/38569)) + + += 12.5.3 = + +### Bug Fixes + +#### Block Library +- Fix escaping to consider addition of pagination arrow in Query Loop. ([38519](https://github.com/WordPress/gutenberg/pull/38519)) + + += 12.5.2 = + + + +### Bug Fixes + +#### Block Library +- Fix latest posts excerpt escaping. ([38517](https://github.com/WordPress/gutenberg/pull/38517)) + + + + + += 12.5.1 = + +### Bug Fixes + +#### Site Editor + +- Fix a WSOD in the site editor which occurred when an entity could be undefined (https://github.com/WordPress/gutenberg/pull/38503) + + += 12.5.0 = + +### Features + +* Allow switching global styles variations. ([35619](https://github.com/WordPress/gutenberg/pull/35619)) +* Add: Code editor to edit site. ([37765](https://github.com/WordPress/gutenberg/pull/37765)) +* [Post Featured Image]: Show all the controls when inside a Query Loop. ([37945](https://github.com/WordPress/gutenberg/pull/37945)) + +### Enhancements + +#### Block Library + +* Add transform between core/site-logo and core/site-title blocks. ([37920](https://github.com/WordPress/gutenberg/pull/37920)) +* Allow using a text label instead of an icon on overlay menu toggle button. ([36149](https://github.com/WordPress/gutenberg/pull/36149)) +* Post Featured Image: Add size selector. ([38044](https://github.com/WordPress/gutenberg/pull/38044)) +* [Query Loop]: Add multiple authors support. ([38024](https://github.com/WordPress/gutenberg/pull/38024)) +* [Query Loop]: Add support for custom taxonomies filtering. ([38063](https://github.com/WordPress/gutenberg/pull/38063)) +* Comments Query Loop: Add discuss options to the block. ([37297](https://github.com/WordPress/gutenberg/pull/37297)) +* Fetch classic Menus and Pages using view (readonly) context. ([37884](https://github.com/WordPress/gutenberg/pull/37884)) +* Gallery block: Move add/edit media to block toolbar. ([38036](https://github.com/WordPress/gutenberg/pull/38036)) +* Navigation Block : Try not using css variable for block gap support. ([37543](https://github.com/WordPress/gutenberg/pull/37543)) +* Paragraph: Try to avoid a trailing word in the description. ([37483](https://github.com/WordPress/gutenberg/pull/37483)) +* Rename next and previous to newer an older. ([38143](https://github.com/WordPress/gutenberg/pull/38143)) +* Show menus selection in placeholder only if available. ([37980](https://github.com/WordPress/gutenberg/pull/37980)) +* Unset inherited backgrounds on Posts Lists. ([37941](https://github.com/WordPress/gutenberg/pull/37941)) +* Unset inherited backgrounds on social icons. ([37940](https://github.com/WordPress/gutenberg/pull/37940)) + +#### Components + +* CustomSelectControl: Add hints example to storybook. ([38056](https://github.com/WordPress/gutenberg/pull/38056)) +* ToolsPanel: Add CSS classes to first and last displayed ToolsPanelItems. ([37546](https://github.com/WordPress/gutenberg/pull/37546)) +* `Navigator`: Add basic location history. ([37416](https://github.com/WordPress/gutenberg/pull/37416)) +* Add: Hover and Selected states to the palette editor. ([37962](https://github.com/WordPress/gutenberg/pull/37962)) +* Update gray color palette to match base styles. ([38109](https://github.com/WordPress/gutenberg/pull/38109)) + +#### Post Editor + +* Post Lock Modal: Update avatar size. ([38040](https://github.com/WordPress/gutenberg/pull/38040)) +* Post Lock: Adjust avatar design and update message. ([37979](https://github.com/WordPress/gutenberg/pull/37979)) +* Block styles: Remove box-sizing rule on Post Editor container to achieve editor/frontend parity. ([37902](https://github.com/WordPress/gutenberg/pull/37902)) + +#### Block Editor + +* Buttons: Preserve styling from adjacent button blocks when inserting a new button block. ([37905](https://github.com/WordPress/gutenberg/pull/37905)) +* Identify the site frontpage in link UI search results. ([36493](https://github.com/WordPress/gutenberg/pull/36493)) +* Rich text: Use file on internal dependencies. ([38005](https://github.com/WordPress/gutenberg/pull/38005)) +* Transform pasted div tags to p tags. ([38042](https://github.com/WordPress/gutenberg/pull/38042)) + +#### Site Editor + +* Update template home, front-page, and search template descriptions. ([38132](https://github.com/WordPress/gutenberg/pull/38132)) +* Add: Copy all content to edit site. ([37781](https://github.com/WordPress/gutenberg/pull/37781)) + +#### Global Styles + +* Load the global styles before the theme styles in the editor. ([37885](https://github.com/WordPress/gutenberg/pull/37885)) +* Duotone: Allow users to specify custom filters. ([38055](https://github.com/WordPress/gutenberg/pull/38055)) +* Enable alpha on Block Inspector Color ToolsPanel. ([37731](https://github.com/WordPress/gutenberg/pull/37731)) + +#### Internationalization + +* i18n: Create new function `addLocaleData` to merge domain configuration. ([37704](https://github.com/WordPress/gutenberg/pull/37704)) + +#### REST API + +* [Global Styles]: Add REST API endpoint to fetch variations. ([38124](https://github.com/WordPress/gutenberg/pull/38124)) + +#### WP ENV + +* wp-env: Add install-path command. ([35638](https://github.com/WordPress/gutenberg/pull/35638)) + +### Bug Fixes + +#### Block Library + +* Add classic menus to menu switcher. ([38168](https://github.com/WordPress/gutenberg/pull/38168)) +* Always allow accessing edit.php?post_type=wp_navigation page. ([38170](https://github.com/WordPress/gutenberg/pull/38170)) +* Fix Post Date block escaping of date HTML. ([38023](https://github.com/WordPress/gutenberg/pull/38023)) +* Fix duotone render in non-fse themes. ([37954](https://github.com/WordPress/gutenberg/pull/37954)) +* Social Icons: Fix color picker bug when set to Logos Only. ([38006](https://github.com/WordPress/gutenberg/pull/38006)) +* Temporarily remove text decoration from Nav block. ([37963](https://github.com/WordPress/gutenberg/pull/37963)) +* [Query Loop]: Reorganise inspector controls + `order` selection bug. ([37949](https://github.com/WordPress/gutenberg/pull/37949)) +* Revert "Late escape RSS block (#37878)". ([38117](https://github.com/WordPress/gutenberg/pull/38117)) +* Fix missing default `align-items` when items are oriented vertically in `flex` layout. ([38069](https://github.com/WordPress/gutenberg/pull/38069)) +* Update `micromodal` to 0.4.10 to fix navigation close button. ([38032](https://github.com/WordPress/gutenberg/pull/38032)) + +#### Site Editor + +* Fix empty gray circle when site has no logo on template list page. ([37474](https://github.com/WordPress/gutenberg/pull/37474)) +* Fix hiding the bottom of tablet/mobile preview in Site Editor. ([38019](https://github.com/WordPress/gutenberg/pull/38019)) +* Fix resizable box scrollbars in blocks. ([38123](https://github.com/WordPress/gutenberg/pull/38123)) +* Override Site Editor URLs to use plugin page. ([38232](https://github.com/WordPress/gutenberg/pull/38232)) +* Restore ?styles=open functionality. ([38093](https://github.com/WordPress/gutenberg/pull/38093)) +* Site Editor: Fix Inserter classes. ([38112](https://github.com/WordPress/gutenberg/pull/38112)) + +#### Block Editor + +* Fix pattern preview expanding height and scrollbar issues. ([38175](https://github.com/WordPress/gutenberg/pull/38175)) +* Remove warning for enqueued styles in Editor. ([37937](https://github.com/WordPress/gutenberg/pull/37937)) +* Fix draft previews. ([37952](https://github.com/WordPress/gutenberg/pull/37952)) +* Add context to font style and font weight related translation strings. ([37939](https://github.com/WordPress/gutenberg/pull/37939)) + +#### Post Editor + +* Editor: Fix post lock data inconsistency. ([37914](https://github.com/WordPress/gutenberg/pull/37914)) +* Fix template queries. ([38070](https://github.com/WordPress/gutenberg/pull/38070)) + +#### Block Library + +* Latest Posts: Fix featured image alignment label position. ([38125](https://github.com/WordPress/gutenberg/pull/38125)) +* Remove the aria-label from the site title block. ([38432](https://github.com/WordPress/gutenberg/pull/38432)) + +#### Components + +* Increase ConfirmDialog overlay's z-index to render above popovers. ([37959](https://github.com/WordPress/gutenberg/pull/37959)) +* Label components: Improve consistency by setting to 8px margin-bottom. ([37844](https://github.com/WordPress/gutenberg/pull/37844)) +* RangeControl: Fix space between icons and rail. ([36935](https://github.com/WordPress/gutenberg/pull/36935)) +* `SelectControl`: Mark the `children` prop as optional. ([37872](https://github.com/WordPress/gutenberg/pull/37872)) +* `ToggleGroupControl`: Remove animated backdrop. ([38008](https://github.com/WordPress/gutenberg/pull/38008)) + +#### Design Tools + +* Fix: Double border on palette editor. ([38035](https://github.com/WordPress/gutenberg/pull/38035)) +* Fix: PanelColorSettings renders an empty when a color setting is falsy. ([38029](https://github.com/WordPress/gutenberg/pull/38029)) + +#### Accessibility + +* Make sure when on last block focus cannot enter the block. ([37965](https://github.com/WordPress/gutenberg/pull/37965)) +* Tree Grid: Fix keyboard navigation for expand/collapse table rows in Firefox. ([37983](https://github.com/WordPress/gutenberg/pull/37983)) + +#### Data API + +* Load the entities list using the view context. ([37685](https://github.com/WordPress/gutenberg/pull/37685)) +* Fix inconsistent response when preloading OPTIONS type requests. ([38051](https://github.com/WordPress/gutenberg/pull/38051)) + +#### Widgets Editor + +* Fix empty secondary sidebar overlapping widget editor content on mobile viewports. ([38017](https://github.com/WordPress/gutenberg/pull/38017)) + +#### Developer Tooling + +* Docgen/stop crashing on missing return types. ([37929](https://github.com/WordPress/gutenberg/pull/37929)) +* Add temporary workaround to fix broken common js import of mini-css-extract-plugin. ([38004](https://github.com/WordPress/gutenberg/pull/38004)) +* Fix back button aria name in customizing widgets tests. ([38195](https://github.com/WordPress/gutenberg/pull/38195)) + +#### Mobile + +* Mobile - Highlight text - Force format for some edge cases. ([37915](https://github.com/WordPress/gutenberg/pull/37915)) +* Send non-deprecated language tags from Android in initialProps. ([37565](https://github.com/WordPress/gutenberg/pull/37565)) +* Wrap long cell labels on Android. ([37993](https://github.com/WordPress/gutenberg/pull/37993)) + +### Performance + +#### Plugin + +* Don't use WP_Query::Get_posts directly. ([38104](https://github.com/WordPress/gutenberg/pull/38104)) + +#### Components + +* ToolsPanel: Memoize callbacks and context to prevent unnecessary rerenders. ([38037](https://github.com/WordPress/gutenberg/pull/38037)) + +### Documentation + +* Add anchors to all terms of the glossary. ([38073](https://github.com/WordPress/gutenberg/pull/38073)) +* Add documentation for useBlockEditContext hook. ([36299](https://github.com/WordPress/gutenberg/pull/36299)) +* Add note about "local styles" in the glossary. ([38083](https://github.com/WordPress/gutenberg/pull/38083)) +* Add some terms related to styles to the glossary. ([38076](https://github.com/WordPress/gutenberg/pull/38076)) +* Add theme.json v1 reference and v1 to v2 migration documentation. ([37886](https://github.com/WordPress/gutenberg/pull/37886)) +* Block API Reference: Fix 'isSelected' property type. ([38161](https://github.com/WordPress/gutenberg/pull/38161)) +* Capitalise the GitHub wordmark correctly in the Wordpress Gutenberg project. ([38092](https://github.com/WordPress/gutenberg/pull/38092)) +* Component: Update color-picker documentation. ([38010](https://github.com/WordPress/gutenberg/pull/38010)) +* Document that `__experimentalSelector` requires server-side block registration. ([37984](https://github.com/WordPress/gutenberg/pull/37984)) +* Document the Global Styles Presets. ([38129](https://github.com/WordPress/gutenberg/pull/38129)) +* Fix documentation regression. ([38235](https://github.com/WordPress/gutenberg/pull/38235)) +* Include partialRight import from lodash in DimensionControl example. ([38088](https://github.com/WordPress/gutenberg/pull/38088)) +* Multiple typos fixed. ([38071](https://github.com/WordPress/gutenberg/pull/38071)) +* Scripts: Corrected "npm start:Hot" in the README file. ([38178](https://github.com/WordPress/gutenberg/pull/38178)) +* Update Block Supports Documentation to better reflect how it works. ([37847](https://github.com/WordPress/gutenberg/pull/37847)) +* Update BlockPreview component readme. ([38209](https://github.com/WordPress/gutenberg/pull/38209)) +* Update versions for 5.8.2 and 5.8.3\. ([37924](https://github.com/WordPress/gutenberg/pull/37924)) +* Use consistent punctuation, capitalization in templateParts documentation. ([38193](https://github.com/WordPress/gutenberg/pull/38193)) +* [Type] Documentation Updating Faq.md typo. ([38154](https://github.com/WordPress/gutenberg/pull/38154)) + +### Code Quality + +* Compose: Rework types of createHigherOrderComponent for closer match to API. ([37795](https://github.com/WordPress/gutenberg/pull/37795)) +* Docblock typos. ([38067](https://github.com/WordPress/gutenberg/pull/38067)) +* Fix two inline typos. ([38048](https://github.com/WordPress/gutenberg/pull/38048)) +* Testing: Upgrade Jest to v27\. ([33287](https://github.com/WordPress/gutenberg/pull/33287)) +* Add a missing `@since` tag. ([38151](https://github.com/WordPress/gutenberg/pull/38151)) +* Ignore local environment .tool-versions configuration file. ([38013](https://github.com/WordPress/gutenberg/pull/38013)) +* Add allowed-plugins in composer configuration. ([38085](https://github.com/WordPress/gutenberg/pull/38085)) +* Site editor - try redirecting to homepage before the react render. ([37248](https://github.com/WordPress/gutenberg/pull/37248)) + +#### Block Library + +* Allow for HTML in `get_the_title`. ([38145](https://github.com/WordPress/gutenberg/pull/38145)) +* Fix double escaping in blocks. ([37985](https://github.com/WordPress/gutenberg/pull/37985)) +* Late escape Latest Posts block. ([37866](https://github.com/WordPress/gutenberg/pull/37866)) +* Late escape Navigation blocks. ([37870](https://github.com/WordPress/gutenberg/pull/37870)) +* Late escape Post blocks. ([37876](https://github.com/WordPress/gutenberg/pull/37876)) +* Late escape Social block. ([37881](https://github.com/WordPress/gutenberg/pull/37881)) +* Late escape comment blocks. ([37860](https://github.com/WordPress/gutenberg/pull/37860)) +* Late escape comments link block. ([37875](https://github.com/WordPress/gutenberg/pull/37875)) +* Late escape latest comments block. ([37865](https://github.com/WordPress/gutenberg/pull/37865)) +* Late escape post author blocks. ([37874](https://github.com/WordPress/gutenberg/pull/37874)) +* Late escape site blocks. ([37880](https://github.com/WordPress/gutenberg/pull/37880)) +* Spacer: No need to use withDispatch HOC. ([38206](https://github.com/WordPress/gutenberg/pull/38206)) + +### Tools + +* Bump dot-prop from 4.2.0 to 4.2.1\. ([38101](https://github.com/WordPress/gutenberg/pull/38101)) +* Bump ini from 1.3.5 to 1.3.8\. ([38106](https://github.com/WordPress/gutenberg/pull/38106)) +* Bump tar from 4.4.13 to 4.4.19\. ([37917](https://github.com/WordPress/gutenberg/pull/37917)) +* Bump tree-kill from 1.2.0 to 1.2.2\. ([38102](https://github.com/WordPress/gutenberg/pull/38102)) +* Bump trim-off-newlines from 1.0.1 to 1.0.3\. ([38095](https://github.com/WordPress/gutenberg/pull/38095)) +* Update MiniCSSExtractPlugin to version 2.5.1\. ([38027](https://github.com/WordPress/gutenberg/pull/38027)) +* Bump follow-redirects from 1.14.1 to 1.14.7\. ([37957](https://github.com/WordPress/gutenberg/pull/37957)) +* Bump handlebars from 4.7.6 to 4.7.7\. ([38054](https://github.com/WordPress/gutenberg/pull/38054)) +* Bump path-parse from 1.0.5 to 1.0.7\. ([37990](https://github.com/WordPress/gutenberg/pull/37990)) +* Bump tmpl from 1.0.4 to 1.0.5\. ([37916](https://github.com/WordPress/gutenberg/pull/37916)) +* Add '.git-blame-ignore-revs' to the project. ([37822](https://github.com/WordPress/gutenberg/pull/37822)) +* Require stylelint v14 for stylelint configuration and scripts. ([38091](https://github.com/WordPress/gutenberg/pull/38091)) +* Tested up to WP 5.9\. ([38162](https://github.com/WordPress/gutenberg/pull/38162)) + +#### Testing + +* Fix flaky Nav block user permissions end-to-end test. ([38025](https://github.com/WordPress/gutenberg/pull/38025)) +* Fix flaky classic block conversion undo test. ([37933](https://github.com/WordPress/gutenberg/pull/37933)) +* Improve flaky draft creation navigation block end-to-end test. ([37931](https://github.com/WordPress/gutenberg/pull/37931)) +* Skip flaky nav permissions test until fixed. ([38099](https://github.com/WordPress/gutenberg/pull/38099)) +* [docgen] Refactor code to use require() instead of JSON.parse(fs.readFileSync()). ([38148](https://github.com/WordPress/gutenberg/pull/38148)) +* end-to-end Tests: Add coverage for reusable blocks save button state regression. ([33151](https://github.com/WordPress/gutenberg/pull/33151)) +* Add new Testing Instructions section to PR template. ([38147](https://github.com/WordPress/gutenberg/pull/38147)) + + + + += 12.4.1 = + +### Bug Fixes + +#### Block Library +- RSS: Reverts the late escape RSS block enhancement (#37878) to resolve an issue where raw HTML was shown to users of the RSS block (#38117) + + += 12.4.0 = + + + +### Enhancements + +#### Accessibility +- Accessibility improvements for Block Inserter. ([37357](https://github.com/WordPress/gutenberg/pull/37357)) +- Try possibly better method for Block Inserter Search focus. ([37793](https://github.com/WordPress/gutenberg/pull/37793)) +- Accessibility improvements for List View Part 1. ([37798](https://github.com/WordPress/gutenberg/pull/37798)) +- Improve successful draft save notification for screen readers. ([37683](https://github.com/WordPress/gutenberg/pull/37683)) + +#### Block Library +- Audio: Add uploading state. ([37739](https://github.com/WordPress/gutenberg/pull/37739)) +- Post Excerpt: Add to and from Post Content transformations. ([37651](https://github.com/WordPress/gutenberg/pull/37651)) +- Search: Improve escaping on the search block. ([37829](https://github.com/WordPress/gutenberg/pull/37829)) +- Page List: Add menu-item-home class to Navigation for front page. ([37301](https://github.com/WordPress/gutenberg/pull/37301)) +- Tag Cloud: Add outline style. ([37092](https://github.com/WordPress/gutenberg/pull/37092)) + +#### Components +- ExternalLink: Update icon to be smaller, have no margin. ([37859](https://github.com/WordPress/gutenberg/pull/37859)) + +#### Post Editor +- PostLockedModal: Display preview link as part of the text. ([37852](https://github.com/WordPress/gutenberg/pull/37852)) +- Try: Polish post takeover modal. ([37821](https://github.com/WordPress/gutenberg/pull/37821)) +- Suggest picking a category on the pre-publish panel. ([37703](https://github.com/WordPress/gutenberg/pull/37703)) + +#### Block Editor +- Inserter: Update categories for theme blocks. ([37723](https://github.com/WordPress/gutenberg/pull/37723)) + +#### Site Editor +- Add keyboard shortcut help modal. ([37650](https://github.com/WordPress/gutenberg/pull/37650)) +- Update copy on Snackbar that appears when a template is deleted. ([37888](https://github.com/WordPress/gutenberg/pull/37888)) + +#### Icons +- Add unlock icon. ([37855](https://github.com/WordPress/gutenberg/pull/37855)) + +### Bug Fixes + +#### Block Library +- Code: Remove color from code theme.scss. ([37816](https://github.com/WordPress/gutenberg/pull/37816)) +- Code: Try: Polish code styles to properly apply border properties. ([37818](https://github.com/WordPress/gutenberg/pull/37818)) +- Columns: Avoid using CSS variables for block gap styles. ([37436](https://github.com/WordPress/gutenberg/pull/37436)) +- Comments Pagination Next: Fix accidental division by zero. ([37788](https://github.com/WordPress/gutenberg/pull/37788)) +- Gallery: Pass any custom attributes through the gallery v2 migration script. ([37812](https://github.com/WordPress/gutenberg/pull/37812)) +- Gallery: Remove warning notice about mobile version required. ([37842](https://github.com/WordPress/gutenberg/pull/37842)) +- Navigation: HTML tags like inline images in nav links break submenu layout. ([37665](https://github.com/WordPress/gutenberg/pull/37665)) +- Navigation: Set the default for --navigation-layout-align to "flex-start" when using vertical orientation. ([37696](https://github.com/WordPress/gutenberg/pull/37696)) +- Navigation: Fix overlay menu errant focus style on scrim. ([37824](https://github.com/WordPress/gutenberg/pull/37824)) +- Page List: Show UI warning if Pages cannot be retrieved in Page List block. ([37486](https://github.com/WordPress/gutenberg/pull/37486)) +- Page List: Update page list flex variables to match navigation. ([37718](https://github.com/WordPress/gutenberg/pull/37718)) +- Post Comments: Tidy up Post Comments default styling. ([37709](https://github.com/WordPress/gutenberg/pull/37709)) +- Post Content: Check for nextpage to display page links for paginated posts. ([37672](https://github.com/WordPress/gutenberg/pull/37672)) +- Post Excerpt: Fix previews. ([37648](https://github.com/WordPress/gutenberg/pull/37648)) +- Query Loop: Use `gap` for the `grid` view. ([37711](https://github.com/WordPress/gutenberg/pull/37711)) +- Query Loop: Check for `zero` `queryId` on initialization. ([37867](https://github.com/WordPress/gutenberg/pull/37867)) +- Site logo: Fix range control on landscape logos. ([37733](https://github.com/WordPress/gutenberg/pull/37733)) +- Simplify and unify a few modal dialogs. ([37857](https://github.com/WordPress/gutenberg/pull/37857)) +- Fix enqueueing additional styles for blocks only when rendered. ([37848](https://github.com/WordPress/gutenberg/pull/37848)) +- Fix typo (hanle -> handle). ([37849](https://github.com/WordPress/gutenberg/pull/37849)) +- Revert "[Paragraph Block] add font family support". ([37815](https://github.com/WordPress/gutenberg/pull/37815)) + +#### Colors +- Coloring panel is unusable in RTL. ([37644](https://github.com/WordPress/gutenberg/pull/37644)) +- Impossible to clear colors if color palettes are removed. ([37791](https://github.com/WordPress/gutenberg/pull/37791)) +- Use useCallback hook from @wordpress/elements in color-picker. ([37745](https://github.com/WordPress/gutenberg/pull/37745)) + +#### Components +- BaseControl: Fix VisualLabel styles. ([37747](https://github.com/WordPress/gutenberg/pull/37747)) +- ConfirmDialog: Use hooks from @wordpress/elements. ([37771](https://github.com/WordPress/gutenberg/pull/37771)) +- CustomSelectControl: Stop keypresses being caught by other elements when they happen. ([30557](https://github.com/WordPress/gutenberg/pull/30557)) + +#### Post Editor +- Restore canvas padding for classic themes. ([37741](https://github.com/WordPress/gutenberg/pull/37741)) + +#### History +- Fix broken 'Redo' by removing faulty logic for discarding unsaved Logo changes. ([37895](https://github.com/WordPress/gutenberg/pull/37895)) +- Fix redo after update/publish with transient edits. ([37840](https://github.com/WordPress/gutenberg/pull/37840)) + +#### Templates API +- Fix Home template description typo. ([37843](https://github.com/WordPress/gutenberg/pull/37843)) +- Improve user experience with blocks editor when a block is not registered. ([37646](https://github.com/WordPress/gutenberg/pull/37646)) + +#### Block Editor +- Fix LinkPicker freeze when virtual keyboard is hidden. ([37782](https://github.com/WordPress/gutenberg/pull/37782)) +- RichText: Fix dead key input on Windows. ([37777](https://github.com/WordPress/gutenberg/pull/37777)) +- Link control: Translate empty link string. ([36975](https://github.com/WordPress/gutenberg/pull/36975)) +- Add `post-type-x` classname to iframe. ([37429](https://github.com/WordPress/gutenberg/pull/37429)) + +#### Global Styles +- Reduce specificity of legacy font sizes defined by core. ([37819](https://github.com/WordPress/gutenberg/pull/37819)) + +#### Accessibility +- Fix aria-modal attribution with multiple navs on page. ([37813](https://github.com/WordPress/gutenberg/pull/37813)) + +#### Template Editor +- Template Mode: Trim long post titles in large viewports. ([37720](https://github.com/WordPress/gutenberg/pull/37720)) + +#### Site Editor +- Add the "Help" link to the tools menu. ([37647](https://github.com/WordPress/gutenberg/pull/37647)) +- Contextualize "Export" string to differentiate it from other occurrences in WP Core. ([37660](https://github.com/WordPress/gutenberg/pull/37660)) + + +### Documentation + +- Block.json Schema: Update fontSize and lineHeight props. ([37853](https://github.com/WordPress/gutenberg/pull/37853)) +- Theme.json Schema: Fix appearanceTools in theme.json schema. ([37762](https://github.com/WordPress/gutenberg/pull/37762)) +- Theme.json Schema: Update theme.json schema to allow for per-block management of settings. ([36746](https://github.com/WordPress/gutenberg/pull/36746)) +- Add checkbox for updating schemas if appropriate. ([37780](https://github.com/WordPress/gutenberg/pull/37780)) + - Fix issue template typo. ([37825](https://github.com/WordPress/gutenberg/pull/37825)) +- Add automated theme.json reference documentation. ([37569](https://github.com/WordPress/gutenberg/pull/37569)) +- Add link to block source for reference. ([37750](https://github.com/WordPress/gutenberg/pull/37750)) +- Add missing end tag for codetabs in stylesheet guide. ([37827](https://github.com/WordPress/gutenberg/pull/37827)) +- Fix broken URL on block variation page. ([37702](https://github.com/WordPress/gutenberg/pull/37702)) +- Fix type of saved $content. ([37688](https://github.com/WordPress/gutenberg/pull/37688)) + - Fix type of saved content - part two. ([37740](https://github.com/WordPress/gutenberg/pull/37740)) + - Fix PHPCS failure. ([37742](https://github.com/WordPress/gutenberg/pull/37742)) +- Update create block type how to guide for block.json. ([37674](https://github.com/WordPress/gutenberg/pull/37674)) +- Update stylesheets guide with using block.json file. ([37679](https://github.com/WordPress/gutenberg/pull/37679)) +- OSX Setup guide: Wrap `lts/*` in quotes for `nvm` commands. ([37722](https://github.com/WordPress/gutenberg/pull/37722)) +- Remove "experimental" from full site editing documentation. ([37655](https://github.com/WordPress/gutenberg/pull/37655)) +- Update copyright year to 2022 in `license.md`. ([37689](https://github.com/WordPress/gutenberg/pull/37689)) +- Update wp-plugin.md. ([37846](https://github.com/WordPress/gutenberg/pull/37846)) +- Updated ColorIndicator readme. ([37638](https://github.com/WordPress/gutenberg/pull/37638)) +- Update the Post Author block description. ([37836](https://github.com/WordPress/gutenberg/pull/37836)) +- Fixing broken links and adding colon. ([37664](https://github.com/WordPress/gutenberg/pull/37664)) +- Improve Gutenberg release documentation. ([37898](https://github.com/WordPress/gutenberg/pull/37898)) + + +### Code Quality + +- Add the WP version in which some JS APIs will be removed. ([37854](https://github.com/WordPress/gutenberg/pull/37854)) + +#### Block Library +- Late escape Categories block. ([37835](https://github.com/WordPress/gutenberg/pull/37835)) +- Late escape Page List block. ([37873](https://github.com/WordPress/gutenberg/pull/37873)) +- Late escape Query blocks. ([37877](https://github.com/WordPress/gutenberg/pull/37877)) +- Late escape RSS block. ([37878](https://github.com/WordPress/gutenberg/pull/37878)) +- Late escape Table of Contents block. ([37882](https://github.com/WordPress/gutenberg/pull/37882)) +- Late escape Search block. ([37879](https://github.com/WordPress/gutenberg/pull/37879)) +- Move escaping to point of output in Archives block. ([37834](https://github.com/WordPress/gutenberg/pull/37834)) +- Post Content: No need to pass default get_the_content args. ([37701](https://github.com/WordPress/gutenberg/pull/37701)) + +#### Post Editor +- PostLockedModal: Update action buttons markup. ([37837](https://github.com/WordPress/gutenberg/pull/37837)) + +#### Parsing +- Block API: Separate validation stage during block parsing. ([37763](https://github.com/WordPress/gutenberg/pull/37763)) + +#### Components +- Refactor SuggestionsList to use hooks and change class to function component. ([36924](https://github.com/WordPress/gutenberg/pull/36924)) + + +### Tools + +#### Testing +- Allow type imports for React everywhere. ([37862](https://github.com/WordPress/gutenberg/pull/37862)) +- Change the performance job folder structure to avoid nested node_modules. ([37775](https://github.com/WordPress/gutenberg/pull/37775)) +- Fix flaky test by using waitForResponse to ensure the URL details request completes. ([37901](https://github.com/WordPress/gutenberg/pull/37901)) +- Marking test that consistently fails as skipped. ([37729](https://github.com/WordPress/gutenberg/pull/37729)) + +#### Build Tooling +- wp-env: Replace TT1-Blocks with Empty Theme in the wp-env of gutenberg and CI. ([37446](https://github.com/WordPress/gutenberg/pull/37446)) +- wp-env: Show `--help` when no subcommand is passed. ([32755](https://github.com/WordPress/gutenberg/pull/32755)) +- Scripts: Scan `block.json` files to detect entry points for the build process. ([37661](https://github.com/WordPress/gutenberg/pull/37661)) +- Scripts: Add `plugin-zip` command to create a zip file for a WordPress plugin. ([37687](https://github.com/WordPress/gutenberg/pull/37687)) + +#### Create Block +- Allow custom folder name for a block. ([37612](https://github.com/WordPress/gutenberg/pull/37612)) +- Speed up scaffolding by omitting WordPress dependencies. ([37639](https://github.com/WordPress/gutenberg/pull/37639)) + + + + + + += 12.3.2 = + +### Bug Fixes + +#### Block Library +- Spacer: Fix unit settings filter. ([37774](https://github.com/WordPress/gutenberg/pull/37774)) + + + + + += 12.3.1 = + + +### Bug Fixes + +- Restore canvas padding for classic themes (#37741). +- Site logo: Fix range control on landscape logos (#37733). +- RichText: Fix dead key input on Windows (#37777). +- Update: Improve escaping on the search block (#37829). +- Fix: Impossible to clear colors if color palettes are removed. (#37791). + + += 12.3.0 = + +### Features + +#### Block Library + +- Group/row blocks: + - Add Gap support. ([37459](https://github.com/WordPress/gutenberg/pull/37459)) + - Add Typography support. ([37456](https://github.com/WordPress/gutenberg/pull/37456)) +- New Author Name block. ([36001](https://github.com/WordPress/gutenberg/pull/36001)) +- Comments Pagination: + - New Comments Pagination Next block. ([36562](https://github.com/WordPress/gutenberg/pull/36562)) + - New Comments Pagination Previous block. ([36912](https://github.com/WordPress/gutenberg/pull/36912)) + +### Enhancements + +#### Block Library + +- Navigation: + - Enable even more compact setup state. ([37089](https://github.com/WordPress/gutenberg/pull/37089)) + - Use rems for padding. ([37478](https://github.com/WordPress/gutenberg/pull/37478)) +- Site Logo: Add option to set site icon from Site Logo block. ([35892](https://github.com/WordPress/gutenberg/pull/35892)) +- Paragraph: Add font family support. ([37586](https://github.com/WordPress/gutenberg/pull/37586)) +- Comments Template: Add comments pagination. ([37610](https://github.com/WordPress/gutenberg/pull/37610)) +- Embeds: Simplify the embed loading state. ([37548](https://github.com/WordPress/gutenberg/pull/37548)) +- Spacer: Add custom units for height and width. ([36186](https://github.com/WordPress/gutenberg/pull/36186)) + +#### Global Styles + +- Make the global styles subtitles font smaller. ([37600](https://github.com/WordPress/gutenberg/pull/37600)) +- Add support for nameless font sizes. ([37410](https://github.com/WordPress/gutenberg/pull/37410)) + +#### Colors + +- Allow color gradient popover to be above the color toggle. ([37430](https://github.com/WordPress/gutenberg/pull/37430)) +- Make color styles labels simpler. ([37493](https://github.com/WordPress/gutenberg/pull/37493)) +- Use subtitle styles for the palette names. ([37460](https://github.com/WordPress/gutenberg/pull/37460)) + +#### Design Tools + +- Border panel: Collapse color controls. ([37425](https://github.com/WordPress/gutenberg/pull/37425)) + +#### Document Settings + +- Add class name to post author on edit post sidebar. ([36269](https://github.com/WordPress/gutenberg/pull/36269)) + +#### Site Editor + +- Update save panel's cancel button from icon to visible text. ([37310](https://github.com/WordPress/gutenberg/pull/37310)) + +#### Accessibility + +- Latest Posts: Add aria-label to featured links. ([36251](https://github.com/WordPress/gutenberg/pull/36251)) + +### Bug Fixes + +#### Block Library + +- Navigation: + - Restrict Navigation permissions and show UI warning if cannot create. ([37454](https://github.com/WordPress/gutenberg/pull/37454)) + - Ensure the overlay menu works when inserting navigation block patterns and that inner blocks are retained. ([37358](https://github.com/WordPress/gutenberg/pull/37358)) + - Fix navigation appender. ([37447](https://github.com/WordPress/gutenberg/pull/37447)) + - Revert all margins on navigation-item in editor. ([37587](https://github.com/WordPress/gutenberg/pull/37587)) + - Fix page list issues in overlay. ([37444](https://github.com/WordPress/gutenberg/pull/37444)) + - Show a UI warning when user does not have permission to update/edit an existing Navigation block. ([37286](https://github.com/WordPress/gutenberg/pull/37286)) + - Try cascading nav styles through classnames. ([37473](https://github.com/WordPress/gutenberg/pull/37473)) +- Query Loop: + - Fix editable post blocks in Query Loop with `zero` `queryId`. ([37629](https://github.com/WordPress/gutenberg/pull/37629)) + - Changed the letter case for Post Type to Post type. ([37499](https://github.com/WordPress/gutenberg/pull/37499)) + - Query Pagination Next: Hide block if custom query has no results. ([37553](https://github.com/WordPress/gutenberg/pull/37553)) + - Revert Query Pagination Next/Previous placeholder(36681). ([37520](https://github.com/WordPress/gutenberg/pull/37520)) +- Site Logo: Fix block alignment issues. ([36627](https://github.com/WordPress/gutenberg/pull/36627)) +- Gallery: Fix block registration hook priority. ([37409](https://github.com/WordPress/gutenberg/pull/37409)) +- Post Content/Title: Reflect changes when previewing post. ([37622](https://github.com/WordPress/gutenberg/pull/37622)) +- Post Excerpt: Specify paragraph as post excerpt tag name. ([37412](https://github.com/WordPress/gutenberg/pull/37412)) +- Reusable Block: Fix embed handling. ([37554](https://github.com/WordPress/gutenberg/pull/37554)) +- Site icon: Fix site icon styling to display non-square site icons within a square button. ([37570](https://github.com/WordPress/gutenberg/pull/37570)) +- Template Part: Only display a missing notice in debug mode. ([37404](https://github.com/WordPress/gutenberg/pull/37404)) +- ServerSideRender: Fix loading state. ([37623](https://github.com/WordPress/gutenberg/pull/37623)) +- Comments Avatar Block: Show avatar drag handles only when selected. ([37567](https://github.com/WordPress/gutenberg/pull/37567)) + +#### Global Styles + +- Color editor discards colors with default name. ([37496](https://github.com/WordPress/gutenberg/pull/37496)) +- Gradients are not being applied by class. ([37597](https://github.com/WordPress/gutenberg/pull/37597)) +- Impossible to edit theme and default colors. ([37497](https://github.com/WordPress/gutenberg/pull/37497)) +- Blank site editor when theme name contains a period. ([37167](https://github.com/WordPress/gutenberg/pull/37167)) +- Lower the specificity of font size CSS Custom Properties in the editor. ([37526](https://github.com/WordPress/gutenberg/pull/37526)) +- Use inset shadow on color indicators and adjust spacing. ([37500](https://github.com/WordPress/gutenberg/pull/37500)) + +#### Block Editor + +- Fix Enter handling for nested blocks. ([37453](https://github.com/WordPress/gutenberg/pull/37453)) +- Restrict delete multi selected blocks shortcut. ([37595](https://github.com/WordPress/gutenberg/pull/37595)) +- Avoid using CSS variables for block gap styles. ([37360](https://github.com/WordPress/gutenberg/pull/37360)) + +#### Themes + +- Add comment-form and comment-list to default html5 theme support. ([37536](https://github.com/WordPress/gutenberg/pull/37536)) +- Avoid Duplicated "Theme File Editor" menu. ([37592](https://github.com/WordPress/gutenberg/pull/37592)) +- Fix conditional check "Theme File Editor" menu. ([37616](https://github.com/WordPress/gutenberg/pull/37616)) +- Fix duotone theme cache. ([36236](https://github.com/WordPress/gutenberg/pull/36236)) + +#### Template Editor + +- Avoid undo issues when reset parent blocks for controlled blocks. ([37484](https://github.com/WordPress/gutenberg/pull/37484)) +- Change color of welcome dialog close icon so it is visible against black background. ([37435](https://github.com/WordPress/gutenberg/pull/37435)) +- Template Editing Mode: Fix options dropdown. ([37442](https://github.com/WordPress/gutenberg/pull/37442)) +- Try to fix auto resizing in template part focus mode. ([37394](https://github.com/WordPress/gutenberg/pull/37394)) +- Update the template list action labels. ([37576](https://github.com/WordPress/gutenberg/pull/37576)) + +#### Site Editor + +- Add customized indicator to plugin templates that have been customized. ([37329](https://github.com/WordPress/gutenberg/pull/37329)) +- Register block editor shortcuts. ([37577](https://github.com/WordPress/gutenberg/pull/37577)) +- Update regex to handle 404 template slug. ([37579](https://github.com/WordPress/gutenberg/pull/37579)) +- Parse shortcode blocks outside the content. ([37545](https://github.com/WordPress/gutenberg/pull/37545)) + +#### Accessibility + +- Editor: Focus when navigation toggle receives state false. ([37265](https://github.com/WordPress/gutenberg/pull/37265)) +- Navigation: Only add dialog role when modal is open. ([37434](https://github.com/WordPress/gutenberg/pull/37434)) + +#### npm Packages + +- Fix missing peer dependencies where React is used indirectly. ([37578](https://github.com/WordPress/gutenberg/pull/37578)) + +#### Testing + +- Fix flaky Navigation block end-to-end test by mocking out URL details endpoint to avoid 404. ([37501](https://github.com/WordPress/gutenberg/pull/37501)) + +#### Post Editor + +- Multi-entity saving: Allow publishing a post while not saving changes to non-post entities. ([37383](https://github.com/WordPress/gutenberg/pull/37383)) + +#### Components + +- ToolsPanel: Allow items to register when panelId is null. ([37273](https://github.com/WordPress/gutenberg/pull/37273)) + +#### Design Tools + +- Make block support tools panels compatible with multi-selection. ([37216](https://github.com/WordPress/gutenberg/pull/37216)) + +### Documentation + +#### Packages + +- Add automated core blocks documentation. ([36183](https://github.com/WordPress/gutenberg/pull/36183)) +- Added README for GradientPicker. ([37614](https://github.com/WordPress/gutenberg/pull/37614)) +- Add link to meta-block example in gutenberg-examples repo. ([37633](https://github.com/WordPress/gutenberg/pull/37633)) +- Fix parameter type in render function of file block. ([36262](https://github.com/WordPress/gutenberg/pull/36262)) +- Add changelog entry for \_\_experimentalIsRenderedInSidebar gradient components flag. ([37457](https://github.com/WordPress/gutenberg/pull/37457)) + +#### Handbook + +- Switch code distinction to JSX & Plain. ([37348](https://github.com/WordPress/gutenberg/pull/37348)) +- Fix a grammatical error in the Create Block tutorial. ([37636](https://github.com/WordPress/gutenberg/pull/37636)) +- Fix plugin sidebar tutorial not publishing. ([37505](https://github.com/WordPress/gutenberg/pull/37505)) +- Update plugin sidebar to new how to guide template. ([37490](https://github.com/WordPress/gutenberg/pull/37490)) +- Update "Local by Flywheel" name and URL. ([37512](https://github.com/WordPress/gutenberg/pull/37512)) +- Update Meta Boxes to a single page how to guide. ([37621](https://github.com/WordPress/gutenberg/pull/37621)) + +### Code Quality + +#### Compatibility with Core + +- Adds missing block template class properties. ([37556](https://github.com/WordPress/gutenberg/pull/37556)) + +#### Formatting + +- Fix lint issues. ([37618](https://github.com/WordPress/gutenberg/pull/37618)) +- Move block patterns compatibility code to lib/compat folder. ([37451](https://github.com/WordPress/gutenberg/pull/37451)) + +#### Packages + +- Data: + - Block top level useSetting paths. ([37428](https://github.com/WordPress/gutenberg/pull/37428)) + - Deprecate receiveUploadPermissions. ([37508](https://github.com/WordPress/gutenberg/pull/37508)) + +#### Site Editor + +- Remove dead code. ([37581](https://github.com/WordPress/gutenberg/pull/37581)) + +#### Components + +- Storybook: Tweak configuration for v6.4 update. ([37544](https://github.com/WordPress/gutenberg/pull/37544)) + +#### Security + +- Update `yargs` dependency for `@wordpress/env` to fix CVE-2021-3807. ([37601](https://github.com/WordPress/gutenberg/pull/37601)) + +### Tools + +#### Testing + +- End to end: + - Switch to using a $eval to fill user creation fields. ([37469](https://github.com/WordPress/gutenberg/pull/37469)) + - Fix and enable remaining navigation block end-to-end tests. ([37437](https://github.com/WordPress/gutenberg/pull/37437)) + - Add block editor shortcuts end-to-end tests. ([37624](https://github.com/WordPress/gutenberg/pull/37624)) + +#### Build Tooling + +- Add npm-run-all package to simplify running scripts. ([37558](https://github.com/WordPress/gutenberg/pull/37558)) +- Update caniuse to latest. ([37588](https://github.com/WordPress/gutenberg/pull/37588)) +- Fix pre commit hook to build block documentation. ([37613](https://github.com/WordPress/gutenberg/pull/37613)) + + + + += 12.2.0 = + +### Enhancements + +#### Block Library +- New block: Add `Comments Pagination Numbers` block. ([36890](https://github.com/WordPress/gutenberg/pull/36890)) +- Comment Template block: Handle nested comments. ([36065](https://github.com/WordPress/gutenberg/pull/36065)) +- Comments Query Loop: Improve context handling in inner blocks. ([37196](https://github.com/WordPress/gutenberg/pull/37196)) +- Image: Reflect media deletion in the editor. ([35973](https://github.com/WordPress/gutenberg/pull/35973)) +- Navigation: + - Add navigation blocks post-processing after migration from menu items. ([36950](https://github.com/WordPress/gutenberg/pull/36950)) + - Refactor modal padding to be simpler and more flexible. ([37323](https://github.com/WordPress/gutenberg/pull/37323)) + - Remove Navigation Menus from the Appearance menu. ([37212](https://github.com/WordPress/gutenberg/pull/37212)) + - Add clearance for appender in submenus. ([36720](https://github.com/WordPress/gutenberg/pull/36720)) +- Refactor handling of padding for group and column blocks. ([37356](https://github.com/WordPress/gutenberg/pull/37356)) +- Template Part: Add actions that fire during the loading process of block template parts. ([36884](https://github.com/WordPress/gutenberg/pull/36884)) + +#### Styles and design tools +- Add the `Welcome Guide` option to the `More Global Styles Actions` dropdown. ([37180](https://github.com/WordPress/gutenberg/pull/37180)) +- Make the `Blocks` section more distinguishable. ([37293](https://github.com/WordPress/gutenberg/pull/37293)) +- Move the `Edit colors` button to a standard menu item. ([36842](https://github.com/WordPress/gutenberg/pull/36842)) +- Move Duotone palette to the bottom of global styles gradients. ([37253](https://github.com/WordPress/gutenberg/pull/37253)) +- Border controls: display border properties in the `ToolPanel`. ([34061](https://github.com/WordPress/gutenberg/pull/34061)) + +#### Components +- FontSizePicker: Use an incremental sequence of numbers as labels for the available font sizes at the segmented control (conditionally). ([37038](https://github.com/WordPress/gutenberg/pull/37038)) +- ColorPalette: Improve accessibility and visibility. ([36925](https://github.com/WordPress/gutenberg/pull/36925)) +- ToolsPanel: Standardize input control label margin. ([36387](https://github.com/WordPress/gutenberg/pull/36387)) +- Unify styles for `ColorIndicator` with how they appear in Global Styles. ([37028](https://github.com/WordPress/gutenberg/pull/37028)) +- Update `PanelColorGradientSettings` component to use dropdowns. ([37067](https://github.com/WordPress/gutenberg/pull/37067)) + +#### Site Editor +- Add the Customizer back to the Appearance menu. ([37175](https://github.com/WordPress/gutenberg/pull/37175)) +- Add client-side routing for Site Editor. ([36488](https://github.com/WordPress/gutenberg/pull/36488)) +- Add a new `aria-pressed` attribute to the `Toggle navigation` button. ([37351](https://github.com/WordPress/gutenberg/pull/37351)) +- Template revert flow: Make label description source agnostic. ([37004](https://github.com/WordPress/gutenberg/pull/37004)) + +#### Packages +- Scripts: Enable React Fast Refresh for block development. ([28273](https://github.com/WordPress/gutenberg/pull/28273)) +- List Reusable Blocks: Refactor `ImportForm` into a functional component and use hooks. ([36938](https://github.com/WordPress/gutenberg/pull/36938)) + +#### Widgets Editor +- Implement preview for blocks. ([37012](https://github.com/WordPress/gutenberg/pull/37012)) + +#### Post Editor +- Template Part block should not be available in the Post Editor inserter. ([37157](https://github.com/WordPress/gutenberg/pull/37157)) + +### Bug Fixes + +- Remove 4 instances of `gutenberg` text-domain from Core. ([37229](https://github.com/WordPress/gutenberg/pull/37229)) + +#### Block Library +- Fix return type in the DocBlock. ([37352](https://github.com/WordPress/gutenberg/pull/37352)) +- Fix deprecated usage of passing null to `explode` function. ([37392](https://github.com/WordPress/gutenberg/pull/37392)) +- Gallery: + - Fix color issue for captions with hyperlinks in the Gallery block. ([37033](https://github.com/WordPress/gutenberg/pull/37033)) + - Fix documentation and function naming for gallery block registration in PHP. ([37132](https://github.com/WordPress/gutenberg/pull/37132)) + - Remove placeholder border. ([37050](https://github.com/WordPress/gutenberg/pull/37050)) +- Post Comments: + - Fix form-submit styles by adding button classes to the submit button in the post-comments block. ([37245](https://github.com/WordPress/gutenberg/pull/37245)) + - Fix width of the post comment form input. ([37238](https://github.com/WordPress/gutenberg/pull/37238)) + - Use block markup for the comment form button when using a block theme. ([37315](https://github.com/WordPress/gutenberg/pull/37315)) +- Comments Pagination Block: Add default styling. ([37057](https://github.com/WordPress/gutenberg/pull/37057)) +- Image: + - Set image display mode to `grid` when no alignment is set to align caption `onresize` event properly. ([35787](https://github.com/WordPress/gutenberg/pull/35787)) + - Fix resizer controls being hidden in Safari when switching between alignments. ([37210](https://github.com/WordPress/gutenberg/pull/37210)) +- Navigation: + - Fix `gutenberg_` prefixed function references in Core. ([37021](https://github.com/WordPress/gutenberg/pull/37021)) + - Fix navigation justifications. ([36991](https://github.com/WordPress/gutenberg/pull/36991)) + - Fix vertical alignment of page list in the modal. ([37321](https://github.com/WordPress/gutenberg/pull/37321)) + - Remove hardcoded typography units. ([37349](https://github.com/WordPress/gutenberg/pull/37349)) + - Fix vertical layout. ([37009](https://github.com/WordPress/gutenberg/pull/37009)) + - Switch to `addEventListener` event for load event in the navigation block view script. ([37135](https://github.com/WordPress/gutenberg/pull/37135)) + - Don't request the deprecated navigation areas endpoint outside of the Gutenberg plugin. ([37187](https://github.com/WordPress/gutenberg/pull/37187)) + - Navigation Link Control: Hide the `Transforms` component when no options are available. ([37284](https://github.com/WordPress/gutenberg/pull/37284)) + - Remove the deprecated navigation area block from the inserter. ([37026](https://github.com/WordPress/gutenberg/pull/37026)) +- Query Loop: Add `useBlockPreview` component, fix alignment of the `Query Loop` block in the editor. ([36431](https://github.com/WordPress/gutenberg/pull/36431)) +- Query Pagination: `core/query-pagination-next` and `core/query-pagination-previous` blocks: change the markup on the first and last pages of the pagination. ([36681](https://github.com/WordPress/gutenberg/pull/36681)) +- Search: Fix application of border color class in the editor. ([37242](https://github.com/WordPress/gutenberg/pull/37242)) +- Template Part: + - Fix `isMissing` condition check. ([37370](https://github.com/WordPress/gutenberg/pull/37370)) + - Use Core version of template and template part post types and REST endpoints for WordPress 5.9, with backward compatibility for WordPress 5.8. ([36898](https://github.com/WordPress/gutenberg/pull/36898)) +- Update the `micromodal` package to include a click-through fix. ([36837](https://github.com/WordPress/gutenberg/pull/36837)) + +#### Components +- Card: Support the `extraSmall` option for the `size` prop. ([37097](https://github.com/WordPress/gutenberg/pull/37097)) +- Drop Zone: Fix HTML drop issues with the Windows browsers. ([37151](https://github.com/WordPress/gutenberg/pull/37151)) +- Don't load `Radio` and `RadioGroup` components directly. ([36934](https://github.com/WordPress/gutenberg/pull/36934)) +- DuotonePicker typo fix. ([36662](https://github.com/WordPress/gutenberg/pull/36662)) +- Element: Ensure that the package uses the up-to-date React types. ([37365](https://github.com/WordPress/gutenberg/pull/37365)) +- Fix incorrect rendering of `ToggleGroupControl`'s active state. ([37332](https://github.com/WordPress/gutenberg/pull/37332)) +- Hide the `remove control point` button because removing it would break gradient control. ([37186](https://github.com/WordPress/gutenberg/pull/37186)) +- Import experimental `Heading` and `Text` Components. ([37290](https://github.com/WordPress/gutenberg/pull/37290)) +- Make the color popover on the gradient picker appear as expected. ([37115](https://github.com/WordPress/gutenberg/pull/37115)) +- Remove unused `reakit-utils` dependency from peer dependencies. ([37369](https://github.com/WordPress/gutenberg/pull/37369)) +- Storybook: Fix deprecated `disabled` key. ([37112](https://github.com/WordPress/gutenberg/pull/37112)) +- ToggleGroupControl: Fix extra update on incoming change. ([37224](https://github.com/WordPress/gutenberg/pull/37224)) + +#### Site Editor +- Allow global styles sidebar panels to fill vertical space. ([36845](https://github.com/WordPress/gutenberg/pull/36845)) +- Display a notice if export fails. ([37131](https://github.com/WordPress/gutenberg/pull/37131)) +- Fix edit template part link in header dropdown. ([37249](https://github.com/WordPress/gutenberg/pull/37249)) +- Fix template resolution to give precedence to PHP templates defined in a child theme. ([37074](https://github.com/WordPress/gutenberg/pull/37074)) +- Hide the block appender in the Template Part editor. ([37213](https://github.com/WordPress/gutenberg/pull/37213)) +- Improve notification when saving content in the Site Editor. ([36897](https://github.com/WordPress/gutenberg/pull/36897)) +- Improve handling of parsed requests. ([37209](https://github.com/WordPress/gutenberg/pull/37209)) +- Sync Export API error codes. ([37347](https://github.com/WordPress/gutenberg/pull/37347)) +- Template Editor Mode: Hide editor mode switcher. ([37359](https://github.com/WordPress/gutenberg/pull/37359)) +- Use server definition for the Template Areas. ([37215](https://github.com/WordPress/gutenberg/pull/37215)) +- Fixes the white screen of death on the Templates page when user avatars are disabled. ([37458](https://github.com/WordPress/gutenberg/pull/37458)) + +#### Styles +- Allow selector ordering to ensure `theme.json` root selector margin takes precedence. ([36960](https://github.com/WordPress/gutenberg/pull/36960)) +- Custom keys from `theme.json`: Fix kebabCase conversion. ([37380](https://github.com/WordPress/gutenberg/pull/37380)) +- Do not remove theme presets if defaults are hidden. ([37008](https://github.com/WordPress/gutenberg/pull/37008)) +- Fix CSS Custom Properties for presets in the Site Editor. ([36851](https://github.com/WordPress/gutenberg/pull/36851)) +- Fix how `appearanceTools` works. ([37254](https://github.com/WordPress/gutenberg/pull/37254)) +- Fix styles for previews and patterns. ([37296](https://github.com/WordPress/gutenberg/pull/37296)) +- Font sizes: Update default values. ([37381](https://github.com/WordPress/gutenberg/pull/37381)) +- Remove CSS that causes conflict with `theme.json`. ([36424](https://github.com/WordPress/gutenberg/pull/36424)) + +#### Design Tools +- Border Style Control: Update styling for consistency with border width control. ([37244](https://github.com/WordPress/gutenberg/pull/37244)) +- Border panel: + - Don't restore deselected border color when width gets changed. ([37049](https://github.com/WordPress/gutenberg/pull/37049)) + - Update the value of the `ColorPicker` component when color is cleared. ([37048](https://github.com/WordPress/gutenberg/pull/37048)) +- Gradients + - Fix clearing a custom gradient from throwing a React warning. ([37051](https://github.com/WordPress/gutenberg/pull/37051)) + - Enable adding custom gradient when gradients are disabled. ([36900](https://github.com/WordPress/gutenberg/pull/36900)) + +#### Compatibility with Core and library code +- Fix array key warning in block supports layout. ([37101](https://github.com/WordPress/gutenberg/pull/37101)) +- Templates: Search for old template names in the parent theme too. ([36910](https://github.com/WordPress/gutenberg/pull/36910)) +- Fix theme requirement validation when using WordPress 5.8. ([37226](https://github.com/WordPress/gutenberg/pull/37226)) +- Fix WordPress 5.9 check for conditionally running code. ([37235](https://github.com/WordPress/gutenberg/pull/37235)) +- Fix mistake in the`_remove_theme_attribute_in_block_template_content` function. ([37137](https://github.com/WordPress/gutenberg/pull/37137)) +- Gallery: Enable the new gallery block by default if running in Core. ([37134](https://github.com/WordPress/gutenberg/pull/37134)) + + +#### Packages +- Core Data: Fix returning empty array in the `getEntityRecords` function for unknown entities. ([36984](https://github.com/WordPress/gutenberg/pull/36984)) +- Include `@babel/core` as a dependency where applicable. ([37328](https://github.com/WordPress/gutenberg/pull/37328)) +- Format library: Fix unsetting highlight color. ([37062](https://github.com/WordPress/gutenberg/pull/37062)) + +#### Block Editor +- Mark the last change as persistent on save. ([36887](https://github.com/WordPress/gutenberg/pull/36887)) +- Fix content loss when ungrouping template parts or reusable blocks. ([37280](https://github.com/WordPress/gutenberg/pull/37280)) +- Simplify the `RESET_BLOCK` action to fix the loss of content when using template part focus mode. ([37283](https://github.com/WordPress/gutenberg/pull/37283)) + +#### Post Editor +- Multi-Entity Saving: Decode HTML entities in item titles. ([37353](https://github.com/WordPress/gutenberg/pull/37353)) + +### Documentation + +- Update documentation related to schemas. ([37294](https://github.com/WordPress/gutenberg/pull/37294)) +- Remove versioning in theme schema descriptions. ([37165](https://github.com/WordPress/gutenberg/pull/37165)) +- Fix the broken link on the plugin description page. ([37362](https://github.com/WordPress/gutenberg/pull/37362)) + +- Handbook: + - Add information about skip links to the block theme overview. ([36555](https://github.com/WordPress/gutenberg/pull/36555)) + - Add closing ticks for `blockGap` code example. ([37338](https://github.com/WordPress/gutenberg/pull/37338)) + - Add how-to guide documentation template. ([36694](https://github.com/WordPress/gutenberg/pull/36694)) + - Add link and details for `npx` in create block tutorial. ([37376](https://github.com/WordPress/gutenberg/pull/37376)) + - Consolidate React Native documentation. ([36685](https://github.com/WordPress/gutenberg/pull/36685)) + - Fix a link to the how-to guide template. ([37191](https://github.com/WordPress/gutenberg/pull/37191)) + - Move classes used in the navigation block from the component to the new readme. ([37375](https://github.com/WordPress/gutenberg/pull/37375)) + - Update Format API how-to guide. ([37298](https://github.com/WordPress/gutenberg/pull/37298)) + - Update broken links. ([37121](https://github.com/WordPress/gutenberg/pull/37121)) + - Improve formatting of headings in the contributors' guide. ([36689](https://github.com/WordPress/gutenberg/pull/36689)) + - Fix `type` for `prefix` transformation. ([36362](https://github.com/WordPress/gutenberg/pull/36362)) + - Fix broken links in the Resources section. ([37307](https://github.com/WordPress/gutenberg/pull/37307)) + - Remove the semicolons from the JSON examples. ([37129](https://github.com/WordPress/gutenberg/pull/37129)) + +- Packages: + - Block Editor: + - Add a documentation note about inner blocks and excerpts. ([36405](https://github.com/WordPress/gutenberg/pull/36405)) + - Update example of usage for `suggestionsQuery` component. ([37281](https://github.com/WordPress/gutenberg/pull/37281)) + - Componentes: + - Add missing changelog entries. ([37384](https://github.com/WordPress/gutenberg/pull/37384)) + - Fix code formatting for card components. ([37268](https://github.com/WordPress/gutenberg/pull/37268)) + - Fix importing from the wrong package. ([37192](https://github.com/WordPress/gutenberg/pull/37192)) + - Fix missing link for shortcut documentation. ([36800](https://github.com/WordPress/gutenberg/pull/36800)) + - Update `QueryControls` README.md. ([37233](https://github.com/WordPress/gutenberg/pull/37233)) + - Site Editor: Update support documentation URL in the Welcome Guide. ([37176](https://github.com/WordPress/gutenberg/pull/37176)) + +### Code Quality + +#### Compatibility with Core +- Better synchronization between Gutenberg and Core code. ([37141](https://github.com/WordPress/gutenberg/pull/37141)) +- Move WordPress 5.9 `wp-admin` menus compatibility code to `lib/compat` folder. ([37257](https://github.com/WordPress/gutenberg/pull/37257)) +- Move the block page templates hook into `compat/5.9` folder. ([37142](https://github.com/WordPress/gutenberg/pull/37142)) +- Move template loader hooks and functions into `lib/compat` folder. ([37149](https://github.com/WordPress/gutenberg/pull/37149)) +- Synchronize `wp_is_block_theme` function and `block-templates` block support with Core. ([37218](https://github.com/WordPress/gutenberg/pull/37218)) + +#### Global Styles +- Do not register `Global Styles` custom post type in WordPress 5.9. ([37282](https://github.com/WordPress/gutenberg/pull/37282)) +- Port `Global Styles` code to `lib/compat/wordpress-5.9`: + - CSS custom properties. ([37334](https://github.com/WordPress/gutenberg/pull/37334)) + - Front assets. ([37335](https://github.com/WordPress/gutenberg/pull/37335)) +- Rename `WP_Theme_JSON_Resolver` methods to make them compatible with Core. ([37393](https://github.com/WordPress/gutenberg/pull/37393)) + +#### Packages +- Dependency Extraction Webpack Plugin: Sort externalized dependencies report. ([37377](https://github.com/WordPress/gutenberg/pull/37377)) +- Block Editor: + - Iframe component: Use block settings to pass assets. ([37193](https://github.com/WordPress/gutenberg/pull/37193)) + - Remove duplicate block styles. ([37133](https://github.com/WordPress/gutenberg/pull/37133)) + - Specify the WordPress versions where API is deprecated. ([37150](https://github.com/WordPress/gutenberg/pull/37150)) +- Components + - Refactor `DatePicker` into a functional component. ([36835](https://github.com/WordPress/gutenberg/pull/36835)) + - Storybook: Update to version 6.4. ([37367](https://github.com/WordPress/gutenberg/pull/37367)) +- Data + - Ensure that `redux` is listed as a dependency. ([37364](https://github.com/WordPress/gutenberg/pull/37364)) + - @wordpress/data: Refactor `use-select` component in preparation for adding types. ([37017](https://github.com/WordPress/gutenberg/pull/37017)) +- Scripts: Update dependencies shared with other WordPress packages. ([37395](https://github.com/WordPress/gutenberg/pull/37395)) + +#### Site Editor +- Remove unused PHP code. ([36997](https://github.com/WordPress/gutenberg/pull/36997)) +- Revert `Site Editor: Set the <title> on the list page to be the same as the CPT name`. ([37270](https://github.com/WordPress/gutenberg/pull/37270)) + +#### Block Library +- Remove `gutenberg_` prefix from `@wordpress/block-library`. ([37341](https://github.com/WordPress/gutenberg/pull/37341)) +- Block Library: Rename Query Pagination blocks. ([37091](https://github.com/WordPress/gutenberg/pull/37091)) + +### Tools + +#### Testing +- End-to-end Tests: + - Increase delay in image block end-to-end test to fix intermittent failure when clearing URL field. ([37136](https://github.com/WordPress/gutenberg/pull/37136)) + - Update Multi-Entity Saving test to improve reliability. ([37139](https://github.com/WordPress/gutenberg/pull/37139)) + - Sanitize flaky test report file names. ([37390](https://github.com/WordPress/gutenberg/pull/37390)) + - Retry login again after a bad nonce request to prevent intermittent test failures. ([37219](https://github.com/WordPress/gutenberg/pull/37219)) + - Fix `Multi-entity saving` and `Template parts` related tests. ([37333](https://github.com/WordPress/gutenberg/pull/37333)) + - Fix `Heading` test. ([37382](https://github.com/WordPress/gutenberg/pull/37382)) + - Re-enable most of the navigation block end-to-end tests. ([37214](https://github.com/WordPress/gutenberg/pull/37214)) + - Use global transients for PHPUnit tests. ([37122](https://github.com/WordPress/gutenberg/pull/37122)) + - Fix usage of `useSetting('color.palette')`. ([37108](https://github.com/WordPress/gutenberg/pull/37108)) + - Add tests for the new gallery hooks. ([36801](https://github.com/WordPress/gutenberg/pull/36801)) + +#### Linting +- ESLint: + - Add support for ESLint v8. ([36283](https://github.com/WordPress/gutenberg/pull/36283)) + - Fix Babel config resolution when a custom ESLint config is present. ([37406](https://github.com/WordPress/gutenberg/pull/37406)) + +#### Build Tooling +- Specify PHP version in Composer. ([37007](https://github.com/WordPress/gutenberg/pull/37007)) +- Remove unused `jest-serializer-enzyme` dependency. ([37373](https://github.com/WordPress/gutenberg/pull/37373)) +- Remove some labels from the `Experiments` section of the changelog. ([37098](https://github.com/WordPress/gutenberg/pull/37098)) +- `npm`: + - Fix package dependencies issues discovered with `pnpm`. ([37396](https://github.com/WordPress/gutenberg/pull/37396)) + - Use the latest minor version of webpack in Gutenberg. ([37371](https://github.com/WordPress/gutenberg/pull/37371)) +- Fix build failure on Windows. ([37189](https://github.com/WordPress/gutenberg/pull/37189)) + + += 12.1.0 = + +### Enhancements + +#### Site Editor +- Add Template List View. ([36379](https://github.com/WordPress/gutenberg/pull/36379)) + - Show theme, plugin or author in Added By column with appropriate icon or avatar. ([36763](https://github.com/WordPress/gutenberg/pull/36763)) + - Add success and error snackbars. ([36808](https://github.com/WordPress/gutenberg/pull/36808)) + - Implement "Add New". ([36592](https://github.com/WordPress/gutenberg/pull/36592)) + - Use table layout. ([36707](https://github.com/WordPress/gutenberg/pull/36707)) + - Set the document title properly. ([36805](https://github.com/WordPress/gutenberg/pull/36805)) + - Add rename action. ([36879](https://github.com/WordPress/gutenberg/pull/36879)) + - Update delete template button. ([36815](https://github.com/WordPress/gutenberg/pull/36815)) +- Make Reusable blocks available in the Site Editor. ([36511](https://github.com/WordPress/gutenberg/pull/36511)) +- Remove the Styles link in Site Editor. ([36637](https://github.com/WordPress/gutenberg/pull/36637)) +- Update and align template descriptions. ([36000](https://github.com/WordPress/gutenberg/pull/36000)) +- Add icons to navigation sidebar items. ([36893](https://github.com/WordPress/gutenberg/pull/36893)) +- Allow editing custom template title. ([36933](https://github.com/WordPress/gutenberg/pull/36933)) +- Only render the site editor canvas when the global styles are loaded. ([36643](https://github.com/WordPress/gutenberg/pull/36643)) +- Remove extra border radius from the canvas. ([37022](https://github.com/WordPress/gutenberg/pull/37022)) +- Update navigation sidebar responsiveness. ([36638](https://github.com/WordPress/gutenberg/pull/36638)) +- Update resize handle styling in template part focus mode. ([36410](https://github.com/WordPress/gutenberg/pull/36410)) + +#### Global Styles +- Add elements support to the typography panel. ([36718](https://github.com/WordPress/gutenberg/pull/36718)) +- Add the gradient palette editor. ([36820](https://github.com/WordPress/gutenberg/pull/36820)) +- Add transparency support to the colors panel. ([36840](https://github.com/WordPress/gutenberg/pull/36840)) +- Add read-only duotone palette. ([36920](https://github.com/WordPress/gutenberg/pull/36920)) +- Do not show default palette if theme opts-out. ([36639](https://github.com/WordPress/gutenberg/pull/36639)) +- Make user able to change all color palette origins. ([36674](https://github.com/WordPress/gutenberg/pull/36674)) ([36747](https://github.com/WordPress/gutenberg/pull/36747)) ([36817](https://github.com/WordPress/gutenberg/pull/36817)) +- Rename `core` origin key to `default` for presets. ([36645](https://github.com/WordPress/gutenberg/pull/36645)) +- Count all color palette origins on the palette counter. ([36922](https://github.com/WordPress/gutenberg/pull/36922)) +- Add `appearanceTools` flag in theme.json to opt-in into appearance UI controls. ([36646](https://github.com/WordPress/gutenberg/pull/36646)) +- Switch the borders panel to ToolsPanel for displaying UI. ([33743](https://github.com/WordPress/gutenberg/pull/33743)) +- Improve the design and copy of the color panels. ([36959](https://github.com/WordPress/gutenberg/pull/36959)) ([36994](https://github.com/WordPress/gutenberg/pull/36994)) ([37015](https://github.com/WordPress/gutenberg/pull/37015)) ([37016](https://github.com/WordPress/gutenberg/pull/37016)) ([36921](https://github.com/WordPress/gutenberg/pull/36921)) ([36963](https://github.com/WordPress/gutenberg/pull/36963)) ([36622](https://github.com/WordPress/gutenberg/pull/36622)) ([36965](https://github.com/WordPress/gutenberg/pull/36965)) ([36819](https://github.com/WordPress/gutenberg/pull/36819)) ([36748](https://github.com/WordPress/gutenberg/pull/36748)) ([36940](https://github.com/WordPress/gutenberg/pull/36940)) ([36684](https://github.com/WordPress/gutenberg/pull/36684)) +- Schemas: Allow custom blocks in theme.json styles. ([36411](https://github.com/WordPress/gutenberg/pull/36411)) + +#### Block Editor +- Improve the position of the block appenders and behavior. ([36656](https://github.com/WordPress/gutenberg/pull/36656)) ([36605](https://github.com/WordPress/gutenberg/pull/36605)) +- Keyboard shortcuts: Double escape unselects all blocks. ([36945](https://github.com/WordPress/gutenberg/pull/36945)) +- Adjust order of theme blocks and reorder inserter items. ([36719](https://github.com/WordPress/gutenberg/pull/36719)) +- Block Editor List View: Use anchor elements instead of buttons. ([35655](https://github.com/WordPress/gutenberg/pull/35655)) + +#### Block Library +- Block Library: Add the Comments Pagination block. ([36872](https://github.com/WordPress/gutenberg/pull/36872)) +- Comment Author Avatar block: Add spacing support. ([36322](https://github.com/WordPress/gutenberg/pull/36322)) +- Navigation block: Only show submenu options and Show arrow button when relevant. ([36826](https://github.com/WordPress/gutenberg/pull/36826)) +- Navigation block: Implement suitable fallback for Nav block on front end of site when no menu selected. ([36849](https://github.com/WordPress/gutenberg/pull/36849)) ([36724](https://github.com/WordPress/gutenberg/pull/36724)) ([36850](https://github.com/WordPress/gutenberg/pull/36850)) ([36854](https://github.com/WordPress/gutenberg/pull/36854)) ([36740](https://github.com/WordPress/gutenberg/pull/36740)) +- Navigation block: Rename navigationMenuId to ref. ([36739](https://github.com/WordPress/gutenberg/pull/36739)) +- Navigation block: Automatically generate navigation post title. ([36760](https://github.com/WordPress/gutenberg/pull/36760)) +- Template Part block: Remove color, spacing, layout options and reusable block conversion. ([36571](https://github.com/WordPress/gutenberg/pull/36571)) ([36918](https://github.com/WordPress/gutenberg/pull/36918)) +- Gallery block: Turn on auto-migration of v1 Gallery blocks to v2 format when edited. ([36191](https://github.com/WordPress/gutenberg/pull/36191)) +- Update featured image placeholder graphic. ([36712](https://github.com/WordPress/gutenberg/pull/36712)) +- Post Featured Image: Move width and height controls into the Dimensions panel via SlotFill. ([36540](https://github.com/WordPress/gutenberg/pull/36540)) + +#### Components +- Font Size Picker: Allow non-integers as simple CSS values and in hints. ([36636](https://github.com/WordPress/gutenberg/pull/36636)) +- Divider: Improve `vertical` and RTL support. ([36579](https://github.com/WordPress/gutenberg/pull/36579)) +- ItemGroup: Experimenting with chevron icon. ([36654](https://github.com/WordPress/gutenberg/pull/36654)) +- Toggle Group Control: Add tooltip. ([36726](https://github.com/WordPress/gutenberg/pull/36726)) +- Modal: Support ref forwarding. ([36831](https://github.com/WordPress/gutenberg/pull/36831)) +- ZStack: Support RTL layouts when applying `offset`. ([36769](https://github.com/WordPress/gutenberg/pull/36769)) + +#### Themes +- Move the theme editor under tools for FSE themes. ([36723](https://github.com/WordPress/gutenberg/pull/36723)) +- Update the block theme folders to templates and parts. ([36647](https://github.com/WordPress/gutenberg/pull/36647)) + + +### Bug Fixes + +#### Global Styles +- Make the core color palette opt-in for themes with not `theme.json`. ([36496](https://github.com/WordPress/gutenberg/pull/36496)) +- Fix: Apply by slug on all origins. ([36841](https://github.com/WordPress/gutenberg/pull/36841)) +- Fix: Theme colors cannot override defaults. ([36811](https://github.com/WordPress/gutenberg/pull/36811)) + +#### Block Library +- Cover block: Fix undo trap. ([36807](https://github.com/WordPress/gutenberg/pull/36807)) +- Navigation block: Add page list to navigation direct insert conditions. ([36591](https://github.com/WordPress/gutenberg/pull/36591)) +- Navigation block: Fix Nav block editing wrong entity on creation of new Menu. ([36880](https://github.com/WordPress/gutenberg/pull/36880)) +- Navigation block: Scale submenu icon. ([36714](https://github.com/WordPress/gutenberg/pull/36714)) ([36948](https://github.com/WordPress/gutenberg/pull/36948)) +- Navigation block: Fix non existent menu handling. ([36507](https://github.com/WordPress/gutenberg/pull/36507)) +- Navigation block: Fix page list missing button styles when set to open on click. ([36601](https://github.com/WordPress/gutenberg/pull/36601)) +- Navigation block: Include cascading properties in deprecation. ([36432](https://github.com/WordPress/gutenberg/pull/36432)) +- Navigation block: Remove absorb toolbar prop. ([36990](https://github.com/WordPress/gutenberg/pull/36990)) +- Navigation block: Add accessible labelling to submenu buttons. ([36631](https://github.com/WordPress/gutenberg/pull/36631)) +- Navigation block: Fix space-between. ([36441](https://github.com/WordPress/gutenberg/pull/36441)) +- Template Part block: Fix slug generation when creating through the block placeholder. ([36764](https://github.com/WordPress/gutenberg/pull/36764)) +- Gallery block: Allow clicks within replace media placeholder state. ([36804](https://github.com/WordPress/gutenberg/pull/36804)) +- Gallery block: Fix stuck image size options loader. ([36806](https://github.com/WordPress/gutenberg/pull/36806)) +- Post Featured Image: Add a "Reset" button. ([36572](https://github.com/WordPress/gutenberg/pull/36572)) +- Post Title block: Fix render error when setting Page to homepage. ([36786](https://github.com/WordPress/gutenberg/pull/36786)) +- Query Pagination Next/Previous blocks: Remove text and link color support. ([36954](https://github.com/WordPress/gutenberg/pull/36954)) + +#### Site Editor +- Stabilize theme export Rest API endpoint. ([36559](https://github.com/WordPress/gutenberg/pull/36559)) ([36908](https://github.com/WordPress/gutenberg/pull/36908)) +- Template list view fixes. ([36947](https://github.com/WordPress/gutenberg/pull/36947)) ([36822](https://github.com/WordPress/gutenberg/pull/36822)) ([36705](https://github.com/WordPress/gutenberg/pull/36705)) +- Templates Rest API endpoint: Add missing 'is_custom' prop. ([36911](https://github.com/WordPress/gutenberg/pull/36911)) +- Templates Rest API endpoint: Add origin and author. ([36896](https://github.com/WordPress/gutenberg/pull/36896)) +- Validate the postType query argument. ([36706](https://github.com/WordPress/gutenberg/pull/36706)) +- Fix site editor region navigation. ([36709](https://github.com/WordPress/gutenberg/pull/36709)) +- Navigation Sidebar: Add aria-current="page" to active navigation item. ([36946](https://github.com/WordPress/gutenberg/pull/36946)) +- Navigation Sidebar: Highlight "Site" in the navigation panel. ([36762](https://github.com/WordPress/gutenberg/pull/36762)) +- Navigation Sidebar: Show all templates and template parts on the site editor list screens. ([36761](https://github.com/WordPress/gutenberg/pull/36761)) + +#### Components +- Color Picker: Re-instate debounce and controlled value to fix issue with gradient picker. ([36941](https://github.com/WordPress/gutenberg/pull/36941)) +- ColorPicker: Replace hardcoded "blue" with theme color. ([36153](https://github.com/WordPress/gutenberg/pull/36153)) +- Tools Panel: Fix race conditions caused by conditionally displayed ToolsPanelItems. ([36588](https://github.com/WordPress/gutenberg/pull/36588)) +- DateTimePicker: Set PM hours correctly. ([36878](https://github.com/WordPress/gutenberg/pull/36878)) +- LinkControl: Fix wordbreak for URLs. ([36993](https://github.com/WordPress/gutenberg/pull/36993)) +- Offset the parent iframe when computing Popover position. ([36876](https://github.com/WordPress/gutenberg/pull/36876)) +- ToolsPanel: Prevent tools panel menu increasing empty panel height. ([36895](https://github.com/WordPress/gutenberg/pull/36895)) +- Update destructive tertiary button styles, and template list. ([36915](https://github.com/WordPress/gutenberg/pull/36915)) + +#### Themes +- Block Templates: Fix PHP notices on WP 5.8. ([36964](https://github.com/WordPress/gutenberg/pull/36964)) +- Don't try and render unstable location if Nav block has ID. ([36863](https://github.com/WordPress/gutenberg/pull/36863)) + +#### Design Tools +- Border panel: Update to display multiple palette origins. ([36753](https://github.com/WordPress/gutenberg/pull/36753)) +- Cover: Move BoxControlVisualizer in the markup to make it visible. ([36635](https://github.com/WordPress/gutenberg/pull/36635)) +- Fix duotone first render in Safari. ([36754](https://github.com/WordPress/gutenberg/pull/36754)) + +#### Icons +- [Icons]: Fix Comment Author Name icon. ([36738](https://github.com/WordPress/gutenberg/pull/36738)) +- [Icons]: Fix property names for Comment Author Avatar icon. ([36737](https://github.com/WordPress/gutenberg/pull/36737)) + +#### Milaceanous + +- Block Styles: Add a separating margin to the default picker. ([36976](https://github.com/WordPress/gutenberg/pull/36976)) +- Block Styles: Check for existence of scroll container. ([37010](https://github.com/WordPress/gutenberg/pull/37010)) +- Data package: Update types and fix type error. ([36190](https://github.com/WordPress/gutenberg/pull/36190)) +- Writing Flow Multi-select: Ensure post title content editable after multi-select. ([36843](https://github.com/WordPress/gutenberg/pull/36843)) +- Insertion point bar: Hide onBlur and onMouseLeave. ([36798](https://github.com/WordPress/gutenberg/pull/36798)) +- Dependency Extraction Webpack Plugin: Make the plugin work when using `optimizations.runtimeChunk = 'single'`. ([26214](https://github.com/WordPress/gutenberg/pull/26214)) +- Fix document typo. ([36776](https://github.com/WordPress/gutenberg/pull/36776)) +- Prevent CleanWebpackPlugin webpack plugin from deleting webpack assets. ([35986](https://github.com/WordPress/gutenberg/pull/35986)) +- Hide the columns inserter in pattern previews. ([36626](https://github.com/WordPress/gutenberg/pull/36626)) +- Update theme.json version. ([36917](https://github.com/WordPress/gutenberg/pull/36917)) +- Multi-entity save: Only set site entity to pending if really saving. ([36573](https://github.com/WordPress/gutenberg/pull/36573)) +- Widgets Editor: Add CSS fix for wp_footer called multiple times. ([36759](https://github.com/WordPress/gutenberg/pull/36759)) +- Fix the templates REST API endpoint for the almost pretty permalink config. ([36881](https://github.com/WordPress/gutenberg/pull/36881)) + + +### Performance + +- Improve performance of wp_navigation lookup. ([36891](https://github.com/WordPress/gutenberg/pull/36891)) + + +### Experiments + +- Add `__unstable-large` size variant on `InputControl` `SelectControl` `UnitControl`. ([35646](https://github.com/WordPress/gutenberg/pull/35646)) +- Add experimental `ConfirmDialog`. ([34153](https://github.com/WordPress/gutenberg/pull/34153)) + + +### Documentation + +- Add brief information about blockGap to the theme.json how-to guide. ([36558](https://github.com/WordPress/gutenberg/pull/36558)) +- Add placeholder in URLInput documentation. ([36799](https://github.com/WordPress/gutenberg/pull/36799)) +- Block Supports: Update block supports documentation after typography reshaping. ([36894](https://github.com/WordPress/gutenberg/pull/36894)) +- Alphabetize the How to Guides section. ([35904](https://github.com/WordPress/gutenberg/pull/35904)) +- Fix broken link to @wordpress/stylelint-config. ([36936](https://github.com/WordPress/gutenberg/pull/36936)) +- Improvements on `Create a Block Tutorial` from `Block Editor handbook`. ([36553](https://github.com/WordPress/gutenberg/pull/36553)) +- Update history.md with description of the page. ([36888](https://github.com/WordPress/gutenberg/pull/36888)) +- Update Getting Started with info to stay informed. ([36498](https://github.com/WordPress/gutenberg/pull/36498)) +- Update Pattern block category and add documentation. ([36144](https://github.com/WordPress/gutenberg/pull/36144)) +- Various inline docblock corrections. ([36793](https://github.com/WordPress/gutenberg/pull/36793)) +- ToolsPanel: Update panel readme and stories. ([36557](https://github.com/WordPress/gutenberg/pull/36557)) +- Change .nvmrc and documentation for Node.js version (LTS to 14.18.1). ([36744](https://github.com/WordPress/gutenberg/pull/36744)) + + +### Code Quality + +- Blocks: Refactor generator-based actions to thunks. ([36468](https://github.com/WordPress/gutenberg/pull/36468)) +- Remove useless bubblesVirtually prop from BlockInspector. ([37024](https://github.com/WordPress/gutenberg/pull/37024)) +- Remove EditPostSettings context provider. ([36949](https://github.com/WordPress/gutenberg/pull/36949)) +- Report dependencies externalized with Dependency Extraction Plugin. ([35106](https://github.com/WordPress/gutenberg/pull/35106)) +- Comment Author Avatar block: Escape styles attribute. ([36988](https://github.com/WordPress/gutenberg/pull/36988)) +- Clarify i18n context for PostTemplateActions's "New" label. ([36679](https://github.com/WordPress/gutenberg/pull/36679)) +- Data: Remove usage of deprecated register methods. ([36344](https://github.com/WordPress/gutenberg/pull/36344)) + +#### Global Styles +- Move Global Styles code to `lib/compat/wordpress-5.9` folder. ([36978](https://github.com/WordPress/gutenberg/pull/36978)) +- Rename `gutenberg_` to `wp_` for some functions that land in WordPress 5.9. ([36913](https://github.com/WordPress/gutenberg/pull/36913)) +- Update global styles public API. ([36610](https://github.com/WordPress/gutenberg/pull/36610)) +- Update the `WP_Theme_JSON_Gutenberg` class to be like the core one. ([36973](https://github.com/WordPress/gutenberg/pull/36973)) +- Update the `WP_Theme_JSON_Resolver_Gutenberg` class to be like the core one. ([36974](https://github.com/WordPress/gutenberg/pull/36974)) +- `theme.json`: Sort keys alphabetically. ([36968](https://github.com/WordPress/gutenberg/pull/36968)) +- Update function names for the public global styles API functions. ([36907](https://github.com/WordPress/gutenberg/pull/36907)) + +#### Block Library +- Navigation: Remove outdated separate "Home" link styles. ([36608](https://github.com/WordPress/gutenberg/pull/36608)) +- Post Featured Image: Remove withNotices HOC. ([36596](https://github.com/WordPress/gutenberg/pull/36596)) +- [Comment Author Avatar]: Remove extraneous color link support flag. ([36956](https://github.com/WordPress/gutenberg/pull/36956)) +- Deprecate navigation areas. ([36981](https://github.com/WordPress/gutenberg/pull/36981)) ([36727](https://github.com/WordPress/gutenberg/pull/36727)) +- Remove unstable max pages attribute from Nav block. ([36877](https://github.com/WordPress/gutenberg/pull/36877)) +- Remove reference to gutenberg_, swap with wp_. ([36652](https://github.com/WordPress/gutenberg/pull/36652)) +- Add plugin meta data to Nav Area block deprecation notice. ([36777](https://github.com/WordPress/gutenberg/pull/36777)) + +#### Testing +- Reorganize end-to-end tests folders and files. ([36734](https://github.com/WordPress/gutenberg/pull/36734)) +- Scripts: Upgrade Puppeteer to v11. ([36040](https://github.com/WordPress/gutenberg/pull/36040)) +- Update template controller unit test now that author support is in WP core. ([36987](https://github.com/WordPress/gutenberg/pull/36987)) +- end-to-end Tests: Fix failing image end-to-end test by waiting for required element. ([36982](https://github.com/WordPress/gutenberg/pull/36982)) +- Remove block template resolution unit tests. ([36855](https://github.com/WordPress/gutenberg/pull/36855)) + + += 12.0.2 = + +### Bug Fixes + +#### Block Variations +- Block Styles: Check for existence of scroll container. ([37010](https://github.com/WordPress/gutenberg/pull/37010)) + + + + + += 12.1.0-rc.1 = + + + +### Enhancements + +#### Components +- Add `__unstable-large` size variant on `InputControl` `SelectControl` `UnitControl`. ([35646](https://github.com/WordPress/gutenberg/pull/35646)) +- Font Size Picker: Allow non-integers as simple CSS values and in hints. ([36636](https://github.com/WordPress/gutenberg/pull/36636)) +- Improve `vertical` and RTL support for `Divider`. ([36579](https://github.com/WordPress/gutenberg/pull/36579)) +- ItemGroup: Experimenting with chevron icon. ([36654](https://github.com/WordPress/gutenberg/pull/36654)) +- Toggle Group Control: Add tooltip. ([36726](https://github.com/WordPress/gutenberg/pull/36726)) +- `Modal`: Add `__experimentalHideHeader` prop, wrap in `forwardref`. ([36831](https://github.com/WordPress/gutenberg/pull/36831)) +- `ZStack`: Support RTL layouts when applying `offset`. ([36769](https://github.com/WordPress/gutenberg/pull/36769)) + +#### Site Editor +- Add icons to navigation sidebar items. ([36893](https://github.com/WordPress/gutenberg/pull/36893)) +- Allow editing custom template title. ([36933](https://github.com/WordPress/gutenberg/pull/36933)) +- Only render the site editor canvas when the global styles are ready. ([36643](https://github.com/WordPress/gutenberg/pull/36643)) +- Remove extra border radius. ([37022](https://github.com/WordPress/gutenberg/pull/37022)) +- Show theme, plugin or author in Added By column with appropriate icon or avatar. ([36763](https://github.com/WordPress/gutenberg/pull/36763)) +- Update navigation sidebar responsiveness. ([36638](https://github.com/WordPress/gutenberg/pull/36638)) + +#### Global Styles +- Borders: Switch to ToolsPanel for displaying UI. ([33743](https://github.com/WordPress/gutenberg/pull/33743)) +- Custom color palette: Add default color name. ([36940](https://github.com/WordPress/gutenberg/pull/36940)) +- Polish unset color indicator. ([36994](https://github.com/WordPress/gutenberg/pull/36994)) + +#### Block Editor +- Always show the block appender when its parent is selected. ([36656](https://github.com/WordPress/gutenberg/pull/36656)) +- Insertion point bar: Hide onBlur and onMouseLeave. ([36798](https://github.com/WordPress/gutenberg/pull/36798)) +- Writing Flow: Double escape unselects all blocks. ([36945](https://github.com/WordPress/gutenberg/pull/36945)) + +#### Block Library +- Add spacing attributes to comment author avatar. ([36322](https://github.com/WordPress/gutenberg/pull/36322)) +- Only show submenu options and Show arrow button when relevant. ([36826](https://github.com/WordPress/gutenberg/pull/36826)) + + +### Bug Fixes + +- Dependency Extraction Webpack Plugin: Make the plugin work when using `optimizations.runtimeChunk = 'single'`. ([26214](https://github.com/WordPress/gutenberg/pull/26214)) +- Fix document typo. ([36776](https://github.com/WordPress/gutenberg/pull/36776)) +- Prevent CleanWebpackPlugin webpack plugin from deleting webpack assets. ([35986](https://github.com/WordPress/gutenberg/pull/35986)) +- Try: Hide the columns inserter in pattern previews. ([36626](https://github.com/WordPress/gutenberg/pull/36626)) +- Update theme.json version. ([36917](https://github.com/WordPress/gutenberg/pull/36917)) + +#### Block Library +- Add page list to navigation direct insert conditions. ([36591](https://github.com/WordPress/gutenberg/pull/36591)) +- Cover: Fix undo trap. ([36807](https://github.com/WordPress/gutenberg/pull/36807)) +- Fix Nav block editing wrong entity on creation of new Menu. ([36880](https://github.com/WordPress/gutenberg/pull/36880)) +- Fix Nav block fallback DB query to match on full block grammar start tag. ([36854](https://github.com/WordPress/gutenberg/pull/36854)) +- Fix icon scaling. ([36948](https://github.com/WordPress/gutenberg/pull/36948)) +- Fix non existent menu handling in nav block. ([36507](https://github.com/WordPress/gutenberg/pull/36507)) +- Fix page list missing button styles when set to open on click. ([36601](https://github.com/WordPress/gutenberg/pull/36601)) +- Fix template part slug generation when creating through the block placeholder. ([36764](https://github.com/WordPress/gutenberg/pull/36764)) +- Gallery v1: Allow clicks within replace media placeholder state. ([36804](https://github.com/WordPress/gutenberg/pull/36804)) +- Gallery: Fix stuck image size options loader. ([36806](https://github.com/WordPress/gutenberg/pull/36806)) +- Include cascading properties in Navigation deprecation. ([36432](https://github.com/WordPress/gutenberg/pull/36432)) +- Navigation: Scale submenu icon. ([36714](https://github.com/WordPress/gutenberg/pull/36714)) +- Navigation: Try removing absorb toolbar prop. ([36990](https://github.com/WordPress/gutenberg/pull/36990)) +- Post Featured Image: Add the "Reset" button. ([36572](https://github.com/WordPress/gutenberg/pull/36572)) +- [Post Title]: Fix render error when setting Page to homepage. ([36786](https://github.com/WordPress/gutenberg/pull/36786)) +- [Query Pagination Next/Previous]: Remove text and link color support. ([36954](https://github.com/WordPress/gutenberg/pull/36954)) + +#### Site Editor +- Stabilize export endpoint. ([36559](https://github.com/WordPress/gutenberg/pull/36559)) +- Templat list fallback to slug. ([36947](https://github.com/WordPress/gutenberg/pull/36947)) +- Templates Controller: Add missing 'is_custom' prop. ([36911](https://github.com/WordPress/gutenberg/pull/36911)) +- Update hrefs to not specifically refer to themes.php?page=gutenberg-edit-site. ([36705](https://github.com/WordPress/gutenberg/pull/36705)) +- Validate the postType query argument. ([36706](https://github.com/WordPress/gutenberg/pull/36706)) + +#### Components +- Color Picker: Re-instate debounce and controlled value to fix issue with gradient picker. ([36941](https://github.com/WordPress/gutenberg/pull/36941)) +- ColorPicker: Replace hardcoded "blue" with theme color. ([36153](https://github.com/WordPress/gutenberg/pull/36153)) +- Tools Panel: Fix race conditions caused by conditionally displayed ToolsPanelItems. ([36588](https://github.com/WordPress/gutenberg/pull/36588)) +- `DateTimePicker`: Set PM hours correctly. ([36878](https://github.com/WordPress/gutenberg/pull/36878)) + +#### Themes +- Block Templates: Fix PHP notices on WP 5.8. ([36964](https://github.com/WordPress/gutenberg/pull/36964)) +- Don't try and render unstable location if Nav block has ID. ([36863](https://github.com/WordPress/gutenberg/pull/36863)) +- Fix duotone first render in Safari. ([36754](https://github.com/WordPress/gutenberg/pull/36754)) + +#### Accessibility +- Add accessible labelling to submenu buttons. ([36631](https://github.com/WordPress/gutenberg/pull/36631)) +- Add aria-current="page" to active navigation item. ([36946](https://github.com/WordPress/gutenberg/pull/36946)) +- Fix site editor region navigation. ([36709](https://github.com/WordPress/gutenberg/pull/36709)) + +#### Block Editor +- Fix wordbreak for URLs. ([36993](https://github.com/WordPress/gutenberg/pull/36993)) +- Writing Flow Multi-select: Ensure post title content editable after multi-select. ([36843](https://github.com/WordPress/gutenberg/pull/36843)) + +#### Full Site Editing +- Highlight "Site" in the navigation panel. ([36762](https://github.com/WordPress/gutenberg/pull/36762)) +- Show all templates and template parts on the site editor list screens. ([36761](https://github.com/WordPress/gutenberg/pull/36761)) + +#### Design Tools +- Border panel: Update to display multiple palette origins. ([36753](https://github.com/WordPress/gutenberg/pull/36753)) +- Cover: Move BoxControlVisualizer in the markup to make it visible. ([36635](https://github.com/WordPress/gutenberg/pull/36635)) + +#### Icons +- [Icons]: Fix Comment Author Name icon. ([36738](https://github.com/WordPress/gutenberg/pull/36738)) +- [Icons]: Fix property names for Comment Author Avatar icon. ([36737](https://github.com/WordPress/gutenberg/pull/36737)) + +#### Block Variations +- Block Styles: Check for existence of scroll container. ([37010](https://github.com/WordPress/gutenberg/pull/37010)) + +#### Style Variations +- Block Styles: Add a separating margin to the default picker. ([36976](https://github.com/WordPress/gutenberg/pull/36976)) + +#### Testing +- Fix: Failing PHPUnit test. ([36931](https://github.com/WordPress/gutenberg/pull/36931)) + +#### Widgets Editor +- Add CSS fix for 33580. ([36759](https://github.com/WordPress/gutenberg/pull/36759)) + +#### Post Editor +- Multi-entity save: Only set site entity to pending if really saving. ([36573](https://github.com/WordPress/gutenberg/pull/36573)) + +#### Global Styles +- Make the core color palette opt-in for themes with not `theme.json`. ([36496](https://github.com/WordPress/gutenberg/pull/36496)) + +#### Data Layer +- Data: Update types and fix type error. ([36190](https://github.com/WordPress/gutenberg/pull/36190)) + + +### Performance + +#### Block Library +- Improve performance of wp_navigation lookup.. ([36891](https://github.com/WordPress/gutenberg/pull/36891)) + + +### Experiments + +#### Global Styles +- Add elements support to the typography panel in global styles. ([36718](https://github.com/WordPress/gutenberg/pull/36718)) +- Add: Border indication to global styles colors. ([36959](https://github.com/WordPress/gutenberg/pull/36959)) +- Add: Corners to custom color picker popover. ([37015](https://github.com/WordPress/gutenberg/pull/37015)) +- Add: Gradient palette editor. ([36820](https://github.com/WordPress/gutenberg/pull/36820)) +- Add: Missing margin to the color picker clear button. ([37016](https://github.com/WordPress/gutenberg/pull/37016)) +- Add: Transparency support on global styles colors. ([36840](https://github.com/WordPress/gutenberg/pull/36840)) +- Add: Uneditable duotone palette on the palette gradient panel. ([36920](https://github.com/WordPress/gutenberg/pull/36920)) +- Call "palettes" and not "color palettes" on panel label. ([36921](https://github.com/WordPress/gutenberg/pull/36921)) +- Color Picker: Improve border, padding, and box shadow styles. ([36963](https://github.com/WordPress/gutenberg/pull/36963)) +- Color UI component: Reorder palettes and update names (core by defaults, user by custom). ([36622](https://github.com/WordPress/gutenberg/pull/36622)) +- Fix: Apply by slug on all origins. ([36841](https://github.com/WordPress/gutenberg/pull/36841)) +- Fix: Color palette is not being stored. ([36817](https://github.com/WordPress/gutenberg/pull/36817)) +- Fix: Custom color picker popover position. ([36965](https://github.com/WordPress/gutenberg/pull/36965)) +- Fix: Theme colors cannot override defaults. ([36811](https://github.com/WordPress/gutenberg/pull/36811)) +- GlobalStyles sidebar: Do not show default palette if theme opts-out. ([36639](https://github.com/WordPress/gutenberg/pull/36639)) +- Make links plural in global styles. ([36819](https://github.com/WordPress/gutenberg/pull/36819)) +- Make user able to change all color palette origins. ([36674](https://github.com/WordPress/gutenberg/pull/36674)) +- Rename `core` origin key to `default` for presets. ([36645](https://github.com/WordPress/gutenberg/pull/36645)) +- Update function names for the public global styles API functions. ([36907](https://github.com/WordPress/gutenberg/pull/36907)) +- Update: Global Styes: Count all color palette origins on the palette counter. ([36922](https://github.com/WordPress/gutenberg/pull/36922)) +- Update: Rename user preset origin to custom. ([36748](https://github.com/WordPress/gutenberg/pull/36748)) +- theme.json: Add `appearanceTools` flag to opt-in into appearance UI controls. ([36646](https://github.com/WordPress/gutenberg/pull/36646)) + +#### Block Library +- Allow filtering of Nav block fallback. ([36850](https://github.com/WordPress/gutenberg/pull/36850)) +- Deprecate navigation areas. ([36727](https://github.com/WordPress/gutenberg/pull/36727)) +- Implement suitable fallback for Nav block on front end of site when no menu selected. ([36724](https://github.com/WordPress/gutenberg/pull/36724)) +- Navigation: Fix space-between. ([36441](https://github.com/WordPress/gutenberg/pull/36441)) +- Remove navigationArea context. ([36981](https://github.com/WordPress/gutenberg/pull/36981)) +- Remove unstable max pages attribute from Nav block. ([36877](https://github.com/WordPress/gutenberg/pull/36877)) +- Rename navigationMenuId to ref. ([36739](https://github.com/WordPress/gutenberg/pull/36739)) +- Render empty Nav block if no fallback block can be utilised. ([36849](https://github.com/WordPress/gutenberg/pull/36849)) +- Try always generating navigation post title. ([36760](https://github.com/WordPress/gutenberg/pull/36760)) +- Use first non-empty Nav post as primary fallback for Nav block. ([36740](https://github.com/WordPress/gutenberg/pull/36740)) + +#### Full Site Editing +- Add success and error snackbars to the templates list page. ([36808](https://github.com/WordPress/gutenberg/pull/36808)) +- Add templates list page for site editor. ([36379](https://github.com/WordPress/gutenberg/pull/36379)) +- Implement "Add New" for templates list in Site Editor. ([36592](https://github.com/WordPress/gutenberg/pull/36592)) +- Remove block template resolution unit tests. ([36855](https://github.com/WordPress/gutenberg/pull/36855)) +- Remove the Styles link in Site Editor. ([36637](https://github.com/WordPress/gutenberg/pull/36637)) +- Update and align template descriptions. ([36000](https://github.com/WordPress/gutenberg/pull/36000)) +- [REST] Restore the missing double slash in the ID received by /templates. ([36881](https://github.com/WordPress/gutenberg/pull/36881)) + +#### Accessibility +- Use table layout in templates list screen. ([36707](https://github.com/WordPress/gutenberg/pull/36707)) + + +### Documentation + +- Add brief information about blockGap to the theme.json how-to guide. ([36558](https://github.com/WordPress/gutenberg/pull/36558)) +- Add placeholder in URLInput documentation. ([36799](https://github.com/WordPress/gutenberg/pull/36799)) +- Block Supports: Update block supports documentation after typography reshaping. ([36894](https://github.com/WordPress/gutenberg/pull/36894)) +- Docs: Alphabetize the How to Guides section. ([35904](https://github.com/WordPress/gutenberg/pull/35904)) +- Docs: Fix broken link to @wordpress/stylelint-config. ([36936](https://github.com/WordPress/gutenberg/pull/36936)) +- Docs: Improvements on `Create a Block Tutorial` from `Block Editor handbook`. ([36553](https://github.com/WordPress/gutenberg/pull/36553)) +- Docs: Update history.md with description of the page. ([36888](https://github.com/WordPress/gutenberg/pull/36888)) +- Update Getting Started with info to stay informed. ([36498](https://github.com/WordPress/gutenberg/pull/36498)) +- Update Pattern block category and add documentation. ([36144](https://github.com/WordPress/gutenberg/pull/36144)) +- Various inline docblock corrections. ([36793](https://github.com/WordPress/gutenberg/pull/36793)) + +#### Components +- ToolsPanel: Update panel readme and stories. ([36557](https://github.com/WordPress/gutenberg/pull/36557)) + + +### Code Quality + +- Blocks: Refactor generator-based actions to thunks. ([36468](https://github.com/WordPress/gutenberg/pull/36468)) +- Remove useless bubblesVirtually prop from BlockInspector. ([37024](https://github.com/WordPress/gutenberg/pull/37024)) + +#### Global Styles +- Move Global Styles code to `lib/compat/wordpress-5.9` folder. ([36978](https://github.com/WordPress/gutenberg/pull/36978)) +- Rename `gutenberg_` to `wp_` for some functions that land in WordPress 5.9. ([36913](https://github.com/WordPress/gutenberg/pull/36913)) +- Update global styles public API. ([36610](https://github.com/WordPress/gutenberg/pull/36610)) +- Update the `WP_Theme_JSON_Gutenberg` class to be like the core one. ([36973](https://github.com/WordPress/gutenberg/pull/36973)) +- Update the `WP_Theme_JSON_Resolver_Gutenberg` class to be like the core one. ([36974](https://github.com/WordPress/gutenberg/pull/36974)) +- `theme.json`: Sort keys alphabetically. ([36968](https://github.com/WordPress/gutenberg/pull/36968)) + +#### Block Library +- Navigation: Remove outdated separate "Home" link styles. ([36608](https://github.com/WordPress/gutenberg/pull/36608)) +- Post Featured Image: Remove withNotices HOC. ([36596](https://github.com/WordPress/gutenberg/pull/36596)) +- [Comment Author Avatar]: Remove extraneous color link support flag. ([36956](https://github.com/WordPress/gutenberg/pull/36956)) + +#### Post Editor +- [Edit Post]: Remove EditPostSettings context provider. ([36949](https://github.com/WordPress/gutenberg/pull/36949)) + + +### Tools + +- Add ajlende to JSON Schema codeowners. ([36580](https://github.com/WordPress/gutenberg/pull/36580)) +- Report dependencies externalized with Dependency Extraction Plugin. ([35106](https://github.com/WordPress/gutenberg/pull/35106)) +- Update CODEOWNERS for @mkaz and documentation cleanup. ([36581](https://github.com/WordPress/gutenberg/pull/36581)) +- Update mkaz codeowner on schemas. ([36686](https://github.com/WordPress/gutenberg/pull/36686)) + +#### Testing +- Reorganize end-to-end tests folders and files. ([36734](https://github.com/WordPress/gutenberg/pull/36734)) +- Scripts: Upgrade Puppeteer to v11. ([36040](https://github.com/WordPress/gutenberg/pull/36040)) +- Update template controller unit test now that author support is in WP core. ([36987](https://github.com/WordPress/gutenberg/pull/36987)) +- end-to-end Tests: Fix failing image end-to-end test by waiting for required element. ([36982](https://github.com/WordPress/gutenberg/pull/36982)) + + +### Security + +#### Block Library +- [ Comment Author Avatar Block ] - Escape styles attribute. ([36988](https://github.com/WordPress/gutenberg/pull/36988)) + + +### Various + +- Add button text when no colors found. ([36684](https://github.com/WordPress/gutenberg/pull/36684)) +- Add origin and author to template rest api. ([36896](https://github.com/WordPress/gutenberg/pull/36896)) +- Change .nvmrc and documentation for Node.js version (LTS to 14.18.1). ([36744](https://github.com/WordPress/gutenberg/pull/36744)) +- Clarify i18n context for PostTemplateActions's "New" label. ([36679](https://github.com/WordPress/gutenberg/pull/36679)) +- Mobile - Preformatted block - Fix showing the default background color. ([36883](https://github.com/WordPress/gutenberg/pull/36883)) +- Mobile - RichText - Fixes an issue where the font size value won't update. ([36621](https://github.com/WordPress/gutenberg/pull/36621)) +- Revert erroneous native editor package version bumps. ([36633](https://github.com/WordPress/gutenberg/pull/36633)) +- Schemas: Allow custom blocks in theme.json styles. ([36411](https://github.com/WordPress/gutenberg/pull/36411)) +- Site Editor: Sync export API. ([36908](https://github.com/WordPress/gutenberg/pull/36908)) +- Update: Migrate global styles user database data on the rest endpoint. ([36747](https://github.com/WordPress/gutenberg/pull/36747)) + +#### Site Editor +- Add 'Clear customizations' button to template list page. ([36802](https://github.com/WordPress/gutenberg/pull/36802)) +- Make Reusable blocks available in the Site Editor. ([36511](https://github.com/WordPress/gutenberg/pull/36511)) +- Remove color, spacing, and layout options for Template Part block. ([36571](https://github.com/WordPress/gutenberg/pull/36571)) +- Set the <title> on the list page to be same as the CPT name. ([36805](https://github.com/WordPress/gutenberg/pull/36805)) +- Template list add rename action. ([36879](https://github.com/WordPress/gutenberg/pull/36879)) +- Update delete template button. ([36815](https://github.com/WordPress/gutenberg/pull/36815)) +- Update some small style regressions in the template list. ([36822](https://github.com/WordPress/gutenberg/pull/36822)) + +#### Block Library +- Block Library: Add the Comments Pagination block. ([36872](https://github.com/WordPress/gutenberg/pull/36872)) +- Gallery block: Turn on auto-migration of v1 Gallery blocks to v2 format when edited. ([36191](https://github.com/WordPress/gutenberg/pull/36191)) +- Remove reference to gutenberg_, swap with wp_. ([36652](https://github.com/WordPress/gutenberg/pull/36652)) +- Update featured image placeholder graphic. ([36712](https://github.com/WordPress/gutenberg/pull/36712)) +- [Template Part]:Remove support for conversion to Reusable block. ([36918](https://github.com/WordPress/gutenberg/pull/36918)) + +#### Components +- Add experimental `ConfirmDialog`. ([34153](https://github.com/WordPress/gutenberg/pull/34153)) +- Offset the parent iframe when computing Popover position. ([36876](https://github.com/WordPress/gutenberg/pull/36876)) +- ToolsPanel: Prevent tools panel menu increasing empty panel height. ([36895](https://github.com/WordPress/gutenberg/pull/36895)) +- Update destructive tertiary button styles, and template list. ([36915](https://github.com/WordPress/gutenberg/pull/36915)) + +#### Themes +- Move the theme editor under tools for FSE themes. ([36723](https://github.com/WordPress/gutenberg/pull/36723)) +- Update the block theme folders to templates and parts. ([36647](https://github.com/WordPress/gutenberg/pull/36647)) + +#### Block Editor +- Make appender fixed position to avoid jumps in the UI. ([36605](https://github.com/WordPress/gutenberg/pull/36605)) +- [Inserter]: Adjust order of theme blocks and reorder inserter items. ([36719](https://github.com/WordPress/gutenberg/pull/36719)) + +#### Block Validation/Deprecation +- Add plugin meta data to Nav Area block deprecation notice. ([36777](https://github.com/WordPress/gutenberg/pull/36777)) + +#### Design Tools +- Post Featured Image: Move width and height controls into the Dimensions panel via SlotFill. ([36540](https://github.com/WordPress/gutenberg/pull/36540)) + +#### Template Editor +- Update resize handle styling in template part focus mode. ([36410](https://github.com/WordPress/gutenberg/pull/36410)) + +#### Data Layer +- Data: Remove usage of deprecated register methods. ([36344](https://github.com/WordPress/gutenberg/pull/36344)) + +#### Accessibility +- Block Editor List View: Use anchor elements instead of buttons. ([35655](https://github.com/WordPress/gutenberg/pull/35655)) + + + + + += 12.0.1 = + +### Enhancements + +#### Global Styles +- Add caching to `WP_Theme_JSON_Resolver_Gutenberg::get_user_data_from_custom_post_type()`. ([36584](https://github.com/WordPress/gutenberg/pull/36584)) + + += 12.0.0 = + +### Features + +- Disable BottomSheet swipe gesture to navigate backwards. ([36271](https://github.com/WordPress/gutenberg/pull/36271)) + + +### Enhancements + +#### Block Library +- Move WP_REST_Block_Navigation_Areas_Controller from Gutenberg to Core. ([36374](https://github.com/WordPress/gutenberg/pull/36374)) +- Let Featured Image block inherit dimensions, look like a placeholder. ([36517](https://github.com/WordPress/gutenberg/pull/36517)) +- Change all the uses of "website" to "site". ([36220](https://github.com/WordPress/gutenberg/pull/36220)) +- Enable Previews for Navigation Link Blocks. ([36412](https://github.com/WordPress/gutenberg/pull/36412)) + +#### Site Editor +- Add welcome guide. ([36172](https://github.com/WordPress/gutenberg/pull/36172)) +- Update back button URL. ([36313](https://github.com/WordPress/gutenberg/pull/36313)) +- Improve compatiblity with menu endpoints WordPress 5.9. ([36372](https://github.com/WordPress/gutenberg/pull/36372)) +- React to any errors coming up in gutenberg_migrate_menu_to_navigation_post. ([36461](https://github.com/WordPress/gutenberg/pull/36461)) + +#### Block API +- Update schema to require either a type or an enum. ([36267](https://github.com/WordPress/gutenberg/pull/36267)) +- Add `_wp_array_set` and `_wp_to_kebab_case` to 5.8 compat. ([36399](https://github.com/WordPress/gutenberg/pull/36399)) + +#### Design Tools +- Paragraph: Merge text settings into typography panel. ([36334](https://github.com/WordPress/gutenberg/pull/36334)) + +#### Build Tooling +- Add TypeScript for builds and tests. ([36260](https://github.com/WordPress/gutenberg/pull/36260)) +- stylelint-config: Widen the acceptable version range for the 'stylelint' peerDependency. ([36518](https://github.com/WordPress/gutenberg/pull/36518)) +- Update Babel packages to 7.16 version. ([36244](https://github.com/WordPress/gutenberg/pull/36244)) + +#### Style Variations +- Block Styles: Show style preview when hovered or focused. ([34522](https://github.com/WordPress/gutenberg/pull/34522)) + +#### Schema +- Update schema URL to wp.org domain. ([36316](https://github.com/WordPress/gutenberg/pull/36316)) +- Allow block.json attribute type to be an array. ([36295](https://github.com/WordPress/gutenberg/pull/36295)) + +### Bug Fixes + +- Chore: Fix small typos on the rest endpoints. ([36272](https://github.com/WordPress/gutenberg/pull/36272)) +- DEWP: Fix deprecation warning. ([36285](https://github.com/WordPress/gutenberg/pull/36285)) +- Fix mobile horizontal scrollbar. ([36567](https://github.com/WordPress/gutenberg/pull/36567)) +- Fix schema to allow for custom blocks in theme.json. ([36341](https://github.com/WordPress/gutenberg/pull/36341)) +- Theme switch on the global styles rest api unit test. ([36277](https://github.com/WordPress/gutenberg/pull/36277)) +- Polish metabox container. ([36297](https://github.com/WordPress/gutenberg/pull/36297)) + +#### Block Library +- Fix background colours in nested submenus. ([36476](https://github.com/WordPress/gutenberg/pull/36476)) +- Fix colour rendering in Navigation overlay. ([36479](https://github.com/WordPress/gutenberg/pull/36479)) +- Fix duplicate custom classnames in navigation submenu block. ([36478](https://github.com/WordPress/gutenberg/pull/36478)) +- Fix submenu justification and spacer orientation. ([36340](https://github.com/WordPress/gutenberg/pull/36340)) +- Group - Fix overzealous regex when restoring inner containers. ([36221](https://github.com/WordPress/gutenberg/pull/36221)) +- Hide visilibility and status for navigation posts. ([36363](https://github.com/WordPress/gutenberg/pull/36363)) +- Nav block menu switcher - decode HTML entities and utilise accessible markup pattern. ([36397](https://github.com/WordPress/gutenberg/pull/36397)) +- Navigation: Fix click-button size, submenu directions, scrollbars. ([36215](https://github.com/WordPress/gutenberg/pull/36215)) +- Page List block: Fix space before `href` attribute. ([36505](https://github.com/WordPress/gutenberg/pull/36505)) +- Page List: Use core entities instead of direct apiFetch. ([36531](https://github.com/WordPress/gutenberg/pull/36531)) +- Post Comments Form: Ensure typography styles are applied to child elements. ([36425](https://github.com/WordPress/gutenberg/pull/36425)) +- Post title block default CSS: Add a break-word rule by default. ([35703](https://github.com/WordPress/gutenberg/pull/35703)) + +#### Block API +- Use firstChild and lastChild when parsing lists from MS Word. ([36019](https://github.com/WordPress/gutenberg/pull/36019)) + +#### Mobile +- [Android] Synchronize content retrieval over the bridge. ([36072](https://github.com/WordPress/gutenberg/pull/36072)) + +#### Full Site Editing +- Fix layout shift in `core/post-featured-image` block with `isLink` enabled. ([36552](https://github.com/WordPress/gutenberg/pull/36552)) +- Template Part Block: Add some guards. ([36324](https://github.com/WordPress/gutenberg/pull/36324)) +- Chore: Add rewrite false to global styles CPT. ([36273](https://github.com/WordPress/gutenberg/pull/36273)) +- Revert "theme.json: Adds a setting property that enables some other ones". ([36477](https://github.com/WordPress/gutenberg/pull/36477)) +- Update more references to __experimental menu endpoints to make them stable. ([36386](https://github.com/WordPress/gutenberg/pull/36386)) + +#### Site Editor +- Fix site editor reset styles in WP 5.9. ([36390](https://github.com/WordPress/gutenberg/pull/36390)) +- Site Editor - prevent loading state from showing the admin menu. ([36455](https://github.com/WordPress/gutenberg/pull/36455)) + +#### Themes +- Add the ability to opt-out of Core color palette V2. ([36492](https://github.com/WordPress/gutenberg/pull/36492)) + +#### Build Tooling +- Fix not transforming logical assignments for packages. ([36484](https://github.com/WordPress/gutenberg/pull/36484)) + +#### Global Styles +- Replace get_theme_file_path in theme_has_support. ([36398](https://github.com/WordPress/gutenberg/pull/36398)) + +#### Block Editor +- Strip meta tags from pasted links in Chromium. ([36356](https://github.com/WordPress/gutenberg/pull/36356)) +- Add `webp` extension in `filePasteHandler` and `getPasteEventData`. ([36361](https://github.com/WordPress/gutenberg/pull/36361)) + +#### CSS & Styling +- Update theme styles for the code block. ([36282](https://github.com/WordPress/gutenberg/pull/36282)) + + +### Experiments + +#### Global Styles +- Chore: Add comment to Remove filter to allow WP variables after min version is 5.8. ([36281](https://github.com/WordPress/gutenberg/pull/36281)) +- Chore: Update: Centralize safe_style_css usages. ([36280](https://github.com/WordPress/gutenberg/pull/36280)) +- Add block icon next to blocks list. ([36520](https://github.com/WordPress/gutenberg/pull/36520)) +- theme.json: Adds a setting property that enables some other ones. ([36246](https://github.com/WordPress/gutenberg/pull/36246)) + +#### Block Library +- Apply i18n functions to Nav block menu drops when selecting existing Menu. ([36301](https://github.com/WordPress/gutenberg/pull/36301)) +- Navigation: Refactor and simplify setup state. ([36375](https://github.com/WordPress/gutenberg/pull/36375)) +- Rename fse_navigation_area to wp_navigation_area. ([36460](https://github.com/WordPress/gutenberg/pull/36460)) +- Return wp error from wp_insert_post. ([36483](https://github.com/WordPress/gutenberg/pull/36483)) + +#### Full Site Editing +- Add template_type guards. ([36318](https://github.com/WordPress/gutenberg/pull/36318)) + + +### Documentation + +- "npm install" suggestion provides a better learning experience. ([36217](https://github.com/WordPress/gutenberg/pull/36217)) +- Added specific links to agenda and notes posts related to core editor meetings. ([36199](https://github.com/WordPress/gutenberg/pull/36199)) +- Schemastore - $schema is VS Code-specific. ([36179](https://github.com/WordPress/gutenberg/pull/36179)) +- Update GIF image in documentation with wp.org schema URL. ([36456](https://github.com/WordPress/gutenberg/pull/36456)) +- Update Versions in WordPress to include 5.9. ([36156](https://github.com/WordPress/gutenberg/pull/36156)) +- Update combobox-control component readme. ([36413](https://github.com/WordPress/gutenberg/pull/36413)) +- Update theme.json schema to refer to wp.org URL. ([36332](https://github.com/WordPress/gutenberg/pull/36332)) + +#### Components +- Update `@wordpress/components` changelog. ([36448](https://github.com/WordPress/gutenberg/pull/36448)) + + +### Code Quality + +- Change @package to WordPress in block-library. ([36494](https://github.com/WordPress/gutenberg/pull/36494)) +- postcss-themes: Fix PostCSS 8 deprecation warning. ([36284](https://github.com/WordPress/gutenberg/pull/36284)) + +#### Navigation Screen +- Prepare navigation php code for core patch. ([36336](https://github.com/WordPress/gutenberg/pull/36336)) + +#### Block Library +- Add block.json schema defintion to core blocks. ([35900](https://github.com/WordPress/gutenberg/pull/35900)) + + +### Tools + +#### Testing +- E2E: Add more Cover block tests. ([36321](https://github.com/WordPress/gutenberg/pull/36321)) +- Fix Performance CI tests and make them always use the latest major as base branch. ([36463](https://github.com/WordPress/gutenberg/pull/36463)) +- Fix failing tests and compatibility with 5.9. ([36368](https://github.com/WordPress/gutenberg/pull/36368)) +- Add integration tests with core blocks schema validation. ([36351](https://github.com/WordPress/gutenberg/pull/36351)) +- Skip flaky image block test. ([36446](https://github.com/WordPress/gutenberg/pull/36446)) + +#### Icons +- Add the missing comment edit link icon. ([36565](https://github.com/WordPress/gutenberg/pull/36565)) +- Remove hard coded color from query pagination icons. ([35837](https://github.com/WordPress/gutenberg/pull/35837)) +- Remove hard-coded values on icons. ([36564](https://github.com/WordPress/gutenberg/pull/36564)) + +#### Components +- ToolsPanel: Allow additional props on ToolsPanel. ([36428](https://github.com/WordPress/gutenberg/pull/36428)) +- Typography Panel: Make letter spacing jsDoc and prop use consistent. ([36367](https://github.com/WordPress/gutenberg/pull/36367)) + +#### Block Library +- Remove textdomain from calendar block. ([36500](https://github.com/WordPress/gutenberg/pull/36500)) + +#### Site Editor +- Update site editor title truncation. ([36436](https://github.com/WordPress/gutenberg/pull/36436)) + +#### Design Tools +- Letter spacing: Update label copy. ([36385](https://github.com/WordPress/gutenberg/pull/36385)) + +#### Block API +- Add pattern to `name` key in block.json Schema. ([36343](https://github.com/WordPress/gutenberg/pull/36343)) + +#### Data Layer +- Data: Clean up registerGenericStore param names. ([36300](https://github.com/WordPress/gutenberg/pull/36300)) + +#### Template Editor +- Change edit links for templates and template parts. ([36294](https://github.com/WordPress/gutenberg/pull/36294)) + + += 11.9.1 = + +### Bug Fixes + +#### Block Library +- Gallery: Fix issue with columns and link destination not copying across when gallery updated to v2 format. ([36388](https://github.com/WordPress/gutenberg/pull/36388)) + +#### Full Site Editing +- Site editor: Add feature flag to toggle the new site editor sidebar. ([36516](https://github.com/WordPress/gutenberg/pull/36516)) +- Site editor: Prevent loading state from showing the admin menu. ([36455](https://github.com/WordPress/gutenberg/pull/36455)) + +#### Testing +- Cover Block: Fix regressions in opacity. ([36406](https://github.com/WordPress/gutenberg/pull/36406)) +- E2E: Add more Cover block tests ([36321](https://github.com/WordPress/gutenberg/pull/36321)) + + + + + += 11.9.0 = + +### Features + +#### Block Library +- New Block: Comment Reply Link. ([35774](https://github.com/WordPress/gutenberg/pull/35774)) +- New Block: Comment Link. ([35965](https://github.com/WordPress/gutenberg/pull/35965)) +- New Block: Comment Avatar. ([35396](https://github.com/WordPress/gutenberg/pull/35396)) +- New Block: Comments Query Loop. ([35231](https://github.com/WordPress/gutenberg/pull/35231)) + +### Enhancements + +#### Block Library +- Buttons: Add flex layout and new layout type. ([35819](https://github.com/WordPress/gutenberg/pull/35819)) +- Code: Add support for padding, color, and border styles. ([27582](https://github.com/WordPress/gutenberg/pull/27582)) +- Columns: Add padding support. ([35701](https://github.com/WordPress/gutenberg/pull/35701)) +- Comment Author Name: Add spacing to have same options as Post Author Name. ([36213](https://github.com/WordPress/gutenberg/pull/36213)) +- Comment Edit Link: Add alignment option. ([36033](https://github.com/WordPress/gutenberg/pull/36033)) +- Embed: Add Wolfram Cloud as an embed provider. ([35656](https://github.com/WordPress/gutenberg/pull/35656)) +- Gallery: Replace gallery experimental setting with a check for use_balanceTags. ([34979](https://github.com/WordPress/gutenberg/pull/34979)) +- Image: Add data-id attribute on server side render for core galleries. ([35975](https://github.com/WordPress/gutenberg/pull/35975)) +- Navigation: Add create new menu button. ([36245](https://github.com/WordPress/gutenberg/pull/36245)) +- Navigation: Add delete nav menu button. ([35981](https://github.com/WordPress/gutenberg/pull/35981)) +- Navigation: Add featured transforms in Link Control for Navigation Link items. ([35857](https://github.com/WordPress/gutenberg/pull/35857)) +- Navigation: Add flex layout. ([36169](https://github.com/WordPress/gutenberg/pull/36169)) +- Navigation: Add missing menu item attributes. ([35634](https://github.com/WordPress/gutenberg/pull/35634)) +- Navigation: Create nav menu on pattern insertion or when the block has uncontrolled inner blocks. ([36024](https://github.com/WordPress/gutenberg/pull/36024)) +- Navigation: Migrate classic menus to block-based menus on theme switch. ([36255](https://github.com/WordPress/gutenberg/pull/36255)) +- Navigation: Mobile responsive navigation by default. ([35917](https://github.com/WordPress/gutenberg/pull/35917)) +- Navigation: Provide a way to manage wp_navigation posts from wp-admin. ([36126](https://github.com/WordPress/gutenberg/pull/36126)) +- Navigation: Reword navigation color labels. ([35916](https://github.com/WordPress/gutenberg/pull/35916)) +- Navigation: Save data to a wp_navigation post type. ([35746](https://github.com/WordPress/gutenberg/pull/35746)) +- Navigation: Show the placeholder again when moving from a valid menu to non-existing menu. ([36210](https://github.com/WordPress/gutenberg/pull/36210)) +- Navigation: Update block entity automatic name generation and refine naming UI. ([36238](https://github.com/WordPress/gutenberg/pull/36238)) +- Navigation: Use a single placeholder for the block. ([36023](https://github.com/WordPress/gutenberg/pull/36023)) +- Page List: Create a JS version for the editor. ([31670](https://github.com/WordPress/gutenberg/pull/31670)) +- Post Author: Add spacing controls. ([35963](https://github.com/WordPress/gutenberg/pull/35963)) +- Post Comment: Deprecate the block now that the Comment Query Loop block has been added. ([36032](https://github.com/WordPress/gutenberg/pull/36032)) +- Post Comment Author: Add alignment options. ([36045](https://github.com/WordPress/gutenberg/pull/36045)) +- Post Comments: Even out the top margin inside the block. ([35887](https://github.com/WordPress/gutenberg/pull/35887)) +- Post Comments: Hide the "Comments Closed" message. ([35743](https://github.com/WordPress/gutenberg/pull/35743)) +- Post Comment Form: Adds in basic styling for post comment form. ([35704](https://github.com/WordPress/gutenberg/pull/35704)) +- Post Excerpt: Add spacing controls. ([35959](https://github.com/WordPress/gutenberg/pull/35959)) +- Post Excerpt: Don't print the wrapper when there is no excerpt. ([35749](https://github.com/WordPress/gutenberg/pull/35749)) +- Post Title: Return no markup if title is empty. ([35861](https://github.com/WordPress/gutenberg/pull/35861)) +- Search: Add contextual defaults when inserted in Navigation block. ([36125](https://github.com/WordPress/gutenberg/pull/36125)) +- Gallery block: Add a dismissible warning about the need for versions >=18.2 of the mobile app. ([36012](https://github.com/WordPress/gutenberg/pull/36012)) + +#### Accessibility +- Add announcement on formatting change for screen readers. ([35896](https://github.com/WordPress/gutenberg/pull/35896)) +- Add aria-current to navigation link, submenu, page list. ([35880](https://github.com/WordPress/gutenberg/pull/35880)) +- Link editing: Improve focus styles for Link UI preview title. ([35853](https://github.com/WordPress/gutenberg/pull/35853)) +- Site Editor: Enable the "Save" keyboard shortcut. ([36138](https://github.com/WordPress/gutenberg/pull/36138)) +- Try to communicate to screen readers that post title is textarea. ([35898](https://github.com/WordPress/gutenberg/pull/35898)) + +#### Block Editor +- Block toolbar: Remove visual clue from text alignment icon. ([35922](https://github.com/WordPress/gutenberg/pull/35922)) +- Drag and drop: Show drag slot instead of hiding the block being dragged. ([33950](https://github.com/WordPress/gutenberg/pull/33950)) +- Enable rich previews in the Link UI for the Site Editor. ([35951](https://github.com/WordPress/gutenberg/pull/35951)) +- Link editing: Update Link UI design for preview action buttons to use icons for edit and unlink. ([35833](https://github.com/WordPress/gutenberg/pull/35833)) +- Multi-Entity Saving UI Improvements. ([35933](https://github.com/WordPress/gutenberg/pull/35933)) +- Use the block's name in the "remove block" menu item in the block settings dropdown. ([35872](https://github.com/WordPress/gutenberg/pull/35872)) +- StripHTML: preserve leading and trailing spaces and strip script and on* attributes. ([35539](https://github.com/WordPress/gutenberg/pull/35539)) + +#### Full Site Editing +- Improve the initial loading of the site editor. ([36044](https://github.com/WordPress/gutenberg/pull/36044)) +- Move the Site Editor menu item to sit under Appearance and rename to Editor. ([36064](https://github.com/WordPress/gutenberg/pull/36064)) +- Remove navigation panel in site editor. ([36194](https://github.com/WordPress/gutenberg/pull/36194)) +- Use Heading component on NavigationMenu and NavigationGroup components. ([36009](https://github.com/WordPress/gutenberg/pull/36009)) +- Use SearchControl component inside nav menu. ([36011](https://github.com/WordPress/gutenberg/pull/36011)) + +#### Components +- ColorPicker: Implement new color palette editor component. ([35783](https://github.com/WordPress/gutenberg/pull/35783)) +- Duotone: Add description to clarify that the underlying image will not be affected. ([36018](https://github.com/WordPress/gutenberg/pull/36018)) +- Modal: Wrap the modal contents in a StyleProvider. ([36261](https://github.com/WordPress/gutenberg/pull/36261)) +- ToolsPanel: Update typography panel layout. ([35911](https://github.com/WordPress/gutenberg/pull/35911)) +- LinkControl: Split control for URL and Text within Link UI. ([33849](https://github.com/WordPress/gutenberg/pull/33849)) +#### Template Editor +- Add resizer to template part focus mode. ([35728](https://github.com/WordPress/gutenberg/pull/35728)) +- Auto resize the height of template part focus mode. ([35974](https://github.com/WordPress/gutenberg/pull/35974)) + +#### Global Styles +- Remove the duplicated title in background, text and link views. ([35583](https://github.com/WordPress/gutenberg/pull/35583)) +- Typography: Switch to ToolsPanel for block support UI. ([33744](https://github.com/WordPress/gutenberg/pull/33744)) +- Add a Global Styles endpoint and use it in the site editor. ([35801](https://github.com/WordPress/gutenberg/pull/35801)) +- Migrate theme.json v1 to v2. ([36155](https://github.com/WordPress/gutenberg/pull/36155)) +- Update: Show all color and gradient origins (core, theme, and user). ([35970](https://github.com/WordPress/gutenberg/pull/35970)) + +#### Design Tools +- Duotone: Enable transparency. ([34130](https://github.com/WordPress/gutenberg/pull/34130)) +- Layout: Add `flex-wrap` control to `flex` layout. ([36003](https://github.com/WordPress/gutenberg/pull/36003)) +- Typography block support: Add typography support and defaults. ([34064](https://github.com/WordPress/gutenberg/pull/34064)) + +#### Media +- Remove "security" verbiage from warning when filetype does not pass on upload. ([36226](https://github.com/WordPress/gutenberg/pull/36226)) + +#### Patterns +- Add an `inserter` flag to hide patterns from UI. ([36108](https://github.com/WordPress/gutenberg/pull/36108)) + +#### Themes +- Remove experimental feature notice for block themes. ([36083](https://github.com/WordPress/gutenberg/pull/36083)) + +#### General Interface +- Apply borders to canvas rather than other UI elements. ([31081](https://github.com/WordPress/gutenberg/pull/31081)) + +#### REST API +- Respect fields param for global styles REST API requests. ([36206](https://github.com/WordPress/gutenberg/pull/36206)) +- URL Details: Update regex to include `og:Description`. ([35875](https://github.com/WordPress/gutenberg/pull/35875)) + + +### New APIs + +#### Global Styles +- Add API to access global settings, styles, and stylesheet. ([34843](https://github.com/WordPress/gutenberg/pull/34843)) + +#### Block Library +- Inner blocks: Add `useInnerBlocksProps.save` function for edit/save symmetry, and stabilise API. ([26031](https://github.com/WordPress/gutenberg/pull/26031)) + + +### Bug Fixes + +#### Block Library +- Buttons: Address deprecation issues from Buttons flex layout PR. ([36192](https://github.com/WordPress/gutenberg/pull/36192)) +- Classic: Fix select all blocks side effect that overwrote paragraph block contents. ([35999](https://github.com/WordPress/gutenberg/pull/35999)) +- Column: Only add flex-basis if width contains a number. ([35831](https://github.com/WordPress/gutenberg/pull/35831)) +- Comment Template: Move inner blocks container to separate components. ([36174](https://github.com/WordPress/gutenberg/pull/36174)) +- Blocks: Fix relative URLs for inlined styles. ([35538](https://github.com/WordPress/gutenberg/pull/35538)) +- Navigation: Disable ability to edit wp_navigation menus via `Appearance -> Navigation Menus` for non-FSE themes. ([36257](https://github.com/WordPress/gutenberg/pull/36257)) +- Fix incorrect attributes definitions. ([36264](https://github.com/WordPress/gutenberg/pull/36264)) +- Fix saving template parts in the site editor by fixing controlled inner blocks parent block attributes updates. ([35827](https://github.com/WordPress/gutenberg/pull/35827)) +- Fix incorrect attributes definitions for Column, Cover, and Group blocks. ([36140](https://github.com/WordPress/gutenberg/pull/36140)) +- Gallery: Make sure the mobile warning notice only runs when images are added to a new block. ([36326](https://github.com/WordPress/gutenberg/pull/36326)) +- Gallery: Only show the gallery upload error message if mixed multiple files are uploaded. ([35790](https://github.com/WordPress/gutenberg/pull/35790)) +- Gallery: Remove the arbitrary alt text that is added to gallery images. ([35936](https://github.com/WordPress/gutenberg/pull/35936)) +- Group: Fix inner container regexes that relied on fixed div tag. ([36256](https://github.com/WordPress/gutenberg/pull/36256)) +- Heading: Avoid error on split when the paragraph isn't registered. ([35871](https://github.com/WordPress/gutenberg/pull/35871)) +- Image: Make sure the Image block border radius is inherited if the image is linked. ([36289](https://github.com/WordPress/gutenberg/pull/36289)) +- Navigation Submenu: Fix PHP notice caused by stale id reference. ([35984](https://github.com/WordPress/gutenberg/pull/35984)) +- Navigation overlay menu: Fix submenu spacing. ([35823](https://github.com/WordPress/gutenberg/pull/35823)) +- Navigation: Ensure menus exist before map operation. ([36355](https://github.com/WordPress/gutenberg/pull/36355)) +- Navigation: Fix accessibility issues. ([36292](https://github.com/WordPress/gutenberg/pull/36292)) +- Navigation: Fix dropdown indicator position. ([36106](https://github.com/WordPress/gutenberg/pull/36106)) +- Navigation: Fix issues with responsive justifications. ([35913](https://github.com/WordPress/gutenberg/pull/35913)) and ([36105](https://github.com/WordPress/gutenberg/pull/36105)) +- Navigation: Fix padding for social links on mobile. ([35824](https://github.com/WordPress/gutenberg/pull/35824)) +- Navigation: Fix submenus not opening on click. ([36290](https://github.com/WordPress/gutenberg/pull/36290)) +- Navigation: Hide post attributes meta box. ([36358](https://github.com/WordPress/gutenberg/pull/36358)) +- Navigation: Small styling fixes and tweaks. ([36298](https://github.com/WordPress/gutenberg/pull/36298)) +- Pattern: Remove wrapping div. ([36090](https://github.com/WordPress/gutenberg/pull/36090)) +- Post Comment: Handle the case where a comment does not exist. ([35810](https://github.com/WordPress/gutenberg/pull/35810)) +- Post Navigation Link: Do not translate HTML tag. ([35930](https://github.com/WordPress/gutenberg/pull/35930)) +- Post Template Block: Move inner blocks container to separate component. ([35945](https://github.com/WordPress/gutenberg/pull/35945)) +- Post Terms: Prevent the block from breaking on pages. ([35957](https://github.com/WordPress/gutenberg/pull/35957)) +- Site Logo: Fix center alignment. ([35971](https://github.com/WordPress/gutenberg/pull/35971)) +- Site Logo: Fix fatal error in Site Logo block in WP 5.9. ([36195](https://github.com/WordPress/gutenberg/pull/36195)) +- Prevent PHP notice in Elements block support for blocks with empty content. ([35836](https://github.com/WordPress/gutenberg/pull/35836)) + +#### Components +- AnglePickerControl: Use admin color scheme. ([35908](https://github.com/WordPress/gutenberg/pull/35908)) +- BaseControl: Fix undefined Help text id if no id is passed to component. ([35899](https://github.com/WordPress/gutenberg/pull/35899)) +- ColorListPicker: Fix spacing to accomodate the new color picker. ([36017](https://github.com/WordPress/gutenberg/pull/36017)) +- ColorPalette: Fix className. ([36016](https://github.com/WordPress/gutenberg/pull/36016)) +- ColorPicker: Fix unexpected movements, and closing on first click in the color picker. ([35670](https://github.com/WordPress/gutenberg/pull/35670)) +- Popover: Check anchorDocument default view before removing events. ([35832](https://github.com/WordPress/gutenberg/pull/35832)) +- RangeControl: Fix style issue in RTL. ([35777](https://github.com/WordPress/gutenberg/pull/35777)) +- Storybook: Lazy load LTR/RTL styles for consistent specificity. ([35771](https://github.com/WordPress/gutenberg/pull/35771)) +- Text: Fix text color value to use correct gray color value for Link UI preview description text. ([35851](https://github.com/WordPress/gutenberg/pull/35851)) + +#### Global Styles +- Fix navigation in global styles sidebar. ([36203](https://github.com/WordPress/gutenberg/pull/36203)) +- Fix presets data for themes that do not provide any preset. ([36054](https://github.com/WordPress/gutenberg/pull/36054)) +- Generate preset metadata for font-family in the site editor. ([36022](https://github.com/WordPress/gutenberg/pull/36022)) +- Hotfix for leftovers of `WP_Theme_JSON_Resolver::Get_merged_data`. ([36173](https://github.com/WordPress/gutenberg/pull/36173)) +- Lower the specificity of border & padding styles for the outline block style in the button block. ([35968](https://github.com/WordPress/gutenberg/pull/35968)) +- Theme.json: Remove custom prefixes from properties that did not land in 5.8. ([34485](https://github.com/WordPress/gutenberg/pull/34485)) +- Fix Rest global styles controller accessing configuration that may not exist. ([36047](https://github.com/WordPress/gutenberg/pull/36047)) + +#### Block Editor +- Allow moving metaboxes to previously empty area. ([25187](https://github.com/WordPress/gutenberg/pull/25187)) +- Change `console.error` to `console.warn` for enqueued styles in the editor. ([35914](https://github.com/WordPress/gutenberg/pull/35914)) +- Fix inserter with block pattern categories. ([36116](https://github.com/WordPress/gutenberg/pull/36116)) +- Fix navigation block link control zero value in it. ([36198](https://github.com/WordPress/gutenberg/pull/36198)) +- Fix the update of link and suggestions in LinkControl. ([32320](https://github.com/WordPress/gutenberg/pull/32320)) +- Make Link UI inactive if selection extends beyond format bounds or encounters new link. ([35946](https://github.com/WordPress/gutenberg/pull/35946)) +- Fix selection by holding shift key for nested blocks. ([35668](https://github.com/WordPress/gutenberg/pull/35668)) +- Fix shift+click on a child block with its parent selected. ([35988](https://github.com/WordPress/gutenberg/pull/35988)) +- Fix: Crash when resetting user color palette. ([36233](https://github.com/WordPress/gutenberg/pull/36233)) +- Fix: Show user colors on palette indicator. ([36232](https://github.com/WordPress/gutenberg/pull/36232)) +- Fix `getPxFromCssUnit` test stability and test that memoized function works correctly. ([35939](https://github.com/WordPress/gutenberg/pull/35939)) +- Link editing: Account for link anchor no longer being present when generating unique link instance key. ([36357](https://github.com/WordPress/gutenberg/pull/36357)) +- Preserve highlighted text selection when changing colors ([36263](https://github.com/WordPress/gutenberg/pull/36263)) + +#### Design Tools +- Font Appearance: Improve consistency of label in Typography panel. ([35860](https://github.com/WordPress/gutenberg/pull/35860)) +- Font Family Support: Fix skip serialization check. ([36073](https://github.com/WordPress/gutenberg/pull/36073)) +- Navigation: Force text decoration styles on nav item in editor. ([35859](https://github.com/WordPress/gutenberg/pull/35859)) + +#### Template Editor +- Clear selected block when clicking outside in the template part focus mode. ([35816](https://github.com/WordPress/gutenberg/pull/35816)) +- Templates: Only include templates for the current post types. ([35802](https://github.com/WordPress/gutenberg/pull/35802)) + +#### Core Data +- Avoid showing deleted records in editor saving flow. ([36027](https://github.com/WordPress/gutenberg/pull/36027)) +- Fix getEntityRecords to ensure resolution on REST API failure. ([36353](https://github.com/WordPress/gutenberg/pull/36353)) +- Fix Core Data using hardcoded baseURL prefix for taxonomies and post types API requests. ([35850](https://github.com/WordPress/gutenberg/pull/35850)) +- Make `saveEditedEntityRecord` use the entity key when available. ([36212](https://github.com/WordPress/gutenberg/pull/36212)) + +#### Patterns +- Update unsaved navigation block flow. ([35976](https://github.com/WordPress/gutenberg/pull/35976)) + +#### Full Site Editing +- Add fallback handling for plugins or themes using the Customizer. ([35877](https://github.com/WordPress/gutenberg/pull/35877)) +- Fix missing `<MainDashboardButton>` slot fill in site editor. ([36369](https://github.com/WordPress/gutenberg/pull/36369)) +- Remove duplicate Editor menu item. ([36342](https://github.com/WordPress/gutenberg/pull/36342)) +- Theme resolver: Fix crash from calls to `undefined` functions. ([36248](https://github.com/WordPress/gutenberg/pull/36248)) +- Unhook `_block_template_render_title_tag` to prevent duplicate title tags from rendering. ([36133](https://github.com/WordPress/gutenberg/pull/36133)) + +#### Widgets Editor +- Fix layout styles not applying in widgets customizer. ([35865](https://github.com/WordPress/gutenberg/pull/35865)) + +#### CSS & Styling +- Editor defaults for themes with no editor styles and when user disables theme styles. ([35736](https://github.com/WordPress/gutenberg/pull/35736)) + +#### History +- Support disabling autosave for native Unsupported Block Editor. ([35639](https://github.com/WordPress/gutenberg/pull/35639)) + + +### Performance + +#### List View +- Fix pagedown/pageup and improve scrolling. ([36063](https://github.com/WordPress/gutenberg/pull/36063)) +- List View: Render a fixed number of items. ([35230](https://github.com/WordPress/gutenberg/pull/35230)) + +#### Block Editor +- Improve opening of the block inserter via manual token-based analysis of reusable blocks. ([35763](https://github.com/WordPress/gutenberg/pull/35763)) + +#### Widgets Editor +- List View: Avoid re-rendering all items on block focus. Enable persistent List View in the widget editor. ([35706](https://github.com/WordPress/gutenberg/pull/35706)) + +### Experiments + +#### Block Library +- Navigation Area block. ([36178](https://github.com/WordPress/gutenberg/pull/36178)) + + +#### Full Site Editing +- Always display Customizer menu item. ([36168](https://github.com/WordPress/gutenberg/pull/36168)) +- Revert "Always display Customizer menu item". ([36189](https://github.com/WordPress/gutenberg/pull/36189)) +- Remove slug and status columns from templates list in Appearance > Templates. ([35996](https://github.com/WordPress/gutenberg/pull/35996)) + +#### REST API + +#### Navigation Editor +- Show a warning when trying to save unsupported blocks. ([35993](https://github.com/WordPress/gutenberg/pull/35993)) + +### Documentation +- Added link to Ways to keep up with Gutenberg & Full Site Editing. ([36077](https://github.com/WordPress/gutenberg/pull/36077)) +#### Handbook +- Add Thunks Tutorial. ([36051](https://github.com/WordPress/gutenberg/pull/36051)) +- Add a more detailed guide for react native development. ([35529](https://github.com/WordPress/gutenberg/pull/35529)) +- Blocks: Add view script to block schema and documentation. ([36175](https://github.com/WordPress/gutenberg/pull/36175)) +- Blocks: Document changes to style and editorStyle in `block.json`. ([36218](https://github.com/WordPress/gutenberg/pull/36218)) +- Add Getting Started level for documentation. ([35891](https://github.com/WordPress/gutenberg/pull/35891)) +- Add section about using the schema during development. ([35835](https://github.com/WordPress/gutenberg/pull/35835)) +- Fix a small typo in the "Getting started" documentation. ([36109](https://github.com/WordPress/gutenberg/pull/36109)) +- Fix Typos in widgets/overview.md. ([36078](https://github.com/WordPress/gutenberg/pull/36078)) +- Fix wording in the Authoring Experience documentation. ([35969](https://github.com/WordPress/gutenberg/pull/35969)) +- Improve Getting Started landing page. ([35893](https://github.com/WordPress/gutenberg/pull/35893)) +- Release Docs: Remove consecutive RCs warning. ([35855](https://github.com/WordPress/gutenberg/pull/35855)) +- Theme.json: Fix typo. ([36139](https://github.com/WordPress/gutenberg/pull/36139)) +- Theme.json docs: Add missing settings & styles. ([36137](https://github.com/WordPress/gutenberg/pull/36137)) +- Tweak organization for getting-started documentation. ([34091](https://github.com/WordPress/gutenberg/pull/34091)) +- Update the recommendation for the cadence of npm releases. ([35925](https://github.com/WordPress/gutenberg/pull/35925)) + +#### Packages +- Components: Update Components CONTRIBUTING.md indentation. ([35866](https://github.com/WordPress/gutenberg/pull/35866)) +- Create Block: Move create-block changelog entries back to Unreleased section. ([35886](https://github.com/WordPress/gutenberg/pull/35886)) +- DOM: Backtick added around `<textarea>` input tag in readme file. ([34813](https://github.com/WordPress/gutenberg/pull/34813)) +- Env: Update wordpress-develop example to clarify src/build location. ([35978](https://github.com/WordPress/gutenberg/pull/35978)) +- Rich Text: Add usage documentation for Rich Text package. ([35885](https://github.com/WordPress/gutenberg/pull/35885)) +- Schemas: Fix schema file URL. ([36157](https://github.com/WordPress/gutenberg/pull/36157)) + +### Code Quality + +#### REST API +- Add Theme's base global styles endpoint. ([35985](https://github.com/WordPress/gutenberg/pull/35985)) +- Improvements for the global styles endpoint. ([36071](https://github.com/WordPress/gutenberg/pull/36071)) +- Remove "experimental" from URL details REST controller and promote to `v1` namespace. ([35915](https://github.com/WordPress/gutenberg/pull/35915)) + + +#### Block Library +- Heading: Auto-generated anchors hide implementation details. ([35747](https://github.com/WordPress/gutenberg/pull/35747)) +- Mark FSE blocks as non experimental. ([35979](https://github.com/WordPress/gutenberg/pull/35979)) +- Mark Post Comments as stable and Comments Query Loop as experimental. ([36132](https://github.com/WordPress/gutenberg/pull/36132)) +- Mark Post Navigation Link and Term Description blocks as stable. ([36163](https://github.com/WordPress/gutenberg/pull/36163)) +- Remove `post-` prefix from Comment Template inner blocks. ([36171](https://github.com/WordPress/gutenberg/pull/36171)) + +#### Global Styles +- Linting: Fix WPCS lint errors in global styles. ([36058](https://github.com/WordPress/gutenberg/pull/36058)) +- Refactor theme.json migrations to be a single class. ([36182](https://github.com/WordPress/gutenberg/pull/36182)) +- Remove locations we do not translate from `theme-i18n.json`. ([35881](https://github.com/WordPress/gutenberg/pull/35881)) +- Update `theme.json` schema migrations. ([36154](https://github.com/WordPress/gutenberg/pull/36154)) + +#### Post Editor +- Migrate to thunks. ([35720](https://github.com/WordPress/gutenberg/pull/35720)) +- Refactor FlatTermSelector into a functional component. ([33459](https://github.com/WordPress/gutenberg/pull/33459)) +- Remove GB prefixed functions from template part. ([36180](https://github.com/WordPress/gutenberg/pull/36180)) +- Translated site properties. ([36097](https://github.com/WordPress/gutenberg/pull/36097)) + +#### Components +- ToolsPanel: Use Grid component to handle layout. ([35621](https://github.com/WordPress/gutenberg/pull/35621)) +- Update spacing in CircularOptionPicker. ([36014](https://github.com/WordPress/gutenberg/pull/36014)) +- Use small button on tools panel toggle. ([35935](https://github.com/WordPress/gutenberg/pull/35935)) + +#### Other Packages +- Create Block: Add block.json schema to generated file. ([35843](https://github.com/WordPress/gutenberg/pull/35843)) +- Data: Rename types file from .d.ts to .ts. ([36062](https://github.com/WordPress/gutenberg/pull/36062)) +- Url: Move getStablePath function into the wordrpess/url package. ([35992](https://github.com/WordPress/gutenberg/pull/35992)) +- Schemas: Add schemas package. ([35998](https://github.com/WordPress/gutenberg/pull/35998)) +- Schemas: Theme.json - Add `title` to templateParts. ([36145](https://github.com/WordPress/gutenberg/pull/36145)) + +#### CSS & Styling +- Remove invalid buttons block CSS property. ([33793](https://github.com/WordPress/gutenberg/pull/33793)) + + +### Tools + +#### Plugin and backporting to WordPress core +- Updates `WP_Theme_JSON_Resolver` and tests to be equal to core. ([36223](https://github.com/WordPress/gutenberg/pull/36223)) +- Changes for FSE backport in core. ([36201](https://github.com/WordPress/gutenberg/pull/36201)) +- Temporarily pin .wp-env.json to WP 5.8.1. ([36333](https://github.com/WordPress/gutenberg/pull/36333)) + +#### Testing +- Add a method to disable auto-accepting dialogs. ([35828](https://github.com/WordPress/gutenberg/pull/35828)) +- Skip broken widgets test. ([36239](https://github.com/WordPress/gutenberg/pull/36239)) +- Skip flaky test for loading block stylesheets in iframe. ([35961](https://github.com/WordPress/gutenberg/pull/35961)) +- Tests: Run block fixtures through KSES. ([35611](https://github.com/WordPress/gutenberg/pull/35611)) +- theme.json: Make sure tests are pure. ([36253](https://github.com/WordPress/gutenberg/pull/36253)) +- theme.json: Update test data. ([35883](https://github.com/WordPress/gutenberg/pull/35883)) +- Scripts: Increase timeout for end-to-end tests to 30 seconds. ([35983](https://github.com/WordPress/gutenberg/pull/35983)) +- Improve unit test coverage for REST API menus endpoints. ([36177](https://github.com/WordPress/gutenberg/pull/36177)) +- Update child theme.json merge test to match core. ([36329](https://github.com/WordPress/gutenberg/pull/36329)) + +#### Debugging +- Wp-env: Disable Xdebug by default unless specified by user. ([34324](https://github.com/WordPress/gutenberg/pull/34324)) + + += 11.8.3 = + + +### Various + +- Fix Gutenberg WordPress trunk https://github.com/WordPress/gutenberg/pull/36347. + + += 11.9.0-rc.3 = + +### Features + +#### Block Library +- New Block: Comment Reply Link. ([35774](https://github.com/WordPress/gutenberg/pull/35774)) +- New Block: Comment Link. ([35965](https://github.com/WordPress/gutenberg/pull/35965)) +- New Block: Comment Avatar. ([35396](https://github.com/WordPress/gutenberg/pull/35396)) +- New Block: Comments Query Loop. ([35231](https://github.com/WordPress/gutenberg/pull/35231)) + + +### Enhancements + +- Block toolbar: Remove visual clue from text alignment icon. ([35922](https://github.com/WordPress/gutenberg/pull/35922)) +- Improve the initial loading of the site editor. ([36044](https://github.com/WordPress/gutenberg/pull/36044)) +- StripHTML: preserve leading and trailing spaces and strip script and on* attributes. ([35539](https://github.com/WordPress/gutenberg/pull/35539)) + +#### Block Library + +- Buttons: Add flex layout and new layout type. ([35819](https://github.com/WordPress/gutenberg/pull/35819)) +- Code: Add support for padding, color, and border styles. ([27582](https://github.com/WordPress/gutenberg/pull/27582)) +- Columns: Add padding support. ([35701](https://github.com/WordPress/gutenberg/pull/35701)) +- Comment Author Name: Add spacing to have same options as Post Author Name. ([36213](https://github.com/WordPress/gutenberg/pull/36213)) +- Comment Edit Link: Add alignment option. ([36033](https://github.com/WordPress/gutenberg/pull/36033)) +- Embed: Add Wolfram Cloud as an embed provider. ([35656](https://github.com/WordPress/gutenberg/pull/35656)) +- Gallery: Replace gallery experimental setting with a check for use_balanceTags. ([34979](https://github.com/WordPress/gutenberg/pull/34979)) +- Image: Add data-id attribute on server side render for core galleries. ([35975](https://github.com/WordPress/gutenberg/pull/35975)) +- Navigation: Add create new menu button. ([36245](https://github.com/WordPress/gutenberg/pull/36245)) +- Navigation: Add delete nav menu button. ([35981](https://github.com/WordPress/gutenberg/pull/35981)) +- Navigation: Add featured transforms in Link Control for Navigation Link items. ([35857](https://github.com/WordPress/gutenberg/pull/35857)) +- Navigation: Add flex layout. ([36169](https://github.com/WordPress/gutenberg/pull/36169)) +- Navigation: Add missing menu item attributes. ([35634](https://github.com/WordPress/gutenberg/pull/35634)) +- Navigation: Create nav menu on pattern insertion or when the block has uncontrolled inner blocks. ([36024](https://github.com/WordPress/gutenberg/pull/36024)) +- Navigation: Save data to a wp_navigation post type. ([35746](https://github.com/WordPress/gutenberg/pull/35746)) +- Navigation: Update block entity automatic name generation and refine naming UI. ([36238](https://github.com/WordPress/gutenberg/pull/36238)) +- Navigation: Use a single placeholder for the block. ([36023](https://github.com/WordPress/gutenberg/pull/36023)) +- Page List: Create a JS version for the editor. ([31670](https://github.com/WordPress/gutenberg/pull/31670)) +- Post Author: Add spacing controls. ([35963](https://github.com/WordPress/gutenberg/pull/35963)) +- Post Comment: Deprecate the block now that the Comment Query Loop block has been added. ([36032](https://github.com/WordPress/gutenberg/pull/36032)) +- Post Comment Author: Add alignment options. ([36045](https://github.com/WordPress/gutenberg/pull/36045)) +- Post Comments: Even out the top margin inside the block. ([35887](https://github.com/WordPress/gutenberg/pull/35887)) +- Post Excerpt: Add spacing controls. ([35959](https://github.com/WordPress/gutenberg/pull/35959)) +- Post Excerpt: Don't print the wrapper when there is no excerpt. ([35749](https://github.com/WordPress/gutenberg/pull/35749)) +- Post Title: Return no markup if title is empty. ([35861](https://github.com/WordPress/gutenberg/pull/35861)) +- Search: Add contextual defaults when inserted in Navigation block. ([36125](https://github.com/WordPress/gutenberg/pull/36125)) +- Gallery block: Add a dismissible warning about the need for versions >=18.2 of the mobile app. ([36012](https://github.com/WordPress/gutenberg/pull/36012)) + +#### Accessibility +- Add announcement on formatting change for screen readers. ([35896](https://github.com/WordPress/gutenberg/pull/35896)) +- Add aria-current to navigation link, submenu, page list. ([35880](https://github.com/WordPress/gutenberg/pull/35880)) +- Link editing: Improve focus styles for Link UI preview title. ([35853](https://github.com/WordPress/gutenberg/pull/35853)) +- Site Editor: Enable the "Save" keyboard shortcut. ([36138](https://github.com/WordPress/gutenberg/pull/36138)) + +#### Block Editor +- Drag and drop: Show drag slot instead of hiding the block being dragged. ([33950](https://github.com/WordPress/gutenberg/pull/33950)) +- Enable rich previews in the Link UI for the Site Editor. ([35951](https://github.com/WordPress/gutenberg/pull/35951)) +- Link editing: Update Link UI design for preview action buttons to use icons for edit and unlink. ([35833](https://github.com/WordPress/gutenberg/pull/35833)) +- Use the block's name in the "remove block" menu item in the block settings dropdown. ([35872](https://github.com/WordPress/gutenberg/pull/35872)) + +#### Full Site Editing +- Move the Site Editor menu item to sit under Appearance and rename to Editor. ([36064](https://github.com/WordPress/gutenberg/pull/36064)) +- Use Heading component on NavigationMenu and NavigationGroup components. ([36009](https://github.com/WordPress/gutenberg/pull/36009)) +- Use SearchControl component inside nav menu. ([36011](https://github.com/WordPress/gutenberg/pull/36011)) + +#### Components +- Duotone: Add description to clarify that the underlying image will not be affected. ([36018](https://github.com/WordPress/gutenberg/pull/36018)) +- ToolsPanel: Update typography panel layout. ([35911](https://github.com/WordPress/gutenberg/pull/35911)) + +#### Template Editor +- Add resizer to template part focus mode. ([35728](https://github.com/WordPress/gutenberg/pull/35728)) +- Auto resize the height of template part focus mode. ([35974](https://github.com/WordPress/gutenberg/pull/35974)) + +#### Global Styles +- Remove the duplicated title in background, text and link views. ([35583](https://github.com/WordPress/gutenberg/pull/35583)) +- Typography: Switch to ToolsPanel for block support UI. ([33744](https://github.com/WordPress/gutenberg/pull/33744)) + +#### Design Tools +- Duotone: Enable transparency. ([34130](https://github.com/WordPress/gutenberg/pull/34130)) +- Layout: Add `flex-wrap` control to `flex` layout. ([36003](https://github.com/WordPress/gutenberg/pull/36003)) +- Typography block support: Add typography support and defaults. ([34064](https://github.com/WordPress/gutenberg/pull/34064)) + +#### Media +- Remove "security" verbiage from warning when filetype does not pass on upload. ([36226](https://github.com/WordPress/gutenberg/pull/36226)) + +#### Patterns +- Add an `inserter` flag to hide patterns from UI. ([36108](https://github.com/WordPress/gutenberg/pull/36108)) + +#### Themes +- Remove experimental feature notice for block themes. ([36083](https://github.com/WordPress/gutenberg/pull/36083)) + +#### Testing +- Scripts: Increase timeout for end-to-end tests to 30 seconds. ([35983](https://github.com/WordPress/gutenberg/pull/35983)) + +#### Tools +- Wp-env: Disable Xdebug by default unless specified by user. ([34324](https://github.com/WordPress/gutenberg/pull/34324)) + +#### REST API +- URL Details: Update regex to include `og:Description`. ([35875](https://github.com/WordPress/gutenberg/pull/35875)) + + +### New APIs + +#### Global Styles +- Add API to access global settings, styles, and stylesheet. ([34843](https://github.com/WordPress/gutenberg/pull/34843)) + +#### Block Library +- Inner blocks: Add `useInnerBlocksProps.save` function for edit/save symmetry, and stabilise API. ([26031](https://github.com/WordPress/gutenberg/pull/26031)) + + +### Bug Fixes + +- Allow moving metaboxes to previously empty area. ([25187](https://github.com/WordPress/gutenberg/pull/25187)) +- Avoid showing deleted records in editor saving flow. ([36027](https://github.com/WordPress/gutenberg/pull/36027)) +- BaseControl: Fix undefined Help text id if no id is passed to component. ([35899](https://github.com/WordPress/gutenberg/pull/35899)) +- Change `console.error` to `console.warn` for enqueued styles in the editor. ([35914](https://github.com/WordPress/gutenberg/pull/35914)) +- Disable ability to edit wp_navigation menus via `Appearance -> Navigation Menus` for non-FSE themes. ([36257](https://github.com/WordPress/gutenberg/pull/36257)) +- Fix Core Data using hardcoded baseURL prefix for taxonomies and post types API requests. ([35850](https://github.com/WordPress/gutenberg/pull/35850)) +- Fix WPCS lint errors in global styles. ([36058](https://github.com/WordPress/gutenberg/pull/36058)) +- Fix `getPxFromCssUnit` test stability and test that memoized function works correctly. ([35939](https://github.com/WordPress/gutenberg/pull/35939)) +- Fix Rest global styles controller accessing configuration that may not exist. ([36047](https://github.com/WordPress/gutenberg/pull/36047)) +- Make `saveEditedEntityRecord` use the entity key when available. ([36212](https://github.com/WordPress/gutenberg/pull/36212)) +- Preserve highlighted text selection when changing colors ([36263](https://github.com/WordPress/gutenberg/pull/36263)) +- Prevent PHP notice in Elements block support for blocks with empty content. ([35836](https://github.com/WordPress/gutenberg/pull/35836)) +- Theme resolver: Fix crash from calls to `undefined` functions. ([36248](https://github.com/WordPress/gutenberg/pull/36248)) +- Unhook `_block_template_render_title_tag` to prevent duplicate title tags from rendering. ([36133](https://github.com/WordPress/gutenberg/pull/36133)) + +#### Block Library +- Classic: Fix select all blocks side effect that overwrote paragraph block contents. ([35999](https://github.com/WordPress/gutenberg/pull/35999)) +- Column: Only add flex-basis if width contains a number. ([35831](https://github.com/WordPress/gutenberg/pull/35831)) +- Comment Template: Move inner blocks container to separate components. ([36174](https://github.com/WordPress/gutenberg/pull/36174)) +- Blocks: Fix relative URLs for inlined styles. ([35538](https://github.com/WordPress/gutenberg/pull/35538)) +- Fix saving template parts in the site editor by fixing controlled inner blocks parent block attributes updates. ([35827](https://github.com/WordPress/gutenberg/pull/35827)) +- Fix incorrect attributes definitions for Column, Cover, and Group blocks. ([36140](https://github.com/WordPress/gutenberg/pull/36140)) +- Gallery: Only show the gallery upload error message if mixed multiple files are uploaded. ([35790](https://github.com/WordPress/gutenberg/pull/35790)) +- Gallery: Remove the arbitrary alt text that is added to gallery images. ([35936](https://github.com/WordPress/gutenberg/pull/35936)) +- Heading: Avoid error on split when the paragraph isn't registered. ([35871](https://github.com/WordPress/gutenberg/pull/35871)) +- Navigation Submenu: Fix PHP notice caused by stale id reference. ([35984](https://github.com/WordPress/gutenberg/pull/35984)) +- Navigation overlay menu: Fix submenu spacing. ([35823](https://github.com/WordPress/gutenberg/pull/35823)) +- Navigation: Fix dropdown indicator position. ([36106](https://github.com/WordPress/gutenberg/pull/36106)) +- Navigation: Fix issues with responsive justifications. ([35913](https://github.com/WordPress/gutenberg/pull/35913)) and ([36105](https://github.com/WordPress/gutenberg/pull/36105)) +- Navigation: Fix padding for social links on mobile. ([35824](https://github.com/WordPress/gutenberg/pull/35824)) +- Pattern: Remove wrapping div. ([36090](https://github.com/WordPress/gutenberg/pull/36090)) +- Post Comment: Handle the case where a comment does not exist. ([35810](https://github.com/WordPress/gutenberg/pull/35810)) +- Post Content: Ensure the item after post content clears floats. ([36006](https://github.com/WordPress/gutenberg/pull/36006)) +- Post Navigation Link: Do not translate HTML tag. ([35930](https://github.com/WordPress/gutenberg/pull/35930)) +- Post Template Block: Move inner blocks container to separate component. ([35945](https://github.com/WordPress/gutenberg/pull/35945)) +- Post Terms: Prevent the block from breaking on pages. ([35957](https://github.com/WordPress/gutenberg/pull/35957)) +- Site Logo: Fix center alignment. ([35971](https://github.com/WordPress/gutenberg/pull/35971)) +- Fix submenus not opening on click. ([36290](https://github.com/WordPress/gutenberg/pull/36290)) + + +#### Components +- AnglePickerControl: Use admin color scheme. ([35908](https://github.com/WordPress/gutenberg/pull/35908)) +- ColorListPicker: Fix spacing to accomodate the new color picker. ([36017](https://github.com/WordPress/gutenberg/pull/36017)) +- ColorPalette: Fix className. ([36016](https://github.com/WordPress/gutenberg/pull/36016)) +- ColorPicker: Fix unexpected movements, and closing on first click in the color picker. ([35670](https://github.com/WordPress/gutenberg/pull/35670)) +- Popover: Check anchorDocument default view before removing events. ([35832](https://github.com/WordPress/gutenberg/pull/35832)) +- RangeControl: Fix style issue in RTL. ([35777](https://github.com/WordPress/gutenberg/pull/35777)) +- Storybook: Lazy load LTR/RTL styles for consistent specificity. ([35771](https://github.com/WordPress/gutenberg/pull/35771)) +- Text: Fix text color value to use correct gray color value for Link UI preview description text. ([35851](https://github.com/WordPress/gutenberg/pull/35851)) + +#### Global Styles +- Fix navigation in global styles sidebar. ([36203](https://github.com/WordPress/gutenberg/pull/36203)) +- Fix presets data for themes that do not provide any preset. ([36054](https://github.com/WordPress/gutenberg/pull/36054)) +- Generate preset metadata for font-family in the site editor. ([36022](https://github.com/WordPress/gutenberg/pull/36022)) +- Hotfix for leftovers of `WP_Theme_JSON_Resolver::Get_merged_data`. ([36173](https://github.com/WordPress/gutenberg/pull/36173)) +- Lower the specificity of border & padding styles for the outline block style in the button block. ([35968](https://github.com/WordPress/gutenberg/pull/35968)) +- Theme.json: Remove custom prefixes from properties that did not land in 5.8. ([34485](https://github.com/WordPress/gutenberg/pull/34485)) + +#### Block Editor +- Fix inserter with block pattern categories. ([36116](https://github.com/WordPress/gutenberg/pull/36116)) +- Fix navigation block link control zero value in it. ([36198](https://github.com/WordPress/gutenberg/pull/36198)) +- Fix the update of link and suggestions in LinkControl. ([32320](https://github.com/WordPress/gutenberg/pull/32320)) +- Make Link UI inactive if selection extends beyond format bounds or encounters new link. ([35946](https://github.com/WordPress/gutenberg/pull/35946)) +- Fix selection by holding shift key for nested blocks. ([35668](https://github.com/WordPress/gutenberg/pull/35668)) +- Fix shift+click on a child block with its parent selected. ([35988](https://github.com/WordPress/gutenberg/pull/35988)) + +#### Design Tools +- Font Appearance: Improve consistency of label in Typography panel. ([35860](https://github.com/WordPress/gutenberg/pull/35860)) +- Font Family Support: Fix skip serialization check. ([36073](https://github.com/WordPress/gutenberg/pull/36073)) +- Navigation: Force text decoration styles on nav item in editor. ([35859](https://github.com/WordPress/gutenberg/pull/35859)) + +#### Template Editor +- Clear selected block when clicking outside in the template part focus mode. ([35816](https://github.com/WordPress/gutenberg/pull/35816)) +- Templates: Only include templates for the current post types. ([35802](https://github.com/WordPress/gutenberg/pull/35802)) + +#### Plugin +- Fix fatal error in Site Logo block in WP 5.9. ([36195](https://github.com/WordPress/gutenberg/pull/36195)) + +#### Patterns +- Update unsaved navigation block flow. ([35976](https://github.com/WordPress/gutenberg/pull/35976)) + +#### Accessibility +- Try to communicate to screen readers that post title is textarea. ([35898](https://github.com/WordPress/gutenberg/pull/35898)) + +#### Full Site Editing +- Add fallback handling for plugins or themes using the Customizer. ([35877](https://github.com/WordPress/gutenberg/pull/35877)) + +#### Widgets Editor +- Fix layout styles not applying in widgets customizer. ([35865](https://github.com/WordPress/gutenberg/pull/35865)) + +#### CSS & Styling +- Editor defaults for themes with no editor styles and when user disables theme styles. ([35736](https://github.com/WordPress/gutenberg/pull/35736)) + +#### History +- Support disabling autosave for native Unsupported Block Editor. ([35639](https://github.com/WordPress/gutenberg/pull/35639)) + + +### Performance + +#### List View +- Fix pagedown/pageup and improve scrolling. ([36063](https://github.com/WordPress/gutenberg/pull/36063)) + +#### Block Editor +- Improve opening of the block inserter via manual token-based analysis of reusable blocks. ([35763](https://github.com/WordPress/gutenberg/pull/35763)) + +#### Widgets Editor +- List View: Avoid re-rendering all items on block focus. Enable persistent List View in the widget editor. ([35706](https://github.com/WordPress/gutenberg/pull/35706)) + +#### Accessibility +- List View: Render a fixed number of items. ([35230](https://github.com/WordPress/gutenberg/pull/35230)) + + +### Experiments + +#### Block Library +- Adds in basic styling for post comment form. ([35704](https://github.com/WordPress/gutenberg/pull/35704)) +- Navigation Area block. ([36178](https://github.com/WordPress/gutenberg/pull/36178)) +- Migrate classic menus to block-based menus on theme switch. ([36255](https://github.com/WordPress/gutenberg/pull/36255)) +- Post Comments block: Hide the "Comments Closed" message. ([35743](https://github.com/WordPress/gutenberg/pull/35743)) +- Mobile responsive navigation by default. ([35917](https://github.com/WordPress/gutenberg/pull/35917)) +- Reword navigation color labels. ([35916](https://github.com/WordPress/gutenberg/pull/35916)) +- Show the placeholder again when moving from a valid menu to non-existing menu. ([36210](https://github.com/WordPress/gutenberg/pull/36210)) +- Provide a way to manage wp_navigation posts from wp-admin. ([36126](https://github.com/WordPress/gutenberg/pull/36126)) + +#### Global Styles +- Add a Global Styles endpoint and use it in the site editor. ([35801](https://github.com/WordPress/gutenberg/pull/35801)) +- Fix: Crash when resetting user color palette. ([36233](https://github.com/WordPress/gutenberg/pull/36233)) +- Fix: Show user colors on palette indicator. ([36232](https://github.com/WordPress/gutenberg/pull/36232)) +- Migrate theme.json v1 to v2. ([36155](https://github.com/WordPress/gutenberg/pull/36155)) +- Update: Show all color and gradient origins (core, theme, and user). ([35970](https://github.com/WordPress/gutenberg/pull/35970)) + +#### Full Site Editing +- Always display Customizer menu item. ([36168](https://github.com/WordPress/gutenberg/pull/36168)) +- Revert "Always display Customizer menu item". ([36189](https://github.com/WordPress/gutenberg/pull/36189)) +- Remove slug and status columns from templates list in Appearance > Templates. ([35996](https://github.com/WordPress/gutenberg/pull/35996)) + +#### REST API +- Improve unit test coverage for REST API menus endpoints.. ([36177](https://github.com/WordPress/gutenberg/pull/36177)) + +#### Navigation Screen +- Navigation Editor: Show a warning when trying to save unsupported blocks. ([35993](https://github.com/WordPress/gutenberg/pull/35993)) + +#### Reusable Blocks +- Editor: Multi-Entity Saving UI Improvements. ([35933](https://github.com/WordPress/gutenberg/pull/35933)) + +#### Components +- Update: Implement new color palette editor component. ([35783](https://github.com/WordPress/gutenberg/pull/35783)) + +#### Block Editor +- Split control for URL and Text within Link UI. ([33849](https://github.com/WordPress/gutenberg/pull/33849)) + + +### Documentation + +- Add Thunks Tutorial. ([36051](https://github.com/WordPress/gutenberg/pull/36051)) +- Add a more detailed guide for react native development. ([35529](https://github.com/WordPress/gutenberg/pull/35529)) +- Add usage documentation for Rich Text package. ([35885](https://github.com/WordPress/gutenberg/pull/35885)) +- Added link to Ways to keep up with Gutenberg & Full Site Editing. ([36077](https://github.com/WordPress/gutenberg/pull/36077)) +- Blocks: Add view script to block schema and documentation. ([36175](https://github.com/WordPress/gutenberg/pull/36175)) +- Blocks: Document changes to style and editorStyle in `block.json`. ([36218](https://github.com/WordPress/gutenberg/pull/36218)) +- Docs: Add Getting Started level for documentation. ([35891](https://github.com/WordPress/gutenberg/pull/35891)) +- Docs: Add section about using the schema during development. ([35835](https://github.com/WordPress/gutenberg/pull/35835)) +- Docs: Fix Typos in widgets/overview.md. ([36078](https://github.com/WordPress/gutenberg/pull/36078)) +- Docs: Fix schema file URL. ([36157](https://github.com/WordPress/gutenberg/pull/36157)) +- Docs: Improve Getting Started landing page. ([35893](https://github.com/WordPress/gutenberg/pull/35893)) +- Docs: Theme.json - fix typo. ([36139](https://github.com/WordPress/gutenberg/pull/36139)) +- Docs: Tweak organization for getting-started documentation. ([34091](https://github.com/WordPress/gutenberg/pull/34091)) +- Docs: Update the recommendation for the cadence of npm releases. ([35925](https://github.com/WordPress/gutenberg/pull/35925)) +- Env docs: Update wordpress-develop example to clarify src/build location. ([35978](https://github.com/WordPress/gutenberg/pull/35978)) +- Fix a small typo in the "Getting started" documentation. ([36109](https://github.com/WordPress/gutenberg/pull/36109)) +- Fix wording in the Authoring Experience documentation. ([35969](https://github.com/WordPress/gutenberg/pull/35969)) +- Move create-block changelog entries back to Unreleased section. ([35886](https://github.com/WordPress/gutenberg/pull/35886)) +- Release Docs: Remove consecutive RCs warning. ([35855](https://github.com/WordPress/gutenberg/pull/35855)) +- Update Components CONTRIBUTING.md indentation. ([35866](https://github.com/WordPress/gutenberg/pull/35866)) +- fix: Backtick added around `<textarea>` input tag in readme file. ([34813](https://github.com/WordPress/gutenberg/pull/34813)) +- theme.json docs: Add missing settings & styles. ([36137](https://github.com/WordPress/gutenberg/pull/36137)) + + +### Code Quality + +- Add Theme's base global styles endpoint. ([35985](https://github.com/WordPress/gutenberg/pull/35985)) +- Add alexstine as code owner for post-title. ([36056](https://github.com/WordPress/gutenberg/pull/36056)) +- Add block.json schema to generated file. ([35843](https://github.com/WordPress/gutenberg/pull/35843)) +- Add schemas package. ([35998](https://github.com/WordPress/gutenberg/pull/35998)) +- Improvements for the global styles endpoint. ([36071](https://github.com/WordPress/gutenberg/pull/36071)) +- Make sure tests are pure. ([36253](https://github.com/WordPress/gutenberg/pull/36253)) +- Move getStablePath function into the wordrpess/url package. ([35992](https://github.com/WordPress/gutenberg/pull/35992)) +- Remove "experimental" from URL details REST controller and promote to `v1` namespace. ([35915](https://github.com/WordPress/gutenberg/pull/35915)) +- Remove GB prefixed functions from template part. ([36180](https://github.com/WordPress/gutenberg/pull/36180)) +- Schemas: Theme.json - Add `title` to templateParts. ([36145](https://github.com/WordPress/gutenberg/pull/36145)) +- Updates `WP_Theme_JSON_Resolver` and tests to be equal to core. ([36223](https://github.com/WordPress/gutenberg/pull/36223)) +- Update: Use small button on tools panel toggle. ([35935](https://github.com/WordPress/gutenberg/pull/35935)) +- block-editor store: Migrate to thunks. ([35720](https://github.com/WordPress/gutenberg/pull/35720)) +- theme.json: Update test data. ([35883](https://github.com/WordPress/gutenberg/pull/35883)) + +#### Block Library +- Heading: Auto-generated anchors hide implementation details. ([35747](https://github.com/WordPress/gutenberg/pull/35747)) +- Mark Post Comments as stable and Comments Query Loop as experimental. ([36132](https://github.com/WordPress/gutenberg/pull/36132)) +- Mark Post Navigation Link and Term Description blocks as stable. ([36163](https://github.com/WordPress/gutenberg/pull/36163)) +- Remove `post-` prefix from Comment Template inner blocks. ([36171](https://github.com/WordPress/gutenberg/pull/36171)) + +#### Global Styles +- Refactor theme.json migrations to be a single class. ([36182](https://github.com/WordPress/gutenberg/pull/36182)) +- Remove locations we do not translate from `theme-i18n.json`. ([35881](https://github.com/WordPress/gutenberg/pull/35881)) +- Update `theme.json` schema migrations. ([36154](https://github.com/WordPress/gutenberg/pull/36154)) + +#### Post Editor +- Refactor FlatTermSelector into a functional component. ([33459](https://github.com/WordPress/gutenberg/pull/33459)) +- Typo: Translated site properties. ([36097](https://github.com/WordPress/gutenberg/pull/36097)) + +#### Components +- ToolsPanel: Use Grid component to handle layout. ([35621](https://github.com/WordPress/gutenberg/pull/35621)) +- Update spacing in CircularOptionPicker. ([36014](https://github.com/WordPress/gutenberg/pull/36014)) + +#### Data Layer +- [data]: Rename types file from .d.ts to .ts. ([36062](https://github.com/WordPress/gutenberg/pull/36062)) + +#### CSS & Styling +- Remove invalid buttons block CSS property. ([33793](https://github.com/WordPress/gutenberg/pull/33793)) + + +### Tools + +- Remove @chrisvanpatten from CODEOWNERS. ([35937](https://github.com/WordPress/gutenberg/pull/35937)) + +#### Testing +- Add a method to disable auto-accepting dialogs. ([35828](https://github.com/WordPress/gutenberg/pull/35828)) +- Skip broken widgets test. ([36239](https://github.com/WordPress/gutenberg/pull/36239)) +- Skip flaky test for loading block stylesheets in iframe. ([35961](https://github.com/WordPress/gutenberg/pull/35961)) +- Tests: Run block fixtures through KSES. ([35611](https://github.com/WordPress/gutenberg/pull/35611)) + +#### Block Library +- Mark FSE blocks as non experimental. ([35979](https://github.com/WordPress/gutenberg/pull/35979)) + + +### Various + +- Apply borders to canvas rather than other UI elements. ([31081](https://github.com/WordPress/gutenberg/pull/31081)) +- Changes for FSE backport in core. ([36201](https://github.com/WordPress/gutenberg/pull/36201)) + +#### Site Editor +- Remove navigation panel in site editor. ([36194](https://github.com/WordPress/gutenberg/pull/36194)) + +#### Components +- Modal: Wrap the modal contents in a StyleProvider. ([36261](https://github.com/WordPress/gutenberg/pull/36261)) + + + += 11.8.2 = + + + +### Various + +#### Block Library +- Cover Block: Fix default background dim. ([36312](https://github.com/WordPress/gutenberg/pull/36312)) + + + + + += 11.9.0-rc.2 = + +### Various + +- Keep a copy of anchor ref to preserve highlighted text selection. ([36263](https://github.com/WordPress/gutenberg/pull/36263)) + +### Features + +#### Block Library +- Add Media File and Attachment Page options to the native Image block Link To menu. ([34846](https://github.com/WordPress/gutenberg/pull/34846)) +- Add new Comment Reply Link block. ([35774](https://github.com/WordPress/gutenberg/pull/35774)) +- Add new Edit Comment Link block. ([35965](https://github.com/WordPress/gutenberg/pull/35965)) +- Site Editor: Add Comment Avatar Core Block. ([35396](https://github.com/WordPress/gutenberg/pull/35396)) +- Site Editor: Add new Comments Query Loop block. ([35231](https://github.com/WordPress/gutenberg/pull/35231)) + +#### Block Editor +- Enable native editor onboarding features globally. ([35201](https://github.com/WordPress/gutenberg/pull/35201)) + + +### Enhancements + +- Disable Xdebug by default unless specified by user. ([34324](https://github.com/WordPress/gutenberg/pull/34324)) +- Improve the initial loading of the site editor. ([36044](https://github.com/WordPress/gutenberg/pull/36044)) +- StripHTML - preserve leading and trailing spaces and strip script and on* attributes. ([35539](https://github.com/WordPress/gutenberg/pull/35539)) +- Remove visual clue from text alignment toolbar. ([35922](https://github.com/WordPress/gutenberg/pull/35922)) +- Add `flex-wrap` control to `flex` layout. ([36003](https://github.com/WordPress/gutenberg/pull/36003)) + +#### Block Library +- Add alignment option to the Comment Edit Link block. ([36033](https://github.com/WordPress/gutenberg/pull/36033)) +- Add featured transforms in Link Control for Navigation Link items. ([35857](https://github.com/WordPress/gutenberg/pull/35857)) +- Add flex layout to Buttons block and new layout type. ([35819](https://github.com/WordPress/gutenberg/pull/35819)) +- Add spacing controls to Post Author block. ([35963](https://github.com/WordPress/gutenberg/pull/35963)) +- Add spacing controls to Post Excerpt. ([35959](https://github.com/WordPress/gutenberg/pull/35959)) +- Add create new menu button to nav block. ([36245](https://github.com/WordPress/gutenberg/pull/36245)) +- Code block: Add support for padding, color & border styles. ([27582](https://github.com/WordPress/gutenberg/pull/27582)) +- Columns: Add padding support. ([35701](https://github.com/WordPress/gutenberg/pull/35701)) +- Comment Author Name: Add spacing to have same options as Post Author Name. ([36213](https://github.com/WordPress/gutenberg/pull/36213)) +- Deprecate the Post Comment block. ([36032](https://github.com/WordPress/gutenberg/pull/36032)) +- Embed: Add Wolfram Cloud as an embed provider. ([35656](https://github.com/WordPress/gutenberg/pull/35656)) +- Gallery block: Replace gallery experimental setting with a check for use_balanceTags. ([34979](https://github.com/WordPress/gutenberg/pull/34979)) +- Image Block: Add data-id attribute on server side render for core galleries. ([35975](https://github.com/WordPress/gutenberg/pull/35975)) +- Navigation Block: Add missing menu item attributes to core/navigation. ([35634](https://github.com/WordPress/gutenberg/pull/35634)) +- Navigation: Add delete nav menu button. ([35981](https://github.com/WordPress/gutenberg/pull/35981)) +- Navigation: Create nav menu on pattern insertion or when the block has uncontrolled inner blocks. ([36024](https://github.com/WordPress/gutenberg/pull/36024)) +- Navigation: Use a single placeholder for the block. ([36023](https://github.com/WordPress/gutenberg/pull/36023)) +- Page List: Create a JS version for the editor. ([31670](https://github.com/WordPress/gutenberg/pull/31670)) +- Post Comment Author: Add alignment options. ([36045](https://github.com/WordPress/gutenberg/pull/36045)) +- Post Comments: Even out the top margin inside the block. ([35887](https://github.com/WordPress/gutenberg/pull/35887)) +- Post Excerpt: Don't print the wrapper when there is no excerpt. ([35749](https://github.com/WordPress/gutenberg/pull/35749)) +- Post Title: Return no markup if title is empty. ([35861](https://github.com/WordPress/gutenberg/pull/35861)) +- Save Navigation Block data to a wp_navigation post type. ([35746](https://github.com/WordPress/gutenberg/pull/35746)) +- Search: Add contextual defaults when inserted in Navigation block. ([36125](https://github.com/WordPress/gutenberg/pull/36125)) +- Try using flex layout on the Navigation block. ([36169](https://github.com/WordPress/gutenberg/pull/36169)) +- Update navigation block entity automatic name generation and refine naming UI. ([36238](https://github.com/WordPress/gutenberg/pull/36238)) + +#### Accessibility +- Add announcement on formatting change for screen readers. ([35896](https://github.com/WordPress/gutenberg/pull/35896)) +- Add aria-current to navigation link, submenu, page list. ([35880](https://github.com/WordPress/gutenberg/pull/35880)) +- Full Site Editing: Use SearchControl component inside nav menu. ([36011](https://github.com/WordPress/gutenberg/pull/36011)) +- Improve focus styles for Link UI preview title. ([35853](https://github.com/WordPress/gutenberg/pull/35853)) +- Site Editor: Enable the "Save" keyboard shortcut. ([36138](https://github.com/WordPress/gutenberg/pull/36138)) + +#### Block Editor +- Enable rich previews in the Link UI for the Site Editor. ([35951](https://github.com/WordPress/gutenberg/pull/35951)) +- Try: Show drag slot instead of hiding the item being dragged. ([33950](https://github.com/WordPress/gutenberg/pull/33950)) +- Update Link UI design for preview action buttons to use icons for edit and unlink. ([35833](https://github.com/WordPress/gutenberg/pull/35833)) + +#### Full Site Editing +- Move and rename the site editor menu item. ([36064](https://github.com/WordPress/gutenberg/pull/36064)) +- Use Heading component on NavigationMenu and NavigationGroup components. ([36009](https://github.com/WordPress/gutenberg/pull/36009)) + +#### Components +- Add duotone description. ([36018](https://github.com/WordPress/gutenberg/pull/36018)) +- ToolsPanel: Update typography panel layout. ([35911](https://github.com/WordPress/gutenberg/pull/35911)) + +#### Template Editor +- Add resizer to template part focus mode. ([35728](https://github.com/WordPress/gutenberg/pull/35728)) +- Auto resize the height of template part focus mode. ([35974](https://github.com/WordPress/gutenberg/pull/35974)) + +#### Global Styles +- Remove the duplicated title in background, text and link views in Global Styles. ([35583](https://github.com/WordPress/gutenberg/pull/35583)) +- Typography: Switch to ToolsPanel for block support UI. ([33744](https://github.com/WordPress/gutenberg/pull/33744)) + +#### Design Tools +- Enable transparency for duotone. ([34130](https://github.com/WordPress/gutenberg/pull/34130)) +- Typography block support: Add typography support and defaults. ([34064](https://github.com/WordPress/gutenberg/pull/34064)) + +#### Media +- Remove "security" verbiage from warning when filetype does not pass on upload. ([36226](https://github.com/WordPress/gutenberg/pull/36226)) + +#### Patterns +- [Patterns]: Add a flag to hide patterns from UI. ([36108](https://github.com/WordPress/gutenberg/pull/36108)) + +#### Themes +- Remove experimental feature notice. ([36083](https://github.com/WordPress/gutenberg/pull/36083)) + +#### Testing +- Scripts: Increase timeout for end-to-end tests. ([35983](https://github.com/WordPress/gutenberg/pull/35983)) + +#### REST API +- URL Details: Update regex to include `og:Description`. ([35875](https://github.com/WordPress/gutenberg/pull/35875)) + + +### New APIs + +#### Global Styles +- Add API to access global settings, styles, and stylesheet. ([34843](https://github.com/WordPress/gutenberg/pull/34843)) + +#### Block Library +- Inner blocks: Edit/save symmetry + stabilise API. ([26031](https://github.com/WordPress/gutenberg/pull/26031)) + + +### Bug Fixes + +- Allow moving metaboxes to previously empty area. ([25187](https://github.com/WordPress/gutenberg/pull/25187)) +- Avoid showing deleted records in editor saving flow. ([36027](https://github.com/WordPress/gutenberg/pull/36027)) +- BaseControl: Help text id has undefined value if no id is passed to component. ([35899](https://github.com/WordPress/gutenberg/pull/35899)) +- Change `console.error` to `console.warn` for enqueued styles in the editor. ([35914](https://github.com/WordPress/gutenberg/pull/35914)) +- Core Data uses hardcoded baseURL prefix for taxonomies and post types. ([35850](https://github.com/WordPress/gutenberg/pull/35850)) +- Do not translate HTML tag. ([35930](https://github.com/WordPress/gutenberg/pull/35930)) +- Disable ability to edit menus via `Appearance -> Navigation Menus` for non-FSE themes. ([36257](https://github.com/WordPress/gutenberg/pull/36257)) +- Fix crash from calls to `undefined` functions. ([36248](https://github.com/WordPress/gutenberg/pull/36248)) +- Fix WPCS lint errors in global styles. ([36058](https://github.com/WordPress/gutenberg/pull/36058)) +- Fix getPxFromCssUnit test stability and test that memoized function works correctly. ([35939](https://github.com/WordPress/gutenberg/pull/35939)) +- Fix: Rest global styles controller accessing configuration that may not exist. ([36047](https://github.com/WordPress/gutenberg/pull/36047)) +- Make saveEditedEntityRecord use the entity key when available. ([36212](https://github.com/WordPress/gutenberg/pull/36212)) +- Prevent PHP notice from block-supports elements. ([35836](https://github.com/WordPress/gutenberg/pull/35836)) +- Revert "Post Content: Fix float clearing on entry content (#35958)". ([36004](https://github.com/WordPress/gutenberg/pull/36004)) +- Try ensuring the item after post content clears floats. ([36006](https://github.com/WordPress/gutenberg/pull/36006)) +- Unhook _block_template_render_title_tag. ([36133](https://github.com/WordPress/gutenberg/pull/36133)) + +#### Block Library +- Classic Block: Fix select all blocks side effect. ([35999](https://github.com/WordPress/gutenberg/pull/35999)) +- Column block: Only add flex-basis if width contains a number. ([35831](https://github.com/WordPress/gutenberg/pull/35831)) +- Comment Template: Move inner blocks container to separate components. ([36174](https://github.com/WordPress/gutenberg/pull/36174)) +- Blocks: Fix relative URLs for inlined styles. ([35538](https://github.com/WordPress/gutenberg/pull/35538)) +- Fix controlled inner blocks parent block attributes updates. ([35827](https://github.com/WordPress/gutenberg/pull/35827)) +- Fix incorrect attributes definitions. ([36140](https://github.com/WordPress/gutenberg/pull/36140)) +- Gallery block: Only show the gallery upload error message if mixed multiple files uploaded. ([35790](https://github.com/WordPress/gutenberg/pull/35790)) +- Gallery block: Remove the arbitrary alt text that is added to gallery images. ([35936](https://github.com/WordPress/gutenberg/pull/35936)) +- Heading: Avoid error on split when the paragraph isn't registered. ([35871](https://github.com/WordPress/gutenberg/pull/35871)) +- Navigation Submenu: Fix PHP notice. ([35984](https://github.com/WordPress/gutenberg/pull/35984)) +- Navigation overlay menu: Fix submenu spacing. ([35823](https://github.com/WordPress/gutenberg/pull/35823)) +- Navigation: Fix dropdown indicator. ([36106](https://github.com/WordPress/gutenberg/pull/36106)) +- Navigation: Fix issues with responsive justifications. ([35913](https://github.com/WordPress/gutenberg/pull/35913)) +- Navigation: Fix justifications. ([36105](https://github.com/WordPress/gutenberg/pull/36105)) +- Navigation: Fix padding for social links on mobile. ([35824](https://github.com/WordPress/gutenberg/pull/35824)) +- Pattern block: Remove wrapping div. ([36090](https://github.com/WordPress/gutenberg/pull/36090)) +- Post Comment: Handle the case where a comment does not exist. ([35810](https://github.com/WordPress/gutenberg/pull/35810)) +- Post Content: Fix float clearing on entry content. ([35958](https://github.com/WordPress/gutenberg/pull/35958)) +- Post Template Block: Move inner blocks container to separate component. ([35945](https://github.com/WordPress/gutenberg/pull/35945)) +- Post Terms: Prevent the block from breaking on pages. ([35957](https://github.com/WordPress/gutenberg/pull/35957)) +- Site Logo: Fix center alignment. ([35971](https://github.com/WordPress/gutenberg/pull/35971)) + +#### Components +- Fix ColorPalette className. ([36016](https://github.com/WordPress/gutenberg/pull/36016)) +- Fix `<Text>` component text color value to correct color value for Link UI preview description text. ([35851](https://github.com/WordPress/gutenberg/pull/35851)) +- Fix color list picker spacing to accomodate the new color picker. ([36017](https://github.com/WordPress/gutenberg/pull/36017)) +- Fix unexpected movements, and closing on first click in the color picker. ([35670](https://github.com/WordPress/gutenberg/pull/35670)) +- Fixes #34855 RangeControl style issue in RTL. ([35777](https://github.com/WordPress/gutenberg/pull/35777)) +- Popover: Check anchorDocument default view before removing events. ([35832](https://github.com/WordPress/gutenberg/pull/35832)) +- Storybook: Lazy load LTR/RTL styles for consistent specificity. ([35771](https://github.com/WordPress/gutenberg/pull/35771)) +- fix/35709: Set admin color scheme to angle color picker. ([35908](https://github.com/WordPress/gutenberg/pull/35908)) + +#### Global Styles +- Fix navigation in global styles sidebar. ([36203](https://github.com/WordPress/gutenberg/pull/36203)) +- Fix presets data for themes that do not provide any preset. ([36054](https://github.com/WordPress/gutenberg/pull/36054)) +- Generate preset metadata for font-family in the site editor. ([36022](https://github.com/WordPress/gutenberg/pull/36022)) +- Hotfix for leftovers of `WP_Theme_JSON_Resolver::Get_merged_data`. ([36173](https://github.com/WordPress/gutenberg/pull/36173)) +- Lower the specificity of border & padding styles for the outline block style in the button block. ([35968](https://github.com/WordPress/gutenberg/pull/35968)) +- Theme.json: Remove custom prefixes from properties that did not land in 5.8. ([34485](https://github.com/WordPress/gutenberg/pull/34485)) + +#### Block Editor +- Fix inserter with block pattern categories. ([36116](https://github.com/WordPress/gutenberg/pull/36116)) +- Fix navigation block link control zero value in it. ([36198](https://github.com/WordPress/gutenberg/pull/36198)) +- Fix the update of link and suggestions in LinkControl. ([32320](https://github.com/WordPress/gutenberg/pull/32320)) +- Make Link UI inactive if selection extends beyond format bounds or encounters new link. ([35946](https://github.com/WordPress/gutenberg/pull/35946)) +- Fix selection by holding shift key for nested blocks. ([35668](https://github.com/WordPress/gutenberg/pull/35668)) +- Fix shift+click on a child block with its parent selected. ([35988](https://github.com/WordPress/gutenberg/pull/35988)) + +#### Design Tools +- Font Appearance: Improve consistency of label in Typography panel. ([35860](https://github.com/WordPress/gutenberg/pull/35860)) +- Font Family Support: Fix skip serialization check. ([36073](https://github.com/WordPress/gutenberg/pull/36073)) +- Navigation: Force text decoration styles on nav item in editor. ([35859](https://github.com/WordPress/gutenberg/pull/35859)) + +#### Template Editor +- Clear selected block when clicking outside in the template part focus mode. ([35816](https://github.com/WordPress/gutenberg/pull/35816)) +- Templates: Only include templates for the current post types. ([35802](https://github.com/WordPress/gutenberg/pull/35802)) + +#### Plugin +- Fix fatal error in Site Logo block in WP 5.9. ([36195](https://github.com/WordPress/gutenberg/pull/36195)) + +#### Patterns +- Update unsaved navigation block flow. ([35976](https://github.com/WordPress/gutenberg/pull/35976)) + +#### Accessibility +- Try to communicate to screen readers that post title is textarea. ([35898](https://github.com/WordPress/gutenberg/pull/35898)) + +#### Full Site Editing +- Add fallback handling for plugins or themes using the Customizer. ([35877](https://github.com/WordPress/gutenberg/pull/35877)) + +#### Widgets Editor +- Fix layout styles not applying in widgets customizer. ([35865](https://github.com/WordPress/gutenberg/pull/35865)) + +#### CSS & Styling +- Editor defaults for themes with no editor styles and when user disables theme styles. ([35736](https://github.com/WordPress/gutenberg/pull/35736)) + +#### History +- Support disabling autosave for native Unsupported Block Editor. ([35639](https://github.com/WordPress/gutenberg/pull/35639)) + + +### Performance + +#### List View +- Fix pagedown/pageup and improve scrolling. ([36063](https://github.com/WordPress/gutenberg/pull/36063)) + +#### Block Editor +- Improve opening of the block inserter via manual token-based analysis of reusable blocks. ([35763](https://github.com/WordPress/gutenberg/pull/35763)) + +#### Widgets Editor +- List View: Avoid re-rendering all items on block focus. Enable persistent List View in the widget editor. ([35706](https://github.com/WordPress/gutenberg/pull/35706)) + +#### Accessibility +- List View: Render a fixed number of items. ([35230](https://github.com/WordPress/gutenberg/pull/35230)) + + +### Experiments + +#### Block Library +- Adds in basic styling for post comment form. ([35704](https://github.com/WordPress/gutenberg/pull/35704)) +- Navigation Area block. ([36178](https://github.com/WordPress/gutenberg/pull/36178)) +- Migrate classic menus to block-based menus on theme switch. ([36255](https://github.com/WordPress/gutenberg/pull/36255)) +- Post Comments block: Hide the "Comments Closed" message. ([35743](https://github.com/WordPress/gutenberg/pull/35743)) +- Mobile responsive navigation by default. ([35917](https://github.com/WordPress/gutenberg/pull/35917)) +- Reword navigation color labels. ([35916](https://github.com/WordPress/gutenberg/pull/35916)) +- Show the placeholder again when moving from a valid menu to non-existing menu. ([36210](https://github.com/WordPress/gutenberg/pull/36210)) +- Provide a way to manage wp_navigation posts from wp-admin. ([36126](https://github.com/WordPress/gutenberg/pull/36126)) + +#### Global Styles +- Add a Global Styles endpoint and use it in the site editor. ([35801](https://github.com/WordPress/gutenberg/pull/35801)) +- Fix: Crash when resetting user color palette. ([36233](https://github.com/WordPress/gutenberg/pull/36233)) +- Fix: Show user colors on palette indicator. ([36232](https://github.com/WordPress/gutenberg/pull/36232)) +- Migrate theme.json v1 to v2. ([36155](https://github.com/WordPress/gutenberg/pull/36155)) +- Update: Show all color and gradient origins (core, theme, and user). ([35970](https://github.com/WordPress/gutenberg/pull/35970)) + +#### Full Site Editing +- Always display Customizer menu item. ([36168](https://github.com/WordPress/gutenberg/pull/36168)) +- Revert "Always display Customizer menu item". ([36189](https://github.com/WordPress/gutenberg/pull/36189)) +- Remove slug and status columns from templates list in Appearance > Templates. ([35996](https://github.com/WordPress/gutenberg/pull/35996)) + +#### REST API +- Improve unit test coverage for REST API menus endpoints.. ([36177](https://github.com/WordPress/gutenberg/pull/36177)) + +#### Navigation Screen +- Navigation Editor: Show a warning when trying to save unsupported blocks. ([35993](https://github.com/WordPress/gutenberg/pull/35993)) + +#### Reusable Blocks +- Editor: Multi-Entity Saving UI Improvements. ([35933](https://github.com/WordPress/gutenberg/pull/35933)) + +#### Components +- Update: Implement new color palette editor component. ([35783](https://github.com/WordPress/gutenberg/pull/35783)) + +#### Block Editor +- Split control for URL and Text within Link UI. ([33849](https://github.com/WordPress/gutenberg/pull/33849)) + + +### Documentation + +- Add Thunks Tutorial. ([36051](https://github.com/WordPress/gutenberg/pull/36051)) +- Add a more detailed guide for react native development. ([35529](https://github.com/WordPress/gutenberg/pull/35529)) +- Add usage documentation for Rich Text package. ([35885](https://github.com/WordPress/gutenberg/pull/35885)) +- Added link to Ways to keep up with Gutenberg & Full Site Editing. ([36077](https://github.com/WordPress/gutenberg/pull/36077)) +- Blocks: Add view script to block schema and documentation. ([36175](https://github.com/WordPress/gutenberg/pull/36175)) +- Blocks: Document changes to style and editorStyle in `block.json`. ([36218](https://github.com/WordPress/gutenberg/pull/36218)) +- Docs: Add Getting Started level for documentation. ([35891](https://github.com/WordPress/gutenberg/pull/35891)) +- Docs: Add section about using the schema during development. ([35835](https://github.com/WordPress/gutenberg/pull/35835)) +- Docs: Fix Typos in widgets/overview.md. ([36078](https://github.com/WordPress/gutenberg/pull/36078)) +- Docs: Fix schema file URL. ([36157](https://github.com/WordPress/gutenberg/pull/36157)) +- Docs: Improve Getting Started landing page. ([35893](https://github.com/WordPress/gutenberg/pull/35893)) +- Docs: Theme.json - fix typo. ([36139](https://github.com/WordPress/gutenberg/pull/36139)) +- Docs: Tweak organization for getting-started documentation. ([34091](https://github.com/WordPress/gutenberg/pull/34091)) +- Docs: Update the recommendation for the cadence of npm releases. ([35925](https://github.com/WordPress/gutenberg/pull/35925)) +- Env docs: Update wordpress-develop example to clarify src/build location. ([35978](https://github.com/WordPress/gutenberg/pull/35978)) +- Fix a small typo in the "Getting started" documentation. ([36109](https://github.com/WordPress/gutenberg/pull/36109)) +- Fix wording in the Authoring Experience documentation. ([35969](https://github.com/WordPress/gutenberg/pull/35969)) +- Move create-block changelog entries back to Unreleased section. ([35886](https://github.com/WordPress/gutenberg/pull/35886)) +- Release Docs: Remove consecutive RCs warning. ([35855](https://github.com/WordPress/gutenberg/pull/35855)) +- Update Components CONTRIBUTING.md indentation. ([35866](https://github.com/WordPress/gutenberg/pull/35866)) +- fix: Backtick added around `<textarea>` input tag in readme file. ([34813](https://github.com/WordPress/gutenberg/pull/34813)) +- theme.json docs: Add missing settings & styles. ([36137](https://github.com/WordPress/gutenberg/pull/36137)) + + +### Code Quality + +- Add Theme's base global styles endpoint. ([35985](https://github.com/WordPress/gutenberg/pull/35985)) +- Add alexstine as code owner for post-title. ([36056](https://github.com/WordPress/gutenberg/pull/36056)) +- Add block.json schema to generated file. ([35843](https://github.com/WordPress/gutenberg/pull/35843)) +- Add schemas package. ([35998](https://github.com/WordPress/gutenberg/pull/35998)) +- Improvements for the global styles endpoint. ([36071](https://github.com/WordPress/gutenberg/pull/36071)) +- Make sure tests are pure. ([36253](https://github.com/WordPress/gutenberg/pull/36253)) +- Move getStablePath function into the wordrpess/url package. ([35992](https://github.com/WordPress/gutenberg/pull/35992)) +- Remove "experimental" from URL details REST controller and promote to `v1` namespace. ([35915](https://github.com/WordPress/gutenberg/pull/35915)) +- Remove GB prefixed functions from template part. ([36180](https://github.com/WordPress/gutenberg/pull/36180)) +- Schemas: Theme.json - Add `title` to templateParts. ([36145](https://github.com/WordPress/gutenberg/pull/36145)) +- Updates `WP_Theme_JSON_Resolver` and tests to be equal to core. ([36223](https://github.com/WordPress/gutenberg/pull/36223)) +- Update: Use small button on tools panel toggle. ([35935](https://github.com/WordPress/gutenberg/pull/35935)) +- block-editor store: Migrate to thunks. ([35720](https://github.com/WordPress/gutenberg/pull/35720)) +- theme.json: Update test data. ([35883](https://github.com/WordPress/gutenberg/pull/35883)) + +#### Block Library +- Heading: Auto-generated anchors hide implementation details. ([35747](https://github.com/WordPress/gutenberg/pull/35747)) +- Mark Post Comments as stable and Comments Query Loop as experimental. ([36132](https://github.com/WordPress/gutenberg/pull/36132)) +- Mark Post Navigation Link and Term Description blocks as stable. ([36163](https://github.com/WordPress/gutenberg/pull/36163)) +- Remove `post-` prefix from Comment Template inner blocks. ([36171](https://github.com/WordPress/gutenberg/pull/36171)) + +#### Global Styles +- Refactor theme.json migrations to be a single class. ([36182](https://github.com/WordPress/gutenberg/pull/36182)) +- Remove locations we do not translate from `theme-i18n.json`. ([35881](https://github.com/WordPress/gutenberg/pull/35881)) +- Update `theme.json` schema migrations. ([36154](https://github.com/WordPress/gutenberg/pull/36154)) + +#### Post Editor +- Refactor FlatTermSelector into a functional component. ([33459](https://github.com/WordPress/gutenberg/pull/33459)) +- Typo: Translated site properties. ([36097](https://github.com/WordPress/gutenberg/pull/36097)) + +#### Components +- ToolsPanel: Use Grid component to handle layout. ([35621](https://github.com/WordPress/gutenberg/pull/35621)) +- Update spacing in CircularOptionPicker. ([36014](https://github.com/WordPress/gutenberg/pull/36014)) + +#### Data Layer +- [data]: Rename types file from .d.ts to .ts. ([36062](https://github.com/WordPress/gutenberg/pull/36062)) + +#### CSS & Styling +- Remove invalid buttons block CSS property. ([33793](https://github.com/WordPress/gutenberg/pull/33793)) + + +### Tools + +- Remove @chrisvanpatten from CODEOWNERS. ([35937](https://github.com/WordPress/gutenberg/pull/35937)) + +#### Testing +- Add a method to disable auto-accepting dialogs. ([35828](https://github.com/WordPress/gutenberg/pull/35828)) +- Skip broken widgets test. ([36239](https://github.com/WordPress/gutenberg/pull/36239)) +- Skip flaky test for loading block stylesheets in iframe. ([35961](https://github.com/WordPress/gutenberg/pull/35961)) +- Tests: Run block fixtures through KSES. ([35611](https://github.com/WordPress/gutenberg/pull/35611)) + +#### Block Library +- Mark FSE blocks as non experimental. ([35979](https://github.com/WordPress/gutenberg/pull/35979)) + + +### Various + +- Apply borders to canvas rather than other UI elements. ([31081](https://github.com/WordPress/gutenberg/pull/31081)) +- Changes for FSE backport in core. ([36201](https://github.com/WordPress/gutenberg/pull/36201)) +- Mobile - Add support for the Mark HTML tag and updates Aztec iOS to 1.19.5. ([35956](https://github.com/WordPress/gutenberg/pull/35956)) +- Update Appium to 1.22.0. ([35829](https://github.com/WordPress/gutenberg/pull/35829)) +- Updates publish-to-s3 plugin to 0.7.0 for react-native-bridge & react-native-aztec Android and publishes '-sources.jar'. ([36034](https://github.com/WordPress/gutenberg/pull/36034)) +- Use the block name in the "remove block" menu item in the settings dropdown. ([35872](https://github.com/WordPress/gutenberg/pull/35872)) + +#### Site Editor +- Remove navigation panel in site editor. ([36194](https://github.com/WordPress/gutenberg/pull/36194)) + + + += 11.8.1 = + + + +### Various + +- Keep a copy of anchor ref to preserve highlighted text selection. ([36263](https://github.com/WordPress/gutenberg/pull/36263)) + + + + + += 11.9.0-rc.1 = + +### Features + +#### Block Library +- Add Media File and Attachment Page options to the native Image block Link To menu. ([34846](https://github.com/WordPress/gutenberg/pull/34846)) +- Add new Comment Reply Link block. ([35774](https://github.com/WordPress/gutenberg/pull/35774)) +- Add new Edit Comment Link block. ([35965](https://github.com/WordPress/gutenberg/pull/35965)) +- Site Editor: Add Comment Avatar Core Block. ([35396](https://github.com/WordPress/gutenberg/pull/35396)) +- Site Editor: Add new Comments Query Loop block. ([35231](https://github.com/WordPress/gutenberg/pull/35231)) + +#### Block Editor +- Enable native editor onboarding features globally. ([35201](https://github.com/WordPress/gutenberg/pull/35201)) + + +### Enhancements + +- Disable Xdebug by default unless specified by user. ([34324](https://github.com/WordPress/gutenberg/pull/34324)) +- Improve the initial loading of the site editor. ([36044](https://github.com/WordPress/gutenberg/pull/36044)) +- StripHTML - preserve leading and trailing spaces and strip script and on* attributes. ([35539](https://github.com/WordPress/gutenberg/pull/35539)) +- Remove visual clue from text alignment toolbar. ([35922](https://github.com/WordPress/gutenberg/pull/35922)) +- Add `flex-wrap` control to `flex` layout. ([36003](https://github.com/WordPress/gutenberg/pull/36003)) + +#### Block Library +- Add alignment option to the Comment Edit Link block. ([36033](https://github.com/WordPress/gutenberg/pull/36033)) +- Add featured transforms in Link Control for Navigation Link items. ([35857](https://github.com/WordPress/gutenberg/pull/35857)) +- Add flex layout to Buttons block and new layout type. ([35819](https://github.com/WordPress/gutenberg/pull/35819)) +- Add spacing controls to Post Author block. ([35963](https://github.com/WordPress/gutenberg/pull/35963)) +- Add spacing controls to Post Excerpt. ([35959](https://github.com/WordPress/gutenberg/pull/35959)) +- Add create new menu button to nav block. ([36245](https://github.com/WordPress/gutenberg/pull/36245)) +- Code block: Add support for padding, color & border styles. ([27582](https://github.com/WordPress/gutenberg/pull/27582)) +- Columns: Add padding support. ([35701](https://github.com/WordPress/gutenberg/pull/35701)) +- Comment Author Name: Add spacing to have same options as Post Author Name. ([36213](https://github.com/WordPress/gutenberg/pull/36213)) +- Deprecate the Post Comment block. ([36032](https://github.com/WordPress/gutenberg/pull/36032)) +- Embed: Add Wolfram Cloud as an embed provider. ([35656](https://github.com/WordPress/gutenberg/pull/35656)) +- Gallery block: Replace gallery experimental setting with a check for use_balanceTags. ([34979](https://github.com/WordPress/gutenberg/pull/34979)) +- Image Block: Add data-id attribute on server side render for core galleries. ([35975](https://github.com/WordPress/gutenberg/pull/35975)) +- Navigation Block: Add missing menu item attributes to core/navigation. ([35634](https://github.com/WordPress/gutenberg/pull/35634)) +- Navigation: Add delete nav menu button. ([35981](https://github.com/WordPress/gutenberg/pull/35981)) +- Navigation: Create nav menu on pattern insertion or when the block has uncontrolled inner blocks. ([36024](https://github.com/WordPress/gutenberg/pull/36024)) +- Navigation: Use a single placeholder for the block. ([36023](https://github.com/WordPress/gutenberg/pull/36023)) +- Page List: Create a JS version for the editor. ([31670](https://github.com/WordPress/gutenberg/pull/31670)) +- Post Comment Author: Add alignment options. ([36045](https://github.com/WordPress/gutenberg/pull/36045)) +- Post Comments: Even out the top margin inside the block. ([35887](https://github.com/WordPress/gutenberg/pull/35887)) +- Post Excerpt: Don't print the wrapper when there is no excerpt. ([35749](https://github.com/WordPress/gutenberg/pull/35749)) +- Post Title: Return no markup if title is empty. ([35861](https://github.com/WordPress/gutenberg/pull/35861)) +- Save Navigation Block data to a wp_navigation post type. ([35746](https://github.com/WordPress/gutenberg/pull/35746)) +- Search: Add contextual defaults when inserted in Navigation block. ([36125](https://github.com/WordPress/gutenberg/pull/36125)) +- Try using flex layout on the Navigation block. ([36169](https://github.com/WordPress/gutenberg/pull/36169)) +- Update navigation block entity automatic name generation and refine naming UI. ([36238](https://github.com/WordPress/gutenberg/pull/36238)) + +#### Accessibility +- Add announcement on formatting change for screen readers. ([35896](https://github.com/WordPress/gutenberg/pull/35896)) +- Add aria-current to navigation link, submenu, page list. ([35880](https://github.com/WordPress/gutenberg/pull/35880)) +- Full Site Editing: Use SearchControl component inside nav menu. ([36011](https://github.com/WordPress/gutenberg/pull/36011)) +- Improve focus styles for Link UI preview title. ([35853](https://github.com/WordPress/gutenberg/pull/35853)) +- Site Editor: Enable the "Save" keyboard shortcut. ([36138](https://github.com/WordPress/gutenberg/pull/36138)) + +#### Block Editor +- Enable rich previews in the Link UI for the Site Editor. ([35951](https://github.com/WordPress/gutenberg/pull/35951)) +- Try: Show drag slot instead of hiding the item being dragged. ([33950](https://github.com/WordPress/gutenberg/pull/33950)) +- Update Link UI design for preview action buttons to use icons for edit and unlink. ([35833](https://github.com/WordPress/gutenberg/pull/35833)) + +#### Full Site Editing +- Move and rename the site editor menu item. ([36064](https://github.com/WordPress/gutenberg/pull/36064)) +- Use Heading component on NavigationMenu and NavigationGroup components. ([36009](https://github.com/WordPress/gutenberg/pull/36009)) + +#### Components +- Add duotone description. ([36018](https://github.com/WordPress/gutenberg/pull/36018)) +- ToolsPanel: Update typography panel layout. ([35911](https://github.com/WordPress/gutenberg/pull/35911)) + +#### Template Editor +- Add resizer to template part focus mode. ([35728](https://github.com/WordPress/gutenberg/pull/35728)) +- Auto resize the height of template part focus mode. ([35974](https://github.com/WordPress/gutenberg/pull/35974)) + +#### Global Styles +- Remove the duplicated title in background, text and link views in Global Styles. ([35583](https://github.com/WordPress/gutenberg/pull/35583)) +- Typography: Switch to ToolsPanel for block support UI. ([33744](https://github.com/WordPress/gutenberg/pull/33744)) + +#### Design Tools +- Enable transparency for duotone. ([34130](https://github.com/WordPress/gutenberg/pull/34130)) +- Typography block support: Add typography support and defaults. ([34064](https://github.com/WordPress/gutenberg/pull/34064)) + +#### Media +- Remove "security" verbiage from warning when filetype does not pass on upload. ([36226](https://github.com/WordPress/gutenberg/pull/36226)) + +#### Patterns +- [Patterns]: Add a flag to hide patterns from UI. ([36108](https://github.com/WordPress/gutenberg/pull/36108)) + +#### Themes +- Remove experimental feature notice. ([36083](https://github.com/WordPress/gutenberg/pull/36083)) + +#### Testing +- Scripts: Increase timeout for end-to-end tests. ([35983](https://github.com/WordPress/gutenberg/pull/35983)) + +#### REST API +- URL Details: Update regex to include `og:Description`. ([35875](https://github.com/WordPress/gutenberg/pull/35875)) + + +### New APIs + +#### Global Styles +- Add API to access global settings, styles, and stylesheet. ([34843](https://github.com/WordPress/gutenberg/pull/34843)) + +#### Block Library +- Inner blocks: Edit/save symmetry + stabilise API. ([26031](https://github.com/WordPress/gutenberg/pull/26031)) + + +### Bug Fixes + +- Allow moving metaboxes to previously empty area. ([25187](https://github.com/WordPress/gutenberg/pull/25187)) +- Avoid showing deleted records in editor saving flow. ([36027](https://github.com/WordPress/gutenberg/pull/36027)) +- BaseControl: Help text id has undefined value if no id is passed to component. ([35899](https://github.com/WordPress/gutenberg/pull/35899)) +- Change `console.error` to `console.warn` for enqueued styles in the editor. ([35914](https://github.com/WordPress/gutenberg/pull/35914)) +- Core Data uses hardcoded baseURL prefix for taxonomies and post types. ([35850](https://github.com/WordPress/gutenberg/pull/35850)) +- Do not translate HTML tag. ([35930](https://github.com/WordPress/gutenberg/pull/35930)) +- Disable ability to edit menus via `Appearance -> Navigation Menus` for non-FSE themes. ([36257](https://github.com/WordPress/gutenberg/pull/36257)) +- Fix crash from calls to `undefined` functions. ([36248](https://github.com/WordPress/gutenberg/pull/36248)) +- Fix WPCS lint errors in global styles. ([36058](https://github.com/WordPress/gutenberg/pull/36058)) +- Fix getPxFromCssUnit test stability and test that memoized function works correctly. ([35939](https://github.com/WordPress/gutenberg/pull/35939)) +- Fix: Rest global styles controller accessing configuration that may not exist. ([36047](https://github.com/WordPress/gutenberg/pull/36047)) +- Make saveEditedEntityRecord use the entity key when available. ([36212](https://github.com/WordPress/gutenberg/pull/36212)) +- Prevent PHP notice from block-supports elements. ([35836](https://github.com/WordPress/gutenberg/pull/35836)) +- Revert "Post Content: Fix float clearing on entry content (#35958)". ([36004](https://github.com/WordPress/gutenberg/pull/36004)) +- Try ensuring the item after post content clears floats. ([36006](https://github.com/WordPress/gutenberg/pull/36006)) +- Unhook _block_template_render_title_tag. ([36133](https://github.com/WordPress/gutenberg/pull/36133)) + +#### Block Library +- Classic Block: Fix select all blocks side effect. ([35999](https://github.com/WordPress/gutenberg/pull/35999)) +- Column block: Only add flex-basis if width contains a number. ([35831](https://github.com/WordPress/gutenberg/pull/35831)) +- Comment Template: Move inner blocks container to separate components. ([36174](https://github.com/WordPress/gutenberg/pull/36174)) +- Blocks: Fix relative URLs for inlined styles. ([35538](https://github.com/WordPress/gutenberg/pull/35538)) +- Fix controlled inner blocks parent block attributes updates. ([35827](https://github.com/WordPress/gutenberg/pull/35827)) +- Fix incorrect attributes definitions. ([36140](https://github.com/WordPress/gutenberg/pull/36140)) +- Gallery block: Only show the gallery upload error message if mixed multiple files uploaded. ([35790](https://github.com/WordPress/gutenberg/pull/35790)) +- Gallery block: Remove the arbitrary alt text that is added to gallery images. ([35936](https://github.com/WordPress/gutenberg/pull/35936)) +- Heading: Avoid error on split when the paragraph isn't registered. ([35871](https://github.com/WordPress/gutenberg/pull/35871)) +- Navigation Submenu: Fix PHP notice. ([35984](https://github.com/WordPress/gutenberg/pull/35984)) +- Navigation overlay menu: Fix submenu spacing. ([35823](https://github.com/WordPress/gutenberg/pull/35823)) +- Navigation: Fix dropdown indicator. ([36106](https://github.com/WordPress/gutenberg/pull/36106)) +- Navigation: Fix issues with responsive justifications. ([35913](https://github.com/WordPress/gutenberg/pull/35913)) +- Navigation: Fix justifications. ([36105](https://github.com/WordPress/gutenberg/pull/36105)) +- Navigation: Fix padding for social links on mobile. ([35824](https://github.com/WordPress/gutenberg/pull/35824)) +- Pattern block: Remove wrapping div. ([36090](https://github.com/WordPress/gutenberg/pull/36090)) +- Post Comment: Handle the case where a comment does not exist. ([35810](https://github.com/WordPress/gutenberg/pull/35810)) +- Post Content: Fix float clearing on entry content. ([35958](https://github.com/WordPress/gutenberg/pull/35958)) +- Post Template Block: Move inner blocks container to separate component. ([35945](https://github.com/WordPress/gutenberg/pull/35945)) +- Post Terms: Prevent the block from breaking on pages. ([35957](https://github.com/WordPress/gutenberg/pull/35957)) +- Site Logo: Fix center alignment. ([35971](https://github.com/WordPress/gutenberg/pull/35971)) + +#### Components +- Fix ColorPalette className. ([36016](https://github.com/WordPress/gutenberg/pull/36016)) +- Fix `<Text>` component text color value to correct color value for Link UI preview description text. ([35851](https://github.com/WordPress/gutenberg/pull/35851)) +- Fix color list picker spacing to accomodate the new color picker. ([36017](https://github.com/WordPress/gutenberg/pull/36017)) +- Fix unexpected movements, and closing on first click in the color picker. ([35670](https://github.com/WordPress/gutenberg/pull/35670)) +- Fixes #34855 RangeControl style issue in RTL. ([35777](https://github.com/WordPress/gutenberg/pull/35777)) +- Popover: Check anchorDocument default view before removing events. ([35832](https://github.com/WordPress/gutenberg/pull/35832)) +- Storybook: Lazy load LTR/RTL styles for consistent specificity. ([35771](https://github.com/WordPress/gutenberg/pull/35771)) +- fix/35709: Set admin color scheme to angle color picker. ([35908](https://github.com/WordPress/gutenberg/pull/35908)) + +#### Global Styles +- Fix navigation in global styles sidebar. ([36203](https://github.com/WordPress/gutenberg/pull/36203)) +- Fix presets data for themes that do not provide any preset. ([36054](https://github.com/WordPress/gutenberg/pull/36054)) +- Generate preset metadata for font-family in the site editor. ([36022](https://github.com/WordPress/gutenberg/pull/36022)) +- Hotfix for leftovers of `WP_Theme_JSON_Resolver::Get_merged_data`. ([36173](https://github.com/WordPress/gutenberg/pull/36173)) +- Lower the specificity of border & padding styles for the outline block style in the button block. ([35968](https://github.com/WordPress/gutenberg/pull/35968)) +- Theme.json: Remove custom prefixes from properties that did not land in 5.8. ([34485](https://github.com/WordPress/gutenberg/pull/34485)) + +#### Block Editor +- Fix inserter with block pattern categories. ([36116](https://github.com/WordPress/gutenberg/pull/36116)) +- Fix navigation block link control zero value in it. ([36198](https://github.com/WordPress/gutenberg/pull/36198)) +- Fix the update of link and suggestions in LinkControl. ([32320](https://github.com/WordPress/gutenberg/pull/32320)) +- Make Link UI inactive if selection extends beyond format bounds or encounters new link. ([35946](https://github.com/WordPress/gutenberg/pull/35946)) +- Fix selection by holding shift key for nested blocks. ([35668](https://github.com/WordPress/gutenberg/pull/35668)) +- Fix shift+click on a child block with its parent selected. ([35988](https://github.com/WordPress/gutenberg/pull/35988)) + +#### Design Tools +- Font Appearance: Improve consistency of label in Typography panel. ([35860](https://github.com/WordPress/gutenberg/pull/35860)) +- Font Family Support: Fix skip serialization check. ([36073](https://github.com/WordPress/gutenberg/pull/36073)) +- Navigation: Force text decoration styles on nav item in editor. ([35859](https://github.com/WordPress/gutenberg/pull/35859)) + +#### Template Editor +- Clear selected block when clicking outside in the template part focus mode. ([35816](https://github.com/WordPress/gutenberg/pull/35816)) +- Templates: Only include templates for the current post types. ([35802](https://github.com/WordPress/gutenberg/pull/35802)) + +#### Plugin +- Fix fatal error in Site Logo block in WP 5.9. ([36195](https://github.com/WordPress/gutenberg/pull/36195)) + +#### Patterns +- Update unsaved navigation block flow. ([35976](https://github.com/WordPress/gutenberg/pull/35976)) + +#### Accessibility +- Try to communicate to screen readers that post title is textarea. ([35898](https://github.com/WordPress/gutenberg/pull/35898)) + +#### Full Site Editing +- Add fallback handling for plugins or themes using the Customizer. ([35877](https://github.com/WordPress/gutenberg/pull/35877)) + +#### Widgets Editor +- Fix layout styles not applying in widgets customizer. ([35865](https://github.com/WordPress/gutenberg/pull/35865)) + +#### CSS & Styling +- Editor defaults for themes with no editor styles and when user disables theme styles. ([35736](https://github.com/WordPress/gutenberg/pull/35736)) + +#### History +- Support disabling autosave for native Unsupported Block Editor. ([35639](https://github.com/WordPress/gutenberg/pull/35639)) + + +### Performance + +#### List View +- Fix pagedown/pageup and improve scrolling. ([36063](https://github.com/WordPress/gutenberg/pull/36063)) + +#### Block Editor +- Improve opening of the block inserter via manual token-based analysis of reusable blocks. ([35763](https://github.com/WordPress/gutenberg/pull/35763)) + +#### Widgets Editor +- List View: Avoid re-rendering all items on block focus. Enable persistent List View in the widget editor. ([35706](https://github.com/WordPress/gutenberg/pull/35706)) + +#### Accessibility +- List View: Render a fixed number of items. ([35230](https://github.com/WordPress/gutenberg/pull/35230)) + + +### Experiments + +#### Block Library +- Adds in basic styling for post comment form. ([35704](https://github.com/WordPress/gutenberg/pull/35704)) +- Navigation Area block. ([36178](https://github.com/WordPress/gutenberg/pull/36178)) +- Migrate classic menus to block-based menus on theme switch. ([36255](https://github.com/WordPress/gutenberg/pull/36255)) +- Post Comments block: Hide the "Comments Closed" message. ([35743](https://github.com/WordPress/gutenberg/pull/35743)) +- Mobile responsive navigation by default. ([35917](https://github.com/WordPress/gutenberg/pull/35917)) +- Reword navigation color labels. ([35916](https://github.com/WordPress/gutenberg/pull/35916)) +- Show the placeholder again when moving from a valid menu to non-existing menu. ([36210](https://github.com/WordPress/gutenberg/pull/36210)) +- Provide a way to manage wp_navigation posts from wp-admin. ([36126](https://github.com/WordPress/gutenberg/pull/36126)) + +#### Global Styles +- Add a Global Styles endpoint and use it in the site editor. ([35801](https://github.com/WordPress/gutenberg/pull/35801)) +- Fix: Crash when resetting user color palette. ([36233](https://github.com/WordPress/gutenberg/pull/36233)) +- Fix: Show user colors on palette indicator. ([36232](https://github.com/WordPress/gutenberg/pull/36232)) +- Migrate theme.json v1 to v2. ([36155](https://github.com/WordPress/gutenberg/pull/36155)) +- Update: Show all color and gradient origins (core, theme, and user). ([35970](https://github.com/WordPress/gutenberg/pull/35970)) + +#### Full Site Editing +- Always display Customizer menu item. ([36168](https://github.com/WordPress/gutenberg/pull/36168)) +- Revert "Always display Customizer menu item". ([36189](https://github.com/WordPress/gutenberg/pull/36189)) +- Remove slug and status columns from templates list in Appearance > Templates. ([35996](https://github.com/WordPress/gutenberg/pull/35996)) + +#### REST API +- Improve unit test coverage for REST API menus endpoints.. ([36177](https://github.com/WordPress/gutenberg/pull/36177)) + +#### Navigation Screen +- Navigation Editor: Show a warning when trying to save unsupported blocks. ([35993](https://github.com/WordPress/gutenberg/pull/35993)) + +#### Reusable Blocks +- Editor: Multi-Entity Saving UI Improvements. ([35933](https://github.com/WordPress/gutenberg/pull/35933)) + +#### Components +- Update: Implement new color palette editor component. ([35783](https://github.com/WordPress/gutenberg/pull/35783)) + +#### Block Editor +- Split control for URL and Text within Link UI. ([33849](https://github.com/WordPress/gutenberg/pull/33849)) + + +### Documentation + +- Add Thunks Tutorial. ([36051](https://github.com/WordPress/gutenberg/pull/36051)) +- Add a more detailed guide for react native development. ([35529](https://github.com/WordPress/gutenberg/pull/35529)) +- Add usage documentation for Rich Text package. ([35885](https://github.com/WordPress/gutenberg/pull/35885)) +- Added link to Ways to keep up with Gutenberg & Full Site Editing. ([36077](https://github.com/WordPress/gutenberg/pull/36077)) +- Blocks: Add view script to block schema and documentation. ([36175](https://github.com/WordPress/gutenberg/pull/36175)) +- Blocks: Document changes to style and editorStyle in `block.json`. ([36218](https://github.com/WordPress/gutenberg/pull/36218)) +- Docs: Add Getting Started level for documentation. ([35891](https://github.com/WordPress/gutenberg/pull/35891)) +- Docs: Add section about using the schema during development. ([35835](https://github.com/WordPress/gutenberg/pull/35835)) +- Docs: Fix Typos in widgets/overview.md. ([36078](https://github.com/WordPress/gutenberg/pull/36078)) +- Docs: Fix schema file URL. ([36157](https://github.com/WordPress/gutenberg/pull/36157)) +- Docs: Improve Getting Started landing page. ([35893](https://github.com/WordPress/gutenberg/pull/35893)) +- Docs: Theme.json - fix typo. ([36139](https://github.com/WordPress/gutenberg/pull/36139)) +- Docs: Tweak organization for getting-started documentation. ([34091](https://github.com/WordPress/gutenberg/pull/34091)) +- Docs: Update the recommendation for the cadence of npm releases. ([35925](https://github.com/WordPress/gutenberg/pull/35925)) +- Env docs: Update wordpress-develop example to clarify src/build location. ([35978](https://github.com/WordPress/gutenberg/pull/35978)) +- Fix a small typo in the "Getting started" documentation. ([36109](https://github.com/WordPress/gutenberg/pull/36109)) +- Fix wording in the Authoring Experience documentation. ([35969](https://github.com/WordPress/gutenberg/pull/35969)) +- Move create-block changelog entries back to Unreleased section. ([35886](https://github.com/WordPress/gutenberg/pull/35886)) +- Release Docs: Remove consecutive RCs warning. ([35855](https://github.com/WordPress/gutenberg/pull/35855)) +- Update Components CONTRIBUTING.md indentation. ([35866](https://github.com/WordPress/gutenberg/pull/35866)) +- fix: Backtick added around `<textarea>` input tag in readme file. ([34813](https://github.com/WordPress/gutenberg/pull/34813)) +- theme.json docs: Add missing settings & styles. ([36137](https://github.com/WordPress/gutenberg/pull/36137)) + + +### Code Quality + +- Add Theme's base global styles endpoint. ([35985](https://github.com/WordPress/gutenberg/pull/35985)) +- Add alexstine as code owner for post-title. ([36056](https://github.com/WordPress/gutenberg/pull/36056)) +- Add block.json schema to generated file. ([35843](https://github.com/WordPress/gutenberg/pull/35843)) +- Add schemas package. ([35998](https://github.com/WordPress/gutenberg/pull/35998)) +- Improvements for the global styles endpoint. ([36071](https://github.com/WordPress/gutenberg/pull/36071)) +- Make sure tests are pure. ([36253](https://github.com/WordPress/gutenberg/pull/36253)) +- Move getStablePath function into the wordrpess/url package. ([35992](https://github.com/WordPress/gutenberg/pull/35992)) +- Remove "experimental" from URL details REST controller and promote to `v1` namespace. ([35915](https://github.com/WordPress/gutenberg/pull/35915)) +- Remove GB prefixed functions from template part. ([36180](https://github.com/WordPress/gutenberg/pull/36180)) +- Schemas: Theme.json - Add `title` to templateParts. ([36145](https://github.com/WordPress/gutenberg/pull/36145)) +- Updates `WP_Theme_JSON_Resolver` and tests to be equal to core. ([36223](https://github.com/WordPress/gutenberg/pull/36223)) +- Update: Use small button on tools panel toggle. ([35935](https://github.com/WordPress/gutenberg/pull/35935)) +- block-editor store: Migrate to thunks. ([35720](https://github.com/WordPress/gutenberg/pull/35720)) +- theme.json: Update test data. ([35883](https://github.com/WordPress/gutenberg/pull/35883)) + +#### Block Library +- Heading: Auto-generated anchors hide implementation details. ([35747](https://github.com/WordPress/gutenberg/pull/35747)) +- Mark Post Comments as stable and Comments Query Loop as experimental. ([36132](https://github.com/WordPress/gutenberg/pull/36132)) +- Mark Post Navigation Link and Term Description blocks as stable. ([36163](https://github.com/WordPress/gutenberg/pull/36163)) +- Remove `post-` prefix from Comment Template inner blocks. ([36171](https://github.com/WordPress/gutenberg/pull/36171)) + +#### Global Styles +- Refactor theme.json migrations to be a single class. ([36182](https://github.com/WordPress/gutenberg/pull/36182)) +- Remove locations we do not translate from `theme-i18n.json`. ([35881](https://github.com/WordPress/gutenberg/pull/35881)) +- Update `theme.json` schema migrations. ([36154](https://github.com/WordPress/gutenberg/pull/36154)) + +#### Post Editor +- Refactor FlatTermSelector into a functional component. ([33459](https://github.com/WordPress/gutenberg/pull/33459)) +- Typo: Translated site properties. ([36097](https://github.com/WordPress/gutenberg/pull/36097)) + +#### Components +- ToolsPanel: Use Grid component to handle layout. ([35621](https://github.com/WordPress/gutenberg/pull/35621)) +- Update spacing in CircularOptionPicker. ([36014](https://github.com/WordPress/gutenberg/pull/36014)) + +#### Data Layer +- [data]: Rename types file from .d.ts to .ts. ([36062](https://github.com/WordPress/gutenberg/pull/36062)) + +#### CSS & Styling +- Remove invalid buttons block CSS property. ([33793](https://github.com/WordPress/gutenberg/pull/33793)) + + +### Tools + +- Remove @chrisvanpatten from CODEOWNERS. ([35937](https://github.com/WordPress/gutenberg/pull/35937)) + +#### Testing +- Add a method to disable auto-accepting dialogs. ([35828](https://github.com/WordPress/gutenberg/pull/35828)) +- Skip broken widgets test. ([36239](https://github.com/WordPress/gutenberg/pull/36239)) +- Skip flaky test for loading block stylesheets in iframe. ([35961](https://github.com/WordPress/gutenberg/pull/35961)) +- Tests: Run block fixtures through KSES. ([35611](https://github.com/WordPress/gutenberg/pull/35611)) + +#### Block Library +- Mark FSE blocks as non experimental. ([35979](https://github.com/WordPress/gutenberg/pull/35979)) + + +### Various + +- Apply borders to canvas rather than other UI elements. ([31081](https://github.com/WordPress/gutenberg/pull/31081)) +- Changes for FSE backport in core. ([36201](https://github.com/WordPress/gutenberg/pull/36201)) +- Mobile - Add support for the Mark HTML tag and updates Aztec iOS to 1.19.5. ([35956](https://github.com/WordPress/gutenberg/pull/35956)) +- Update Appium to 1.22.0. ([35829](https://github.com/WordPress/gutenberg/pull/35829)) +- Updates publish-to-s3 plugin to 0.7.0 for react-native-bridge & react-native-aztec Android and publishes '-sources.jar'. ([36034](https://github.com/WordPress/gutenberg/pull/36034)) +- Use the block name in the "remove block" menu item in the settings dropdown. ([35872](https://github.com/WordPress/gutenberg/pull/35872)) + +#### Site Editor +- Remove navigation panel in site editor. ([36194](https://github.com/WordPress/gutenberg/pull/36194)) + + += 11.8.0 = + +### Enhancements + +#### Block Library +- Add spacing controls to all heading blocks. ([35772](https://github.com/WordPress/gutenberg/pull/35772)) +- Enable slash inserter for heading, list, and quote. ([35360](https://github.com/WordPress/gutenberg/pull/35360)) +- Unify theme block placeholder content. ([35517](https://github.com/WordPress/gutenberg/pull/35517)) +- Buttons: Add gap and vertical margin support. ([34546](https://github.com/WordPress/gutenberg/pull/34546)) +- Categories: Add support for showing only top-level categories. ([35726](https://github.com/WordPress/gutenberg/pull/35726)) +- Column: Allow the specification of blocks allowed within columns. ([35342](https://github.com/WordPress/gutenberg/pull/35342)) +- Comment Content Block: Add typography, color and padding support. ([35183](https://github.com/WordPress/gutenberg/pull/35183)) +- Cover: Add allowedBlocks and TemplateLock attributes in Cover Block. ([31326](https://github.com/WordPress/gutenberg/pull/31326)) +- Cover: Add option to set opacity when background colour used. ([35065](https://github.com/WordPress/gutenberg/pull/35065)) +- Cover: Allow setting the height from the placeholder state. ([35068](https://github.com/WordPress/gutenberg/pull/35068)) +- Cover: Change dimRatio to 50 if media added and dimRatio is set to 100. ([35789](https://github.com/WordPress/gutenberg/pull/35789)) +- Cover: Only use white text when the background of the cover block is dark. ([33541](https://github.com/WordPress/gutenberg/pull/33541)) +- Cover: Use the description in the placeholder. ([34970](https://github.com/WordPress/gutenberg/pull/34970)) +- Embed: Add Pinterest as an embed provider. ([34895](https://github.com/WordPress/gutenberg/pull/34895)) +- Feature Image: Add spacing controls to the featured image block. ([35775](https://github.com/WordPress/gutenberg/pull/35775)) +- Featured image and Image: Remove descendent space. ([35466](https://github.com/WordPress/gutenberg/pull/35466)) +- Gallery Block: Get media data in a single request. ([34389](https://github.com/WordPress/gutenberg/pull/34389)) +- Heading: Autogenerate heading anchors. ([30825](https://github.com/WordPress/gutenberg/pull/30825)) +- Quote: Update deprecation to expect style block supports. ([35615](https://github.com/WordPress/gutenberg/pull/35615)) +- Page List: Show empty placeholder if no items. ([35441](https://github.com/WordPress/gutenberg/pull/35441)) +- Post Date: Add more typography options. ([35422](https://github.com/WordPress/gutenberg/pull/35422)) +- Post Comment Author: Add link settings and block supports. ([35595](https://github.com/WordPress/gutenberg/pull/35595)) +- Post Comment Date: Add link setting and block supports. ([35112](https://github.com/WordPress/gutenberg/pull/35112)) +- Quote: Added a "plain" style for quote blocks. ([29856](https://github.com/WordPress/gutenberg/pull/29856)) +- Search: Enable inheritance in search block. ([35723](https://github.com/WordPress/gutenberg/pull/35723)) +- Site Logo: Add a basic example to the site logo block. ([35588](https://github.com/WordPress/gutenberg/pull/35588)) +- Site Logo: Move the Reset button to the Replace menu dropdown. ([35372](https://github.com/WordPress/gutenberg/pull/35372)) +- Site Logo: placeholder tweaks. ([35397](https://github.com/WordPress/gutenberg/pull/35397)) +- Site Tagline: Add fontStyle control to Site Tagline block. ([35507](https://github.com/WordPress/gutenberg/pull/35507)) +- Site Tagline: Add wide + full support to the site tagline block. ([35589](https://github.com/WordPress/gutenberg/pull/35589)) +- Site Title: Add basic example to site-title block. ([35590](https://github.com/WordPress/gutenberg/pull/35590)) +- Site Logo: Remove "Reset" button icon. ([35434](https://github.com/WordPress/gutenberg/pull/35434)) +- Social Icons: Add top and bottom margin support. ([35374](https://github.com/WordPress/gutenberg/pull/35374)) +- Social Links: Polish logos only style. ([35586](https://github.com/WordPress/gutenberg/pull/35586)) + +#### Design Tools +- ToolsPanel: Switch to plus icon when no controls present in panel body. ([34107](https://github.com/WordPress/gutenberg/pull/34107)) +- Block Supports: Add panel specific className. ([35793](https://github.com/WordPress/gutenberg/pull/35793)) +- Block Supports: Switch dimensions inspector controls slot to bubble virtually. ([34725](https://github.com/WordPress/gutenberg/pull/34725)) +- Inspector Controls: Resort the order of the design tools associated with styles hooks. ([35574](https://github.com/WordPress/gutenberg/pull/35574)) + +#### Global Styles +- Allow users to store duotone data. ([35318](https://github.com/WordPress/gutenberg/pull/35318)) +- Allow child theme.json to be merged with parent theme.json. ([35459](https://github.com/WordPress/gutenberg/pull/35459)) +- Extract the three color panels to their own global styles view. ([35400](https://github.com/WordPress/gutenberg/pull/35400)) +- Font family: Switch from CSS Custom Property to classes. ([31910](https://github.com/WordPress/gutenberg/pull/31910)) +- Move the global styles reset action to a dropdown menu. ([35559](https://github.com/WordPress/gutenberg/pull/35559)) +- Update descriptions for the different screens under global styles. ([35429](https://github.com/WordPress/gutenberg/pull/35429)) +- Update the global styles sidebar's root view to use Card components. ([35547](https://github.com/WordPress/gutenberg/pull/35547)) +- Use text color to render the Aa preview in global styles. ([35631](https://github.com/WordPress/gutenberg/pull/35631)) + +#### Theming +- Add [data-block] to appender. ([35356](https://github.com/WordPress/gutenberg/pull/35356)) +- Enable theme supports automatically for FSE theme. ([35593](https://github.com/WordPress/gutenberg/pull/35593)) +- Remove default padding/margin on the body of the page and editor canvas. ([35421](https://github.com/WordPress/gutenberg/pull/35421)) +- Support title in templateParts. ([35626](https://github.com/WordPress/gutenberg/pull/35626)) +- CSS: Add a reset for image heights. ([30092](https://github.com/WordPress/gutenberg/pull/30092)) + +#### Patterns +- Increase number of items per page for default Query Loop Block. ([35603](https://github.com/WordPress/gutenberg/pull/35603)) +- Featured patterns from pattern directory. ([35115](https://github.com/WordPress/gutenberg/pull/35115)) + +#### Block Editor +- Add animations for insertion point, dropzone, and other elements. ([33132](https://github.com/WordPress/gutenberg/pull/33132)) +- Adjust Link UI visual styling. ([35414](https://github.com/WordPress/gutenberg/pull/35414)) +- Add some top margin. ([35717](https://github.com/WordPress/gutenberg/pull/35717)) +- Show ellipsis menu in the List View. ([35170](https://github.com/WordPress/gutenberg/pull/35170)) + +#### Template Editor +- Add more options to template areas in template details. ([35577](https://github.com/WordPress/gutenberg/pull/35577)) +- Add template areas to template inspector. ([35239](https://github.com/WordPress/gutenberg/pull/35239)) +- Add template details to template parts. ([35444](https://github.com/WordPress/gutenberg/pull/35444)) +- Align the layout of the template card with the block card. ([35391](https://github.com/WordPress/gutenberg/pull/35391)) +- Update site editor block placeholder styling. ([35513](https://github.com/WordPress/gutenberg/pull/35513)) +- Use a dark background for the site editor. ([35520](https://github.com/WordPress/gutenberg/pull/35520)) + +#### Components +- Add shortcut provider. ([35652](https://github.com/WordPress/gutenberg/pull/35652)) +- Iterate on the design of the colors and gradients panel. ([35535](https://github.com/WordPress/gutenberg/pull/35535)) +- Navigator: Update `Navigator` styling to facilitate sticky positioning. ([35518](https://github.com/WordPress/gutenberg/pull/35518)) +- Repositioned RangeControl tooltip and adjusted image zoom control dropdown height. ([27374](https://github.com/WordPress/gutenberg/pull/27374)) +- Remove segmented control vertical separators. ([35497](https://github.com/WordPress/gutenberg/pull/35497)) +- Storybook: Add RTL switcher to toolbar. ([35711](https://github.com/WordPress/gutenberg/pull/35711)) +- Storybook: Add story for TypographyPanel. ([35293](https://github.com/WordPress/gutenberg/pull/35293)) +- Storybook: Enable Controls and disable Knobs by default. ([35682](https://github.com/WordPress/gutenberg/pull/35682)) +- Storybook: Remove outdated decorator configuration. ([35678](https://github.com/WordPress/gutenberg/pull/35678)) +- Support "any" step in NumberControl and RangeControl. ([34542](https://github.com/WordPress/gutenberg/pull/34542)) +- ToggleGroupControl: Allow custom aria-label. ([35423](https://github.com/WordPress/gutenberg/pull/35423)) +- Update range control metrics. ([35540](https://github.com/WordPress/gutenberg/pull/35540)) +- Update FontSize control. ([35395](https://github.com/WordPress/gutenberg/pull/35395)) + +#### Packages +- Create Block: Add PascalCase slug to create-block template strings. ([35462](https://github.com/WordPress/gutenberg/pull/35462)) +- Create Block: Allow local directories to be passed to --template as relative paths. ([35645](https://github.com/WordPress/gutenberg/pull/35645)) +- Test Setup: Add more-complete mocks of common timer functions. ([35368](https://github.com/WordPress/gutenberg/pull/35368)) +- Scripts: Allow customization of the ARTIFACTS_PATH via WP_ARTIFACTS_PATH env var. ([35371](https://github.com/WordPress/gutenberg/pull/35371)) + + +### Accessibility +- Rich text popovers: Move to block tools to fix tab order. ([34956](https://github.com/WordPress/gutenberg/pull/34956)) +- Save button: Prevent focus loss. ([34731](https://github.com/WordPress/gutenberg/pull/34731)) + +### Performance + +#### Global Styles +- Pass only the data the site editor uses. ([35458](https://github.com/WordPress/gutenberg/pull/35458)) +- Use a context provider for global styles configuration. ([35622](https://github.com/WordPress/gutenberg/pull/35622)) + +### Bug Fixes + +#### Block Library +- Block Settings: Don't render 'Move to' if the block cannot be moved. ([35463](https://github.com/WordPress/gutenberg/pull/35463)) +- Cover: Update placeholder minHeight style to support non-px units. ([35614](https://github.com/WordPress/gutenberg/pull/35614)) +- Cover: Update 'templateLock' attribute. ([35671](https://github.com/WordPress/gutenberg/pull/35671)) +- Featured Image: Center placeholder chip contents. ([35417](https://github.com/WordPress/gutenberg/pull/35417)) +- Heading: Fix undo/redo "trap". ([35767](https://github.com/WordPress/gutenberg/pull/35767)) +- Heading: Remove anchor map when block unmounts. ([35761](https://github.com/WordPress/gutenberg/pull/35761)) +- Site Logo: Fix site logo block on dark backgrounds. ([35718](https://github.com/WordPress/gutenberg/pull/35718)) + +#### i18n +- Fix HelpHub link i18n for page-jumps. ([35404](https://github.com/WordPress/gutenberg/pull/35404)) +- Fix template part block untranslated strings. ([35715](https://github.com/WordPress/gutenberg/pull/35715)) +- Translation note for Home/end to avoid mistranslations. ([35669](https://github.com/WordPress/gutenberg/pull/35669)) + +#### Packages +- Server Site Render: Prevent empty renders in ServerSideRender component caused by changing props while already fetching markup. ([35433](https://github.com/WordPress/gutenberg/pull/35433)) +- Rich text: formats: allow format to filter value when changing tag name ([35516](https://github.com/WordPress/gutenberg/pull/35516/files)) + +#### Components +- Color Picker: Fix some issues on the color picker component; Remove tinycolor2;. ([35562](https://github.com/WordPress/gutenberg/pull/35562)) +- Navigator: Hide horizontal overflow in `Navigator`. ([35332](https://github.com/WordPress/gutenberg/pull/35332)) +- Popover: Fix __unstableBoundaryParent. ([35082](https://github.com/WordPress/gutenberg/pull/35082)) +- RawHTML component: Allow multiple children. ([35532](https://github.com/WordPress/gutenberg/pull/35532)) +- Rich text: Fix internal paste across multiline and single line instances. ([35416](https://github.com/WordPress/gutenberg/pull/35416)) +- Toggle Group Control: Fix visual state when no option is selected. ([35545](https://github.com/WordPress/gutenberg/pull/35545)) +- Toggle Group Control: Fixed condition to show separator correctly. ([35409](https://github.com/WordPress/gutenberg/pull/35409)) +- Toogle Group Control: Fix `ToggleGroupControlOption` not passing `ref` to the underlying element. ([35546](https://github.com/WordPress/gutenberg/pull/35546)) +- Tooltip: For Tooltips, prevent emitting events to child elements if they are disabled. ([35254](https://github.com/WordPress/gutenberg/pull/35254)) +- Tooltip: Remove extra comma character from Tooltip when underlying component is disabled. ([35247](https://github.com/WordPress/gutenberg/pull/35247)) + +#### Themes +- Custom Templates: Use "title" from the theme.json. ([35592](https://github.com/WordPress/gutenberg/pull/35592)) +- Elements block support: Fix link color rendering on site front end. ([35446](https://github.com/WordPress/gutenberg/pull/35446)) +- Move the link color styles to the footer. ([35425](https://github.com/WordPress/gutenberg/pull/35425)) +- Reset margin for all children of flow layouts. ([35426](https://github.com/WordPress/gutenberg/pull/35426)) + +#### Template Editor +- Use slug as template parts area item key. ([35796](https://github.com/WordPress/gutenberg/pull/35796)) +- Fix missing titles in general areas. ([35657](https://github.com/WordPress/gutenberg/pull/35657)) + +#### Block API +- Blocks: Apply the most recent filters to previously registered blocks. ([34299](https://github.com/WordPress/gutenberg/pull/34299)) +- Fix class serialization of font size and colors in dynamic blocks that use block supports. ([35751](https://github.com/WordPress/gutenberg/pull/35751)) + +#### Design Tools +- Border Radius Control: Fix undefined value on first click into RangeControl. ([35651](https://github.com/WordPress/gutenberg/pull/35651)) + +#### Block Editor +- Fix updating the block list after block removal. ([35721](https://github.com/WordPress/gutenberg/pull/35721)) +- Fix sibling inserter animation. ([35729](https://github.com/WordPress/gutenberg/pull/35729)) +- Inserter: Fix gap between Search and Tabs. ([35537](https://github.com/WordPress/gutenberg/pull/35537)) +- Saving post: Transparent disabled button. ([35542](https://github.com/WordPress/gutenberg/pull/35542)) +- FSE: Coding standards: DOCTYPE should be the first line/character of any HTML document. ([35442](https://github.com/WordPress/gutenberg/pull/35442)) +- [Block Editor]: Fix displaying only the none alignment option ([35822](https://github.com/WordPress/gutenberg/pull/35822)) + +#### REST API +- Fix preloading middleware referencing stale data for OPTIONS requests. ([35527](https://github.com/WordPress/gutenberg/pull/35527)) + +#### List View +- Fix expand and collapse when the icon is clicked. ([35526](https://github.com/WordPress/gutenberg/pull/35526)) + +#### Global Styles +- Fix presets that use a callback to validate user data. ([35255](https://github.com/WordPress/gutenberg/pull/35255)) + +#### CSS & Styling +- Remove font size classes that are enqueued in the global stylesheet. ([35182](https://github.com/WordPress/gutenberg/pull/35182)) + +#### Block API +- Allow more than 1 block stylesheets. ([32510](https://github.com/WordPress/gutenberg/pull/32510)) + +### Experiments + +#### Navigation Block +- Add block gap support. ([35277](https://github.com/WordPress/gutenberg/pull/35277)) +- Enable always on burger menu for responsive navigation menus. ([35568](https://github.com/WordPress/gutenberg/pull/35568)) +- Fix issue with space-between. ([35722](https://github.com/WordPress/gutenberg/pull/35722)) +- Submenu item paddings & fixes. ([35716](https://github.com/WordPress/gutenberg/pull/35716)) +- Fix navigation gap & padding issues. ([35752](https://github.com/WordPress/gutenberg/pull/35752)) +- Remove color inheritance specificity. ([35725](https://github.com/WordPress/gutenberg/pull/35725)) +- Remove deprecated classnames from Navigation Link block. ([35358](https://github.com/WordPress/gutenberg/pull/35358)) +- +#### Navigation Screen +- Use new core functions in menu items REST API. ([35648](https://github.com/WordPress/gutenberg/pull/35648)) +- Navigation: Preload more API requests. ([35402](https://github.com/WordPress/gutenberg/pull/35402)) +- Refactor `gutenberg_initialize_editor` function and remove `block_editor_preload_data` filter. ([35838](https://github.com/WordPress/gutenberg/pull/35838)) + + + +#### Full Site Editing +- Try: Remove dotted ancestor border. ([35637](https://github.com/WordPress/gutenberg/pull/35637)) + + +### Documentation + +#### Handbook +- Add categories to TOC to help digest the FAQ. ([35519](https://github.com/WordPress/gutenberg/pull/35519)) +- Add missing documentation for the `wrapperProps` property for the `BlockListBlock` component returned by the `editor.blockListEdit` filter. ([26961](https://github.com/WordPress/gutenberg/pull/26961)) +- Add section on using theme.json schema. ([35739](https://github.com/WordPress/gutenberg/pull/35739)) +- Add Table of Contents to FAQ page. ([35455](https://github.com/WordPress/gutenberg/pull/35455)) +- Clarify documentation for InnerBlocks orientation prop. ([35712](https://github.com/WordPress/gutenberg/pull/35712)) +- CustomRadius - Remove plugin only text. ([35582](https://github.com/WordPress/gutenberg/pull/35582)) +- Update block categories. ([35523](https://github.com/WordPress/gutenberg/pull/35523)) +- Update `npm run build` command for developing with Gutenberg locally. ([35681](https://github.com/WordPress/gutenberg/pull/35681)) + +#### Packages +- Block Editor: Update default value of the viewportWidth attribute in documentation. ([35659](https://github.com/WordPress/gutenberg/pull/35659)) +- Components: Add the storybook link to the `/components` README. ([35493](https://github.com/WordPress/gutenberg/pull/35493)) +- Components: Add readme for SkipToSelectedBlock component. ([32958](https://github.com/WordPress/gutenberg/pull/32958)) +- Componentes: Add CHANGELOG entry for the fieldset removal from `FontAppearanceControl`. ([35585](https://github.com/WordPress/gutenberg/pull/35585)) +- Components: Add entry to CHANGELOG regarding new ColorPicker. ([35486](https://github.com/WordPress/gutenberg/pull/35486)) +- Components: Fix markdown highlighting on components CONTRIBUTING.md. ([35633](https://github.com/WordPress/gutenberg/pull/35633)) +- Components: Mark `CustomSelectControl` `hint` option as experimental. ([35673](https://github.com/WordPress/gutenberg/pull/35673)) +- Components: Polish `ToggleGroupControl`. ([35600](https://github.com/WordPress/gutenberg/pull/35600)) +- Components: Small tweaks to contributing guidelines. ([35620](https://github.com/WordPress/gutenberg/pull/35620)) +- Components: Update README for SelectControl. ([28811](https://github.com/WordPress/gutenberg/pull/28811)) +- Components: Update DateTimePicker component README to remove reference to isDayHighlighted callback. ([35363](https://github.com/WordPress/gutenberg/pull/35363)) +- Components, feat(SelectControl): Add children prop. ([29540](https://github.com/WordPress/gutenberg/pull/29540)) +- Create Block: Update documentation and readme post merge of #35645. ([35679](https://github.com/WordPress/gutenberg/pull/35679)) + +### Code Quality +- Block Editor: Fix odd usage of transform-styles wrap function (and tighten types). ([23599](https://github.com/WordPress/gutenberg/pull/23599)) +- Constrained tabbing: Simplify. ([34836](https://github.com/WordPress/gutenberg/pull/34836)) +- Compose: Convert `usePrevious` hook to TypeScript. ([35597](https://github.com/WordPress/gutenberg/pull/35597)) +- Update Callers to handle when getBlockType return undefined. ([35097](https://github.com/WordPress/gutenberg/pull/35097)) +- Components: Polish ResizableBox and convert it to TypeScript. ([35062](https://github.com/WordPress/gutenberg/pull/35062)) +- Components: Remove tinycolor object usage from the gradient picker. ([35544](https://github.com/WordPress/gutenberg/pull/35544)) +- Components: Remove duplicated className in Card component. ([35333](https://github.com/WordPress/gutenberg/pull/35333)) +- Components: Remove unused `useJumpStep` utility. ([35561](https://github.com/WordPress/gutenberg/pull/35561)) +- Components: Use new color picker props. ([35566](https://github.com/WordPress/gutenberg/pull/35566)) +- Components: Replace the color picker component with the new version. ([35220](https://github.com/WordPress/gutenberg/pull/35220)) +- Components, FontAppearanceControl: Remove `fieldset` wrapper. ([35461](https://github.com/WordPress/gutenberg/pull/35461)) +- Components, ToolsPanel: Remove hardcoded classnames. ([35415](https://github.com/WordPress/gutenberg/pull/35415)) +- Components, UnitControl component: Refactor JSX components to TypeScript. ([35281](https://github.com/WordPress/gutenberg/pull/35281)) +- Global Styles: Refactor how the Global Styles access and sets data. ([35264](https://github.com/WordPress/gutenberg/pull/35264)) +- Post Editor: Fix-up Post Editor’s preferences modal. ([35369](https://github.com/WordPress/gutenberg/pull/35369)) +- Remove Tinycolor usage from component color utils. ([35553](https://github.com/WordPress/gutenberg/pull/35553)) +- Reusable Blocks: Thunkify reusable-blocks store. ([35217](https://github.com/WordPress/gutenberg/pull/35217)) + + +### Tools + +#### Packages +- Scripts: Remove inject polyfill by default. ([35436](https://github.com/WordPress/gutenberg/pull/35436)) + +#### Testing +- Child theme.json: Update test to better capture that childs can update single parts in isolation. ([35759](https://github.com/WordPress/gutenberg/pull/35759)) +- Border Radius Control: Add fallback px unit and add utils tests. ([35786](https://github.com/WordPress/gutenberg/pull/35786)) +- Fix preview end-to-end tests. ([35565](https://github.com/WordPress/gutenberg/pull/35565)) +- Flaky Tests: Fix taxonomies flaky tests. ([35534](https://github.com/WordPress/gutenberg/pull/35534)) +- Flaky Tests: Try another fix for flaky nav test. ([35443](https://github.com/WordPress/gutenberg/pull/35443)) +- Performance tests: Add more detailed loading metrics. ([32237](https://github.com/WordPress/gutenberg/pull/32237)) +- Components, Panel: Improve unit tests. ([35658](https://github.com/WordPress/gutenberg/pull/35658)) +- Enable/skipped metabox test. ([35594](https://github.com/WordPress/gutenberg/pull/35594)) + +#### Build Tooling +- Revert version bump if build job fails. ([33239](https://github.com/WordPress/gutenberg/pull/33239)) +- Updates react-native-aztec android to use S3 dependency for Aztec editor. ([35606](https://github.com/WordPress/gutenberg/pull/35606)) + + += 11.7.1 = + +### Bug Fixes + +- Rich text: formats: allow format to filter value when changing tag name ([35516](https://github.com/WordPress/gutenberg/pull/35516)) + + += 11.8.0-rc.1 = + + + +### Enhancements + +- Allow customization of the ARTIFACTS_PATH via WP_ARTIFACTS_PATH env var. ([35371](https://github.com/WordPress/gutenberg/pull/35371)) +- Allow local directories to be passed to --template as relative paths. ([35645](https://github.com/WordPress/gutenberg/pull/35645)) +- Test Setup: Add more-complete mocks of common timer functions. ([35368](https://github.com/WordPress/gutenberg/pull/35368)) + +#### Block Library +- Add basic example to site logo block. ([35588](https://github.com/WordPress/gutenberg/pull/35588)) +- Add basic example to site-title block. ([35590](https://github.com/WordPress/gutenberg/pull/35590)) +- Add fontStyle control to Site Tagline block. ([35507](https://github.com/WordPress/gutenberg/pull/35507)) +- Add spacing controls to the featured image block. ([35775](https://github.com/WordPress/gutenberg/pull/35775)) +- Add wide + full support to the site tagline block. ([35589](https://github.com/WordPress/gutenberg/pull/35589)) +- Added a "plain" style for quote blocks. ([29856](https://github.com/WordPress/gutenberg/pull/29856)) +- Autogenerate heading anchors. ([30825](https://github.com/WordPress/gutenberg/pull/30825)) +- Comment Content Block: Add typography, color and padding support. ([35183](https://github.com/WordPress/gutenberg/pull/35183)) +- Cover block: Add option to set opacity when background colour used. ([35065](https://github.com/WordPress/gutenberg/pull/35065)) +- Cover block: Allow setting the height from the placeholder state. ([35068](https://github.com/WordPress/gutenberg/pull/35068)) +- Embed: Add Pinterest as an embed provider. ([34895](https://github.com/WordPress/gutenberg/pull/34895)) +- Enable always on burger menu for responsive navigation menus. ([35568](https://github.com/WordPress/gutenberg/pull/35568)) +- Enable slash inserter for heading, list, and quote. ([35360](https://github.com/WordPress/gutenberg/pull/35360)) +- Post editor: Add some top margin. ([35717](https://github.com/WordPress/gutenberg/pull/35717)) +- Try: Site Logo placeholder tweaks. ([35397](https://github.com/WordPress/gutenberg/pull/35397)) +- [Block: Post comment date]: Add link setting and block supports. ([35112](https://github.com/WordPress/gutenberg/pull/35112)) +- [Categories]: Add support for showing only top level categories. ([35726](https://github.com/WordPress/gutenberg/pull/35726)) + +#### Components +- Fix some issues on the color picker component; Remove tinycolor2;. ([35562](https://github.com/WordPress/gutenberg/pull/35562)) +- Iterate on the design of the colors and gradients panel. ([35535](https://github.com/WordPress/gutenberg/pull/35535)) +- Storybook: Add RTL switcher to toolbar. ([35711](https://github.com/WordPress/gutenberg/pull/35711)) +- Storybook: Enable Controls and disable Knobs by default. ([35682](https://github.com/WordPress/gutenberg/pull/35682)) +- Support "any" step in NumberControl and RangeControl. ([34542](https://github.com/WordPress/gutenberg/pull/34542)) +- ToggleGroupControl: Allow custom aria-label. ([35423](https://github.com/WordPress/gutenberg/pull/35423)) +- Try: Remove segmented control vertical separators. ([35497](https://github.com/WordPress/gutenberg/pull/35497)) +- Update `Navigator` styling to facilitate sticky positioning. ([35518](https://github.com/WordPress/gutenberg/pull/35518)) +- Update the global styles sidebar's root view to use Card components. ([35547](https://github.com/WordPress/gutenberg/pull/35547)) + +#### Themes +- Enable theme supports automatically for FSE theme. ([35593](https://github.com/WordPress/gutenberg/pull/35593)) +- Remove default padding/margin on the body of the page and editor canvas. ([35421](https://github.com/WordPress/gutenberg/pull/35421)) +- Support title in templateParts. ([35626](https://github.com/WordPress/gutenberg/pull/35626)) + +#### Design Tools +- Add spacing controls to all heading blocks. ([35772](https://github.com/WordPress/gutenberg/pull/35772)) +- ToolsPanel: Switch to plus icon when no controls present in panel body. ([34107](https://github.com/WordPress/gutenberg/pull/34107)) + +#### Patterns +- Increase number of items per page for default Query Loop Block. ([35603](https://github.com/WordPress/gutenberg/pull/35603)) +- [Patterns]: Featured patterns from pattern directory. ([35115](https://github.com/WordPress/gutenberg/pull/35115)) + +#### Global Styles +- Extract the three color panels to their own global styles view. ([35400](https://github.com/WordPress/gutenberg/pull/35400)) +- Move the global styles reset action to a dropdown menu. ([35559](https://github.com/WordPress/gutenberg/pull/35559)) + +#### List View +- Show ellipsis menu in the List View. ([35170](https://github.com/WordPress/gutenberg/pull/35170)) + +#### REST API +- Gallery Block: Get media data in a single request. ([34389](https://github.com/WordPress/gutenberg/pull/34389)) + + +### New APIs + +- Add PascalCase slug to create-block template strings. ([35462](https://github.com/WordPress/gutenberg/pull/35462)) + + +### Bug Fixes + +- Constrained tabbing: Simplify. ([34836](https://github.com/WordPress/gutenberg/pull/34836)) +- Fix HelpHub link i18n for page-jumps. ([35404](https://github.com/WordPress/gutenberg/pull/35404)) +- Fix invisible bottom sheet backdrop on Android. ([35557](https://github.com/WordPress/gutenberg/pull/35557)) +- Fix overflowing content for native Help screen. ([35552](https://github.com/WordPress/gutenberg/pull/35552)) +- Fix sibling inserter animation. ([35729](https://github.com/WordPress/gutenberg/pull/35729)) +- Fix template part block untranslated strings. ([35715](https://github.com/WordPress/gutenberg/pull/35715)) +- Fix updating the block list after block removal. ([35721](https://github.com/WordPress/gutenberg/pull/35721)) +- Fix: Prevent empty renders in ServerSideRender component caused by changing props while already fetching markup. ([35433](https://github.com/WordPress/gutenberg/pull/35433)) +- Fixed condition to show separator correctly. ([35409](https://github.com/WordPress/gutenberg/pull/35409)) +- Popover: Fix __unstableBoundaryParent. ([35082](https://github.com/WordPress/gutenberg/pull/35082)) +- Rich text: Fix internal paste across multiline and single line instances. ([35416](https://github.com/WordPress/gutenberg/pull/35416)) +- Saving post: Transparent disabled button. ([35542](https://github.com/WordPress/gutenberg/pull/35542)) + +#### Block Library +- Block Settings: Don't render 'Move to' if the block cannot be moved. ([35463](https://github.com/WordPress/gutenberg/pull/35463)) +- Cover block: Update placeholder minHeight style to support non-px units. ([35614](https://github.com/WordPress/gutenberg/pull/35614)) +- Cover: Update 'templateLock' attribute. ([35671](https://github.com/WordPress/gutenberg/pull/35671)) +- Featured Image: Center placeholder chip contents. ([35417](https://github.com/WordPress/gutenberg/pull/35417)) +- Fix site logo block on dark backgrounds. ([35718](https://github.com/WordPress/gutenberg/pull/35718)) +- Heading: Fix undo/redo "trap". ([35767](https://github.com/WordPress/gutenberg/pull/35767)) +- Heading: Remove anchor map when block unmounts. ([35761](https://github.com/WordPress/gutenberg/pull/35761)) + +#### Components +- Add shortcut provider. ([35652](https://github.com/WordPress/gutenberg/pull/35652)) +- Fix `ToggleGroupControlOption` not passing `ref` to the underlying element. ([35546](https://github.com/WordPress/gutenberg/pull/35546)) +- For Tooltips, prevent emitting events to child elements if they are disabled. ([35254](https://github.com/WordPress/gutenberg/pull/35254)) +- Hide horizontal overflow in `Navigator`. ([35332](https://github.com/WordPress/gutenberg/pull/35332)) +- RawHTML component: Allow multiple children. ([35532](https://github.com/WordPress/gutenberg/pull/35532)) +- Remove extra comma character from Tooltip when underlying component is disabled. ([35247](https://github.com/WordPress/gutenberg/pull/35247)) +- [ToggleGroupControl]: Fix visual state when no option is selected. ([35545](https://github.com/WordPress/gutenberg/pull/35545)) + +#### Themes +- Custom Templates: Use "title" from the theme.json. ([35592](https://github.com/WordPress/gutenberg/pull/35592)) +- Elements block support: Fix link color rendering on site front end. ([35446](https://github.com/WordPress/gutenberg/pull/35446)) +- Move the link color styles to the footer. ([35425](https://github.com/WordPress/gutenberg/pull/35425)) +- Reset margin for all children of flow layouts. ([35426](https://github.com/WordPress/gutenberg/pull/35426)) + +#### Template Editor +- FSE: Use slug as template parts area item key. ([35796](https://github.com/WordPress/gutenberg/pull/35796)) +- Fix missing titles in general areas. ([35657](https://github.com/WordPress/gutenberg/pull/35657)) + +#### Block API +- Blocks: Apply the most recent filters to previously registered blocks. ([34299](https://github.com/WordPress/gutenberg/pull/34299)) +- Fix class serialization of font-size and colors in dynamic blocks that use block supports. ([35751](https://github.com/WordPress/gutenberg/pull/35751)) + +#### Design Tools +- Border Radius Control: Fix undefined value on first click into RangeControl. ([35651](https://github.com/WordPress/gutenberg/pull/35651)) + +#### Block Editor +- Inserter: Fix gap between Search and Tabs. ([35537](https://github.com/WordPress/gutenberg/pull/35537)) + +#### REST API +- Fix preloading middleware referencing stale data for OPTIONS requests. ([35527](https://github.com/WordPress/gutenberg/pull/35527)) + +#### List View +- Fix expand and collapsing when the icon is clicked. ([35526](https://github.com/WordPress/gutenberg/pull/35526)) + +#### Navigation Screen +- Navigation: Preload more API requests. ([35402](https://github.com/WordPress/gutenberg/pull/35402)) + + +### Performance + +#### Global Styles +- Pass only the data the site editor uses. ([35458](https://github.com/WordPress/gutenberg/pull/35458)) +- Use a context provider for global styles configuration. ([35622](https://github.com/WordPress/gutenberg/pull/35622)) + +#### CSS & Styling +- Remove font size classes that are enqueued in the global stylesheet. ([35182](https://github.com/WordPress/gutenberg/pull/35182)) + +#### Block API +- Allow more than 1 block stylesheets. ([32510](https://github.com/WordPress/gutenberg/pull/32510)) + + +### Experiments + +#### Global Styles +- Allow users to store duotone data. ([35318](https://github.com/WordPress/gutenberg/pull/35318)) +- FSE: Allow child theme.json to be merged with parent theme.json. ([35459](https://github.com/WordPress/gutenberg/pull/35459)) +- Fix presets that use a callback to validate user data. ([35255](https://github.com/WordPress/gutenberg/pull/35255)) +- Font family: Switch from CSS Custom Property to classes. ([31910](https://github.com/WordPress/gutenberg/pull/31910)) +- Update descriptions for the different screens under global styles. ([35429](https://github.com/WordPress/gutenberg/pull/35429)) +- Use text color to render the Aa preview in global styles. ([35631](https://github.com/WordPress/gutenberg/pull/35631)) + +#### Block Library +- Navigation: Fix issue with space-between. ([35722](https://github.com/WordPress/gutenberg/pull/35722)) +- Submenu item paddings & fixes. ([35716](https://github.com/WordPress/gutenberg/pull/35716)) +- Try: Fix navigation gap & padding issues. ([35752](https://github.com/WordPress/gutenberg/pull/35752)) +- Try: Remove color inheritance specificity. ([35725](https://github.com/WordPress/gutenberg/pull/35725)) + +#### Navigation Screen +- Use new core functions in menu items REST API. ([35648](https://github.com/WordPress/gutenberg/pull/35648)) + +#### Full Site Editing +- Try: Remove dotted ancestor border. ([35637](https://github.com/WordPress/gutenberg/pull/35637)) + +#### Design Tools +- Navigation Block: Add block gap support. ([35277](https://github.com/WordPress/gutenberg/pull/35277)) + +#### Themes +- CSS: Add a reset for image heights. ([30092](https://github.com/WordPress/gutenberg/pull/30092)) + + +### Documentation + +- Add readme for SkipToSelectedBlock component. ([32958](https://github.com/WordPress/gutenberg/pull/32958)) +- Added Table of Contents to FAQ page. ([35455](https://github.com/WordPress/gutenberg/pull/35455)) +- Added missing documentation for the `wrapperProps` property for the `BlockListBlock` component returned by the `editor.blockListEdit` filter. ([26961](https://github.com/WordPress/gutenberg/pull/26961)) +- Docs: Add section on using theme.json schema. ([35739](https://github.com/WordPress/gutenberg/pull/35739)) +- Docs: CustomRadius - Remove plugin only text. ([35582](https://github.com/WordPress/gutenberg/pull/35582)) +- Docs: Update block categories. ([35523](https://github.com/WordPress/gutenberg/pull/35523)) +- Fix markdown highlighting on components CONTRIBUTING.md. ([35633](https://github.com/WordPress/gutenberg/pull/35633)) +- Handbook: Add categories to TOC to help digest the FAQ. ([35519](https://github.com/WordPress/gutenberg/pull/35519)) +- Update README for SelectControl. ([28811](https://github.com/WordPress/gutenberg/pull/28811)) +- Update `npm run build` command for developing with Gutenberg locally. ([35681](https://github.com/WordPress/gutenberg/pull/35681)) +- Update default value of the viewportWidth attribute in documentation. ([35659](https://github.com/WordPress/gutenberg/pull/35659)) +- Update documentation and readme post merge of #35645. ([35679](https://github.com/WordPress/gutenberg/pull/35679)) + +#### Components +- Add CHANGELOG entry for the fieldset removal from `FontAppearanceControl`. ([35585](https://github.com/WordPress/gutenberg/pull/35585)) +- Add entry to CHANGELOG regarding new ColorPicker. ([35486](https://github.com/WordPress/gutenberg/pull/35486)) +- Mark `CustomSelectControl` `hint` option as experimental. ([35673](https://github.com/WordPress/gutenberg/pull/35673)) +- Polish `ToggleGroupControl`. ([35600](https://github.com/WordPress/gutenberg/pull/35600)) +- Small tweaks to contributing guidelines. ([35620](https://github.com/WordPress/gutenberg/pull/35620)) + + +### Code Quality + +- Convert `usePrevious` hook to TypeScript. ([35597](https://github.com/WordPress/gutenberg/pull/35597)) +- Fix odd usage of transform-styles wrap function (and tighten types). ([23599](https://github.com/WordPress/gutenberg/pull/23599)) +- Update Callers to handle when getBlockType return undefined. ([35097](https://github.com/WordPress/gutenberg/pull/35097)) +- Use new color picker props. ([35566](https://github.com/WordPress/gutenberg/pull/35566)) + +#### Components +- Chore: Remove tinycolor object usage from the gradient picker. ([35544](https://github.com/WordPress/gutenberg/pull/35544)) +- FontAppearanceControl: Remove `fieldset` wrapper. ([35461](https://github.com/WordPress/gutenberg/pull/35461)) +- Polish ResizableBox and convert it to TypeScript. ([35062](https://github.com/WordPress/gutenberg/pull/35062)) +- Remove duplicated className in Card component. ([35333](https://github.com/WordPress/gutenberg/pull/35333)) +- Remove unused `useJumpStep` utility. ([35561](https://github.com/WordPress/gutenberg/pull/35561)) +- Replace the color picker component with the new version. ([35220](https://github.com/WordPress/gutenberg/pull/35220)) +- ToolsPanel: Remove hardcoded classnames. ([35415](https://github.com/WordPress/gutenberg/pull/35415)) +- UnitControl component: Refactor JSX components to TypeScript. ([35281](https://github.com/WordPress/gutenberg/pull/35281)) + +#### Global Styles +- Child theme.json: Update test to better capture that childs can update single parts in isolation. ([35759](https://github.com/WordPress/gutenberg/pull/35759)) +- Refactor how the Global Styles access and sets data. ([35264](https://github.com/WordPress/gutenberg/pull/35264)) + +#### Design Tools +- Border Radius Control: Add fallback px unit and add utils tests. ([35786](https://github.com/WordPress/gutenberg/pull/35786)) + +#### Post Editor +- Fix-up Post Editor’s preferences modal. ([35369](https://github.com/WordPress/gutenberg/pull/35369)) + + +### Tools + +- Scripts: Remove inject polyfill by default. ([35436](https://github.com/WordPress/gutenberg/pull/35436)) + +#### Testing +- Fix taxonomies flaky tests. ([35534](https://github.com/WordPress/gutenberg/pull/35534)) +- Performance tests: Add more detailed loading metrics. ([32237](https://github.com/WordPress/gutenberg/pull/32237)) +- Try another fix for flaky nav test. ([35443](https://github.com/WordPress/gutenberg/pull/35443)) +- [Automated Testing]: Fix preview end-to-end tests. ([35565](https://github.com/WordPress/gutenberg/pull/35565)) + +#### Build Tooling +- Build Workflow: Revert version bump if build job fails. ([33239](https://github.com/WordPress/gutenberg/pull/33239)) +- Updates react-native-aztec android to use S3 dependency for Aztec editor. ([35606](https://github.com/WordPress/gutenberg/pull/35606)) + +#### Components +- Panel: Improve unit tests. ([35658](https://github.com/WordPress/gutenberg/pull/35658)) + + +### Various + +- Add the storybook link to the `/components` README. ([35493](https://github.com/WordPress/gutenberg/pull/35493)) +- Allow the specification of blocks allowed within columns. ([35342](https://github.com/WordPress/gutenberg/pull/35342)) +- Enable/skipped metabox test. ([35594](https://github.com/WordPress/gutenberg/pull/35594)) +- FSE: Coding standards: DOCTYPE should be the first line/character of any HTML document. ([35442](https://github.com/WordPress/gutenberg/pull/35442)) +- Mobile - Update macos version from latest to 11. ([35770](https://github.com/WordPress/gutenberg/pull/35770)) +- Remove: Tinycolor usage from component color utils. ([35553](https://github.com/WordPress/gutenberg/pull/35553)) +- Storybook: Add story for TypographyPanel. ([35293](https://github.com/WordPress/gutenberg/pull/35293)) +- Translation note for Home/end to avoid mistranslations. ([35669](https://github.com/WordPress/gutenberg/pull/35669)) +- Unify theme block placeholder content. ([35517](https://github.com/WordPress/gutenberg/pull/35517)) +- Update DateTimePicker component README to remove reference to isDayHighlighted callback. ([35363](https://github.com/WordPress/gutenberg/pull/35363)) +- [Block: Post comment author]: Add link settings and block supports. ([35595](https://github.com/WordPress/gutenberg/pull/35595)) +- feat(SelectControl): Add children prop. ([29540](https://github.com/WordPress/gutenberg/pull/29540)) + +#### Block Library +- Add allowedBlocks and TemplateLock attributes in Cover Block. ([31326](https://github.com/WordPress/gutenberg/pull/31326)) +- Cover Block: Use the description in the placeholder. ([34970](https://github.com/WordPress/gutenberg/pull/34970)) +- Cover block: Change dimRatio to 50 if media added and dimRatio is set to 100. ([35789](https://github.com/WordPress/gutenberg/pull/35789)) +- Cover block: Only use white text when the background of the cover block is dark. ([33541](https://github.com/WordPress/gutenberg/pull/33541)) +- Enable inheritance in search block. ([35723](https://github.com/WordPress/gutenberg/pull/35723)) +- Featured image block and Image blocks: Remove descendent space. ([35466](https://github.com/WordPress/gutenberg/pull/35466)) +- Page List: Show empty placeholder if no items. ([35441](https://github.com/WordPress/gutenberg/pull/35441)) +- Polish logos only style. ([35586](https://github.com/WordPress/gutenberg/pull/35586)) +- Quote: Update deprecation to expect style block supports. ([35615](https://github.com/WordPress/gutenberg/pull/35615)) +- Remove deprecated classnames from Navigation Link block. ([35358](https://github.com/WordPress/gutenberg/pull/35358)) +- Site Logo: Move Reset button to the Replace menu dropdown. ([35372](https://github.com/WordPress/gutenberg/pull/35372)) +- Site Logo: Remove "Reset" button icon. ([35434](https://github.com/WordPress/gutenberg/pull/35434)) +- Social Icons: Add top and bottom margin support. ([35374](https://github.com/WordPress/gutenberg/pull/35374)) +- [Buttons block]: Add gap and vertical margin support. ([34546](https://github.com/WordPress/gutenberg/pull/34546)) + +#### Components +- Repositioned RangeControl tooltip and adjusted image zoom control dropdown height. ([27374](https://github.com/WordPress/gutenberg/pull/27374)) +- Storybook: Remove outdated decorator configuration. ([35678](https://github.com/WordPress/gutenberg/pull/35678)) +- Update range control metrics. ([35540](https://github.com/WordPress/gutenberg/pull/35540)) +- [Components] Update FontSize control. ([35395](https://github.com/WordPress/gutenberg/pull/35395)) + +#### Template Editor +- Add more options to template areas in template details. ([35577](https://github.com/WordPress/gutenberg/pull/35577)) +- Add template areas to template inspector. ([35239](https://github.com/WordPress/gutenberg/pull/35239)) +- Add template details to template parts. ([35444](https://github.com/WordPress/gutenberg/pull/35444)) +- Align the layout of the template card with the block card. ([35391](https://github.com/WordPress/gutenberg/pull/35391)) + +#### Design Tools +- Block Supports: Switch dimensions inspector controls slot to bubble virtually. ([34725](https://github.com/WordPress/gutenberg/pull/34725)) +- Inspector Controls: Resort the order of the design tools associated with styles hooks. ([35574](https://github.com/WordPress/gutenberg/pull/35574)) +- Post Date: Add more typography options. ([35422](https://github.com/WordPress/gutenberg/pull/35422)) + +#### Site Editor +- Update site editor block placeholder styling. ([35513](https://github.com/WordPress/gutenberg/pull/35513)) +- Use a dark background for the site editor. ([35520](https://github.com/WordPress/gutenberg/pull/35520)) + +#### Block Editor +- Add animations for insertion point, dropzone, and other elements. ([33132](https://github.com/WordPress/gutenberg/pull/33132)) +- Adjust Link UI visual styling. ([35414](https://github.com/WordPress/gutenberg/pull/35414)) + +#### Accessibility +- Rich text popovers: Move to block tools to fix tab order. ([34956](https://github.com/WordPress/gutenberg/pull/34956)) +- Save button: Prevent focus loss. ([34731](https://github.com/WordPress/gutenberg/pull/34731)) + +#### CSS & Styling +- Block Supports: Add panel specific className. ([35793](https://github.com/WordPress/gutenberg/pull/35793)) + +#### Documentation +- Clarify documentation for InnerBlocks orientation prop. ([35712](https://github.com/WordPress/gutenberg/pull/35712)) + +#### Themes +- Add [data-block] to appender. ([35356](https://github.com/WordPress/gutenberg/pull/35356)) + +#### Reusable Blocks +- Thunkify reusable-blocks store. ([35217](https://github.com/WordPress/gutenberg/pull/35217)) + + + + + += 11.7.0 = + +### Enhancements + +#### Accessibility +- Adjust wording for post format suggestions. ([14124](https://github.com/WordPress/gutenberg/pull/14124)) +- Add a visually hidden label for the Search block. ([35034](https://github.com/WordPress/gutenberg/pull/35034)) +- Add an accessible label to the Back button in preferences. ([35340](https://github.com/WordPress/gutenberg/pull/35340)) +- Global Styles: Add accessible label to Back button. ([35325](https://github.com/WordPress/gutenberg/pull/35325)) +- Template title: Include a button and label text when there is no post/page title. ([35148](https://github.com/WordPress/gutenberg/pull/35148)) + + +#### Block Editor +- Allow other blocks to use the slash inserter. ([35196](https://github.com/WordPress/gutenberg/pull/35196)) +- Enable ability to create Pages from the inline Link UI. ([35083](https://github.com/WordPress/gutenberg/pull/35083)) +- Polish quick inserter. ([35339](https://github.com/WordPress/gutenberg/pull/35339)) +- Remove visual clue from alignment toolbar. ([35080](https://github.com/WordPress/gutenberg/pull/35080)) +- Remove native block inserter onboarding tooltip. ([35150](https://github.com/WordPress/gutenberg/pull/35150)) + +#### Block Library +- Site Logo: Add duotone support. ([35344](https://github.com/WordPress/gutenberg/pull/35344)) +- Columns block: Enable blockGap and vertical margin support. ([34630](https://github.com/WordPress/gutenberg/pull/34630)) +- File Block: Only display PDF preview height `RangeControl` when embed is enabled. ([35207](https://github.com/WordPress/gutenberg/pull/35207)) +- Navigation: Add transformations from a link to other allowed nav blocks. ([34978](https://github.com/WordPress/gutenberg/pull/34978)) +- Query Loop: Include a Query Pagination option on the block variations. ([35347](https://github.com/WordPress/gutenberg/pull/35347)) +- Show "none" as an alignment option and use contextual text to clarify settings. ([34710](https://github.com/WordPress/gutenberg/pull/34710)) +- Social Links: Add block gap support. ([35236](https://github.com/WordPress/gutenberg/pull/35236)) +- Site Title: Add option to toggle home link. ([31540](https://github.com/WordPress/gutenberg/pull/31540)) +- Site title: update block description. ([34474](https://github.com/WordPress/gutenberg/pull/34474)) +- Transform Nav Links with children into Submenus. ([34831](https://github.com/WordPress/gutenberg/pull/34831)) +- Add an option for displaying the label inside the Navigation Link block. ([34952](https://github.com/WordPress/gutenberg/pull/34952)) +- Add typography settings for the Navigation Link block. ([35324](https://github.com/WordPress/gutenberg/pull/35324)) +- Add option to remove/clear logo from the Site Logo block. ([34820](https://github.com/WordPress/gutenberg/pull/34820)) + +#### Core data +- Add 'context' to the query parts type definition. ([35069](https://github.com/WordPress/gutenberg/pull/35069)) + +#### Components +- Add new Navigator components and use them in the global styles sidebar. ([34904](https://github.com/WordPress/gutenberg/pull/34904)) +- Use _builtin property of classes in navigation link PHP. ([35166](https://github.com/WordPress/gutenberg/pull/35166)) +- `Item`: Remove `isAction` and use `onClick` to decide if it should render as `button`. ([35152](https://github.com/WordPress/gutenberg/pull/35152)) +- Make tooltip delay configurable with a property. ([35246](https://github.com/WordPress/gutenberg/pull/35246)) + +#### Design Tools +- Block gap: Only render CSS variable if corresponding theme setting is enabled. ([35209](https://github.com/WordPress/gutenberg/pull/35209)) +- Format library: Add background color. ([34680](https://github.com/WordPress/gutenberg/pull/34680)) +- Update: Custom gradient picker design. ([34712](https://github.com/WordPress/gutenberg/pull/34712)) + +#### Global Styles +- Add Padding to the root level of global styles. ([35241](https://github.com/WordPress/gutenberg/pull/35241)) +- Add duotone theme.json styles support. ([34667](https://github.com/WordPress/gutenberg/pull/34667)) +- Extract the color palette to its own global styles screen. ([35109](https://github.com/WordPress/gutenberg/pull/35109)) +- Update the rules to hide/show blocks in the global styles sidebar. ([35178](https://github.com/WordPress/gutenberg/pull/35178)) + +#### Icons +- Add color icon. ([35187](https://github.com/WordPress/gutenberg/pull/35187)) +- Rename globe icon to url. ([35032](https://github.com/WordPress/gutenberg/pull/35032)) + +#### Site Editor +- Remove warning box from post terms. ([35242](https://github.com/WordPress/gutenberg/pull/35242)) + +#### Template Editor +- Add back button for isolated template part editor. ([34732](https://github.com/WordPress/gutenberg/pull/34732)) +- Add template areas to template details. ([35202](https://github.com/WordPress/gutenberg/pull/35202)) + + +### Bug Fixes + +#### Block Editor +- Block Editor: Fix duplicate clientIds when dragging patterns. ([35124](https://github.com/WordPress/gutenberg/pull/35124)) +- Disallow creation of empty links using Link UI directly. ([35060](https://github.com/WordPress/gutenberg/pull/35060)) +- Fix Link UI when hyperlink has an empty `href` value. ([35043](https://github.com/WordPress/gutenberg/pull/35043)) +- Fix missing border in the quick inserter. ([35307](https://github.com/WordPress/gutenberg/pull/35307)) +- Fix toggle off for Duotone control and Post Date block’s date picking control. ([35024](https://github.com/WordPress/gutenberg/pull/35024)) +- useMultiSelection: Avoid crashing editor when block refs aren't available. ([35177](https://github.com/WordPress/gutenberg/pull/35177)) +- Rich text: fix internal paste across multiline and single line instances. ([35416](https://github.com/WordPress/gutenberg/pull/35416)) + +#### Block Library +- Embed: Remove meetup-com from variations. ([35146](https://github.com/WordPress/gutenberg/pull/35146)) +- Featured Image: Remove descendent space. ([35273](https://github.com/WordPress/gutenberg/pull/35273)) +- Fix: Broken disabled select style in the editor area. ([35135](https://github.com/WordPress/gutenberg/pull/35135)) +- Fix native BlockAlignmentControl. ([35191](https://github.com/WordPress/gutenberg/pull/35191)) +- Gallery block: Fix Safari image sizing issue. ([35309](https://github.com/WordPress/gutenberg/pull/35309)) +- Gallery block: Fix problem with caption showing encode tags when not selected. ([35131](https://github.com/WordPress/gutenberg/pull/35131)) +- Gallery block: Unset alignment on new images to prevent it breaking layout. ([35132](https://github.com/WordPress/gutenberg/pull/35132)) +- Post Template: Remove margins from the block. ([35193](https://github.com/WordPress/gutenberg/pull/35193)) +- Post Title: Always use blockProps. ([35286](https://github.com/WordPress/gutenberg/pull/35286)) +- Post Title: Only render link element if we have a post. ([35284](https://github.com/WordPress/gutenberg/pull/35284)) +- Query Pagination: Don't render an empty container. ([35092](https://github.com/WordPress/gutenberg/pull/35092)) +- Navigation Link: Fix PHP notice in the Navigation Link block. ([34984](https://github.com/WordPress/gutenberg/pull/34984)) +- Fix Post Comment Content block's edit function. ([35190](https://github.com/WordPress/gutenberg/pull/35190)) + +#### Components +- Color Picker: Match figma metrics. ([35039](https://github.com/WordPress/gutenberg/pull/35039)) +- Remove shift-stepping from range in RangeControl. ([35020](https://github.com/WordPress/gutenberg/pull/35020)) +- Popover: fix __unstableBoundaryParent ([35082](https://github.com/WordPress/gutenberg/pull/35082)) + +#### Design Tools +- ToolsPanelItem: Add panelId check before calling toggle methods. ([35375](https://github.com/WordPress/gutenberg/pull/35375)) + +#### Media +- MediaUpload: Ensure current images in a gallery are selected after opening media library. ([35070](https://github.com/WordPress/gutenberg/pull/35070)) + +#### Post Editor +- Fix missing save label. ([34948](https://github.com/WordPress/gutenberg/pull/34948)) +- Keyboard shortcut: Prevent post saving through keyboard if post saving locked. ([35361](https://github.com/WordPress/gutenberg/pull/35361)) + +#### REST API +- API Fetch: Improve isMediaUploadRequest check. ([34417](https://github.com/WordPress/gutenberg/pull/34417)) +- Fix slashing when creating or updating a menu item. ([35147](https://github.com/WordPress/gutenberg/pull/35147)) + +#### Server Side Render +- Prevent empty renders in ServerSideRender component caused by changing props while already fetching markup ([35433](https://github.com/WordPress/gutenberg/pull/35433)) + +#### Template Editor +- Fix the styling of template details. ([35285](https://github.com/WordPress/gutenberg/pull/35285)) + +#### Widgets Editor +- inspector-section: Track isOpen to make a better isContextuallyActive() function. ([35055](https://github.com/WordPress/gutenberg/pull/35055)) + + +### Performance + +- Edit Site: Optimize useSelect calls. ([35213](https://github.com/WordPress/gutenberg/pull/35213)) +- Memoize entity records selectors properly. ([34323](https://github.com/WordPress/gutenberg/pull/34323)) +- Widgets: Optimize useSelect calls. ([35256](https://github.com/WordPress/gutenberg/pull/35256)) + + +### Experiments + +#### Block Library +- Polish responsive navigation modal, inherit justifications, fix submenu direction. ([35077](https://github.com/WordPress/gutenberg/pull/35077)) +- Polish submenu indicator button. ([35030](https://github.com/WordPress/gutenberg/pull/35030)) +- Fix: Adding nav items from existing menu. ([34837](https://github.com/WordPress/gutenberg/pull/34837)) + +#### Global Styles +- Add Padding to the root level of global styles. ([35241](https://github.com/WordPress/gutenberg/pull/35241)) +- Add duotone theme.json styles support. ([34667](https://github.com/WordPress/gutenberg/pull/34667)) +- Block gap: Only render CSS variable if corresponding theme setting is enabled. ([35209](https://github.com/WordPress/gutenberg/pull/35209)) +- Extract the color palette to its own global styles screen. ([35109](https://github.com/WordPress/gutenberg/pull/35109)) +- Update the rules to hide/show blocks in the global styles sidebar. ([35178](https://github.com/WordPress/gutenberg/pull/35178)) +- Clean up logic to retrieve GS settings depending on context. ([35437](https://github.com/WordPress/gutenberg/pull/35437)) +- Synchronize user custom post type registration and UI visibility. ([35427](https://github.com/WordPress/gutenberg/pull/35427)) +- Enqueue preset styles for all themes in the editor. ([35424](https://github.com/WordPress/gutenberg/pull/35424)) + + +#### Navigation Screen +- Remove i18n of help link in navigation editor. ([35313](https://github.com/WordPress/gutenberg/pull/35313)) +- Add a tooltip to Navigation items in a setup state. ([35139](https://github.com/WordPress/gutenberg/pull/35139)) +- Fix gap regression in navigation screen. ([35234](https://github.com/WordPress/gutenberg/pull/35234)) +- Truncate long menu names. ([35188](https://github.com/WordPress/gutenberg/pull/35188)) +- Insert Navigation Link blocks by default in Navigation block. ([34899](https://github.com/WordPress/gutenberg/pull/34899)) +- Migrate resolvers to thunks. ([35044](https://github.com/WordPress/gutenberg/pull/35044)) + +#### Full Site Editing +- Remove extra styling around "Post content" placeholder. ([35243](https://github.com/WordPress/gutenberg/pull/35243)) + + +### Documentation + +#### Handbook +- Docs: Update testing overview with minor fixes. ([35232](https://github.com/WordPress/gutenberg/pull/35232)) +- Fix typos, grammar in contributors release doc. ([35268](https://github.com/WordPress/gutenberg/pull/35268)) +- Update `nvm` to latest `0.38.0` version in Handbook. ([35125](https://github.com/WordPress/gutenberg/pull/35125)) +- Adding example readme template to contributing guidelines. ([34847](https://github.com/WordPress/gutenberg/pull/34847)) +- Fix erroneous usage of the word `master`. ([35392](https://github.com/WordPress/gutenberg/pull/35392)) + +#### Packages +- Add instructions for installing plugins/themes with wp-env. ([35064](https://github.com/WordPress/gutenberg/pull/35064)) +- MediaUpload: Reflect the correct filter name in the readme. ([35240](https://github.com/WordPress/gutenberg/pull/35240)) +- Update LinkControl documentation with additional examples. ([35199](https://github.com/WordPress/gutenberg/pull/35199)) +- Update doc block in block editor to fix documentation generation lint error. ([35295](https://github.com/WordPress/gutenberg/pull/35295)) +- Add missing doc blocks for the exported members of edit-widgets store. ([35263](https://github.com/WordPress/gutenberg/pull/35263)) + +### Code Quality + +#### Block Editor +- Add colord package to block editor; Replace tinycolor2 with colord on duotone. (https://github.com/WordPress/gutenberg/pull/34616), [34605](https://github.com/WordPress/gutenberg/pull/34605), [35165](https://github.com/WordPress/gutenberg/pull/35165), [35164](https://github.com/WordPress/gutenberg/pull/35164)) +- Migrate the toggleFeature action to a thunk. ([35075](https://github.com/WordPress/gutenberg/pull/35075)) + +#### Block Library +- Migrate store actions to thunks. ([35031](https://github.com/WordPress/gutenberg/pull/35031)) +- Post Title Block: Fix argument numbering in 'sprintf'. ([35338](https://github.com/WordPress/gutenberg/pull/35338)) +- Replace tinycolor2 with colord on block library package. ([35184](https://github.com/WordPress/gutenberg/pull/35184) + + +#### Components +- Refactor `Navigator*` folder structure, rename `Navigator` to `NavigatorProvider`. ([35160](https://github.com/WordPress/gutenberg/pull/35160)) +- Replace tinycolor2 with colord. ([35185](https://github.com/WordPress/gutenberg/pull/35185)) +- ToolsPanel component: Refactor to typescript. ([34028](https://github.com/WordPress/gutenberg/pull/34028)) +- UnitControl component: Refactor utils to TypeScript. ([35138](https://github.com/WordPress/gutenberg/pull/35138)) +- Do not export `SimpleColorSwatch` in Storybook examples for Item Group. ([35179](https://github.com/WordPress/gutenberg/pull/35179)) +- Refactor Navigator to TypeScript. ([35214](https://github.com/WordPress/gutenberg/pull/35214)) + +#### Global Styles +- Simplify code that deals with user data for clarity. ([35248](https://github.com/WordPress/gutenberg/pull/35248)) +- Simplify how we register preset metadata. ([35228](https://github.com/WordPress/gutenberg/pull/35228)) +- Reorganize the global styles UI code base. ([35218](https://github.com/WordPress/gutenberg/pull/35218)) +- Don't output preset classes for colors defined by the theme ([35514](https://github.com/WordPress/gutenberg/pull/35514)) + +#### Post Editor +- Keyboard Shortcuts: Use a new selector getter method. ([35385](https://github.com/WordPress/gutenberg/pull/35385)) + +#### Navigation Component +- Refactor the preferences modal to use the new Navigator components. ([35142](https://github.com/WordPress/gutenberg/pull/35142)) +- Navigation Editor: Remove duplicated stripHTML. ([35189](https://github.com/WordPress/gutenberg/pull/35189)) + +#### Widgets Editor +- Migrate edit-widgets store to thunks. ([35110](https://github.com/WordPress/gutenberg/pull/35110)) + +### Tools + +#### Build Tooling +- Remove polyfills from view.js block scripts. ([35038](https://github.com/WordPress/gutenberg/pull/35038)) + +#### Testing +- Add tests for `Navigator*`. ([35163](https://github.com/WordPress/gutenberg/pull/35163)) +- Enable flaky tests reporter bot in PRs. ([35029](https://github.com/WordPress/gutenberg/pull/35029)) +- Replace tinycolor2 with colord on getMostReadableColor util. Add unit test. ([34625](https://github.com/WordPress/gutenberg/pull/34625)) +- Try fixing flaky navigation test. ([35380](https://github.com/WordPress/gutenberg/pull/35380)) +- Fix not archiving failure artifacts for flaky tests. ([35379](https://github.com/WordPress/gutenberg/pull/35379)) + + +#### Plugins +- Add `oandregal` and `tellthemachines` to codeowners file. ([35233](https://github.com/WordPress/gutenberg/pull/35233)) + + += 11.6.0 = + +### Enhancements + +#### Block Library +- Post Title block: Add typography formatting options. ([31623](https://github.com/WordPress/gutenberg/pull/31623)) +- Query Pagination block: Use flex layout. ([34876](https://github.com/WordPress/gutenberg/pull/34876)) +- Site logo: Add site logo crop. ([31607](https://github.com/WordPress/gutenberg/pull/31607)) +- Cover: Move cover min-height into dimensions panel via SlotFill. ([34065](https://github.com/WordPress/gutenberg/pull/34065)) +- Group Block: Add information about selected element types for Group Block. ([33976](https://github.com/WordPress/gutenberg/pull/33976)) +- Image Block: Create two-way data binding for ImageSizeControl. ([34649](https://github.com/WordPress/gutenberg/pull/34649)) +- Columns Block: Update block description of columns block. ([34705](https://github.com/WordPress/gutenberg/pull/34705)) +- Gallery block: Add toolbar button to convert old galleries to new format. ([34606](https://github.com/WordPress/gutenberg/pull/34606)) + +#### Block Editor +- Format toolbar: Visual clue for hidden active items. ([21892](https://github.com/WordPress/gutenberg/pull/21892)) +- Increase Link UI search results to 10 on the Navigation Editor screen. ([34808](https://github.com/WordPress/gutenberg/pull/34808)) +- Inserter: Pass filter value when clicking Browse All. ([34912](https://github.com/WordPress/gutenberg/pull/34912)) + +#### Components +- ColorPicker: Enhance the new color picker design. ([34598](https://github.com/WordPress/gutenberg/pull/34598)) +- ColorPicker: Add reset timeout to ColorPicker's copy functionality. ([34601](https://github.com/WordPress/gutenberg/pull/34601)) +- ToolsPanel: Refine component behaviour. ([34530](https://github.com/WordPress/gutenberg/pull/34530)) +- Resize Handles: Fix stroke width of resize handles. ([34949](https://github.com/WordPress/gutenberg/pull/34949)) +- ServerSideRender: Improve ServerSideRender Component to retain preview of the component while it is loading new state. ([28289](https://github.com/WordPress/gutenberg/pull/28289)) +- ServerSideRender: Delayed loading state of ServerSideRender component. ([35033](https://github.com/WordPress/gutenberg/pull/35033)) + +#### Global Styles +- Add a simple Global Styles preview to the sidebar. ([34991](https://github.com/WordPress/gutenberg/pull/34991)) +- Update the Global Styles Icon and use it in the site editor's panel. ([34871](https://github.com/WordPress/gutenberg/pull/34871)) +- Update the global styles sidebar to use a navigation component. ([34885](https://github.com/WordPress/gutenberg/pull/34885)) + +#### Widgets Editor +- Widget Group: Make title directly editable. ([34799](https://github.com/WordPress/gutenberg/pull/34799)) + +#### Template Editor +- Add edit template part menu button. ([34679](https://github.com/WordPress/gutenberg/pull/34679)) + +#### Themes +- FSE: Add basic support for child themes. ([34354](https://github.com/WordPress/gutenberg/pull/34354)) + +### New APIs + +#### Block API +- Introduce lock control at the block-type level. ([32457](https://github.com/WordPress/gutenberg/pull/32457)) + +#### Design Tools +- InspectorControls: Wrap block support slots in ToolsPanel. ([34157](https://github.com/WordPress/gutenberg/pull/34157)) + +### Accessibility +- Improve file block accessibility by adding aria-describedby to download button. ([28062](https://github.com/WordPress/gutenberg/pull/28062)) +- Button Block: Add prefix to the description ID. ([34900](https://github.com/WordPress/gutenberg/pull/34900)) +- Snackbar: Fix focus loss on dismiss. ([34736](https://github.com/WordPress/gutenberg/pull/34736)) + +### Performance +- List View: Try disabling async mode provider around selected block in ListView. ([34519](https://github.com/WordPress/gutenberg/pull/34519)) + +### Bug Fixes + +#### Block Editor +- Copy Handler: Only handle paste event once. ([34430](https://github.com/WordPress/gutenberg/pull/34430)) +- Fix save-state indicator appearance. ([34947](https://github.com/WordPress/gutenberg/pull/34947)) +- MediaReplaceFlow: Avoid React warning when selecting media. ([34618](https://github.com/WordPress/gutenberg/pull/34618)) +- Remove .has-link-color class upon clearing the link color. ([34700](https://github.com/WordPress/gutenberg/pull/34700)) +- Rich Text: Fix arrow navigation with consecutive formats. ([35014](https://github.com/WordPress/gutenberg/pull/35014)) +- Rich Text: Also strip object replacement character when removing padding. ([34851](https://github.com/WordPress/gutenberg/pull/34851)) +- Writing flow: Fix focus trap on non-text input types. ([32714](https://github.com/WordPress/gutenberg/pull/32714)) +- Fix bug in the receiveBlocks action resulting in a broken block list. ([35076](https://github.com/WordPress/gutenberg/pull/35076)) + +#### Block Library +- HTML block: Prevent external styling of editing UI. ([34727](https://github.com/WordPress/gutenberg/pull/34727)) +- Page List Block: Fix gap in vertical page list. ([35026](https://github.com/WordPress/gutenberg/pull/35026)) +- MediaPlaceholder: Fix media library button opening the file upload modal. ([34894](https://github.com/WordPress/gutenberg/pull/34894)) +- QueryPagination: Fix layout support. ([34897](https://github.com/WordPress/gutenberg/pull/34897)) +- Query Pagination: Fix center alignment. ([34739](https://github.com/WordPress/gutenberg/pull/34739)) +- Group block: Lower CSS specificity of padding declaration. ([34854](https://github.com/WordPress/gutenberg/pull/34854)) + +#### Global Styles +- Cache global stylesheet keyed by theme. ([34704](https://github.com/WordPress/gutenberg/pull/34704)) +- Clean theme data when switching themes in the customizer. ([34540](https://github.com/WordPress/gutenberg/pull/34540)) +- Fix dimensions panel default controls display. ([34828](https://github.com/WordPress/gutenberg/pull/34828)) +- Fix for link color in containers. ([34689](https://github.com/WordPress/gutenberg/pull/34689)) + +#### Components +- Fix Dropdown/DropdownMenu toggle closing in all UAs. ([31170](https://github.com/WordPress/gutenberg/pull/31170)) +- Font Appearance Control: Fix selectedItem downshift uncontrolled prop warning. ([34721](https://github.com/WordPress/gutenberg/pull/34721)) +- ToolsPanel: Allow SlotFill injection of panel items. ([34632](https://github.com/WordPress/gutenberg/pull/34632)) +- ToolsPanel: Remove / re-register panel items if the panelId changes. ([34726](https://github.com/WordPress/gutenberg/pull/34726)) +- ToogleGroupControl: Fix update when unmounted. ([34756](https://github.com/WordPress/gutenberg/pull/34756)) +- Unit Control: Always display current unit value if valid. ([34768](https://github.com/WordPress/gutenberg/pull/34768)) + +#### Template Editor +- Fixes left & right floats for blocks that are direct children of .wp-site-blocks. ([34635](https://github.com/WordPress/gutenberg/pull/34635)) +- Fix new template form onSubmit logic. ([34988](https://github.com/WordPress/gutenberg/pull/34988)) + +#### REST API +- Add missing field _invalid in menu item REST API. ([34670](https://github.com/WordPress/gutenberg/pull/34670)) +- Fix 'menu_exists' response status code. ([34888](https://github.com/WordPress/gutenberg/pull/34888)) +- Remove parent and position validation from menu item REST API endpoint. ([34672](https://github.com/WordPress/gutenberg/pull/34672)) +- Filters are incorrectly applied in the __experimental/menu-items controller. ([34857](https://github.com/WordPress/gutenberg/pull/34857)) +- Fix the parent menu item field in REST API responses. ([34835](https://github.com/WordPress/gutenberg/pull/34835)) + + +#### Themes +- Fix block gap added to the block templates skip link. ([34986](https://github.com/WordPress/gutenberg/pull/34986)) + +#### Widgets Editor +- Fix disabled blocks logical error on Widgets screen. ([34634](https://github.com/WordPress/gutenberg/pull/34634)) +- Prevent welcome guide overflow x scroll. ([34713](https://github.com/WordPress/gutenberg/pull/34713)) + +### Experiments + +#### Navigation Block +- Add a Submenu block for use in Navigation. ([33775](https://github.com/WordPress/gutenberg/pull/33775)) +- Initialize responsive modals with window onload event. ([34544](https://github.com/WordPress/gutenberg/pull/34544)) +- Enable open on click for Page List inside Navigation. ([34675](https://github.com/WordPress/gutenberg/pull/34675)) +- Hide theme-provided underlines when menu item is in setup state. ([34486](https://github.com/WordPress/gutenberg/pull/34486)) +- Only capture toolbars on the parent Navigation block when not in vertical mode. ([34615](https://github.com/WordPress/gutenberg/pull/34615)) +- Polish wavy underline. ([34954](https://github.com/WordPress/gutenberg/pull/34954)) + +#### Navigation Editor +- Add initial navigation editor user documentation. ([34985](https://github.com/WordPress/gutenberg/pull/34985)) +- Adjust header toolbar icon styles. ([34833](https://github.com/WordPress/gutenberg/pull/34833)) +- Consolidate menu name and switcher. ([34786](https://github.com/WordPress/gutenberg/pull/34786)) +- Update Navigation Editor to support new submenu block. ([34281](https://github.com/WordPress/gutenberg/pull/34281)) +- Use response messages returned from API for notices. ([34903](https://github.com/WordPress/gutenberg/pull/34903)) +- Add global inserter to Navigation Editor. ([34619](https://github.com/WordPress/gutenberg/pull/34619)) +- Save menu items using the REST API. ([34541](https://github.com/WordPress/gutenberg/pull/34541)) +- Add space between menu name and switcher button. ([34960](https://github.com/WordPress/gutenberg/pull/34960)) +- Keep Navigation Editor snackbar from overflowing notices. ([34661](https://github.com/WordPress/gutenberg/pull/34661)) +- Navigation Editor: Avoid crash when transforming navigation link. ([34980](https://github.com/WordPress/gutenberg/pull/34980)) +- Correctly display notices. ([34852](https://github.com/WordPress/gutenberg/pull/34852)) +- Display error notice inside modal. ([34884](https://github.com/WordPress/gutenberg/pull/34884)) +- Fix navigation editor missing appender not showing appender when no blocks selected. ([34678](https://github.com/WordPress/gutenberg/pull/34678)) +- Fix navigation editor undo button being active when editor loads. ([34839](https://github.com/WordPress/gutenberg/pull/34839)) +- Open link control if submenu parent is link. ([34798](https://github.com/WordPress/gutenberg/pull/34798)) +- Stop submitting Create Menu form in busy state. ([34983](https://github.com/WordPress/gutenberg/pull/34983)) +- Fix saving locations using the "Manage Locations" popup. ([34714](https://github.com/WordPress/gutenberg/pull/34714)) + +#### Site Editor +- Site Editor - add basic plugin support. ([34460](https://github.com/WordPress/gutenberg/pull/34460)) + +### Documentation + +#### Handbook +- Minor copy improvements. ([35015](https://github.com/WordPress/gutenberg/pull/35015)) +- Update versions to include 5.8.1. ([34789](https://github.com/WordPress/gutenberg/pull/34789)) +- Fix typography.customLineHeight value in the compatibility table. ([34791](https://github.com/WordPress/gutenberg/pull/34791)) + +#### Packages +- Update the note about using polyfill for ES2015+ features. ([34878](https://github.com/WordPress/gutenberg/pull/34878)) +- Components + - Add Compound Components section to components CONTRIBUTING.md. ([34697](https://github.com/WordPress/gutenberg/pull/34697)) + - Dropdown: Tidy up documentation. ([34861](https://github.com/WordPress/gutenberg/pull/34861)) + - Fix small typo in the component's CONTRIBUTING guidelines documentation. ([34753](https://github.com/WordPress/gutenberg/pull/34753)) + - ItemGroup: Add story showcasing more complex layouts. ([34708](https://github.com/WordPress/gutenberg/pull/34708)) + - Update @wordpress/components package's contributing guidelines. ([33960](https://github.com/WordPress/gutenberg/pull/33960)) + - Update AlignmentMatrixControl documentation post merge. ([34662](https://github.com/WordPress/gutenberg/pull/34662)) + - Update components CONTRIBUTING.md structure. ([34877](https://github.com/WordPress/gutenberg/pull/34877)) + - Update documentation for ClipboardButton component. ([34711](https://github.com/WordPress/gutenberg/pull/34711)) +- Create Block: Remove wp-cli callout since not recommended and outdated. ([34821](https://github.com/WordPress/gutenberg/pull/34821)) +- Navigation Editor: + - Fix inconsistencies and errors. ([34682](https://github.com/WordPress/gutenberg/pull/34682)) + - Update the Hooks section in documentation. ([35035](https://github.com/WordPress/gutenberg/pull/35035)) +- Scripts: Add CHANGELOG entry for jest-dev-server upgrade. ([34657](https://github.com/WordPress/gutenberg/pull/34657)) + +#### Other +- Update overall plugin description. ([34850](https://github.com/WordPress/gutenberg/pull/34850)) + +### Code Quality +- Add tests for slug to class/css variable conversion. ([34787](https://github.com/WordPress/gutenberg/pull/34787)) +- Refactor the core-data store to thunks. ([28389](https://github.com/WordPress/gutenberg/pull/28389)) +- Remove some low impact APIs that were deprecated on WP 5.3. ([34537](https://github.com/WordPress/gutenberg/pull/34537)) +- Rewrite FocusableIframe as hook API. ([26753](https://github.com/WordPress/gutenberg/pull/26753)) +- Rich text: Only merge neighbouring equal formats when applying a format. ([35016](https://github.com/WordPress/gutenberg/pull/35016)) +- Writing Flow: Merge place caret at edge functions. ([30481](https://github.com/WordPress/gutenberg/pull/30481)) +- Site editor: fix PHP notice: Undefined index: __unstableType. ([34735](https://github.com/WordPress/gutenberg/pull/34735)) +- Use rest_is_field_included function in menu endpoints. ([34673](https://github.com/WordPress/gutenberg/pull/34673)) +- Remove duplicate Theme JSON block gap key. ([34774](https://github.com/WordPress/gutenberg/pull/34774)) + +#### Block Editor +- Global shortcuts: Use React events (portal bubbles & contextual). ([34539](https://github.com/WordPress/gutenberg/pull/34539)) +- Rename experimental prop used in BlockControls. ([34644](https://github.com/WordPress/gutenberg/pull/34644)) +- Update callers to handle when getBlockType returns undefined. ([34891](https://github.com/WordPress/gutenberg/pull/34891)) + +#### Block Library +- Latest Comments: Add missing parameter to widget_comments_args. ([29403](https://github.com/WordPress/gutenberg/pull/29403)) +- Navigation submenu block: Replace global shortcut event handlers with local ones. ([34812](https://github.com/WordPress/gutenberg/pull/34812)) + +#### Components +- ColorPicker: Replace global shortcut event handlers with local ones. ([34508](https://github.com/WordPress/gutenberg/pull/34508)) +- Delete the createComponent utility function. ([34929](https://github.com/WordPress/gutenberg/pull/34929)) +- Refactor away from the createComponent function: CardMedia ([34915](https://github.com/WordPress/gutenberg/pull/34915)), ControlLabel ([34927](https://github.com/WordPress/gutenberg/pull/34927)), Elevation ([34916](https://github.com/WordPress/gutenberg/pull/34916)), FlexBlock ([34917](https://github.com/WordPress/gutenberg/pull/34917)), FlexItem ([34918](https://github.com/WordPress/gutenberg/pull/34918)), Grid ([34919](https://github.com/WordPress/gutenberg/pull/34919)), HStack ([34920](https://github.com/WordPress/gutenberg/pull/34920)), Heading ([34921](https://github.com/WordPress/gutenberg/pull/34921)), Scrollable ([34922](https://github.com/WordPress/gutenberg/pull/34922)), Spacer ([34923](https://github.com/WordPress/gutenberg/pull/34923)), Surface ([34924](https://github.com/WordPress/gutenberg/pull/34924)), Text ([34925](https://github.com/WordPress/gutenberg/pull/34925)), Truncate ([34926](https://github.com/WordPress/gutenberg/pull/34926)), VStack ([34928](https://github.com/WordPress/gutenberg/pull/34928)). +- Remove all dashicon usages from Storybook stories. ([33984](https://github.com/WordPress/gutenberg/pull/33984)) +- Mark ControlLabel, FormGroupLabel and FormGroupContent as non-polymorphic. ([34966](https://github.com/WordPress/gutenberg/pull/34966)) + +#### Global Styles +- Fix Global Styles double border. ([34906](https://github.com/WordPress/gutenberg/pull/34906)) +- Rename globalStyles to styles. ([34946](https://github.com/WordPress/gutenberg/pull/34946)) + +#### i18n +- Add a "translators:" comment in the core class used to implement a Block widget. ([34840](https://github.com/WordPress/gutenberg/pull/34840)) + +### Tools + +#### Testing +- Add editor onboarding tests. ([34431](https://github.com/WordPress/gutenberg/pull/34431)) +- Fix flaky navigation editor test by waiting for required elements. ([34767](https://github.com/WordPress/gutenberg/pull/34767)) +- Fix native Latest Posts end-to-end device tests. ([34715](https://github.com/WordPress/gutenberg/pull/34715)) +- Iframed editor: Add jQuery integration end-to-end test. ([33007](https://github.com/WordPress/gutenberg/pull/33007)) +- Navigation Editor: Migrate from response mocking to rest api util. ([34869](https://github.com/WordPress/gutenberg/pull/34869)) +- Navigation Editor: Fix failing end-to-end test. ([34874](https://github.com/WordPress/gutenberg/pull/34874)) +- Navigation Editor: Add end-to-end tests for global inserter to the Navigation Editor screen. ([34804](https://github.com/WordPress/gutenberg/pull/34804)) +- Navigation Editor: Update new navigation editor test to use REST API to create a menu instead of response mocking. ([35025](https://github.com/WordPress/gutenberg/pull/35025)) +- Try reporting flaky tests to issues. ([34432](https://github.com/WordPress/gutenberg/pull/34432)) +- Try to fix flaky iframe test. ([34776](https://github.com/WordPress/gutenberg/pull/34776)) +- Test that add_theme_supports are loaded for themes without theme.json. ([34998](https://github.com/WordPress/gutenberg/pull/34998)) + +#### Build Tooling +- Fix package lock inconsistencies. ([34790](https://github.com/WordPress/gutenberg/pull/34790)) +- Update caniuse package to the latest version. ([34685](https://github.com/WordPress/gutenberg/pull/34685)) +- VSCode integration: Update var ${workspaceRoot} to ${workspaceFolder}. ([34269](https://github.com/WordPress/gutenberg/pull/34269)) +- Replace usages of workspaceRoot with workspaceFolder. ([34887](https://github.com/WordPress/gutenberg/pull/34887)) +- Bump jest-dev-server to v5. ([34560](https://github.com/WordPress/gutenberg/pull/34560)) +- ESLint Plugin: Update eslint jsdoc dependency. ([34338](https://github.com/WordPress/gutenberg/pull/34338)) +- Storybook: Remove G2 prefix from the Components section. ([34734](https://github.com/WordPress/gutenberg/pull/34734)) +- Block Editor: Update react-spring to 9.2.4. ([30979](https://github.com/WordPress/gutenberg/pull/30979)) +- Move react-native-url-polyfill to dev dependencies. ([34687](https://github.com/WordPress/gutenberg/pull/34687)) +- Use Jest related rules only when the package is installed. ([33120](https://github.com/WordPress/gutenberg/pull/33120)) +- Ensure that all *.asset.php files are included in plugin.zip. ([34875](https://github.com/WordPress/gutenberg/pull/34875)) + + + + + + += 11.5.1 = + +### Bug Fixes + +#### Global Styles + +- Fix theme supports for themes without theme.json. ([34955](https://github.com/WordPress/gutenberg/pull/34955)) + +### Various + +- Build plugin zip: Verify npm cache before a clean install. ([34973](https://github.com/WordPress/gutenberg/pull/34973)) + + + + + += 11.5.0 = + +### Features + +#### Design Tools +- Block Support: Add gap block support feature. ([33991](https://github.com/WordPress/gutenberg/pull/33991)) + +### Enhancements + +#### Accessibility +- Font weight screen reader description. ([34312](https://github.com/WordPress/gutenberg/pull/34312)) +#### Block Editor: +- Media Placeholder: Change media URL input type to allow a local URL path. ([29138](https://github.com/WordPress/gutenberg/pull/29138)) +#### Block Library +- Columns Block: Use `blockGap` between Columns blocks. ([34456](https://github.com/WordPress/gutenberg/pull/34456)) +- Group Block: Add a row variation. ([34535](https://github.com/WordPress/gutenberg/pull/34535)) +- Heading Block: Vertical heading levels menu. ([32926](https://github.com/WordPress/gutenberg/pull/32926)) +- Navigation Block: Allow Site Title and Logo inside Navigation block. ([33316](https://github.com/WordPress/gutenberg/pull/33316)) +- Navigation Block, List View: Do not show appender and avoid closing the modal on block select. ([34337](https://github.com/WordPress/gutenberg/pull/34337)) +- Navigation Block: Remove horizontal and vertical navigation block variations from inserter. ([34614](https://github.com/WordPress/gutenberg/pull/34614)) +- Navigation Block: Use gap instead of margin. ([32367](https://github.com/WordPress/gutenberg/pull/32367)) +- Post Author Block: Add duotone suport. ([34408](https://github.com/WordPress/gutenberg/pull/34408)) +- Query Pagination Next/Previous: Add an arrow attribute and sync next/previous block's arrow. ([33656](https://github.com/WordPress/gutenberg/pull/33656)) +- Site Logo Block: Update block description to be concise. ([34471](https://github.com/WordPress/gutenberg/pull/34471)) +- Site Title Block: Update block description to be concise. ([34475](https://github.com/WordPress/gutenberg/pull/34475)) +- Social Links Block: Use the new `flex` layout. ([34493](https://github.com/WordPress/gutenberg/pull/34493)) +- Video Block: Use existing video poster image on insert. ([34415](https://github.com/WordPress/gutenberg/pull/34415)) +#### Components +- MenuItem: Add right padding for unchecked radio and checkbox items. ([34406](https://github.com/WordPress/gutenberg/pull/34406)) +- ToggleGroupControl: Update stories to use knobs. ([34497](https://github.com/WordPress/gutenberg/pull/34497)) +#### Core Data +- Add `isRawAttribute` to entity configuration. ([34388](https://github.com/WordPress/gutenberg/pull/34388)) +#### Design Tools +- Add wide alignment control only if theme provides `layout.wideSize`. ([34586](https://github.com/WordPress/gutenberg/pull/34586)) +- Update justification control in `flex` layout. ([34651](https://github.com/WordPress/gutenberg/pull/34651)) +- ToolsPanel: Change icon from horizontal to vertical ellipsis. ([34369](https://github.com/WordPress/gutenberg/pull/34369)) +#### Full Site Editing +- Limit FSE admin notices to the Themes screen. ([34353](https://github.com/WordPress/gutenberg/pull/34353)) +#### Global Styles +- Allow disabling `text` and `background` color via `theme.json`. ([34420](https://github.com/WordPress/gutenberg/pull/34420)) +- Make global styles available to all themes. ([34334](https://github.com/WordPress/gutenberg/pull/34334)) +#### i18n +- Add context to 'none' strings for better translations. ([34341](https://github.com/WordPress/gutenberg/pull/34341)) +- Make permalinks documentation URL translatable. ([34282](https://github.com/WordPress/gutenberg/pull/34282)) +#### Post Editor +- Expose `ThemeSupportCheck` component. ([20506](https://github.com/WordPress/gutenberg/pull/20506)) +- Title block gap. ([34570](https://github.com/WordPress/gutenberg/pull/34570)) +#### Themes +- Add default editor styles applied to themes without `theme.json` and without editor styles. ([34439](https://github.com/WordPress/gutenberg/pull/34439)) +#### Widgets Editor +- Add 'Widget Group' block to widgets screens. ([34484](https://github.com/WordPress/gutenberg/pull/34484)) +- Legacy widget rendering endpoint. ([34230](https://github.com/WordPress/gutenberg/pull/34230)) + +### New APIs + +#### Design Tools +- Allow themes with `theme.json` to opt-out of block gap styles. ([34491](https://github.com/WordPress/gutenberg/pull/34491)) + +### Bug Fixes + +#### Accessibility +- Fix button block focus trap after a URL has been added. ([34314](https://github.com/WordPress/gutenberg/pull/34314)) +#### Block Editor +- Fix menu item padding regression. ([34435](https://github.com/WordPress/gutenberg/pull/34435)) +- Fix text-menu min widths. ([34532](https://github.com/WordPress/gutenberg/pull/34532)) +- Keep id on paste if internal link points to it. ([31107](https://github.com/WordPress/gutenberg/pull/31107)) +- Fix caret position on block merging. ([34169](https://github.com/WordPress/gutenberg/pull/34169)) +#### Block Library +- Heading Block, Paragraph Block: Fix long strings of text without spaces overflow the block. ([34222](https://github.com/WordPress/gutenberg/pull/34222)) +- Gallery Block: Fix bug with stalled upload when image size too large. ([34371](https://github.com/WordPress/gutenberg/pull/34371)) +- Gallery Block: Fix media placeholder height in site editor. ([34629](https://github.com/WordPress/gutenberg/pull/34629)) +- Gallery Block: Fix problem with overflowing captions on new gallery block format. ([34402](https://github.com/WordPress/gutenberg/pull/34402)) +- Latest Posts: Fix various React warnings in development log. ([34428](https://github.com/WordPress/gutenberg/pull/34428)) +- Navigation: Fix navigation block classname issues. ([34344](https://github.com/WordPress/gutenberg/pull/34344)) +- Navigation: Fix Page List styles inside responsive Navigation. ([34517](https://github.com/WordPress/gutenberg/pull/34517)) +- Navigation: Fix responsive menu height regression. ([34488](https://github.com/WordPress/gutenberg/pull/34488)) +- Navigation: Fix submenu layout in navigation page list. ([34342](https://github.com/WordPress/gutenberg/pull/34342)) +- Navigation: Fix submenus to only take up space when visible. ([34382](https://github.com/WordPress/gutenberg/pull/34382)) +- Navigation: Fix undo/redo 'trap' in navigation link block. ([34565](https://github.com/WordPress/gutenberg/pull/34565)) +- Site Title: Allow empty title in edit mode. ([34274](https://github.com/WordPress/gutenberg/pull/34274)) +- Social Links Block: Fix deprecation. ([34639](https://github.com/WordPress/gutenberg/pull/34639)) +- Video Block: Fix `TypeError` when removing poster. ([34411](https://github.com/WordPress/gutenberg/pull/34411)) +#### Components +- Align labels on focal point picker position controls above the inputs. ([34209](https://github.com/WordPress/gutenberg/pull/34209)) +- Check if in browser env before calling `CSS.supports`. ([34572](https://github.com/WordPress/gutenberg/pull/34572)) +- Combobox Component: Only force expanded state if the input has focus. ([34090](https://github.com/WordPress/gutenberg/pull/34090)) +- CustomSelectControl: Add describedBy fallback. ([34385](https://github.com/WordPress/gutenberg/pull/34385)) +- DateTime Component: Fix sizing of help info. ([34370](https://github.com/WordPress/gutenberg/pull/34370)) +- Fix `ToggleGroupControlBackdrop` not updating size when `isAdaptiveWidth` prop changes. ([34595](https://github.com/WordPress/gutenberg/pull/34595)) +- Fix selected value computation in `CustomSelectControl` when no initial `value` is set. ([34490](https://github.com/WordPress/gutenberg/pull/34490)) +- Fix subheadings from wrapping. ([34319](https://github.com/WordPress/gutenberg/pull/34319)) +#### Design Tools +- Border Controls: Display color indicator and check selected color. ([34467](https://github.com/WordPress/gutenberg/pull/34467)) +- Border Support: Fix check for displaying border support panel. ([34516](https://github.com/WordPress/gutenberg/pull/34516)) +- Gap block support: Force gap change to cause the block to re-render (fix Safari issue). ([34567](https://github.com/WordPress/gutenberg/pull/34567)) +- Letter Spacing: Group letter spacing correctly under typography supports. ([34515](https://github.com/WordPress/gutenberg/pull/34515)) +#### Global Styles +- Fix block-level global styles color panels. ([34293](https://github.com/WordPress/gutenberg/pull/34293)) +- Font Appearance Control: Fix error in global styles for Site Title in TT1-Blocks. ([34520](https://github.com/WordPress/gutenberg/pull/34520)) +#### Meta Boxes +- Change default value of `enableCustomFields` to `undefined`. ([33931](https://github.com/WordPress/gutenberg/pull/33931)) +- Fix metabox reordering. ([30617](https://github.com/WordPress/gutenberg/pull/30617)) +#### Packages +- Blocks: Register block when invalid value provided for the icon. ([34350](https://github.com/WordPress/gutenberg/pull/34350)) +- Core Data: Add 'include' to the query key. ([34583](https://github.com/WordPress/gutenberg/pull/34583)) +- Core Data: Use `resolveSelect` instead of `select` in `saveEntityRecord`. ([34584](https://github.com/WordPress/gutenberg/pull/34584)) +- Interface: Block Toolbar & Popover component - Prevent sticky position from causing permanently obscured areas of the selected block. ([33981](https://github.com/WordPress/gutenberg/pull/33981)) +- Scripts: Only use svgr/webpack in js files. ([34394](https://github.com/WordPress/gutenberg/pull/34394)) +- Scripts: Convert legacy entry point arguments for compatibility with webpack 5. ([34264](https://github.com/WordPress/gutenberg/pull/34264)) +#### REST API +- Default batch processor: Respect the batch endpoint's `maxItems`. ([34280](https://github.com/WordPress/gutenberg/pull/34280)) +#### Widgets Editor +- Fix Block Settings sidebar unexpectedly collapsing. ([34543](https://github.com/WordPress/gutenberg/pull/34543)) +- Legacy widget's preview functionality is broken when the page is moved. ([34384](https://github.com/WordPress/gutenberg/pull/34384)) +- Prevent focus trap in Legacy Widget block’s preview iframe. ([33614](https://github.com/WordPress/gutenberg/pull/33614)) + +### Performance + +#### Block Editor +- Improve the `getBlock` and `getBlocks` performance. ([34241](https://github.com/WordPress/gutenberg/pull/34241)) +- Remove duplicated `useValidAlignment` hook. ([34593](https://github.com/WordPress/gutenberg/pull/34593)) +#### Core Data +- Move locks state from store to local variable. ([34374](https://github.com/WordPress/gutenberg/pull/34374)) +#### Global Styles +- Remove colors classes from the packages that are already provided by global styles. ([34510](https://github.com/WordPress/gutenberg/pull/34510)) + +### Experiments + +#### Navigation Editor +- Add undo redo buttons in navigation editor. ([34533](https://github.com/WordPress/gutenberg/pull/34533)) +- Decode entities in the menu names. ([34263](https://github.com/WordPress/gutenberg/pull/34263)) +- Disable "block-nav-menus" feature for the purposes of removing the "experimental" status on the Navigation Editor. ([34444](https://github.com/WordPress/gutenberg/pull/34444)) +- Preload menu REST API requests on new navigation editor. ([34364](https://github.com/WordPress/gutenberg/pull/34364)) +- Update navigation editor placeholder. ([34568](https://github.com/WordPress/gutenberg/pull/34568)) + +### Documentation + +#### Handbook +- Replace `withSelect` references with `useSelect`. ([34549](https://github.com/WordPress/gutenberg/pull/34549)) +- Updated Template Section copy. ([34383](https://github.com/WordPress/gutenberg/pull/34383)) +- Update block variations documentation about `block` scope. ([34455](https://github.com/WordPress/gutenberg/pull/34455)) +#### Packages +- Blocks: Correct typo in Blocks Documentation. ([34396](https://github.com/WordPress/gutenberg/pull/34396)) +- Componentes: Fix/update documentation alignment matrix control. ([34624](https://github.com/WordPress/gutenberg/pull/34624)) +- Componentes: Update `DuotonePicker` documentation for accuracy. ([34494](https://github.com/WordPress/gutenberg/pull/34494)) +- Eslint: Add `no-unsafe-wp-apis` to rules list in the documentation. ([34416](https://github.com/WordPress/gutenberg/pull/34416)) +- Prettier: Correct syntax in `README.md` for `prettier-config`. ([34600](https://github.com/WordPress/gutenberg/pull/34600)) + + +### Code Quality + +#### Block Editor +- Code cleanup to the `getBlock` refactoring. ([34326](https://github.com/WordPress/gutenberg/pull/34326)) +- Ensure that `blockType` is defined when accessing `apiVersion`. ([34346](https://github.com/WordPress/gutenberg/pull/34346)) +- Migrate `lightBlockWrapper` support to `apiVersion` for blocks. ([34459](https://github.com/WordPress/gutenberg/pull/34459)) +- Fix Animated warning log. ([34197](https://github.com/WordPress/gutenberg/pull/34197)) +- Rich Text: Replace global event handlers with local ones. ([34492](https://github.com/WordPress/gutenberg/pull/34492)) +- Rich text (core): OnFocus method can be replaced with HTMLElement.focus. ([32054](https://github.com/WordPress/gutenberg/pull/32054)) +- Use Setting: Consolidate the `PATHS_WITH_MERGE` constant to one instance. ([34407](https://github.com/WordPress/gutenberg/pull/34407)) +#### Block Library +- Gallery Block: Add docblock comments to the new gallery hooks. ([34562](https://github.com/WordPress/gutenberg/pull/34562)) +- Gallery Block: Remove IE specific CSS hacks. ([34372](https://github.com/WordPress/gutenberg/pull/34372)) +- Button Block: Replace global shortcut event handlers with local ones. ([34498](https://github.com/WordPress/gutenberg/pull/34498)) +- Navigation Block: Refactor to use generic classnames. ([34171](https://github.com/WordPress/gutenberg/pull/34171)) +- Navigation Link Block: Replace global shortcut event handlers with local ones. ([34500](https://github.com/WordPress/gutenberg/pull/34500)) +- Gallery Block: Remove redundant css selector. ([34277](https://github.com/WordPress/gutenberg/pull/34277)) +#### Components +- CustomGradientBar: Replace global shortcut event handlers with local ones. ([34505](https://github.com/WordPress/gutenberg/pull/34505)) +- Guide: Replace global shortcut event handlers with local ones. ([34503](https://github.com/WordPress/gutenberg/pull/34503)) +- Navigate regions: Use React events for shortcuts (portal bubbles & contextual). ([33633](https://github.com/WordPress/gutenberg/pull/33633)) +- Rename `PolymorphicComponent*` types to `WordPressComponent*`. ([34330](https://github.com/WordPress/gutenberg/pull/34330)) +- Simplify Modal with hooks. ([34412](https://github.com/WordPress/gutenberg/pull/34412)) +- Simplify & polish heading levels. ([34378](https://github.com/WordPress/gutenberg/pull/34378)) +#### Core Data +- Fix linting errors. ([34596](https://github.com/WordPress/gutenberg/pull/34596)) +- Fix linting error in trunk. ([34464](https://github.com/WordPress/gutenberg/pull/34464)) +- Migrate `canUser` resolver to thunks. ([34580](https://github.com/WordPress/gutenberg/pull/34580)) +- Migrate `entities.js` to thunks. ([34582](https://github.com/WordPress/gutenberg/pull/34582)) +- Migrate `getAutosaves` resolver to thunks. ([34581](https://github.com/WordPress/gutenberg/pull/34581)) +- Migrate `getEntityRecord` resolver to thunks. ([34576](https://github.com/WordPress/gutenberg/pull/34576)) +- Migrate `getEntityRecords` resolver to thunks. ([34578](https://github.com/WordPress/gutenberg/pull/34578)) +- Migrate resolvers to thunks: `GetAuthors`, `_getCurrentUser`, `__getCurrentTheme`, `__getThemeSupports`. ([34579](https://github.com/WordPress/gutenberg/pull/34579)) +- Refactor `deleteEntityRecord` to use thunks instead of generators. ([34386](https://github.com/WordPress/gutenberg/pull/34386)) +- Refactor `editEntityRecord`, undo, and redo to be thunks instead of generators. ([34387](https://github.com/WordPress/gutenberg/pull/34387)) +- Remove the `PROCESS_PENDING_LOCK_REQUESTS` action. ([34343](https://github.com/WordPress/gutenberg/pull/34343)) +- Refactor `saveEntityRecord` from `redux-rungen` to async thunks. ([33201](https://github.com/WordPress/gutenberg/pull/33201)) +- Remove extraction of raw values in `saveEntityRecords`. ([34502](https://github.com/WordPress/gutenberg/pull/34502)) +#### Other Packages +- Compose, useDropZone: Ensure drag event targets `HTMLElement`. ([34272](https://github.com/WordPress/gutenberg/pull/34272)) +- Editor: Replace hardcoded store key. ([34296](https://github.com/WordPress/gutenberg/pull/34296)) +- Env: Clarify config error within `parse-config.js`. ([34322](https://github.com/WordPress/gutenberg/pull/34322)) +- Post Editor: Fix gray W menu color. ([34318](https://github.com/WordPress/gutenberg/pull/34318)) +- URL: Add `getFilename` method to the URL package. ([34313](https://github.com/WordPress/gutenberg/pull/34313)) + + +### Tools + +#### Build Tooling +- ESLint: Add `useSelect` to direct function calls list. ([34301](https://github.com/WordPress/gutenberg/pull/34301)) +- ESLint: Update error message for `@emotion/css` with info about the `useCx` hook. ([34418](https://github.com/WordPress/gutenberg/pull/34418)) +- Fix build hang on Windows 10. ([23589](https://github.com/WordPress/gutenberg/pull/23589)) +- Linting: Remove global event listener warning. ([34528](https://github.com/WordPress/gutenberg/pull/34528)) +- More work on the stability of the performance metrics. ([34229](https://github.com/WordPress/gutenberg/pull/34229)) +#### Plugin +- Added janw-me to the Codeowners for the PHP FSE folder. ([32990](https://github.com/WordPress/gutenberg/pull/32990)) +- Fix title missing in bug report form. ([34504](https://github.com/WordPress/gutenberg/pull/34504)) +- Update bug form to use drop downs. ([34458](https://github.com/WordPress/gutenberg/pull/34458)) +- Update the minimum supported WordPress version to 5.7. ([34536](https://github.com/WordPress/gutenberg/pull/34536)) +#### Testing +- Add unit tests for edit site editor utils. ([34401](https://github.com/WordPress/gutenberg/pull/34401)) +- Debug e2e-tests in vscode. ([29788](https://github.com/WordPress/gutenberg/pull/29788)) +- Jest Preset: Restore the default setting for the `verbose` option. ([34327](https://github.com/WordPress/gutenberg/pull/34327)) +- Make `Test_Widget` compatible with `WP_Widget`. ([34355](https://github.com/WordPress/gutenberg/pull/34355)) + + += 11.4.1 = + +### Bug Fixes + +- Post title: Remove class from old div to fix alignment. ([34489](https://github.com/WordPress/gutenberg/pull/34489)) + + += 11.4.0 = + +### Enhancements +- Accessibility + - Cover Block: Allow alt text in Cover blocks. ([33226](https://github.com/WordPress/gutenberg/pull/33226)) + - Add `aria-describedby` to custom select control component to describe currently-selected font size. ([33941](https://github.com/WordPress/gutenberg/pull/33941)) +- Block Editor + - Block Lists: improve iframe block, pattern and template previews. ([28165](https://github.com/WordPress/gutenberg/pull/28165)) +- Block Library + - Query Loop: update Post Template sub-block icon. ([34204](https://github.com/WordPress/gutenberg/pull/34204)) + - Convert Gallery block to use Image blocks. ([25940](https://github.com/WordPress/gutenberg/pull/25940)) + - Post Featured Image: add duotone block supports. ([34113](https://github.com/WordPress/gutenberg/pull/34113)) + - Post Featured Image: add contextual help text to the `scale`property. ([34158](https://github.com/WordPress/gutenberg/pull/34158)) + - File block: update transform from image to use image filename if caption is empty. ([34256](https://github.com/WordPress/gutenberg/pull/34256)) + - Post date Block: add font weight support to the block. ([34070](https://github.com/WordPress/gutenberg/pull/34070)) + - Post terms: add font weight support to the block. ([34142](https://github.com/WordPress/gutenberg/pull/34142)) + - Site Tagline: add font weight support. ([33983](https://github.com/WordPress/gutenberg/pull/33983)) + - Button: update spacing support to use axial padding. ([33859](https://github.com/WordPress/gutenberg/pull/33859)) +- Components + - Add deprecated props adapter for ColorPicker. ([34014](https://github.com/WordPress/gutenberg/pull/34014)) + - Wrap SegmentedControl in a BaseControl with an added `help` property. ([34017](https://github.com/WordPress/gutenberg/pull/34017)) + - Combobox: update the current selection if the list of suggestions is filtered. ([33928](https://github.com/WordPress/gutenberg/pull/33928)) + - Post Title: use rich text hook and updating tag to `h1` ([31569](https://github.com/WordPress/gutenberg/pull/31569)) +- Design Tools + - Add layout default value support for blocks. ([34194](https://github.com/WordPress/gutenberg/pull/34194)) + - Dimensions Panel: add padding tool as default for blocks where this is a common setting. ([34026](https://github.com/WordPress/gutenberg/pull/34026)) +- Navigation Screen + - Update navigation screen topbar. ([34166](https://github.com/WordPress/gutenberg/pull/34166)) +- Packages + - Updates the "settings" icon, which toggles the display of additional controls in an interface. ([34165](https://github.com/WordPress/gutenberg/pull/34165)) +- Post Editor + - Migrate post editor feature preferences to the interface package. ([34154](https://github.com/WordPress/gutenberg/pull/34154)) +- Widgets Editor + - Migrate customize widgets feature preferences to interface package. ([34135](https://github.com/WordPress/gutenberg/pull/34135)) + - Refactor editor 'feature' preferences to interface package. ([33774](https://github.com/WordPress/gutenberg/pull/33774)) + +### Bug Fixes +- Block API + - Spacing/Dimensions Supports: separate spacing from dimensions for compatibility purposes. ([34059](https://github.com/WordPress/gutenberg/pull/34059)) +- Block Editor + - Font-size adjustment for tablet and mobile device previews. ([33342](https://github.com/WordPress/gutenberg/pull/33342)) + - Fix single block selection by holding `shift` key. ([34137](https://github.com/WordPress/gutenberg/pull/34137)) + - Fix unwanted additional spaces added around pasted text on Windows. ([33607](https://github.com/WordPress/gutenberg/pull/33607)) + - Inserter: prevent non-deterministic order of inserter items. ([34078](https://github.com/WordPress/gutenberg/pull/34078)) + - Try: Fix multiselect toolbar indent and reformat `BlockContextualToolbar()`. ([34038](https://github.com/WordPress/gutenberg/pull/34038)) ([34173](https://github.com/WordPress/gutenberg/pull/34173)) +- Block Library + - Latest Comments: use site locale in the editor. ([33944](https://github.com/WordPress/gutenberg/pull/33944)) + - Navigation: fix vertical layout on the frontend. ([34226](https://github.com/WordPress/gutenberg/pull/34226)) + - Navigation: add z-index value to responsive menu overlay. ([34228](https://github.com/WordPress/gutenberg/pull/34228)) + - Navigation: enable flex on container to fix space between. ([34258](https://github.com/WordPress/gutenberg/pull/34258)) + - Navigation: fix submenu icon positioning. ([34168](https://github.com/WordPress/gutenberg/pull/34168)) + - Navigation block: add missing `</ul>` closing tag. ([34077](https://github.com/WordPress/gutenberg/pull/34077)) + - Post Excerpt: remove interactive formatting. ([34083](https://github.com/WordPress/gutenberg/pull/34083)) + - RichText: fix `space` key for button and summary elements. ([30244](https://github.com/WordPress/gutenberg/pull/30244)) + - Search Block: add space between generated border class names. ([34025](https://github.com/WordPress/gutenberg/pull/34025)) +- Build Tooling + - Webpack: Fix watch on `.json` and `.php` files. ([34024](https://github.com/WordPress/gutenberg/pull/34024)) + - Pin TypeScript dependency to a specific version to avoid pulling in breaking changes. ([34422](https://github.com/WordPress/gutenberg/pull/34422)) +- Components + - Fix RTL on `Flex` component. ([33729](https://github.com/WordPress/gutenberg/pull/33729)) + - NavigationSidebar: fix template content for content-navigation-item preview. ([34203](https://github.com/WordPress/gutenberg/pull/34203)) + - Remove deprecated import style for storybook/addon-docs. ([34095](https://github.com/WordPress/gutenberg/pull/34095)) + - ToolsPanel: add tools panel item deregistration. ([34085](https://github.com/WordPress/gutenberg/pull/34085)) + - Post Title: remove wrapper div and fix border style. ([34167](https://github.com/WordPress/gutenberg/pull/34167)) +- Core Data + - `GetEntityRecords` returns items even if some included IDs don't exist. ([34034](https://github.com/WordPress/gutenberg/pull/34034)) +- Design Tools + - Allow zero values for `theme.json` styles. ([34251](https://github.com/WordPress/gutenberg/pull/34251)) +- Global Styles + - Site editor: fix for how CSS custom properties are generated. ([33932](https://github.com/WordPress/gutenberg/pull/33932)) +- Packages + - Rich Text: add check to `toTree()` in replacements before accessing its type. ([34020](https://github.com/WordPress/gutenberg/pull/34020)) +- Post Editor + - Fix selector params in `isPluginItemPinned()` selector. ([34155](https://github.com/WordPress/gutenberg/pull/34155)) + + +### Performance +- Data Layer + - Data: Add a batch function to the data module to batch actions. ([34046](https://github.com/WordPress/gutenberg/pull/34046)) + +### Experiments +- Block API + - Block Editor: absorb parent block toolbar controls. ([33955](https://github.com/WordPress/gutenberg/pull/33955)) + - Block Editor: use groups for InspectorControls. ([34069](https://github.com/WordPress/gutenberg/pull/34069)) +- Block Library + - Add generic classnames to children of Navigation. ([33918](https://github.com/WordPress/gutenberg/pull/33918)) +- Global Styles + - Add slashes back to the Theme JSON. ([33919](https://github.com/WordPress/gutenberg/pull/33919)) + - Add block spacing gap configuration to `theme.json` and add support for this CSS variable to the "flow/default" layout. ([33812](https://github.com/WordPress/gutenberg/pull/33812)) + + +### Documentation +- Handbook + - Alphabetize glossary entries. ([34058](https://github.com/WordPress/gutenberg/pull/34058)) + - Correct minor typos in `wp-plugin.md` ([34185](https://github.com/WordPress/gutenberg/pull/34185)) + - Remove extraneous params from `block_type_metadata` hook. ([34151](https://github.com/WordPress/gutenberg/pull/34151)) + - Update incorrect settings examples in "Global Settings & Styles". ([34084](https://github.com/WordPress/gutenberg/pull/34084)) + - Use `block.json` to add attributes in create block tutorial. ([33978](https://github.com/WordPress/gutenberg/pull/33978)) + - Fix typo in block gap documentation in `theme-json.md`. ([34231](https://github.com/WordPress/gutenberg/pull/34231)) + - Fix broken mobile testing documentation link in `testing-overview.md`. ([34187](https://github.com/WordPress/gutenberg/pull/34187)) + - Fix typo in `legacy-widget-block.md`. ([34103](https://github.com/WordPress/gutenberg/pull/34103)) + - Update spelling and `fontSize` examples in `create-block-theme.md`. ([34152](https://github.com/WordPress/gutenberg/pull/34152)) +- Library + - Bump mobile version in experiments page for Gallery. ([34220](https://github.com/WordPress/gutenberg/pull/34220)) +- Packages + - Add documentation for mobile components directory. ([33872](https://github.com/WordPress/gutenberg/pull/33872)) + +### Code Quality +- Block Editor + - Render head and body with single portal for block previews. ([34208](https://github.com/WordPress/gutenberg/pull/34208)) + - BlockList: refactor element context for style/svg appending. ([34183](https://github.com/WordPress/gutenberg/pull/34183)) + - BlockList: use InnerBlocks internally. ([29895](https://github.com/WordPress/gutenberg/pull/29895)) +- Components + - Unit Control: add unit tests for `getValidParsedUnit` utility method. ([34029](https://github.com/WordPress/gutenberg/pull/34029)) + - Rename `SegmentedControl` to `ToggleGroupControl`. ([34111](https://github.com/WordPress/gutenberg/pull/34111)) + - Dropdown Menu: remove min-width from the dropdown component and add whitespace rule to avoid wrapping ([33995](https://github.com/WordPress/gutenberg/pull/33995)) +- Core Data + - Allow passing store definitions to controls. ([34170](https://github.com/WordPress/gutenberg/pull/34170)) +- Site Editor + - Remove extra DOM element used for template part overlay. ([34012](https://github.com/WordPress/gutenberg/pull/34012)) + +### Tools +- Build Tooling + - Automated Changelog: force group all documentation tasks under `Documentation`. ([34042](https://github.com/WordPress/gutenberg/pull/34042)) + - Automated Changelog: rename "Editor" grouping to "Post Editor" to avoid ambiguity with other editors. ([34093](https://github.com/WordPress/gutenberg/pull/34093)) + - Automated Changelog: sort feature groups by issue name. ([34071](https://github.com/WordPress/gutenberg/pull/34071)) + - Automated Changelog: use nested headings for feature groups instead of indenting lists. ([34040](https://github.com/WordPress/gutenberg/pull/34040)) + - Automated Changelog: remove `Uncategorized` header in output and place items at top. ([34037](https://github.com/WordPress/gutenberg/pull/34037)) + - Add Typescript extensions to watched files. ([34094](https://github.com/WordPress/gutenberg/pull/34094)) + - Remove obsolete step that pushes tags in NPM publishing flow. ([34114](https://github.com/WordPress/gutenberg/pull/34114)) + - Release workflow: only commit modified changelogs. ([34211](https://github.com/WordPress/gutenberg/pull/34211)) +- ESLint + - Eslint plugin: use `@typescript-eslint/no-duplicate-imports` in TS projects. ([34055](https://github.com/WordPress/gutenberg/pull/34055)) +- GitHub Contributor Templates + - Issue Forms: simplify the bug report form template. ([34007](https://github.com/WordPress/gutenberg/pull/34007)) +- Logs + - Hide deprecation logs under a console group. ([34163](https://github.com/WordPress/gutenberg/pull/34163)) +- Testing + - Emulate reduced-motion in end-to-end tests. ([34132](https://github.com/WordPress/gutenberg/pull/34132)) + - Re-enable Android end-to-end tests. ([34243](https://github.com/WordPress/gutenberg/pull/34243)) + - Remove extra props from Cover deprecations. ([34066](https://github.com/WordPress/gutenberg/pull/34066)) + - Remove the `ENVIRONMENT_DIRECTORY` env variable that was added to the performance jobs. ([34086](https://github.com/WordPress/gutenberg/pull/34086)) + - Add snapshot test for changelog formatting. ([34049](https://github.com/WordPress/gutenberg/pull/34049)) + - Experiment with using REST API in end-to-end tests to build up states. ([33414](https://github.com/WordPress/gutenberg/pull/33414)) + + + + + += 11.3.0 = + +### Enhancements + +- Block Library + - Button: Add padding block support. ([31774](https://github.com/WordPress/gutenberg/pull/31774)) + - Post Featured Image: Add basic dimension controls. ([31634](https://github.com/WordPress/gutenberg/pull/31634)) + - Template Part: Try new icons for reusable blocks and template parts. ([34002](https://github.com/WordPress/gutenberg/pull/34002)) +- Block Patterns + - Add translation context on titles. ([33734](https://github.com/WordPress/gutenberg/pull/33734)) +- Block Editor + - Enable rich previews for internal links. ([33086](https://github.com/WordPress/gutenberg/pull/33086)) +- Components + - Add new ColorPicker. ([33714](https://github.com/WordPress/gutenberg/pull/33714)) + - Promote `ItemGroup`. ([33701](https://github.com/WordPress/gutenberg/pull/33701)) + - Polish the focus style for the segmented control. ([33842](https://github.com/WordPress/gutenberg/pull/33842)) + - Tune appender margin. ([33866](https://github.com/WordPress/gutenberg/pull/33866)) + - Update snackbar to use framer motion instead of react spring. ([33717](https://github.com/WordPress/gutenberg/pull/33717)) + - Use updated range styles. ([33824](https://github.com/WordPress/gutenberg/pull/33824)) +- CSS & Styling + - Reduce specificity of reset & classic styles. ([32659](https://github.com/WordPress/gutenberg/pull/32659)) +- Document Settings + - Disable spellcheck and autocomplete in permalink slug field. ([33708](https://github.com/WordPress/gutenberg/pull/33708)) +- Global Styles + - Dimensions Panel: Add new ToolsPanel component and update spacing supports. ([32392](https://github.com/WordPress/gutenberg/pull/32392)) +- REST API + - Improve the likelihood of getting rich link previews by modifying UA string for URL Details REST API endpoint. ([33747](https://github.com/WordPress/gutenberg/pull/33747)) +- Site Editor + - Add error boundary. ([33921](https://github.com/WordPress/gutenberg/pull/33921)) +- Template Editor + - Template Mode: Add busy state to template creation modal. ([33076](https://github.com/WordPress/gutenberg/pull/33076)) +- Widgets Editor + - Add error boundaries to widget screens. ([33771](https://github.com/WordPress/gutenberg/pull/33771)) + +### Bug Fixes + +- Accessibility + - Fix some JAWS bugs. ([33627](https://github.com/WordPress/gutenberg/pull/33627)) +- Block Library + - Button: Fix justification for button block when selected. ([33739](https://github.com/WordPress/gutenberg/pull/33739)) + - Image: Fix issue with canInsertCover not being set to false for empty arrays. ([33863](https://github.com/WordPress/gutenberg/pull/33863)) + - Query Pagination Numbers: Fix first page's link. ([33629](https://github.com/WordPress/gutenberg/pull/33629)) +- Block API + - Dimensions Support: Switch dimensions block support back to using spacing key. ([34030](https://github.com/WordPress/gutenberg/pull/34030)) +- Block Editor + - Closing the block inserter decrements block type impressions. ([33906](https://github.com/WordPress/gutenberg/pull/33906)) + - Fix block appender position in classic themes. ([33895](https://github.com/WordPress/gutenberg/pull/33895)) + - Fix positioning discrepancy with draggable chip. ([33893](https://github.com/WordPress/gutenberg/pull/33893)) + - Force link text to wrap in the Link UI when encountering extra long link text. ([33753](https://github.com/WordPress/gutenberg/pull/33753)) + - Improve display of LinkURL menu and fix spacing. ([33652](https://github.com/WordPress/gutenberg/pull/33652)) + - Only show rich preview for image and description if data is available. ([33660](https://github.com/WordPress/gutenberg/pull/33660)) + - URL Details: Avoid PHP notice when parsing protocol-relative icon URLs. ([33779](https://github.com/WordPress/gutenberg/pull/33779)) +- Components + - `useBreakpointIndex`: Attach `resize` event listener to `window` instead of `document`. ([33902](https://github.com/WordPress/gutenberg/pull/33902)) + - Components: Fix RTL on custom gradient picker. ([33831](https://github.com/WordPress/gutenberg/pull/33831)) + - FontSizePicker: Use number values when the initial value is a number. ([33679](https://github.com/WordPress/gutenberg/pull/33679)) + - FormTokenField: Avoid error when maxLength value is hit. ([33623](https://github.com/WordPress/gutenberg/pull/33623)) +- CSS & Styling + - Fix navigation block placeholder preview markup. ([33963](https://github.com/WordPress/gutenberg/pull/33963)) +- Global Styles + - Avoid rendering duplicate elements stylesheet. ([33680](https://github.com/WordPress/gutenberg/pull/33680)) + - Fix presets for blocks with multiple selectors. ([33951](https://github.com/WordPress/gutenberg/pull/33951)) + - Fix Global Styles transient key clash. ([33844](https://github.com/WordPress/gutenberg/pull/33844)) +- Meta Boxes + - Fix Safari 13 metaboxes from overlapping the content. ([33817](https://github.com/WordPress/gutenberg/pull/33817)) +- Navigation Editor + - Avoid React warning when creating a new menu. ([33843](https://github.com/WordPress/gutenberg/pull/33843)) + - Fix regressed menu selection dropdown placeholder value for Nav Editor menu locations UI. ([33748](https://github.com/WordPress/gutenberg/pull/33748)) +- Site Editor + - Fix the site editor breaking in firefox. ([33896](https://github.com/WordPress/gutenberg/pull/33896)) +- Post Editor + - Editor: Safer isPreviewingPost check. ([33840](https://github.com/WordPress/gutenberg/pull/33840)) +- Template Editor + - Only show post template actions to users with correct capabilities. ([33392](https://github.com/WordPress/gutenberg/pull/33392)) + + +### Performance + +- Block Library + - Improve the rendering/update performance of the image block. ([33974](https://github.com/WordPress/gutenberg/pull/33974)) + - Do not add to the block-library CSS bundle the colors that come from `theme.json`. ([33924](https://github.com/WordPress/gutenberg/pull/33924)) +- Block Editor + - Lazy render the inserter search results. ([33868](https://github.com/WordPress/gutenberg/pull/33868)) + - Lazy render block types in the inserter. ([33749](https://github.com/WordPress/gutenberg/pull/33749)) +- Parsing + - Improve the performance of the parser by removing the automatic custom classnames handling. ([33903](https://github.com/WordPress/gutenberg/pull/33903)) +- Post Editor + - Refactor the HierarchicalTermSelector so that it does not cause unnecessary loading of terms. ([33418](https://github.com/WordPress/gutenberg/pull/33418)) +- Template Editor + - Template Mode: Remove 'per_page' argument from the template data selector. ([33742](https://github.com/WordPress/gutenberg/pull/33742)) + +### Experiments + +- Full Site Editing + - Site Editor: Implement a settings object filter. ([33737](https://github.com/WordPress/gutenberg/pull/33737)) + - Template part selection popover - minor style updates for visiblity. ([33733](https://github.com/WordPress/gutenberg/pull/33733)) + - Template Part placeholder - Add title step to creation flow. ([33703](https://github.com/WordPress/gutenberg/pull/33703)) +- Navigation Block + - Navigation: Fix navigation block appender invalid html. ([33964](https://github.com/WordPress/gutenberg/pull/33964)) + - Enable the ability to remove a link from the Nav Link block in the Nav Block. ([33777](https://github.com/WordPress/gutenberg/pull/33777)) + - Fix navigation margin collapsing. ([33021](https://github.com/WordPress/gutenberg/pull/33021)) + + +### Documentation + +- Handbook + - Add documentation to disable remote calls for block patterns. ([33930](https://github.com/WordPress/gutenberg/pull/33930)) + - Add missing comma. ([33764](https://github.com/WordPress/gutenberg/pull/33764)) + - Add more details about block attributes. ([33880](https://github.com/WordPress/gutenberg/pull/33880)) + - Add spaces in add_theme_support documentation code. ([33796](https://github.com/WordPress/gutenberg/pull/33796)) + - Correct spelling and grammar in documentation. ([33860](https://github.com/WordPress/gutenberg/pull/33860)) + - fix: `supports.color.gradients` is plural. ([33781](https://github.com/WordPress/gutenberg/pull/33781)) + - fix: Broken link in documentation to block support mechanism. ([33780](https://github.com/WordPress/gutenberg/pull/33780)) + - Update documentation to reflect new automated process for feature grouping. ([33573](https://github.com/WordPress/gutenberg/pull/33573)) + - link fix: Block editor Sidebar Tutorial. ([33308](https://github.com/WordPress/gutenberg/pull/33308)) +- Library + - Fix gutenberg_resolve_template() return documentation. ([33800](https://github.com/WordPress/gutenberg/pull/33800)) + - Fix misspelling of "queries" in filter documentation. ([33799](https://github.com/WordPress/gutenberg/pull/33799)) +- Packages + - Example for rest_endpoints filter in PHP. ([33738](https://github.com/WordPress/gutenberg/pull/33738)) + + +### Code Quality + +- Block Library + - Site Logo: Use getMedia shorthand. ([33992](https://github.com/WordPress/gutenberg/pull/33992)) + - Featured Image: Use getMedia shorthand. ([33943](https://github.com/WordPress/gutenberg/pull/33943)) + - Search Block: Removed components class from icon button and polished css. ([33961](https://github.com/WordPress/gutenberg/pull/33961)) +- Components + - Components utils: `rtl()` return type, `rtl.watch()` utility. ([33882](https://github.com/WordPress/gutenberg/pull/33882)) + - InputControl to TypeScript. ([33696](https://github.com/WordPress/gutenberg/pull/33696)) + - Use the `__unsafe_useEmotionCache` in the `useCx` hook. ([33982](https://github.com/WordPress/gutenberg/pull/33982)) +- Core Data + - Deprecate getAuthors in favor of getUsers. ([33725](https://github.com/WordPress/gutenberg/pull/33725)) +- Global Styles + - No longer read from `experimental-theme.json`. ([33904](https://github.com/WordPress/gutenberg/pull/33904)) + - Remove the experimental prefix and rename `theme.json` files. ([33925](https://github.com/WordPress/gutenberg/pull/33925)) +- Post Editor + - Refactor MetaBoxesArea to to functional components using hooks. ([30542](https://github.com/WordPress/gutenberg/pull/30542)) +- Scripts + - Fix typo in format change message. ([33945](https://github.com/WordPress/gutenberg/pull/33945)) + +### Tools + +- Testing + - Add search performance measures and make other measures more stable. ([33848](https://github.com/WordPress/gutenberg/pull/33848)) + - Avoid double parsing the content when loading the editor. ([33727](https://github.com/WordPress/gutenberg/pull/33727)) + - Block Hierarchy Navigation waits for the column to be highlighted. ([33721](https://github.com/WordPress/gutenberg/pull/33721)) + - Widgets Editor: Try to fix flaky customizer inspector test. ([33890](https://github.com/WordPress/gutenberg/pull/33890), [33965](https://github.com/WordPress/gutenberg/pull/33965)) +- Build Tooling + - Readable JS assets Plugin: Fix webpack 5 support. ([33785](https://github.com/WordPress/gutenberg/pull/33785)) + - Scripts: Use cssnano to minimize CSS files with build. ([33750](https://github.com/WordPress/gutenberg/pull/33750)) + - Scripts: Webpack configuration update to minimize CSS. ([33676](https://github.com/WordPress/gutenberg/pull/33676)) + - Scripts: Update webpack to v5 (try 2). ([33818](https://github.com/WordPress/gutenberg/pull/33818)) + - Scripts: Add missing fallback for target in webpack 5 configuration. ([34112](https://github.com/WordPress/gutenberg/pull/34112)) + +- ESLint + - Include .jsx extenstion when linting import statements. ([33746](https://github.com/WordPress/gutenberg/pull/33746)) +- GitHub Contributor Templates + - Update bug issue template to use forms. ([33713](https://github.com/WordPress/gutenberg/pull/33713), [33786](https://github.com/WordPress/gutenberg/pull/33786), [33761](https://github.com/WordPress/gutenberg/pull/33761)) +- Plugin + - Plugin: Fix `jsdoc/check-line-alignment` ESLint warnings. ([33901](https://github.com/WordPress/gutenberg/pull/33901)) + - Correct `function_exists()` check typo introduced in #33331. ([33513](https://github.com/WordPress/gutenberg/pull/33513)) + + += 11.2.1 = + +### Bug Fixes + +- Fix available alignments and layout for the post editor. ([33894](https://github.com/WordPress/gutenberg/pull/33894)) + + + + + += 11.2.0 = ### Features @@ -13,7 +7571,6 @@ - Post Editor - Add a new page/post button on publish panel. ([33276](https://github.com/WordPress/gutenberg/pull/33276)) - - Mobile - Global styles: Font sizes and line height data. ([33390](https://github.com/WordPress/gutenberg/pull/33390)) - Widgets Editor - Widget inserter: Clarify that the button toggles the inserter. ([33561](https://github.com/WordPress/gutenberg/pull/33561)) @@ -28,7 +7585,7 @@ - Components: Promote VisuallyHidden from ui into full components (#31244). ([31902](https://github.com/WordPress/gutenberg/pull/31902)) - Accessibility - - Inserter: In text label mode, use "Close" label when inserter is open. ([33534](https://github.com/WordPress/gutenberg/pull/33534)) + - Inserter: In text label mode, use "Close" label when inserter is open. ([33534](https://github.com/WordPress/gutenberg/pull/33534)) - Data - Core Data: Pass query argument to data selector shortcuts. ([33689](https://github.com/WordPress/gutenberg/pull/33689)) @@ -63,7 +7620,6 @@ - Card: Add missing `box-sizing` CSS rules. ([33511](https://github.com/WordPress/gutenberg/pull/33511)) - CardBody: Change default value of `isScrollable` to `false`. ([33490](https://github.com/WordPress/gutenberg/pull/33490)) - `ItemGroup`: Fix padding, split types, rename boolean props. ([33553](https://github.com/WordPress/gutenberg/pull/33553)) - - RNMobile: Fix slider and stepper text inputs in dark mode. ([33402](https://github.com/WordPress/gutenberg/pull/33402)) - Themes - I18n: Fix broken loop in `WP_Theme_JSON_Resolver`. ([33624](https://github.com/WordPress/gutenberg/pull/33624)) @@ -133,6 +7689,7 @@ - Add i18n filters to documentation table of contents. ([33556](https://github.com/WordPress/gutenberg/pull/33556)) - Update the create a block theme how-to guide. ([33382](https://github.com/WordPress/gutenberg/pull/33382)) - Block API: Improve how blocks assets are versioned. ([33075](https://github.com/WordPress/gutenberg/pull/33075)) + - Update the tested up to version in the readme file. ([33760](https://github.com/WordPress/gutenberg/pull/33760)) - Correct {% end%} tag - missing a space. ([33189](https://github.com/WordPress/gutenberg/pull/33189)) - Use tabs instead of spaces in block transform doc example. ([33549](https://github.com/WordPress/gutenberg/pull/33549)) - Fix flaky widgets end-to-end tests by waiting for the snackbar correctly. ([33317](https://github.com/WordPress/gutenberg/pull/33317)) @@ -157,6 +7714,8 @@ - Editor: Refactor Post Author component. ([33695](https://github.com/WordPress/gutenberg/pull/33695)) + + = 11.1.0 = ### Enhancements @@ -210,10 +7769,10 @@ - Block Library: - Buttons Block: Remove green background color in button preview. ([33116](https://github.com/WordPress/gutenberg/pull/33116)) - Embed Block: Include missing attributes when upgrading embed block. ([33235](https://github.com/WordPress/gutenberg/pull/33235)) - - Image Block: + - Image Block: - Improve "can switch to cover" check. ([33095](https://github.com/WordPress/gutenberg/pull/33095)) - Fix replace link control styling. ([33326](https://github.com/WordPress/gutenberg/pull/33326)) - - Query Loop Block: + - Query Loop Block: - Prevent entering invalid values in the Query Loop block configuration. ([33285](https://github.com/WordPress/gutenberg/pull/33285)) - Update getTermsInfo() to workaround parsing issue for translatable strings. ([33341](https://github.com/WordPress/gutenberg/pull/33341)) - Search Block: @@ -241,7 +7800,7 @@ - Fix inserter size on Widgets Editor header. ([33118](https://github.com/WordPress/gutenberg/pull/33118)) - Merge conflicting `wp.editor` objects into a single, non-conflicting module. ([33228](https://github.com/WordPress/gutenberg/pull/33228)) - Retrieve latest widgets before loading sidebars. ([32997](https://github.com/WordPress/gutenberg/pull/32997)) -- Writing flow: +- Writing flow: - Allow select all from empty selection. ([33446](https://github.com/WordPress/gutenberg/pull/33446)) - Attempt to fix preview end-to-end failure. ([33467](https://github.com/WordPress/gutenberg/pull/33467)) - Components: @@ -300,7 +7859,7 @@ - Block Editor: - Refactor the user autocompleter to avoid apiFetch and rely on the data module. ([33028](https://github.com/WordPress/gutenberg/pull/33028)) - Warn when `useBlockProps` hook used with a wrong Block API version. ([33274](https://github.com/WordPress/gutenberg/pull/33274)) - - + - - Block Library: - Image Block: Fix uncaught error. ([24334](https://github.com/WordPress/gutenberg/pull/24334)) - Latest Posts Block: Refactor to drop apiFetch usage in favor of using the data module. ([33063](https://github.com/WordPress/gutenberg/pull/33063)) @@ -5645,8 +13204,8 @@ Fix action GitHub action workflow YAML syntax errors. ([23844](https://github.co ### Build Tooling * Add new command for pre-releasing npm packages. ([23357](https://github.com/WordPress/gutenberg/pull/23357)) -* Move the CI setup from Travis to Github actions. ([23523](https://github.com/WordPress/gutenberg/pull/23523)) ([23520](https://github.com/WordPress/gutenberg/pull/23520)) ([23518](https://github.com/WordPress/gutenberg/pull/23518)) ([23470](https://github.com/WordPress/gutenberg/pull/23470)) ([23538](https://github.com/WordPress/gutenberg/pull/23538)) -* Add npm cache to Github workflows and use checkout v2. ([23482](https://github.com/WordPress/gutenberg/pull/23482)) +* Move the CI setup from Travis to GitHub actions. ([23523](https://github.com/WordPress/gutenberg/pull/23523)) ([23520](https://github.com/WordPress/gutenberg/pull/23520)) ([23518](https://github.com/WordPress/gutenberg/pull/23518)) ([23470](https://github.com/WordPress/gutenberg/pull/23470)) ([23538](https://github.com/WordPress/gutenberg/pull/23538)) +* Add npm cache to GitHub workflows and use checkout v2. ([23482](https://github.com/WordPress/gutenberg/pull/23482)) * Update bin/validate-package-lock.js error message. ([23435](https://github.com/WordPress/gutenberg/pull/23435)) * Minor improvements to the release tool and release documentation. ([23441](https://github.com/WordPress/gutenberg/pull/23441)) * Tools: Always append prerelease to version update in package.json when preparing npm release. ([23480](https://github.com/WordPress/gutenberg/pull/23480)) @@ -7792,7 +15351,7 @@ Fix action GitHub action workflow YAML syntax errors. ([23844](https://github.co * Run tests using the same [environment](https://github.com/WordPress/gutenberg/pull/18703) version used for development. * Add [CPU/Network slowdown configuration](https://github.com/WordPress/gutenberg/pull/18770) options to the e2e tests setup. * Enable [Type checking for the @wordpress/token-list](https://github.com/WordPress/gutenberg/pull/18839) package. -* Move the [changelog.txt and readme.txt files](https://github.com/WordPress/gutenberg/pull/18828) to the Github repository. +* Move the [changelog.txt and readme.txt files](https://github.com/WordPress/gutenberg/pull/18828) to the GitHub repository. = 7.0.0 = @@ -8491,7 +16050,7 @@ Add knobs to the [ColorIndicator Story](https://github.com/WordPress/gutenberg/p - Make API Fetch [refresh nonces as soon as they expired](https://github.com/WordPress/gutenberg/pull/16683). ### Various -- Github actions: +- GitHub actions: - [Automatically assign issues](https://github.com/WordPress/gutenberg/pull/16700) to PR authors. - Automatically assign the [First-time Contributor label](https://github.com/WordPress/gutenberg/pull/16762). - Avoid [unguarded getRangeAt usage](https://github.com/WordPress/gutenberg/pull/16212) and add eslint rule. @@ -8514,7 +16073,7 @@ Add knobs to the [ColorIndicator Story](https://github.com/WordPress/gutenberg/p - Fix [intermittent RichText e2e test failures](https://github.com/WordPress/gutenberg/pull/16952). - [Replace the react-click-outside dependency usage](https://github.com/WordPress/gutenberg/pull/16878) with our own Higher-order component withFocusOutside. - Improve the [usage of eslint-disable directives](https://github.com/WordPress/gutenberg/pull/16941). -- Migrate the [Github Actions](https://github.com/WordPress/gutenberg/pull/16981) to the new YAML syntax. +- Migrate the [GitHub Actions](https://github.com/WordPress/gutenberg/pull/16981) to the new YAML syntax. ### Documentation @@ -8579,7 +16138,7 @@ Add knobs to the [ColorIndicator Story](https://github.com/WordPress/gutenberg/p - Fix Travis instability by [waiting for MySQL availability](https://github.com/WordPress/gutenberg/pull/16461) before install the plugin. - Continue the [generic RichText component](https://github.com/WordPress/gutenberg/pull/16309) refactoring. - Remove the [usage of the editor store](https://github.com/WordPress/gutenberg/pull/16184) from the block editor module. -- Update the [MilestoneIt Github action](https://github.com/WordPress/gutenberg/pull/16511) to read the plugin version from trunk. +- Update the [MilestoneIt GitHub action](https://github.com/WordPress/gutenberg/pull/16511) to read the plugin version from trunk. - Refactor the post meta block attributes to use a generic [custom sources mechanism](https://github.com/WordPress/gutenberg/pull/16402). - Expose [position prop in DotTip](https://github.com/WordPress/gutenberg/pull/14972) component. - Avoid docker [containers automatic restart](https://github.com/WordPress/gutenberg/pull/16547). @@ -8668,7 +16227,7 @@ Add knobs to the [ColorIndicator Story](https://github.com/WordPress/gutenberg/p ### Various * Introduce a [PluginDocumentSettingPanel](https://github.com/WordPress/gutenberg/pull/13361) slot to allow third-party plugins to add panels to the document sidebar tab. -* [Deploy the playground](https://github.com/WordPress/gutenberg/pull/16345) automatically to Github Pages. [https://wordpress.github.io/gutenberg/](https://wordpress.github.io/gutenberg/) +* [Deploy the playground](https://github.com/WordPress/gutenberg/pull/16345) automatically to GitHub Pages. [https://wordpress.github.io/gutenberg/](https://wordpress.github.io/gutenberg/) * Extract a [generic RichText](http://try/move-rich-text) [component](https://github.com/WordPress/gutenberg/pull/16299) to the @wordpress/rich-text package. * Refactor the [editor initialization](https://github.com/WordPress/gutenberg/pull/15444) to rely on a component. * Remove unused internal [asType utility](https://github.com/WordPress/gutenberg/pull/16291). @@ -8724,7 +16283,7 @@ Add knobs to the [ColorIndicator Story](https://github.com/WordPress/gutenberg/p * Remove the default value for the [required onRequestClose prop](https://github.com/WordPress/gutenberg/pull/16074) in the Modal component. * Remove the [editor package dependency](https://github.com/WordPress/gutenberg/pull/15548) from the media blocks. * Fix the [playground build](https://github.com/WordPress/gutenberg/pull/15947) script. -* Fix the [Github action assigning milestones](https://github.com/WordPress/gutenberg/pull/16084). +* Fix the [GitHub action assigning milestones](https://github.com/WordPress/gutenberg/pull/16084). * Fix [naming conventions](https://github.com/WordPress/gutenberg/pull/16091) for function containing CLI keyword. * Fix the [Travis build artifacts job](http://update/build-artifacts-npm-install) to use a full npm install while building. * Make [Calendar block resilient](https://github.com/WordPress/gutenberg/pull/16161) to the editor module not being present. @@ -8823,7 +16382,7 @@ Add knobs to the [ColorIndicator Story](https://github.com/WordPress/gutenberg/p * Support the [full plugin release process](https://github.com/WordPress/gutenberg/pull/15848) in the automated release tool. * Speed up the [packages build](https://github.com/WordPress/gutenberg/pull/15230) [tool](https://github.com/WordPress/gutenberg/pull/15920) script and the [Gutenberg plugin build](https://github.com/WordPress/gutenberg/pull/15226) config. * Extract media upload logic part into a new [@wordpress/media-utils package](https://github.com/WordPress/gutenberg/pull/15521). -* Introduce [**Milestone-It** Github Action](https://github.com/WordPress/gutenberg/pull/15826) to auto-assign milestones to merged PRs. +* Introduce [**Milestone-It** GitHub Action](https://github.com/WordPress/gutenberg/pull/15826) to auto-assign milestones to merged PRs. * Move the [transformStyles function](https://github.com/WordPress/gutenberg/pull/15572) to the block-editor package to use in the widgets screen. * Allow plugin authors to [override the default anchor attribute](https://github.com/WordPress/gutenberg/pull/15959) definition. * Add [overlayColor classname to cover blocks](https://github.com/WordPress/gutenberg/pull/15939) editor markup. @@ -8917,7 +16476,7 @@ Add knobs to the [ColorIndicator Story](https://github.com/WordPress/gutenberg/p # Documentation - Improve the Slot/Fill documentation. -- Document the Github teams used in the repository. +- Document the GitHub teams used in the repository. - Document the icon prop for the MediaPlaceholder component. - Update the changelogs maintenance documentation. - Clarify the save function documentation to discourage side effects. diff --git a/composer.json b/composer.json index cf0658add1f67..a0ba8c972375c 100644 --- a/composer.json +++ b/composer.json @@ -16,7 +16,14 @@ "issues": "https://github.com/WordPress/gutenberg/issues" }, "config": { - "process-timeout": 0 + "process-timeout": 0, + "platform": { + "php": "7.4" + }, + "allow-plugins": { + "dealerdirect/phpcodesniffer-composer-installer": true, + "composer/installers": true + } }, "require-dev": { "dealerdirect/phpcodesniffer-composer-installer": "^0.7", @@ -26,7 +33,8 @@ "sirbrillig/phpcs-variable-analysis": "^2.8", "wp-phpunit/wp-phpunit": "^5.4", "phpunit/phpunit": "^8.5", - "spatie/phpunit-watcher": "^1.23" + "spatie/phpunit-watcher": "^1.23", + "yoast/phpunit-polyfills": "^1.0" }, "require": { "composer/installers": "~1.0" diff --git a/composer.lock b/composer.lock index 5a0d86e54a1bd..5ac8ccc8130e1 100644 --- a/composer.lock +++ b/composer.lock @@ -4,20 +4,20 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "1072fbf86d89fdd06d9702e33d12d114", + "content-hash": "fc5714f6e3f62ec33095d1dba12bf86c", "packages": [ { "name": "composer/installers", - "version": "v1.10.0", + "version": "v1.12.0", "source": { "type": "git", "url": "https://github.com/composer/installers.git", - "reference": "1a0357fccad9d1cc1ea0c9a05b8847fbccccb78d" + "reference": "d20a64ed3c94748397ff5973488761b22f6d3f19" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/installers/zipball/1a0357fccad9d1cc1ea0c9a05b8847fbccccb78d", - "reference": "1a0357fccad9d1cc1ea0c9a05b8847fbccccb78d", + "url": "https://api.github.com/repos/composer/installers/zipball/d20a64ed3c94748397ff5973488761b22f6d3f19", + "reference": "d20a64ed3c94748397ff5973488761b22f6d3f19", "shasum": "" }, "require": { @@ -111,10 +111,12 @@ "majima", "mako", "mediawiki", + "miaoxing", "modulework", "modx", "moodle", "osclass", + "pantheon", "phpbb", "piwik", "ppi", @@ -128,6 +130,7 @@ "sydes", "sylius", "symfony", + "tastyigniter", "typo3", "wordpress", "yawik", @@ -136,7 +139,7 @@ ], "support": { "issues": "https://github.com/composer/installers/issues", - "source": "https://github.com/composer/installers/tree/v1.10.0" + "source": "https://github.com/composer/installers/tree/v1.12.0" }, "funding": [ { @@ -152,30 +155,30 @@ "type": "tidelift" } ], - "time": "2021-01-14T11:07:16+00:00" + "time": "2021-09-13T08:19:44+00:00" } ], "packages-dev": [ { "name": "clue/stdio-react", - "version": "v2.4.0", + "version": "v2.5.0", "source": { "type": "git", "url": "https://github.com/clue/reactphp-stdio.git", - "reference": "5722686d3cc0cdf2ccedb6079bfd066220611f00" + "reference": "c73bcdc228eca627992c0088f7bc30b794fde8da" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/clue/reactphp-stdio/zipball/5722686d3cc0cdf2ccedb6079bfd066220611f00", - "reference": "5722686d3cc0cdf2ccedb6079bfd066220611f00", + "url": "https://api.github.com/repos/clue/reactphp-stdio/zipball/c73bcdc228eca627992c0088f7bc30b794fde8da", + "reference": "c73bcdc228eca627992c0088f7bc30b794fde8da", "shasum": "" }, "require": { "clue/term-react": "^1.0 || ^0.1.1", "clue/utf8-react": "^1.0 || ^0.1", "php": ">=5.3", - "react/event-loop": "^1.0 || ^0.5 || ^0.4 || ^0.3", - "react/stream": "^1.0 || ^0.7 || ^0.6" + "react/event-loop": "^1.2", + "react/stream": "^1.2" }, "require-dev": { "clue/arguments": "^2.0", @@ -218,7 +221,7 @@ ], "support": { "issues": "https://github.com/clue/reactphp-stdio/issues", - "source": "https://github.com/clue/reactphp-stdio/tree/v2.4.0" + "source": "https://github.com/clue/reactphp-stdio/tree/v2.5.0" }, "funding": [ { @@ -230,7 +233,7 @@ "type": "github" } ], - "time": "2020-11-20T14:28:39+00:00" + "time": "2021-10-25T08:01:22+00:00" }, { "name": "clue/term-react", @@ -556,16 +559,16 @@ }, { "name": "jolicode/jolinotif", - "version": "v2.2.0", + "version": "v2.3.0", "source": { "type": "git", "url": "https://github.com/jolicode/JoliNotif.git", - "reference": "52f5b98f964f6009b8ec4c0e951edcd0862e2ac7" + "reference": "9cca717bbc47aa2ffeca51d77daa13b824a489ee" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/jolicode/JoliNotif/zipball/52f5b98f964f6009b8ec4c0e951edcd0862e2ac7", - "reference": "52f5b98f964f6009b8ec4c0e951edcd0862e2ac7", + "url": "https://api.github.com/repos/jolicode/JoliNotif/zipball/9cca717bbc47aa2ffeca51d77daa13b824a489ee", + "reference": "9cca717bbc47aa2ffeca51d77daa13b824a489ee", "shasum": "" }, "require": { @@ -583,7 +586,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.1.x-dev" + "dev-master": "2.3.x-dev" } }, "autoload": { @@ -611,7 +614,7 @@ ], "support": { "issues": "https://github.com/jolicode/JoliNotif/issues", - "source": "https://github.com/jolicode/JoliNotif/tree/v2.2.0" + "source": "https://github.com/jolicode/JoliNotif/tree/v2.3.0" }, "funding": [ { @@ -619,7 +622,7 @@ "type": "tidelift" } ], - "time": "2020-06-17T08:25:38+00:00" + "time": "2021-03-07T12:30:00+00:00" }, { "name": "myclabs/deep-copy", @@ -681,16 +684,16 @@ }, { "name": "phar-io/manifest", - "version": "2.0.1", + "version": "2.0.3", "source": { "type": "git", "url": "https://github.com/phar-io/manifest.git", - "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133" + "reference": "97803eca37d319dfa7826cc2437fc020857acb53" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/85265efd3af7ba3ca4b2a2c34dbfc5788dd29133", - "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", + "reference": "97803eca37d319dfa7826cc2437fc020857acb53", "shasum": "" }, "require": { @@ -735,22 +738,22 @@ "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", "support": { "issues": "https://github.com/phar-io/manifest/issues", - "source": "https://github.com/phar-io/manifest/tree/master" + "source": "https://github.com/phar-io/manifest/tree/2.0.3" }, - "time": "2020-06-27T14:33:11+00:00" + "time": "2021-07-20T11:28:43+00:00" }, { "name": "phar-io/version", - "version": "3.0.4", + "version": "3.1.0", "source": { "type": "git", "url": "https://github.com/phar-io/version.git", - "reference": "e4782611070e50613683d2b9a57730e9a3ba5451" + "reference": "bae7c545bef187884426f042434e561ab1ddb182" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/e4782611070e50613683d2b9a57730e9a3ba5451", - "reference": "e4782611070e50613683d2b9a57730e9a3ba5451", + "url": "https://api.github.com/repos/phar-io/version/zipball/bae7c545bef187884426f042434e561ab1ddb182", + "reference": "bae7c545bef187884426f042434e561ab1ddb182", "shasum": "" }, "require": { @@ -786,9 +789,9 @@ "description": "Library for handling version information and constraints", "support": { "issues": "https://github.com/phar-io/version/issues", - "source": "https://github.com/phar-io/version/tree/3.0.4" + "source": "https://github.com/phar-io/version/tree/3.1.0" }, - "time": "2020-12-13T23:18:30+00:00" + "time": "2021-02-23T14:00:09+00:00" }, { "name": "phpcompatibility/php-compatibility", @@ -907,16 +910,16 @@ }, { "name": "phpdocumentor/reflection-docblock", - "version": "5.2.2", + "version": "5.3.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556" + "reference": "622548b623e81ca6d78b721c5e029f4ce664f170" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/069a785b2141f5bcf49f3e353548dc1cce6df556", - "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170", + "reference": "622548b623e81ca6d78b721c5e029f4ce664f170", "shasum": "" }, "require": { @@ -927,7 +930,8 @@ "webmozart/assert": "^1.9.1" }, "require-dev": { - "mockery/mockery": "~1.3.2" + "mockery/mockery": "~1.3.2", + "psalm/phar": "^4.8" }, "type": "library", "extra": { @@ -957,22 +961,22 @@ "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", "support": { "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/master" + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0" }, - "time": "2020-09-03T19:13:55+00:00" + "time": "2021-10-19T17:43:47+00:00" }, { "name": "phpdocumentor/type-resolver", - "version": "1.4.0", + "version": "1.5.1", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0" + "reference": "a12f7e301eb7258bb68acd89d4aefa05c2906cae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", - "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/a12f7e301eb7258bb68acd89d4aefa05c2906cae", + "reference": "a12f7e301eb7258bb68acd89d4aefa05c2906cae", "shasum": "" }, "require": { @@ -980,7 +984,8 @@ "phpdocumentor/reflection-common": "^2.0" }, "require-dev": { - "ext-tokenizer": "*" + "ext-tokenizer": "*", + "psalm/phar": "^4.8" }, "type": "library", "extra": { @@ -1006,39 +1011,39 @@ "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", "support": { "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.4.0" + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.5.1" }, - "time": "2020-09-17T18:55:26+00:00" + "time": "2021-10-02T14:08:47+00:00" }, { "name": "phpspec/prophecy", - "version": "1.12.2", + "version": "1.14.0", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "245710e971a030f42e08f4912863805570f23d39" + "reference": "d86dfc2e2a3cd366cee475e52c6bb3bbc371aa0e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/245710e971a030f42e08f4912863805570f23d39", - "reference": "245710e971a030f42e08f4912863805570f23d39", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/d86dfc2e2a3cd366cee475e52c6bb3bbc371aa0e", + "reference": "d86dfc2e2a3cd366cee475e52c6bb3bbc371aa0e", "shasum": "" }, "require": { "doctrine/instantiator": "^1.2", - "php": "^7.2 || ~8.0, <8.1", + "php": "^7.2 || ~8.0, <8.2", "phpdocumentor/reflection-docblock": "^5.2", "sebastian/comparator": "^3.0 || ^4.0", "sebastian/recursion-context": "^3.0 || ^4.0" }, "require-dev": { - "phpspec/phpspec": "^6.0", + "phpspec/phpspec": "^6.0 || ^7.0", "phpunit/phpunit": "^8.0 || ^9.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.11.x-dev" + "dev-master": "1.x-dev" } }, "autoload": { @@ -1073,22 +1078,22 @@ ], "support": { "issues": "https://github.com/phpspec/prophecy/issues", - "source": "https://github.com/phpspec/prophecy/tree/1.12.2" + "source": "https://github.com/phpspec/prophecy/tree/1.14.0" }, - "time": "2020-12-19T10:15:11+00:00" + "time": "2021-09-10T09:02:12+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "7.0.14", + "version": "7.0.15", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "bb7c9a210c72e4709cdde67f8b7362f672f2225c" + "reference": "819f92bba8b001d4363065928088de22f25a3a48" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/bb7c9a210c72e4709cdde67f8b7362f672f2225c", - "reference": "bb7c9a210c72e4709cdde67f8b7362f672f2225c", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/819f92bba8b001d4363065928088de22f25a3a48", + "reference": "819f92bba8b001d4363065928088de22f25a3a48", "shasum": "" }, "require": { @@ -1097,7 +1102,7 @@ "php": ">=7.2", "phpunit/php-file-iterator": "^2.0.2", "phpunit/php-text-template": "^1.2.1", - "phpunit/php-token-stream": "^3.1.1 || ^4.0", + "phpunit/php-token-stream": "^3.1.3 || ^4.0", "sebastian/code-unit-reverse-lookup": "^1.0.1", "sebastian/environment": "^4.2.2", "sebastian/version": "^2.0.1", @@ -1140,7 +1145,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/7.0.14" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/7.0.15" }, "funding": [ { @@ -1148,20 +1153,20 @@ "type": "github" } ], - "time": "2020-12-02T13:39:03+00:00" + "time": "2021-07-26T12:20:09+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "2.0.3", + "version": "2.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "4b49fb70f067272b659ef0174ff9ca40fdaa6357" + "reference": "42c5ba5220e6904cbfe8b1a1bda7c0cfdc8c12f5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/4b49fb70f067272b659ef0174ff9ca40fdaa6357", - "reference": "4b49fb70f067272b659ef0174ff9ca40fdaa6357", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/42c5ba5220e6904cbfe8b1a1bda7c0cfdc8c12f5", + "reference": "42c5ba5220e6904cbfe8b1a1bda7c0cfdc8c12f5", "shasum": "" }, "require": { @@ -1200,7 +1205,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/2.0.3" + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/2.0.5" }, "funding": [ { @@ -1208,7 +1213,7 @@ "type": "github" } ], - "time": "2020-11-30T08:25:21+00:00" + "time": "2021-12-02T12:42:26+00:00" }, { "name": "phpunit/php-text-template", @@ -1376,16 +1381,16 @@ }, { "name": "phpunit/phpunit", - "version": "8.5.14", + "version": "8.5.21", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "c25f79895d27b6ecd5abfa63de1606b786a461a3" + "reference": "50a58a60b85947b0bee4c8ecfe0f4bbdcf20e984" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/c25f79895d27b6ecd5abfa63de1606b786a461a3", - "reference": "c25f79895d27b6ecd5abfa63de1606b786a461a3", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/50a58a60b85947b0bee4c8ecfe0f4bbdcf20e984", + "reference": "50a58a60b85947b0bee4c8ecfe0f4bbdcf20e984", "shasum": "" }, "require": { @@ -1397,12 +1402,12 @@ "ext-xml": "*", "ext-xmlwriter": "*", "myclabs/deep-copy": "^1.10.0", - "phar-io/manifest": "^2.0.1", + "phar-io/manifest": "^2.0.3", "phar-io/version": "^3.0.2", "php": ">=7.2", "phpspec/prophecy": "^1.10.3", "phpunit/php-code-coverage": "^7.0.12", - "phpunit/php-file-iterator": "^2.0.2", + "phpunit/php-file-iterator": "^2.0.4", "phpunit/php-text-template": "^1.2.1", "phpunit/php-timer": "^2.1.2", "sebastian/comparator": "^3.0.2", @@ -1457,7 +1462,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/8.5.14" + "source": "https://github.com/sebastianbergmann/phpunit/tree/8.5.21" }, "funding": [ { @@ -1469,31 +1474,26 @@ "type": "github" } ], - "time": "2021-01-17T07:37:30+00:00" + "time": "2021-09-25T07:37:20+00:00" }, { "name": "psr/container", - "version": "1.0.0", + "version": "1.1.2", "source": { "type": "git", "url": "https://github.com/php-fig/container.git", - "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" + "reference": "513e0666f7216c7459170d56df27dfcefe1689ea" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", - "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea", + "reference": "513e0666f7216c7459170d56df27dfcefe1689ea", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=7.4.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, "autoload": { "psr-4": { "Psr\\Container\\": "src/" @@ -1506,7 +1506,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common Container Interface (PHP FIG PSR-11)", @@ -1520,29 +1520,29 @@ ], "support": { "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/master" + "source": "https://github.com/php-fig/container/tree/1.1.2" }, - "time": "2017-02-14T16:28:37+00:00" + "time": "2021-11-05T16:50:12+00:00" }, { "name": "react/event-loop", - "version": "v1.1.1", + "version": "v1.2.0", "source": { "type": "git", "url": "https://github.com/reactphp/event-loop.git", - "reference": "6d24de090cd59cfc830263cfba965be77b563c13" + "reference": "be6dee480fc4692cec0504e65eb486e3be1aa6f2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/event-loop/zipball/6d24de090cd59cfc830263cfba965be77b563c13", - "reference": "6d24de090cd59cfc830263cfba965be77b563c13", + "url": "https://api.github.com/repos/reactphp/event-loop/zipball/be6dee480fc4692cec0504e65eb486e3be1aa6f2", + "reference": "be6dee480fc4692cec0504e65eb486e3be1aa6f2", "shasum": "" }, "require": { "php": ">=5.3.0" }, "require-dev": { - "phpunit/phpunit": "^7.0 || ^6.4 || ^5.7 || ^4.8.35" + "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35" }, "suggest": { "ext-event": "~1.0 for ExtEventLoop", @@ -1559,6 +1559,28 @@ "license": [ "MIT" ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], "description": "ReactPHP's core reactor event loop that libraries can use for evented I/O.", "keywords": [ "asynchronous", @@ -1566,32 +1588,42 @@ ], "support": { "issues": "https://github.com/reactphp/event-loop/issues", - "source": "https://github.com/reactphp/event-loop/tree/v1.1.1" + "source": "https://github.com/reactphp/event-loop/tree/v1.2.0" }, - "time": "2020-01-01T18:39:52+00:00" + "funding": [ + { + "url": "https://github.com/WyriHaximus", + "type": "github" + }, + { + "url": "https://github.com/clue", + "type": "github" + } + ], + "time": "2021-07-11T12:31:24+00:00" }, { "name": "react/stream", - "version": "v1.1.1", + "version": "v1.2.0", "source": { "type": "git", "url": "https://github.com/reactphp/stream.git", - "reference": "7c02b510ee3f582c810aeccd3a197b9c2f52ff1a" + "reference": "7a423506ee1903e89f1e08ec5f0ed430ff784ae9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/stream/zipball/7c02b510ee3f582c810aeccd3a197b9c2f52ff1a", - "reference": "7c02b510ee3f582c810aeccd3a197b9c2f52ff1a", + "url": "https://api.github.com/repos/reactphp/stream/zipball/7a423506ee1903e89f1e08ec5f0ed430ff784ae9", + "reference": "7a423506ee1903e89f1e08ec5f0ed430ff784ae9", "shasum": "" }, "require": { "evenement/evenement": "^3.0 || ^2.0 || ^1.0", "php": ">=5.3.8", - "react/event-loop": "^1.0 || ^0.5 || ^0.4 || ^0.3.5" + "react/event-loop": "^1.2" }, "require-dev": { "clue/stream-filter": "~1.2", - "phpunit/phpunit": "^7.0 || ^6.4 || ^5.7 || ^4.8.35" + "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35" }, "type": "library", "autoload": { @@ -1603,6 +1635,28 @@ "license": [ "MIT" ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], "description": "Event-driven readable and writable streams for non-blocking I/O in ReactPHP", "keywords": [ "event-driven", @@ -1616,9 +1670,19 @@ ], "support": { "issues": "https://github.com/reactphp/stream/issues", - "source": "https://github.com/reactphp/stream/tree/v1.1.1" + "source": "https://github.com/reactphp/stream/tree/v1.2.0" }, - "time": "2020-05-04T10:17:57+00:00" + "funding": [ + { + "url": "https://github.com/WyriHaximus", + "type": "github" + }, + { + "url": "https://github.com/clue", + "type": "github" + } + ], + "time": "2021-07-11T12:37:55+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", @@ -1880,16 +1944,16 @@ }, { "name": "sebastian/exporter", - "version": "3.1.3", + "version": "3.1.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "6b853149eab67d4da22291d36f5b0631c0fd856e" + "reference": "0c32ea2e40dbf59de29f3b49bf375176ce7dd8db" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/6b853149eab67d4da22291d36f5b0631c0fd856e", - "reference": "6b853149eab67d4da22291d36f5b0631c0fd856e", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/0c32ea2e40dbf59de29f3b49bf375176ce7dd8db", + "reference": "0c32ea2e40dbf59de29f3b49bf375176ce7dd8db", "shasum": "" }, "require": { @@ -1898,7 +1962,7 @@ }, "require-dev": { "ext-mbstring": "*", - "phpunit/phpunit": "^6.0" + "phpunit/phpunit": "^8.5" }, "type": "library", "extra": { @@ -1945,7 +2009,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/3.1.3" + "source": "https://github.com/sebastianbergmann/exporter/tree/3.1.4" }, "funding": [ { @@ -1953,7 +2017,7 @@ "type": "github" } ], - "time": "2020-11-30T07:47:53+00:00" + "time": "2021-11-11T13:51:24+00:00" }, { "name": "sebastian/global-state", @@ -2351,16 +2415,16 @@ }, { "name": "sirbrillig/phpcs-variable-analysis", - "version": "v2.10.2", + "version": "v2.11.2", "source": { "type": "git", "url": "https://github.com/sirbrillig/phpcs-variable-analysis.git", - "reference": "0775e0c683badad52c03b11c2cd86a9fdecb937a" + "reference": "3fad28475bfbdbf8aa5c440f8a8f89824983d85e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sirbrillig/phpcs-variable-analysis/zipball/0775e0c683badad52c03b11c2cd86a9fdecb937a", - "reference": "0775e0c683badad52c03b11c2cd86a9fdecb937a", + "url": "https://api.github.com/repos/sirbrillig/phpcs-variable-analysis/zipball/3fad28475bfbdbf8aa5c440f8a8f89824983d85e", + "reference": "3fad28475bfbdbf8aa5c440f8a8f89824983d85e", "shasum": "" }, "require": { @@ -2400,29 +2464,30 @@ "source": "https://github.com/sirbrillig/phpcs-variable-analysis", "wiki": "https://github.com/sirbrillig/phpcs-variable-analysis/wiki" }, - "time": "2021-01-08T16:31:05+00:00" + "time": "2021-07-06T23:45:17+00:00" }, { "name": "spatie/phpunit-watcher", - "version": "1.23.1", + "version": "1.23.2", "source": { "type": "git", "url": "https://github.com/spatie/phpunit-watcher.git", - "reference": "0c70d569658a1cad9a6869716a4351d2ccfec4d1" + "reference": "548be41abab87336ef95cef5bf5cbd564bce5c26" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/phpunit-watcher/zipball/0c70d569658a1cad9a6869716a4351d2ccfec4d1", - "reference": "0c70d569658a1cad9a6869716a4351d2ccfec4d1", + "url": "https://api.github.com/repos/spatie/phpunit-watcher/zipball/548be41abab87336ef95cef5bf5cbd564bce5c26", + "reference": "548be41abab87336ef95cef5bf5cbd564bce5c26", "shasum": "" }, "require": { - "clue/stdio-react": "^2.0", - "jolicode/jolinotif": "^2.0", + "clue/stdio-react": "^2.4", + "jolicode/jolinotif": "^2.2", "php": "^7.2 | ^8.0", - "symfony/console": "^5.0", - "symfony/process": "^5.0", - "symfony/yaml": "^5.0", + "symfony/console": "^5.2", + "symfony/finder": "^5.2", + "symfony/process": "^5.2", + "symfony/yaml": "^5.2", "yosymfony/resource-watcher": "^2.0" }, "conflict": { @@ -2460,22 +2525,22 @@ ], "support": { "issues": "https://github.com/spatie/phpunit-watcher/issues", - "source": "https://github.com/spatie/phpunit-watcher/tree/1.23.1" + "source": "https://github.com/spatie/phpunit-watcher/tree/1.23.2" }, - "time": "2020-10-31T17:47:29+00:00" + "time": "2021-02-26T08:00:42+00:00" }, { "name": "squizlabs/php_codesniffer", - "version": "3.5.8", + "version": "3.6.1", "source": { "type": "git", "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", - "reference": "9d583721a7157ee997f235f327de038e7ea6dac4" + "reference": "f268ca40d54617c6e06757f83f699775c9b3ff2e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/9d583721a7157ee997f235f327de038e7ea6dac4", - "reference": "9d583721a7157ee997f235f327de038e7ea6dac4", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/f268ca40d54617c6e06757f83f699775c9b3ff2e", + "reference": "f268ca40d54617c6e06757f83f699775c9b3ff2e", "shasum": "" }, "require": { @@ -2518,31 +2583,33 @@ "source": "https://github.com/squizlabs/PHP_CodeSniffer", "wiki": "https://github.com/squizlabs/PHP_CodeSniffer/wiki" }, - "time": "2020-10-23T02:01:07+00:00" + "time": "2021-10-11T04:00:11+00:00" }, { "name": "symfony/console", - "version": "v5.2.2", + "version": "v5.4.0", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "d62ec79478b55036f65e2602e282822b8eaaff0a" + "reference": "ec3661faca1d110d6c307e124b44f99ac54179e3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/d62ec79478b55036f65e2602e282822b8eaaff0a", - "reference": "d62ec79478b55036f65e2602e282822b8eaaff0a", + "url": "https://api.github.com/repos/symfony/console/zipball/ec3661faca1d110d6c307e124b44f99ac54179e3", + "reference": "ec3661faca1d110d6c307e124b44f99ac54179e3", "shasum": "" }, "require": { "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", "symfony/polyfill-mbstring": "~1.0", "symfony/polyfill-php73": "^1.8", - "symfony/polyfill-php80": "^1.15", - "symfony/service-contracts": "^1.1|^2", - "symfony/string": "^5.1" + "symfony/polyfill-php80": "^1.16", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/string": "^5.1|^6.0" }, "conflict": { + "psr/log": ">=3", "symfony/dependency-injection": "<4.4", "symfony/dotenv": "<5.1", "symfony/event-dispatcher": "<4.4", @@ -2550,16 +2617,16 @@ "symfony/process": "<4.4" }, "provide": { - "psr/log-implementation": "1.0" + "psr/log-implementation": "1.0|2.0" }, "require-dev": { - "psr/log": "~1.0", - "symfony/config": "^4.4|^5.0", - "symfony/dependency-injection": "^4.4|^5.0", - "symfony/event-dispatcher": "^4.4|^5.0", - "symfony/lock": "^4.4|^5.0", - "symfony/process": "^4.4|^5.0", - "symfony/var-dumper": "^4.4|^5.0" + "psr/log": "^1|^2", + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/event-dispatcher": "^4.4|^5.0|^6.0", + "symfony/lock": "^4.4|^5.0|^6.0", + "symfony/process": "^4.4|^5.0|^6.0", + "symfony/var-dumper": "^4.4|^5.0|^6.0" }, "suggest": { "psr/log": "For using the console logger", @@ -2599,7 +2666,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v5.2.2" + "source": "https://github.com/symfony/console/tree/v5.4.0" }, "funding": [ { @@ -2615,20 +2682,20 @@ "type": "tidelift" } ], - "time": "2021-01-27T10:15:41+00:00" + "time": "2021-11-29T15:30:56+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v2.2.0", + "version": "v2.5.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "5fa56b4074d1ae755beb55617ddafe6f5d78f665" + "reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5fa56b4074d1ae755beb55617ddafe6f5d78f665", - "reference": "5fa56b4074d1ae755beb55617ddafe6f5d78f665", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/6f981ee24cf69ee7ce9736146d1c57c2780598a8", + "reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8", "shasum": "" }, "require": { @@ -2637,7 +2704,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.2-dev" + "dev-main": "2.5-dev" }, "thanks": { "name": "symfony/contracts", @@ -2666,7 +2733,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/master" + "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.0" }, "funding": [ { @@ -2682,24 +2749,26 @@ "type": "tidelift" } ], - "time": "2020-09-07T11:33:47+00:00" + "time": "2021-07-12T14:48:14+00:00" }, { "name": "symfony/finder", - "version": "v5.2.2", + "version": "v5.4.0", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "196f45723b5e618bf0e23b97e96d11652696ea9e" + "reference": "d2f29dac98e96a98be467627bd49c2efb1bc2590" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/196f45723b5e618bf0e23b97e96d11652696ea9e", - "reference": "196f45723b5e618bf0e23b97e96d11652696ea9e", + "url": "https://api.github.com/repos/symfony/finder/zipball/d2f29dac98e96a98be467627bd49c2efb1bc2590", + "reference": "d2f29dac98e96a98be467627bd49c2efb1bc2590", "shasum": "" }, "require": { - "php": ">=7.2.5" + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php80": "^1.16" }, "type": "library", "autoload": { @@ -2727,7 +2796,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v5.2.2" + "source": "https://github.com/symfony/finder/tree/v5.4.0" }, "funding": [ { @@ -2743,20 +2812,20 @@ "type": "tidelift" } ], - "time": "2021-01-27T10:01:46+00:00" + "time": "2021-11-28T15:25:38+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.22.0", + "version": "v1.23.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "c6c942b1ac76c82448322025e084cadc56048b4e" + "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/c6c942b1ac76c82448322025e084cadc56048b4e", - "reference": "c6c942b1ac76c82448322025e084cadc56048b4e", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/46cd95797e9df938fdd2b03693b5fca5e64b01ce", + "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce", "shasum": "" }, "require": { @@ -2768,7 +2837,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.22-dev" + "dev-main": "1.23-dev" }, "thanks": { "name": "symfony/polyfill", @@ -2806,7 +2875,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.22.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.23.0" }, "funding": [ { @@ -2822,20 +2891,20 @@ "type": "tidelift" } ], - "time": "2021-01-07T16:49:33+00:00" + "time": "2021-02-19T12:13:01+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.22.0", + "version": "v1.23.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "267a9adeb8ecb8071040a740930e077cdfb987af" + "reference": "16880ba9c5ebe3642d1995ab866db29270b36535" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/267a9adeb8ecb8071040a740930e077cdfb987af", - "reference": "267a9adeb8ecb8071040a740930e077cdfb987af", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/16880ba9c5ebe3642d1995ab866db29270b36535", + "reference": "16880ba9c5ebe3642d1995ab866db29270b36535", "shasum": "" }, "require": { @@ -2847,7 +2916,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.22-dev" + "dev-main": "1.23-dev" }, "thanks": { "name": "symfony/polyfill", @@ -2887,7 +2956,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.22.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.23.1" }, "funding": [ { @@ -2903,20 +2972,20 @@ "type": "tidelift" } ], - "time": "2021-01-07T16:49:33+00:00" + "time": "2021-05-27T12:26:48+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.22.0", + "version": "v1.23.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "6e971c891537eb617a00bb07a43d182a6915faba" + "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/6e971c891537eb617a00bb07a43d182a6915faba", - "reference": "6e971c891537eb617a00bb07a43d182a6915faba", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8590a5f561694770bdcd3f9b5c69dde6945028e8", + "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8", "shasum": "" }, "require": { @@ -2928,7 +2997,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.22-dev" + "dev-main": "1.23-dev" }, "thanks": { "name": "symfony/polyfill", @@ -2971,7 +3040,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.22.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.23.0" }, "funding": [ { @@ -2987,20 +3056,20 @@ "type": "tidelift" } ], - "time": "2021-01-07T17:09:11+00:00" + "time": "2021-02-19T12:13:01+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.22.0", + "version": "v1.23.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "f377a3dd1fde44d37b9831d68dc8dea3ffd28e13" + "reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/f377a3dd1fde44d37b9831d68dc8dea3ffd28e13", - "reference": "f377a3dd1fde44d37b9831d68dc8dea3ffd28e13", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9174a3d80210dca8daa7f31fec659150bbeabfc6", + "reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6", "shasum": "" }, "require": { @@ -3012,7 +3081,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.22-dev" + "dev-main": "1.23-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3051,7 +3120,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.22.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.23.1" }, "funding": [ { @@ -3067,20 +3136,20 @@ "type": "tidelift" } ], - "time": "2021-01-07T16:49:33+00:00" + "time": "2021-05-27T12:26:48+00:00" }, { "name": "symfony/polyfill-php73", - "version": "v1.22.0", + "version": "v1.23.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "a678b42e92f86eca04b7fa4c0f6f19d097fb69e2" + "reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/a678b42e92f86eca04b7fa4c0f6f19d097fb69e2", - "reference": "a678b42e92f86eca04b7fa4c0f6f19d097fb69e2", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fba8933c384d6476ab14fb7b8526e5287ca7e010", + "reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010", "shasum": "" }, "require": { @@ -3089,7 +3158,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.22-dev" + "dev-main": "1.23-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3130,7 +3199,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.22.0" + "source": "https://github.com/symfony/polyfill-php73/tree/v1.23.0" }, "funding": [ { @@ -3146,20 +3215,20 @@ "type": "tidelift" } ], - "time": "2021-01-07T16:49:33+00:00" + "time": "2021-02-19T12:13:01+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.22.0", + "version": "v1.23.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91" + "reference": "1100343ed1a92e3a38f9ae122fc0eb21602547be" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/dc3063ba22c2a1fd2f45ed856374d79114998f91", - "reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/1100343ed1a92e3a38f9ae122fc0eb21602547be", + "reference": "1100343ed1a92e3a38f9ae122fc0eb21602547be", "shasum": "" }, "require": { @@ -3168,7 +3237,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.22-dev" + "dev-main": "1.23-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3213,7 +3282,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.22.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.23.1" }, "funding": [ { @@ -3229,25 +3298,25 @@ "type": "tidelift" } ], - "time": "2021-01-07T16:49:33+00:00" + "time": "2021-07-28T13:41:28+00:00" }, { "name": "symfony/process", - "version": "v5.2.2", + "version": "v5.4.0", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "313a38f09c77fbcdc1d223e57d368cea76a2fd2f" + "reference": "5be20b3830f726e019162b26223110c8f47cf274" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/313a38f09c77fbcdc1d223e57d368cea76a2fd2f", - "reference": "313a38f09c77fbcdc1d223e57d368cea76a2fd2f", + "url": "https://api.github.com/repos/symfony/process/zipball/5be20b3830f726e019162b26223110c8f47cf274", + "reference": "5be20b3830f726e019162b26223110c8f47cf274", "shasum": "" }, "require": { "php": ">=7.2.5", - "symfony/polyfill-php80": "^1.15" + "symfony/polyfill-php80": "^1.16" }, "type": "library", "autoload": { @@ -3275,7 +3344,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v5.2.2" + "source": "https://github.com/symfony/process/tree/v5.4.0" }, "funding": [ { @@ -3291,25 +3360,29 @@ "type": "tidelift" } ], - "time": "2021-01-27T10:15:41+00:00" + "time": "2021-11-28T15:25:38+00:00" }, { "name": "symfony/service-contracts", - "version": "v2.2.0", + "version": "v2.5.0", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "d15da7ba4957ffb8f1747218be9e1a121fd298a1" + "reference": "1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/d15da7ba4957ffb8f1747218be9e1a121fd298a1", - "reference": "d15da7ba4957ffb8f1747218be9e1a121fd298a1", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc", + "reference": "1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc", "shasum": "" }, "require": { "php": ">=7.2.5", - "psr/container": "^1.0" + "psr/container": "^1.1", + "symfony/deprecation-contracts": "^2.1" + }, + "conflict": { + "ext-psr": "<1.1|>=2" }, "suggest": { "symfony/service-implementation": "" @@ -3317,7 +3390,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.2-dev" + "dev-main": "2.5-dev" }, "thanks": { "name": "symfony/contracts", @@ -3354,7 +3427,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/master" + "source": "https://github.com/symfony/service-contracts/tree/v2.5.0" }, "funding": [ { @@ -3370,20 +3443,20 @@ "type": "tidelift" } ], - "time": "2020-09-07T11:33:47+00:00" + "time": "2021-11-04T16:48:04+00:00" }, { "name": "symfony/string", - "version": "v5.2.2", + "version": "v5.4.0", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "c95468897f408dd0aca2ff582074423dd0455122" + "reference": "9ffaaba53c61ba75a3c7a3a779051d1e9ec4fd2d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/c95468897f408dd0aca2ff582074423dd0455122", - "reference": "c95468897f408dd0aca2ff582074423dd0455122", + "url": "https://api.github.com/repos/symfony/string/zipball/9ffaaba53c61ba75a3c7a3a779051d1e9ec4fd2d", + "reference": "9ffaaba53c61ba75a3c7a3a779051d1e9ec4fd2d", "shasum": "" }, "require": { @@ -3394,11 +3467,14 @@ "symfony/polyfill-mbstring": "~1.0", "symfony/polyfill-php80": "~1.15" }, + "conflict": { + "symfony/translation-contracts": ">=3.0" + }, "require-dev": { - "symfony/error-handler": "^4.4|^5.0", - "symfony/http-client": "^4.4|^5.0", + "symfony/error-handler": "^4.4|^5.0|^6.0", + "symfony/http-client": "^4.4|^5.0|^6.0", "symfony/translation-contracts": "^1.1|^2", - "symfony/var-exporter": "^4.4|^5.0" + "symfony/var-exporter": "^4.4|^5.0|^6.0" }, "type": "library", "autoload": { @@ -3437,7 +3513,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v5.2.2" + "source": "https://github.com/symfony/string/tree/v5.4.0" }, "funding": [ { @@ -3453,32 +3529,32 @@ "type": "tidelift" } ], - "time": "2021-01-25T15:14:59+00:00" + "time": "2021-11-24T10:02:00+00:00" }, { "name": "symfony/yaml", - "version": "v5.2.2", + "version": "v5.4.0", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "6bb8b36c6dea8100268512bf46e858c8eb5c545e" + "reference": "034ccc0994f1ae3f7499fa5b1f2e75d5e7a94efc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/6bb8b36c6dea8100268512bf46e858c8eb5c545e", - "reference": "6bb8b36c6dea8100268512bf46e858c8eb5c545e", + "url": "https://api.github.com/repos/symfony/yaml/zipball/034ccc0994f1ae3f7499fa5b1f2e75d5e7a94efc", + "reference": "034ccc0994f1ae3f7499fa5b1f2e75d5e7a94efc", "shasum": "" }, "require": { "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", - "symfony/polyfill-ctype": "~1.8" + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-ctype": "^1.8" }, "conflict": { - "symfony/console": "<4.4" + "symfony/console": "<5.3" }, "require-dev": { - "symfony/console": "^4.4|^5.0" + "symfony/console": "^5.3|^6.0" }, "suggest": { "symfony/console": "For validating YAML files using the lint command" @@ -3512,7 +3588,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v5.2.2" + "source": "https://github.com/symfony/yaml/tree/v5.4.0" }, "funding": [ { @@ -3528,20 +3604,20 @@ "type": "tidelift" } ], - "time": "2021-01-27T10:01:46+00:00" + "time": "2021-11-28T15:25:38+00:00" }, { "name": "theseer/tokenizer", - "version": "1.2.0", + "version": "1.2.1", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "75a63c33a8577608444246075ea0af0d052e452a" + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/75a63c33a8577608444246075ea0af0d052e452a", - "reference": "75a63c33a8577608444246075ea0af0d052e452a", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", "shasum": "" }, "require": { @@ -3570,7 +3646,7 @@ "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", "support": { "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/master" + "source": "https://github.com/theseer/tokenizer/tree/1.2.1" }, "funding": [ { @@ -3578,34 +3654,39 @@ "type": "github" } ], - "time": "2020-07-12T23:59:07+00:00" + "time": "2021-07-28T10:34:58+00:00" }, { "name": "webmozart/assert", - "version": "1.9.1", + "version": "1.10.0", "source": { "type": "git", "url": "https://github.com/webmozarts/assert.git", - "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389" + "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389", - "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25", + "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25", "shasum": "" }, "require": { - "php": "^5.3.3 || ^7.0 || ^8.0", + "php": "^7.2 || ^8.0", "symfony/polyfill-ctype": "^1.8" }, "conflict": { "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<3.9.1" + "vimeo/psalm": "<4.6.1 || 4.6.2" }, "require-dev": { - "phpunit/phpunit": "^4.8.36 || ^7.5.13" + "phpunit/phpunit": "^8.5.13" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10-dev" + } + }, "autoload": { "psr-4": { "Webmozart\\Assert\\": "src/" @@ -3629,9 +3710,9 @@ ], "support": { "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.9.1" + "source": "https://github.com/webmozarts/assert/tree/1.10.0" }, - "time": "2020-07-08T17:02:28+00:00" + "time": "2021-03-09T10:59:23+00:00" }, { "name": "wp-coding-standards/wpcs", @@ -3686,16 +3767,16 @@ }, { "name": "wp-phpunit/wp-phpunit", - "version": "5.6.0", + "version": "5.8.2", "source": { "type": "git", "url": "https://github.com/wp-phpunit/wp-phpunit.git", - "reference": "7130a214573cc8c12a0f8fe8a74b18b453bce1e9" + "reference": "0cefcc49fd8a7e8c2f8d755e314532441618aee5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/wp-phpunit/wp-phpunit/zipball/7130a214573cc8c12a0f8fe8a74b18b453bce1e9", - "reference": "7130a214573cc8c12a0f8fe8a74b18b453bce1e9", + "url": "https://api.github.com/repos/wp-phpunit/wp-phpunit/zipball/0cefcc49fd8a7e8c2f8d755e314532441618aee5", + "reference": "0cefcc49fd8a7e8c2f8d755e314532441618aee5", "shasum": "" }, "type": "library", @@ -3730,7 +3811,68 @@ "issues": "https://github.com/wp-phpunit/issues", "source": "https://github.com/wp-phpunit/wp-phpunit" }, - "time": "2020-12-09T18:06:02+00:00" + "time": "2021-11-10T19:49:29+00:00" + }, + { + "name": "yoast/phpunit-polyfills", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/Yoast/PHPUnit-Polyfills.git", + "reference": "5ea3536428944955f969bc764bbe09738e151ada" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Yoast/PHPUnit-Polyfills/zipball/5ea3536428944955f969bc764bbe09738e151ada", + "reference": "5ea3536428944955f969bc764bbe09738e151ada", + "shasum": "" + }, + "require": { + "php": ">=5.4", + "phpunit/phpunit": "^4.8.36 || ^5.7.21 || ^6.0 || ^7.0 || ^8.0 || ^9.0" + }, + "require-dev": { + "yoast/yoastcs": "^2.2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.x-dev", + "dev-develop": "1.x-dev" + } + }, + "autoload": { + "files": [ + "phpunitpolyfills-autoload.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Team Yoast", + "email": "support@yoast.com", + "homepage": "https://yoast.com" + }, + { + "name": "Contributors", + "homepage": "https://github.com/Yoast/PHPUnit-Polyfills/graphs/contributors" + } + ], + "description": "Set of polyfills for changed PHPUnit functionality to allow for creating PHPUnit cross-version compatible tests", + "homepage": "https://github.com/Yoast/PHPUnit-Polyfills", + "keywords": [ + "phpunit", + "polyfill", + "testing" + ], + "support": { + "issues": "https://github.com/Yoast/PHPUnit-Polyfills/issues", + "source": "https://github.com/Yoast/PHPUnit-Polyfills" + }, + "time": "2021-11-23T01:37:03+00:00" }, { "name": "yosymfony/resource-watcher", @@ -3797,5 +3939,8 @@ "prefer-lowest": false, "platform": [], "platform-dev": [], + "platform-overrides": { + "php": "7.4" + }, "plugin-api-version": "2.0.0" } diff --git a/docs/README.md b/docs/README.md index 8da0f469ae312..1fe569f7356cb 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,4 +1,4 @@ -# Getting started +# Block Editor Handbook **Gutenberg** is a codename for a whole new paradigm in WordPress site building and publishing, that aims to revolutionize the entire publishing experience as much as Gutenberg did the printed word. The project is right now in the second phase of a four-phase process that will touch every piece of WordPress -- Editing, **Customization** (which includes Full Site Editing, Block Patterns, Block Directory and Block based themes), Collaboration, and Multilingual -- and is focused on a new editing experience, the block editor (which is the topic of the current documentation). @@ -22,7 +22,7 @@ The Editor offers rich new value to users with visual, drag-and-drop creation to ### Create a Block Tutorial -[Learn how to create your first block](/docs/getting-started/tutorials/create-block/README.md) for the WordPress block editor. From setting up your development environment, tools, and getting comfortable with the new development model, this tutorial covers all what you need to know to get started with the block editor. +[Learn how to create your first block](/docs/getting-started/create-block/README.md) for the WordPress block editor. From setting up your development environment, tools, and getting comfortable with the new development model, this tutorial covers all what you need to know to get started with the block editor. ### Develop for the block editor diff --git a/docs/how-to-guides/metabox/meta-block.png b/docs/assets/meta-block.png similarity index 100% rename from docs/how-to-guides/metabox/meta-block.png rename to docs/assets/meta-block.png diff --git a/docs/assets/xcode-accessibility-inspector-screenshot.png b/docs/assets/xcode-accessibility-inspector-screenshot.png new file mode 100644 index 0000000000000..648db0566457b Binary files /dev/null and b/docs/assets/xcode-accessibility-inspector-screenshot.png differ diff --git a/docs/contributors/code/README.md b/docs/contributors/code/README.md index 4bc3b0070c47c..f97ef8c72ade9 100644 --- a/docs/contributors/code/README.md +++ b/docs/contributors/code/README.md @@ -23,4 +23,5 @@ Browse [the issues list](https://github.com/wordpress/gutenberg/issues) to find - [Accessibility Testing](/docs/contributors/accessibility-testing.md) documents the process of testing accessibility in Gutenberg. - [Managing Packages](/docs/contributors/code/managing-packages.md) documents the process for managing the npm packages. - [Gutenberg Release Process](/docs/contributors/code/release.md) - a checklist for the different types of releases for the Gutenberg project. -- [React Native mobile Gutenberg](/docs/contributors/code/native-mobile.md) - a guide on the React Native based mobile Gutenberg editor. +- [React Native mobile editor](/docs/contributors/code/react-native/README.md) - a guide on contributing to the React Native mobile editor. +- [React Native Integration Test Guide](/docs/contributors/code/react-native/integration-test-guide.md) - a guide on creating integration tests for the mobile editor. diff --git a/docs/how-to-guides/backward-compatibility/README.md b/docs/contributors/code/backward-compatibility.md similarity index 100% rename from docs/how-to-guides/backward-compatibility/README.md rename to docs/contributors/code/backward-compatibility.md diff --git a/docs/contributors/code/coding-guidelines.md b/docs/contributors/code/coding-guidelines.md index c2a53eb5caff4..2bf1092dbf637 100644 --- a/docs/contributors/code/coding-guidelines.md +++ b/docs/contributors/code/coding-guidelines.md @@ -1,6 +1,6 @@ # Coding Guidelines -This living document serves to prescribe coding guidelines specific to the Gutenberg project. Base coding guidelines follow the [WordPress Coding Standards](https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/). The following sections outline additional patterns and conventions used in the Gutenberg project. +This living document serves to prescribe coding guidelines specific to the Gutenberg project. Base coding guidelines follow the [WordPress Coding Standards](https://developer.wordpress.org/coding-standards/wordpress-coding-standards/). The following sections outline additional patterns and conventions used in the Gutenberg project. ## CSS diff --git a/docs/how-to-guides/backward-compatibility/deprecations.md b/docs/contributors/code/deprecations.md similarity index 99% rename from docs/how-to-guides/backward-compatibility/deprecations.md rename to docs/contributors/code/deprecations.md index d2839d21a7b06..7463a99b319d5 100644 --- a/docs/how-to-guides/backward-compatibility/deprecations.md +++ b/docs/contributors/code/deprecations.md @@ -2,6 +2,10 @@ For features included in the Gutenberg plugin, the deprecation policy is intended to support backward compatibility for two minor plugin releases, when possible. Features and code included in a stable release of WordPress are not included in this deprecation timeline, and are instead subject to the [versioning policies of the WordPress project](https://make.wordpress.org/core/handbook/about/release-cycle/version-numbering/). The current deprecations are listed below and are grouped by _the version at which they will be removed completely_. If your plugin depends on these behaviors, you must update to the recommended alternative before the noted version. +## Unreleased + +- `wp.blocks.isValidBlockContent` has been removed. Please use `wp.blocks.validateBlock` instead. + ## 11.0.0 - `wp.blocks.registerBlockTypeFromMetadata` method has been removed. Use `wp.blocks.registerBlockType` method instead. diff --git a/docs/contributors/code/getting-started-native-mobile.md b/docs/contributors/code/getting-started-native-mobile.md deleted file mode 100644 index a3dbeedcd98a3..0000000000000 --- a/docs/contributors/code/getting-started-native-mobile.md +++ /dev/null @@ -1,131 +0,0 @@ -# Getting Started for the React Native based Mobile Gutenberg - -Welcome! This is the Getting Started guide for the native mobile port of the block editor, targeting Android and iOS devices. Overall, it's a React Native library to be used in parent greenfield or brownfield apps. Continue reading for information on how to build, test, and run it. - -## Prerequisites - -For a developer experience closer to the one the project maintainers current have, make sure you have the following tools installed: - -- git -- [nvm](https://github.com/creationix/nvm) -- Node.js and npm (use nvm to install them) -- [AndroidStudio](https://developer.android.com/studio/) to be able to compile the Android version of the app -- [Xcode](https://developer.apple.com/xcode/) to be able to compile the iOS app -- CocoaPods(`sudo gem install cocoapods`) needed to fetch React and third-party dependencies. - -Note that the OS platform used by the maintainers is macOS but the tools and setup should be usable in other platforms too. - -## Clone the project - -``` -git clone https://github.com/WordPress/gutenberg.git -``` - -## Set up - -Note that the commands described here should be run in the top-level directory of the cloned project. Before running the demo app, you need to download and install the project dependencies. This is done via the following command: - -``` -nvm install -npm ci -``` - -## Run - -``` -npm run native start:reset -``` - -Runs the packager (Metro) in development mode. The packager stays running to serve the app bundle to the clients that request it. - -With the packager running, open another terminal window and use the following command to compile and run the Android app: - -``` -npm run native android -``` - -The app should now open in a connected device or a running emulator and fetch the JavaScript code from the running packager. - -To compile and run the iOS variant of the app using the _default_ simulator device, use: - -``` -npm run native ios -``` - -which will attempt to open your app in the iOS Simulator if you're on a Mac and have it installed. - -### Running on Other iOS Device Simulators - -To compile and run the app using a different device simulator, use the following, noting the double sets of `--` to pass the simulator option down to the `react-native` CLI. - -``` -npm run native ios -- -- --simulator="DEVICE_NAME" -``` - -For example, if you'd like to run in an iPhone Xs Max, try: - -``` -npm run native ios -- -- --simulator="iPhone Xs Max" -``` - -To see a list of all of your available iOS devices, use `xcrun simctl list devices`. - -### Troubleshooting - -Some times, and especially when tweaking anything in the `package.json`, Babel configuration (`.babelrc`) or the Jest configuration (`jest.config.js`), your changes might seem to not take effect as expected. On those times, you might need to stop the metro bunder process and restart it with `npm run native start:reset`. Other times, you might want to reinstall the NPM packages from scratch and the `npm run native clean:install` script can be handy. - -## Developing with Visual Studio Code - -Although you're not required to use Visual Studio Code for developing gutenberg-mobile, it is the recommended IDE and we have some configuration for it. - -When you first open the project in Visual Studio, you will be prompted to install some recommended extensions. This will help with some things like type checking and debugging. - -One of the extensions we are using is the [React Native Tools](https://marketplace.visualstudio.com/items?itemName=vsmobile.vscode-react-native). This allows you to run the packager from VSCode or launch the application on iOS or Android. It also adds some debug configurations so you can set breakpoints and debug the application directly from VSCode. Take a look at the [extension documentation](https://marketplace.visualstudio.com/items?itemName=vsmobile.vscode-react-native) for more details. - -## Unit Tests - -Use the following command to run the test suite: - -``` -npm run native test -``` - -It will run the [jest](https://github.com/facebook/jest) test runner on your tests. The tests are running on the desktop against Node.js. - -To run the tests with debugger support, start it with the following CLI command: - -``` -npm run native test:debug -``` - -Then, open `chrome://inspect` in Chrome to attach the debugger (look into the "Remote Target" section). While testing/developing, feel free to sprinkle `debugger` statements anywhere in the code that you'd like the debugger to break. - -## Writing and Running Unit Tests - -This project is set up to use [jest](https://facebook.github.io/jest/) for tests. You can configure whatever testing strategy you like, but jest works out of the box. Create test files in directories called `__tests__` or with the `.test.js` extension to have the files loaded by jest. See an example test [here](https://github.com/WordPress/gutenberg/blob/HEAD/packages/react-native-editor/src/test/api-fetch-setup.test.js). The [jest documentation](https://facebook.github.io/jest/docs/en/getting-started.html) is also a wonderful resource, as is the [React Native testing tutorial](https://facebook.github.io/jest/docs/en/tutorial-react-native.html). - -## UI Tests - -This repository uses Appium to run UI tests. The tests live in `__device-tests__` and are written using Appium to run tests against simulators and real devices. To run these you'll need to check off a few things: - -- When running the tests, you'll need to ensure the Metro bundler (`npm run native start`) is not running. -- [Appium CLI](https://github.com/appium/appium/blob/HEAD/docs/en/about-appium/getting-started.md) installed and available globally. We also recommend using [appium-doctor](https://github.com/appium/appium-doctor) to ensure all of Appium's dependencies are good to go. You don't have to worry about starting the server yourself, the tests handle starting the server on port 4723, just be sure that the port is free or feel free to change the port number in the test file. -- For iOS a simulator should automatically launch but for Android you'll need to have an emulator _with at least platform version 8.0_ fired up and running. - -Then, to run the UI tests on iOS: - -`npm run native test:e2e:ios:local` - -and for Android: - -`npm run native test:e2e:android:local` - -To run a single test instead of the entire suite, use `npm run native device-tests:local`. Here's an example that runs only `gutenberg-editor-gallery.test.js`: - -`npm run native test:e2e:android:local gutenberg-editor-gallery.test.js` - -Note: You might experience problems that seem to be related to the tests starting the Appium server, e.g. errors that say `Connection Refused`, `Connection Reset` or `The requested environment is not available`. For now, you can manually start the Appium server via [appium desktop](https://github.com/appium/appium-desktop) or the CLI, then change the port number in the tests while (optionally) commenting out related code in the `beforeAll` and `afterAll` block. - -For a more detailed outline of the UI tests and how to get started writing one, please visit the [UI Test documentation](/packages/react-native-editor/__device-tests__/README.md) and our [contributing guide](/packages/react-native-editor/__device-tests__/CONTRIBUTING.md). - -You might want to use Visual Studio Code as an editor. The project includes the configuration needed to use the above codestyle and linting tools automatically. diff --git a/docs/contributors/code/getting-started-with-code-contribution.md b/docs/contributors/code/getting-started-with-code-contribution.md index 79dad4c1dd2e1..2e5b9822da26a 100644 --- a/docs/contributors/code/getting-started-with-code-contribution.md +++ b/docs/contributors/code/getting-started-with-code-contribution.md @@ -1,22 +1,22 @@ # Getting Started With Code Contribution -The following guide is for setting up your local environment to contribute to the Gutenberg project. There is significant overlap between an environment to contribute and an environment used to extend the WordPress block editor. You can review the [Development Environment tutorial](/docs/getting-started/tutorials/devenv/README.md) for additional setup information. +The following guide is for setting up your local environment to contribute to the Gutenberg project. There is significant overlap between an environment to contribute and an environment used to extend the WordPress block editor. You can review the [Development Environment tutorial](/docs/getting-started/devenv/README.md) for additional setup information. ## Prerequisites - Node.js - Gutenberg is a JavaScript project and requires [Node.js](https://nodejs.org/). The project is built using the latest active LTS release of node, and the latest version of NPM. See the [LTS release schedule](https://github.com/nodejs/Release#release-schedule) for details. + Gutenberg is a JavaScript project and requires [Node.js](https://nodejs.org/). The project is built using Node.js v14, and npm v6. See the [LTS release schedule](https://github.com/nodejs/Release#release-schedule) for details. -We recommend using the [Node Version Manager](https://github.com/nvm-sh/nvm) (nvm) since it is the easiest way to install and manage node for macOS, Linux, and Windows 10 using WSL2. See [our Development Tools guide](/docs/getting-started/tutorials/devenv/README.md#development-tools) or the Nodejs site for additional installation instructions. +We recommend using the [Node Version Manager](https://github.com/nvm-sh/nvm) (nvm) since it is the easiest way to install and manage node for macOS, Linux, and Windows 10 using WSL2. See [our Development Tools guide](/docs/getting-started/devenv/README.md#development-tools) or the Nodejs site for additional installation instructions. - Git Gutenberg is using git for source control. Make sure you have an updated version of git installed on your computer, as well as a GitHub account. You can read the [Git Workflow](/docs/contributors/code/git-workflow.md) to learn more about using git and GitHub with Gutenberg - [Recommended] Docker Desktop - We recommend using the [wp-env package](/packages/env/README.md) for setting WordPress environment locally. You'll need to install Docker to use `wp-env`. See the [Development Environment tutorial for additional details](/docs/getting-started/tutorials/devenv/README.md). + We recommend using the [wp-env package](/packages/env/README.md) for setting WordPress environment locally. You'll need to install Docker to use `wp-env`. See the [Development Environment tutorial for additional details](/docs/getting-started/devenv/README.md). > Note: To install Docker on Windows 10 Home Edition, follow the [install instructions from Docker for Windows with WSL2](https://docs.docker.com/docker-for-windows/wsl/). -As an alternative to Docker setup, you can use [Local by Flywheel](https://localbyflywheel.com/), [WampServer](http://www.wampserver.com/en/), or [MAMP](https://www.mamp.info/), or even use a remote server. +As an alternative to Docker setup, you can use [Local](https://localwp.com/), [WampServer](http://www.wampserver.com/en/), or [MAMP](https://www.mamp.info/), or even use a remote server. ## Getting the Gutenberg code @@ -33,13 +33,13 @@ $ git remote add upstream https://github.com/WordPress/gutenberg.git Install the Gutenberg dependencies and build your code in development mode: ```bash -npm ci +npm install npm run dev ``` > Note: The install scripts require [Python](https://www.python.org/) to be installed and in the path of the local system. This might be installed by default for your operating system, or require downloading and installing. -There are two ways to build your code. While developing, you probably will want to use `npm run dev` to run continuous builds automatically as source files change. The dev build also includes additional warnings and errors to help troubleshoot while developing. Once you are happy with your changes, you can run `npm build` to create optimized production build. +There are two ways to build your code. While developing, you probably will want to use `npm run dev` to run continuous builds automatically as source files change. The dev build also includes additional warnings and errors to help troubleshoot while developing. Once you are happy with your changes, you can run `npm run build` to create optimized production build. Once built, Gutenberg is ready to be used as a WordPress plugin! @@ -116,6 +116,7 @@ To access the MySQL database on the `wp-env` instance you will first need the co ``` Host: 127.0.0.1 Username: root +Password: password Database: wordpress Port: {MYSQL_PORT_NUMBER} ``` @@ -130,7 +131,7 @@ If you run into an issue, check the [troubleshooting section in `wp-env` documen ### Using Local or MAMP -As an alternative to Docker and `wp-env`, you can also use [Local by Flywheel](https://localbyflywheel.com/), [WampServer](http://www.wampserver.com/en/), or [MAMP](https://www.mamp.info/) to run a local WordPress environment. To do so clone and install Gutenberg as a regular plugin in your installation by creating a symlink or copying the directory to the proper `wp-content/plugins` directory. +As an alternative to Docker and `wp-env`, you can also use [Local](https://localwp.com/), [WampServer](http://www.wampserver.com/en/), or [MAMP](https://www.mamp.info/) to run a local WordPress environment. To do so clone and install Gutenberg as a regular plugin in your installation by creating a symlink or copying the directory to the proper `wp-content/plugins` directory. You will also need some extra configuration to be able to run the e2e tests. diff --git a/docs/contributors/code/git-workflow.md b/docs/contributors/code/git-workflow.md index 16db71ffc7127..4e4e886f670a8 100644 --- a/docs/contributors/code/git-workflow.md +++ b/docs/contributors/code/git-workflow.md @@ -135,3 +135,21 @@ git push ``` The above commands will update your `trunk` branch from _upstream_. To update any other branch replace `trunk` with the respective branch name. + +## Miscellaneous + +### Git Archeology + +When looking for a commit that introduced a specific change, it might be helpful to ignore revisions that only contain styling or formatting changes. + +Fortunately, newer versions of `git` gained the ability to skip commits in history: + +``` +git blame --ignore-rev f63053cace3c02e284f00918e1854284c85b9132 -L 66,73 packages/api-fetch/src/middlewares/media-upload.js +``` + +All styling and formatting revisions are tracked using the `.git-blame-ignore-revs` file in the Gutenberg repository. You can use this file to ignore them all at once: + +``` +git blame --ignore-revs-file .git-blame-ignore-revs -L 66,73 packages/api-fetch/src/middlewares/media-upload.js +``` diff --git a/docs/contributors/code/how-to-get-your-pull-request-reviewed.md b/docs/contributors/code/how-to-get-your-pull-request-reviewed.md new file mode 100644 index 0000000000000..91984c38117df --- /dev/null +++ b/docs/contributors/code/how-to-get-your-pull-request-reviewed.md @@ -0,0 +1,83 @@ +# How To Get Your Pull Request Reviewed? + +Sometimes we publish a Pull Request and no one [reviews](/docs/contributors/repository-management.md#code-review) our work. What to do? + +Attracting a review largely isn't about the code – it is about making the reviewing easy. + +If you published a Pull Request that isn't getting any comments or reviews, try one of the strategies used by core contributors: + +## Create the smallest reasonable PRs + +Approving a 2000-line-long PR takes months and feels overwhelming. + +Approving a 50-line long PR takes days or hours and feels easy. + +Large batches slow you down. Ship your work in small chunks to merge more and learn faster. + +## Share relevant context: + +Clarify: +* What problem are you solving? +* How does your PR solve it? +* What feedback do you need? +* What’s out of scope? +* What’s unintuitive? +* How to test? + +Summarize any related issues and PRs. + +It's easier than asking others to go and figure it out. + +## Make your PR exciting + +All contributions are competing for attention. Make your stand out. + +The easiest way? Say why it matters: + +❌ A new react hook to get data +✅ `useEntityRecord`: get data with 10x less boilerplate + +Then prove it with code examples, visuals, and screencasts. + +## Show your work + +Post a link to your PR in related issues & PRs. + +Ping commenters of related issues, previous committers, and tech leads. + +Bring it up on the #core-editor channel of the WordPress.org slack. The easiest way to get feedback is to speak out during the [open floor section](https://make.wordpress.org/core/tag/core-editor-agenda/) of the weekly [Core Editor meeting](/docs/getting-started/README.md). + +Assign relevant labels, milestones, and projects (or ask someone). + +## Review the work of others + +It’s the easiest way to get on others’ radar. + +Look up the PRs of commenters of related issues, previous committers, and tech leads. Then review them. + +Is their work unfamiliar? Do: + +* Take some time to understand it +* Propose a pair programming session +* Skip, go for the next PR + +## Reduce risk with clarity + +Risk adds friction – an approval can backfire later. + +Clarity is like grease. Clearly document: + +* What risks are involved? Why take them? +* Why is this PR the best solution? +* How can the risk be minimized? +* What else has been tried? + +## Follow the attention + +Some PRs naturally get more traction than others. + +Double down on these. + +Some Issues are more topical than others (e.g. those listed in the goals for an upcoming release) and thus will garner more attention. By focusing on these it will be easier to attract reviewers. + +How to get there quickly? Help with an active project from the WordPress roadmap diff --git a/docs/contributors/code/native-mobile.md b/docs/contributors/code/native-mobile.md deleted file mode 100644 index d216720eda4c3..0000000000000 --- a/docs/contributors/code/native-mobile.md +++ /dev/null @@ -1,31 +0,0 @@ -# React Native based mobile Gutenberg - -Intertwined with the web codepaths, the Gutenberg repo also includes the [React Native](https://facebook.github.io/react-native/) based mobile tree. - -## Mind the mobile - -Contributors need to ensure that they update any affected native mobile files during code refactorings because we cannot yet rely on automated tooling to do this for us. For example, renaming a function or a prop should also be performed in the native modules too, otherwise, the mobile client will break. We have added some mobile specific CI tests as safeguards in place in PRs, but we're still far from done. Please bear with us and thank you in advance. ❤️🙇‍ - -## Native mobile specific files - -The majority of the code shared with native mobile is in the very same JavaScript module and SASS style files. In the cases where the code paths need to diverge, a `.native.js` or `.native.scss` variant of the file is created. In some cases, platform specific files can be also found for Android (`.android.js`) or iOS (`.ios.js`). - -## Running Gutenberg Mobile on Android and iOS - -For instructions on how to run the **Gutenberg Mobile Demo App** on Android or iOS, see [Getting Started for the React Native based Mobile Gutenberg](/docs/contributors/code/getting-started-native-mobile.md) - -Also, the mobile client is packaged and released via the [official WordPress apps](https://wordpress.org/mobile/). Even though the build pipeline is slightly different then the mobile demo apps and lives in its own repo for now ([here's the native mobile repo](https://github.com/wordpress-mobile/gutenberg-mobile)), the source code itself is taken directly from this repo and the "web" side codepaths. - -## Native mobile E2E tests in Continuous Integration - -If you encounter a failed Android/iOS test on your pull request, we recommend the following steps: - -1. Re-running the failed GitHub Action job ([guide for how to re-run](https://docs.github.com/en/actions/configuring-and-managing-workflows/managing-a-workflow-run#viewing-your-workflow-history)) - This should fix failed tests the majority of the time. Cases where you need to re-run tests for a pass should go down in the near future as flakiness in tests is actively being worked on. See the following GitHub issue for updated info on known failures: https://github.com/WordPress/gutenberg/issues/23949 -2. You can check if the test is failing locally by following the steps to run the E2E test on your machine from the [mobile getting started guide](/docs/contributors/code/getting-started-with-code-contribution-native-mobile.md#ui-tests), with even more relevant info in the [relevant directory README.md](https://github.com/WordPress/gutenberg/tree/HEAD/packages/react-native-editor/__device-tests__#running-the-tests-locally) -3. In addition to reading the logs from the E2E test, you can download a video recording from the Artifacts section of the GitHub job that may have additional useful information. -4. Check if any changes in your PR would require corresponding changes to `.native.js` versions of files. -5. Lastly, if you're stuck on a failing mobile test, feel free to reach out to contributors on Slack in the #mobile or #core-editor chats in the WordPress Core Slack, [free to join](https://make.wordpress.org/chat/). - -## Debugging the native mobile unit tests - -Follow the instructions in [Native mobile testing](/docs/contributors/code/testing-overview.md#native-mobile-testing) to locally debug the native mobile unit tests when needed. diff --git a/docs/contributors/code/react-native/README.md b/docs/contributors/code/react-native/README.md new file mode 100644 index 0000000000000..f5b8fc79aba86 --- /dev/null +++ b/docs/contributors/code/react-native/README.md @@ -0,0 +1,35 @@ +# React Native mobile editor + +The Gutenberg repository includes the source for the [React Native](https://facebook.github.io/react-native/) based editor for mobile. + +## Mind the mobile + +Contributors need to ensure that they update any affected native mobile files during code refactorings because we cannot yet rely on automated tooling to do this for us. For example, renaming a function or a prop should also be performed in the native modules too, otherwise, the mobile client will break. We have added some mobile specific CI tests as safeguards in place in PRs, but we're still far from done. Please bear with us and thank you in advance. ❤️🙇‍ + +## Native mobile specific files + +The majority of the code shared with native mobile is in the very same JavaScript module and SASS style files. In the cases where the code paths need to diverge, a `.native.js` or `.native.scss` variant of the file is created. In some cases, platform specific files can be also found for Android (`.android.js`) or iOS (`.ios.js`). + +## Running Gutenberg Mobile on Android and iOS + +For instructions on how to run the **Gutenberg Mobile Demo App** on Android or iOS, see [Getting Started for the React Native based Mobile Gutenberg](/docs/contributors/code/react-native/getting-started-react-native.md) + +Also, the mobile client is packaged and released via the [official WordPress apps](https://wordpress.org/mobile/). Even though the build pipeline is slightly different then the mobile demo apps and lives in its own repo for now ([here's the native mobile repo](https://github.com/wordpress-mobile/gutenberg-mobile)), the source code itself is taken directly from this repo and the "web" side codepaths. + +## Native mobile E2E tests in Continuous Integration + +If you encounter a failed Android/iOS test on your pull request, we recommend the following steps: + +1. Re-running the failed GitHub Action job ([guide for how to re-run](https://docs.github.com/en/actions/configuring-and-managing-workflows/managing-a-workflow-run#viewing-your-workflow-history)) - This should fix failed tests the majority of the time. Cases where you need to re-run tests for a pass should go down in the near future as flakiness in tests is actively being worked on. See the following GitHub issue for updated info on known failures: https://github.com/WordPress/gutenberg/issues/23949 +2. You can check if the test is failing locally by following the steps to run the E2E test on your machine from the [mobile getting started guide](/docs/contributors/code/react-native/getting-started-react-native.md#ui-tests), with even more relevant info in the [relevant directory README.md](https://github.com/WordPress/gutenberg/tree/HEAD/packages/react-native-editor/__device-tests__#running-the-tests-locally) +3. In addition to reading the logs from the E2E test, you can download a video recording from the Artifacts section of the GitHub job that may have additional useful information. +4. Check if any changes in your PR would require corresponding changes to `.native.js` versions of files. +5. Lastly, if you're stuck on a failing mobile test, feel free to reach out to contributors on Slack in the #mobile or #core-editor chats in the WordPress Core Slack, [free to join](https://make.wordpress.org/chat/). + +## Debugging the native mobile unit tests + +Follow the instructions in [Native mobile testing](/docs/contributors/code/react-native/integration-test-guide.md) to locally debug the native mobile unit tests when needed. + +## Internationalization (i18n) + +Further information about this topic can be found in the [React Native Internationalization Guide](/docs/contributors/code/react-native/internationalization-guide.md). \ No newline at end of file diff --git a/docs/contributors/code/react-native/getting-started-react-native.md b/docs/contributors/code/react-native/getting-started-react-native.md new file mode 100644 index 0000000000000..72cad30767386 --- /dev/null +++ b/docs/contributors/code/react-native/getting-started-react-native.md @@ -0,0 +1,139 @@ +# Getting Started for the React Native based Mobile Gutenberg + +Welcome! This is the Getting Started guide for the native mobile port of the block editor, targeting Android and iOS devices. Overall, it's a React Native library to be used in parent greenfield or brownfield apps. Continue reading for information on how to build, test, and run it. + +## Prerequisites + +For a developer experience closer to the one the project maintainers current have, make sure you have the following tools installed: + +- git +- [nvm](https://github.com/creationix/nvm) +- Node.js and npm (use nvm to install them) +- [Android Studio](https://developer.android.com/studio/) to be able to compile the Android version of the app +- [Xcode](https://developer.apple.com/xcode/) to be able to compile the iOS app +- CocoaPods (`sudo gem install cocoapods`) needed to fetch React and third-party dependencies. + +Note that the OS platform used by the maintainers is macOS but the tools and setup should be usable in other platforms too. + +## Clone the project + +```sh +git clone https://github.com/WordPress/gutenberg.git +``` + +## Set up + +Note that the commands described here should be run in the top-level directory of the cloned project. Before running the demo app, you need to download and install the project dependencies. This is done via the following command: + +```sh +nvm install +npm ci +``` + +## Run + +```sh +npm run native start:reset +``` + +Runs the packager (Metro) in development mode. The packager stays running to serve the app bundle to the clients that request it. + +With the packager running, open another terminal window and use the following command to compile and run the Android app: + +```sh +npm run native android +``` + +The app should now open in a connected device or a running emulator and fetch the JavaScript code from the running packager. + +To compile and run the iOS variant of the app using the _default_ simulator device, use: + +```sh +npm run native ios +``` + +which will attempt to open your app in the iOS Simulator if you're on a Mac and have it installed. + +### Running on Other iOS Device Simulators + +To compile and run the app using a different device simulator, use the following, noting the double sets of `--` to pass the simulator option down to the `react-native` CLI. + +```sh +npm run native ios -- -- --simulator="DEVICE_NAME" +``` + +For example, if you'd like to run in an iPhone Xs Max, try: + +```sh +npm run native ios -- -- --simulator="iPhone Xs Max" +``` + +To see a list of all of your available iOS devices, use `xcrun simctl list devices`. + +### Troubleshooting + +If the Android emulator doesn't start correctly, or compiling fails with `Could not initialize class org.codehaus.groovy.runtime.InvokerHelper` or similar, it may help to double check the set up of your development environment against the latest requirements in [React Native's documentation](https://reactnative.dev/docs/environment-setup). With Android Studio, for example, you will need to configure the `ANDROID_HOME` environment variable and ensure that your version of JDK matches the latest requirements. + +Some times, and especially when tweaking anything in the `package.json`, Babel configuration (`.babelrc`) or the Jest configuration (`jest.config.js`), your changes might seem to not take effect as expected. On those times, you might need to stop the metro bunder process and restart it with `npm run native start:reset`. Other times, you might want to reinstall the NPM packages from scratch and the `npm run native clean:install` script can be handy. + +## Developing with Visual Studio Code + +Although you're not required to use Visual Studio Code for developing gutenberg-mobile, it is the recommended IDE and we have some configuration for it. + +When you first open the project in Visual Studio, you will be prompted to install some recommended extensions. This will help with some things like type checking and debugging. + +One of the extensions we are using is the [React Native Tools](https://marketplace.visualstudio.com/items?itemName=vsmobile.vscode-react-native). This allows you to run the packager from VSCode or launch the application on iOS or Android. It also adds some debug configurations so you can set breakpoints and debug the application directly from VSCode. Take a look at the [extension documentation](https://marketplace.visualstudio.com/items?itemName=vsmobile.vscode-react-native) for more details. + +## Unit Tests + +Use the following command to run the test suite: + +```sh +npm run native test +``` + +It will run the [jest](https://github.com/facebook/jest) test runner on your tests. The tests are running on the desktop against Node.js. + +To run the tests with debugger support, start it with the following CLI command: + +```sh +npm run native test:debug +``` + +Then, open `chrome://inspect` in Chrome to attach the debugger (look into the "Remote Target" section). While testing/developing, feel free to sprinkle `debugger` statements anywhere in the code that you'd like the debugger to break. + +## Writing and Running Unit Tests + +This project is set up to use [jest](https://facebook.github.io/jest/) for tests. You can configure whatever testing strategy you like, but jest works out of the box. Create test files in directories called `__tests__` or with the `.test.js` extension to have the files loaded by jest. See an example test [here](https://github.com/WordPress/gutenberg/blob/HEAD/packages/react-native-editor/src/test/api-fetch-setup.test.js). The [jest documentation](https://facebook.github.io/jest/docs/en/getting-started.html) is also a wonderful resource, as is the [React Native testing tutorial](https://facebook.github.io/jest/docs/en/tutorial-react-native.html). + +## UI Tests + +This repository uses Appium to run UI tests. The tests live in `__device-tests__` and are written using Appium to run tests against simulators and real devices. To run these you'll need to check off a few things: + +- When running the tests, you'll need to ensure the Metro bundler (`npm run native start`) is not running. +- [Appium CLI](https://github.com/appium/appium/blob/HEAD/docs/en/about-appium/getting-started.md) installed and available globally. We also recommend using [appium-doctor](https://github.com/appium/appium-doctor) to ensure all of Appium's dependencies are good to go. You don't have to worry about starting the server yourself, the tests handle starting the server on port 4723, just be sure that the port is free or feel free to change the port number in the test file. +- For iOS a simulator should automatically launch but for Android you'll need to have an emulator _with at least platform version 8.0_ fired up and running. + +Then, to run the UI tests on iOS: + +```sh +npm run native test:e2e:ios:local +``` + +and for Android: + +```sh +npm run native test:e2e:android:local +``` + +To run a single test instead of the entire suite, use `npm run native device-tests:local`. Here's an example that runs only `gutenberg-editor-paragraph.test.js`: + +```sh +npm run native test:e2e:android:local gutenberg-editor-paragraph.test.js +``` + +Note: You might experience problems that seem to be related to the tests starting the Appium server, e.g. errors that say `Connection Refused`, `Connection Reset` or `The requested environment is not available`. For now, you can manually start the Appium server via [appium desktop](https://github.com/appium/appium-desktop) or the CLI, then change the port number in the tests while (optionally) commenting out related code in the `beforeAll` and `afterAll` block. + +For a more detailed outline of the UI tests and how to get started writing one, please visit the [UI Test documentation](/packages/react-native-editor/__device-tests__/README.md) and our [contributing guide](/packages/react-native-editor/__device-tests__/CONTRIBUTING.md). + +You might want to use Visual Studio Code as an editor. The project includes the configuration needed to use the above codestyle and linting tools automatically. diff --git a/docs/contributors/code/react-native/integration-test-guide.md b/docs/contributors/code/react-native/integration-test-guide.md new file mode 100644 index 0000000000000..524a43d26cc61 --- /dev/null +++ b/docs/contributors/code/react-native/integration-test-guide.md @@ -0,0 +1,369 @@ +# React Native Integration Test Guide + +## What’s an integration test? + +Integration testing is defined as a type of testing where different parts are tested as a group. In our case, the parts that we want to test are the different components that are required to be rendered for a specific block or editor logic. In the end, they are very similar to unit tests as they are run with the same command using the Jest library. The main difference is that for the integration tests, we’re going to use a specific library [`react-native-testing-library`](https://testing-library.com/docs/react-native-testing-library/intro/) for testing how the editor renders the different components. + +## Anatomy of an integration test + +A test can be structured with the following parts: + +- [Setup](#setup) +- [Rendering](#rendering) +- [Query elements](#query-elements) +- [Fire events](#fire-events) +- [Expect correct element behaviour](#expect-correct-element-behaviour) +- [Cleanup](#cleanup) + +We also include examples of common tasks as well as tips in the following sections: + +- [Common flows](#common-flows) +- [Tools](#tools) +- [Common pitfalls and caveats](#common-pitfalls-and-caveats) + +## Setup + +This part usually is covered by using the Jest callbacks `beforeAll` and `beforeEach`, the purpose is to prepare everything that the test might require like registering blocks or mocking parts of the logic. + +Here is an example of a common pattern if we expect all core blocks to be available: + +```js +beforeAll( () => { + // Register all core blocks + registerCoreBlocks(); +} ); +``` + +## Rendering + +Before introducing the testing logic, we have to render the components that we want to test on. Depending on if we want to use the scoped component or entire editor approach, this part will be different. + +### Using the Scoped Component approach + +Here is an example of rendering the Cover block (extracted from [this code](https://github.com/WordPress/gutenberg/blob/86cd187873984f80ddeeec3e82454b486dd1860f/packages/block-library/src/cover/test/edit.native.js#L82-L91)): + +```js +// This import points to the index file of the block +import { metadata, settings, name } from '../index'; + +... + +const setAttributes = jest.fn(); +const attributes = { + backgroundType: IMAGE_BACKGROUND_TYPE, + focalPoint: { x: '0.25', y: '0.75' }, + hasParallax: false, + overlayColor: { color: '#000000' }, + url: 'mock-url', +}; + +... + +// Simplified tree to render Cover edit within slot +const CoverEdit = ( props ) => ( + <SlotFillProvider> + <BlockEdit isSelected name={ name } clientId={ 0 } { ...props } /> + <BottomSheetSettings isVisible /> + </SlotFillProvider> +); + +const { getByText, findByText } = render( + <CoverEdit + attributes={ { + ...attributes, + url: undefined, + backgroundType: undefined, + } } + setAttributes={ setAttributes } + /> +); +``` + +### Using the Entire Editor approach + +Here is an example of rendering the Buttons block (extracted from [this code](https://github.com/WordPress/gutenberg/blob/9201906891a68ca305daf7f8b6cd006e2b26291e/packages/block-library/src/buttons/test/edit.native.js#L32-L39)): + +```js +const initialHtml = `<!-- wp:buttons --> +<div class="wp-block-buttons"><!-- wp:button {"style":{"border":{"radius":"5px"}}} --> +<div class="wp-block-button"><a class="wp-block-button__link" style="border-radius:5px" >Hello</a></div> +<!-- /wp:button --></div> +<!-- /wp:buttons -->`; +const { getByA11yLabel } = initializeEditor( { + initialHtml, +} ); +``` + +## Query elements + +Once the components are rendered, it’s time to query them. An important note about this topic is that we should test from the user’s perspective, this means that ideally we should query by elements that the user has access to like texts or accessibility labels. + +When querying we should follow this priority order: + +1. `getByText`: querying by text is the closest flow we can do from the user’s perspective, as text is the visual clue for them to identify elements. +2. `getByA11yLabel`: in some cases, we want to query elements that don’t provide text so in this case we can fallback to the accessibility label. +3. `getByTestId`: if none of the previous options fit and/or we don’t have any visual element that we can rely upon, we have to fallback to a specific test id, which can be defined using the `testID` attribute (see [here](https://github.com/WordPress/gutenberg/blob/e5b387b19ffc50555f52ea5f0b415ab846896def/packages/block-editor/src/components/block-types-list/index.native.js#L80) for an example). + +Here are some examples: + +```js +const mediaLibraryButton = getByText( 'WordPress Media Library' ); +``` + +```js +const missingBlock = getByA11yLabel( /Unsupported Block\. Row 1/ ); +``` + +```js +const radiusSlider = getByTestId( 'Slider Border Radius' ); +``` + +Note that either a plain string or a regular expression can be passed into these queries. A regular expression is best for querying part of a string (e.g. any element whose accessibility label contains `Unsupported Block. Row 1`). Note that special characters such as `.` need to be escaped. + +### Use of `waitFor` + +After rendering the components or firing an event, side effects might happen due to potential state updates so the element we’re looking for might not be yet rendered. In this case, we would need to wait for the element to be available and for this purpose, we can use the `waitFor` function, which periodically executes the provided callback to determine whether the element appeared or not. + +Here are some examples: + +```js +const mediaLibraryButton = await waitFor( () => + getByText( 'WordPress Media Library' ) +); +``` + +```js +const missingBlock = await waitFor( () => + getByA11yLabel( /Unsupported Block\. Row 1/ ) +); +``` + +```js +const radiusSlider = await waitFor( () => + getByTestId( 'Slider Border Radius' ) +); +``` + +In most cases we’ll use the `waitFor` function, but it’s important to note that it should be restricted to those queries that actually require waiting for the element to be available. + +NOTE: The `react-native-testing-library` package provides the `query*` and `find*` functions for this purpose too, but we should avoid using them for now because there’s a [known issue](https://github.com/callstack/react-native-testing-library/issues/379) that would make the test fail. + +### `within` queries + +It’s also possible to query elements contained in other elements via the `within` function, here is an example: + +```js +const missingBlock = await waitFor( () => + getByA11yLabel( /Unsupported Block\. Row 1/ ) +); +const translatedTableTitle = within( missingBlock ).getByText( 'Tabla' ); +``` + +## Fire events + +As important as querying an element is to trigger events to simulate the user interaction, for this purpose we can use the `fireEvent` function ([documentation](https://callstack.github.io/react-native-testing-library/docs/api#fireevent)). + +Here is an example of a press event: + +**Press event:** + +```js +fireEvent.press( settingsButton ); +``` + +We can also trigger any type of event, including custom events, in the following example you can see how we trigger the `onValueChange` event ([code reference](https://github.com/WordPress/gutenberg/blob/520cbd9d2af4bbc275d388edf92a6cadb685de56/packages/components/src/mobile/bottom-sheet/range-cell.native.js#L227)) for the Slider component: + +**Custom event – onValueChange:** + +```js +fireEvent( heightSlider, 'valueChange', '50' ); +``` + +## Expect correct element behaviour + +After querying elements and firing events, we must verify that the logic works as expected. For this purpose we can use the same `expect` function from Jest that we use in unit tests. It is recommended to use the custom `toBeVisible` matcher to ensure the element is defined, is a valid React element, and visible. + +Here is an example: + +```js +const translatedTableTitle = within( missingBlock ).getByText( 'Tabla' ); +expect( translatedTableTitle ).toBeVisible(); +``` + +Additionally when rendering the entire editor, we can also verify if the HTML output is what we expect: + +```js +expect( getEditorHtml() ).toBe( + '<!-- wp:spacer {"height":50} -->\n<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>\n<!-- /wp:spacer -->' +); +``` + +## Cleanup + +And finally, we have to clean up any potential modifications we’ve made that could affect the following tests. Here is an example of a typical cleanup after registering blocks that implies unregistering all blocks: + +```js +afterAll( () => { + // Clean up registered blocks + getBlockTypes().forEach( ( block ) => { + unregisterBlockType( block.name ); + } ); +} ); +``` + +## Common flows + +### Query a block + +A common way to query a block is by its accessibility label, here is an example: + +```js +const spacerBlock = await waitFor( () => + getByA11yLabel( /Spacer Block\. Row 1/ ) +); +``` + +For further information about the accessibility label of a block, you can check the code of the [function `getAccessibleBlockLabel`](https://github.com/WordPress/gutenberg/blob/520cbd9d2af4bbc275d388edf92a6cadb685de56/packages/blocks/src/api/utils.js#L167-L234). + +### Add a block + +Here is an example of how to insert a Paragraph block: + +```js +// Open the inserter menu +fireEvent.press( await waitFor( () => getByA11yLabel( 'Add block' ) ) ); + +const blockList = getByTestId( 'InserterUI-Blocks' ); +// onScroll event used to force the FlatList to render all items +fireEvent.scroll( blockList, { + nativeEvent: { + contentOffset: { y: 0, x: 0 }, + contentSize: { width: 100, height: 100 }, + layoutMeasurement: { width: 100, height: 100 }, + }, +} ); + +// Insert a Paragraph block +fireEvent.press( await waitFor( () => getByText( `Paragraph` ) ) ); +``` + +### Open block settings + +The block settings can be accessed by tapping the "Open Settings" button after selecting the block, here is an example: + +```js +fireEvent.press( block ); + +const settingsButton = await waitFor( () => getByA11yLabel( 'Open Settings' ) ); +fireEvent.press( settingsButton ); +``` + +#### Using the Scoped Component approach + +When using the scoped component approach, we need first to render the `SlotFillProvider` and the `BottomSheetSettings` (note that we’re passing the `isVisible` prop to force the bottom sheet to be displayed) along with the block: + +```js +<SlotFillProvider> + <BlockEdit isSelected name={ name } clientId={ 0 } { ...props } /> + <BottomSheetSettings isVisible /> +</SlotFillProvider> +``` + +See examples: + +- [Cover block](https://github.com/WordPress/gutenberg/blob/b403b977b029911f46247012fa2dcbc42a5aa3cf/packages/block-library/src/cover/test/edit.native.js#L37-L42) + +### FlatList items + +The `FlatList` component renders its items depending on the scroll position, the view and content size. This means that when rendering this component it might happen that some of the items can’t be queried because they haven’t been rendered yet. To address this issue we have to explicitly fire an event to make the `FlatList` render all the items. + +Here is an example of the FlatList used for rendering the block list in the inserter menu: + +```js +const blockList = getByTestId( 'InserterUI-Blocks' ); +// onScroll event used to force the FlatList to render all items +fireEvent.scroll( blockList, { + nativeEvent: { + contentOffset: { y: 0, x: 0 }, + contentSize: { width: 100, height: 100 }, + layoutMeasurement: { width: 100, height: 100 }, + }, +} ); +``` + +### Sliders + +Sliders found in bottom sheets should be queried using their `testID`: + +```js +const radiusSlider = await waitFor( () => + getByTestId( 'Slider Border Radius' ) +); +fireEvent( radiusSlider, 'valueChange', '30' ); +``` + +Note that a slider’s `testID` is "Slider " + label. So for a slider with a label of "Border Radius", `testID` is "Slider Border Radius". + +### Selecting an inner block + +One caveat when adding blocks is that if they contain inner blocks, these inner blocks are not rendered. The following example shows how we can make a Buttons block render its inner Button blocks (assumes we’ve already obtained a reference to the Buttons block as `buttonsBlock`): + +```js +const innerBlockListWrapper = await waitFor( () => + within( buttonsBlock ).getByTestId( 'block-list-wrapper' ) +); +fireEvent( innerBlockListWrapper, 'layout', { + nativeEvent: { + layout: { + width: 100, + }, + }, +} ); + +const buttonInnerBlock = await waitFor( () => + within( buttonsBlock ).getByA11yLabel( /Button Block\. Row 1/ ) +); +fireEvent.press( buttonInnerBlock ); +``` + +## Tools + +### Using the Accessibility Inspector + +If you have trouble locating an element’s identifier, you may wish to use Xcode’s Accessibility Inspector. Most identifiers are cross-platform, so even though the tests are run on Android by default, the Accessibility Inspector can be used to find the right identifier. + +<img src="https://raw.githubusercontent.com/WordPress/gutenberg/trunk/docs/assets/xcode-accessibility-inspector-screenshot.png" alt="Screenshot of the Xcode Accessibility Inspector app. The screenshot shows how to choose the correct target in the device dropdown, enable target mode, and locate accessibility labels after tapping on screen elements"/> + +## Common pitfalls and caveats + +### False positives when omitting `await` before `waitFor` function + +Omitting the `await` before a `waitFor` can lead to scenarios where tests pass but are not testing the intended behaviour. For example, if `toBeDefined` is used to assert the result of a call to `waitFor`, the assertion will pass because `waitFor` returns a value, even though it is not the `ReactTestInstance` we meant to check for. For this reason, it is recommended to use the custom matcher `toBeVisible` which guards against this type of false positive. + +### `waitFor` timeout + +The default timeout for the `waitFor` function is set to 1000 ms, so far this value is enough for all the render logic we’re testing, however, if while testing we notice that an element requires more time to be rendered we should increase it. + +### Replace current UI unit tests + +Some components already have unit tests that cover component rendering, although it’s not mandatory, in these cases, it would be nice to analyze the potential migration to an integration test. + +In case we want to keep both, we’ll add the word "integration" to the integration test file to avoid naming conflicts, here is an example: [packages/block-library/src/missing/test/edit-integration.native.js](https://github.com/WordPress/gutenberg/blob/9201906891a68ca305daf7f8b6cd006e2b26291e/packages/block-library/src/missing/test/edit-integration.native.js). + +### Platform selection + +By default, all tests run in Jest use the Android platform, so in case we need to test a specific behaviour related to a different platform, we would need to support platform test files. + +In case we only need to test logic controlled by the Platform object, we can mock the module with the following code (in this case it’s changing the platform to iOS): + +```js +jest.mock( 'Platform', () => { + const Platform = jest.requireActual( 'Platform' ); + Platform.OS = 'ios'; + Platform.select = jest.fn().mockImplementation( ( select ) => { + const value = select[ Platform.OS ]; + return ! value ? select.default : value; + } ); + return Platform; +} ); +``` diff --git a/docs/contributors/code/react-native/internationalization-guide.md b/docs/contributors/code/react-native/internationalization-guide.md new file mode 100644 index 0000000000000..26f89ef7b3ee2 --- /dev/null +++ b/docs/contributors/code/react-native/internationalization-guide.md @@ -0,0 +1,85 @@ +# React Native Internationalization Guide + +The native version of the editor references two types of string: +1. Strings used in web and native platforms. +2. Strings used only in the native platform. + +Regarding the first type, these strings are translated following the same process described for the web version in [this guide](https://github.com/WordPress/gutenberg/blob/trunk/docs/how-to-guides/internationalization.md), however for the latter, it's required to provide your own translations. + +## Extract strings only used in the native platform + +In order to identify these strings, you can use the script [`extract-used-strings`](https://github.com/WordPress/gutenberg/blob/trunk/packages/react-native-editor/bin/extract-used-strings.js) located in `packages/react-native-editor/bin/extract-used-strings.js` to generate a JSON object that contains all the strings referenced including the platforms where they are used, as well as the files that reference it. Here you can see the format: +``` + { + "gutenberg": { + "<string>": { + "string": String value. + "stringPlural": String value with its plural form. [optional] + "comments": Comments for translators. [default value is an empty string] + "reference": Array containing the paths of the source files that reference the string. + "platforms": Array containing the platforms where the string is being used, values are "android" | "ios" | "web". + }, + ... + }, + "other-domain-plugin": { + ... + }, + ... +} +``` + +This command also supports passing extra plugins, in case the React Native bundle of the editor is generated including other plugins. + +It's important to note that the JSON object contains all used strings, so in order to identify the ones only used in the native platform, it’s required to provide your own script/process to extract them. This can easily be done by going through the strings and filtering out the ones that include the "web" platform. + +### NPM command + +Extract used strings: +```sh +npm run native i18n:extract-used-strings -- "$PWD/used-strings.json" +``` + +***NOTE:** We need to pass absolute paths, otherwise it uses `packages/react-native-editor` as root path for relative paths.* + +Extract used strings including extra plugins: +```sh +npm run native i18n:extract-used-strings -- "$PWD/used-strings.json" "domain-plugin-1" <PLUGIN-1_SOURCE_PATH> "domain-plugin-2" <PLUGIN-2_SOURCE_PATH> ... +``` + +## Providing own translations (for strings only used in native platform) + +Once you have the list of used strings in the native platform, the strings have to be translated, however, this process is out of the scope of the native version so you have to provide your own translations. + +The process for injecting the translations data into the editor is via the `translations` initial prop which is passed to the editor during its initialization: +- [Android reference](https://github.com/WordPress/gutenberg/blob/72854b4d6b09bd7fb7f996a5c55dd3cc0613ddf8/packages/react-native-bridge/android/react-native-bridge/src/main/java/org/wordpress/mobile/WPAndroidGlue/GutenbergProps.kt#L34) +- [iOS reference](https://github.com/WordPress/gutenberg/blob/72854b4d6b09bd7fb7f996a5c55dd3cc0613ddf8/packages/react-native-bridge/ios/GutenbergBridgeDataSource.swift#L39-L43) + +The mechanism for integrating the provided translations to the mobile client, via the mentioned `translations` initial prop, is not described here, as it's specific to the mobile client and could be achieved in different ways. Nevertheless, it's important that they're provided by the mentioned initial prop, as the editor is in charge of merging them with the translations already included in the editor. + +**NOTE:** Keep in mind that those strings that match with ones already included in the editor will be overridden. + +## Fetch translations (for strings used in web and native platforms) + +A translation file is basically a JSON object that contains key-value items with the translation for each individual string. This content is fetched from [translate.wordpress.org](https://translate.wordpress.org/) that holds translations for WordPress and a list of different plugins like Gutenberg. + +These files can be cached under a folder and optimized. Additionally, an index file is generated that acts as the entry point to import and fetches the plugin translations. + +Fetched translations contain all the translatable plugin strings, including those not used in the native version of the editor. The file sizes, however, can be reduced by filtering out the strings not referenced in the used strings JSON file. + +By default, when installing dependencies, un-optimized translations might be downloaded for Gutenberg and located in the `i18n-cache` folder if the cache is not present. + +The strings included in these translation files are imported in the editor upon its initialization ([reference](https://github.com/WordPress/gutenberg/blob/154918b5770ac07c851169eaa35961c636eac5ba/packages/react-native-editor/src/index.js#L43-L49)) and will be merged with the extra translations provided by the `translations` initial prop. + +### NPM command + +Fetch un-optimized translations: +```sh +npm run native i18n:fetch-translations -- "gutenberg" <OUTPUT_PATH> +``` + +***NOTE:** We need to pass absolute paths, otherwise it uses `packages/react-native-editor` as root path for relative paths.* + +Fetch optimized translations: +```sh +npm run native i18n:fetch-translations -- "gutenberg" <OUTPUT_PATH> <USED_STRINGS_FILE> +``` \ No newline at end of file diff --git a/docs/contributors/code/react-native/osx-setup-guide.md b/docs/contributors/code/react-native/osx-setup-guide.md new file mode 100644 index 0000000000000..4f1d160a4b2b6 --- /dev/null +++ b/docs/contributors/code/react-native/osx-setup-guide.md @@ -0,0 +1,274 @@ +# Setup guide for React Native development (macOS) + +Are you interested in contributing to the native mobile editor? This guide is a detailed walk through designed to get you up and running! + +Note that these instructions are primarily focused on the macOS environment. For other environments, [the React Native quickstart documentation](https://reactnative.dev/docs/environment-setup) has helpful pointers and steps for getting set up. + +## Clone Gutenberg + +```sh +git clone git@github.com:WordPress/gutenberg.git +``` + +### Install node and npm + +If you’re working in multiple JS projects, a node version manager may make sense. A manager will let you switch between different node and npm versions of your choosing. + +We recommend [nvm](https://github.com/nvm-sh/nvm). + +After installing nvm, run the following from the top-level directory of the cloned project: + +```sh +nvm install 'lts/*' +nvm alias default 'lts/*' # sets this as the default when opening a new terminal +nvm use # switches to the project settings +``` + +Then install dependencies: + +``` +npm ci +``` + +### Do you have an older existing Gutenberg checkout? + +If you have an existing Gutenberg checkout be sure to fully clean `node_modules` and re-install dependencies. +This may help avoid errors in the future. + +```sh +npm run distclean +npm ci +``` + +## iOS + +### CocoaPods + +[CocoaPods](https://guides.cocoapods.org/using/getting-started.html) is required to fetch React and third-party dependencies. The steps to install it vary depending on how Ruby is managed on your machine. + +#### System Ruby + +If you're using the default Ruby available with MacOS, you'll need to use the `sudo` command to install gems like Cocoapods: + +``` +sudo gem install cocoapods +``` + +Note, Mac M1 is not directly compatible with Cocoapods. If you encounter issues, try running these commands to install the ffi package, which will enable pods to be installed with the proper architecture: + +``` +sudo arch -x86_64 gem install ffi +arch -x86_64 pod install +``` + +#### Ruby Manager + +It may not be necessary to manually install Cocoapods or the `ffi` package if you're using a Ruby Version manager. Please refer to your chosen manager's documentation for guidance. + +[`rbenv`](https://github.com/rbenv/rbenv) is the recommended manager if you're running Gutenberg from within [the WordPress iOS app](https://github.com/wordpress-mobile/WordPress-iOS) (vs. only the demo app). + +### Set up Xcode + +Install [Xcode](https://developer.apple.com/xcode/) via the app store and then open it up: + +- Accept the license agreement. +- Verify that `Xcode > Preferences > Locations > Command Line Tools` points to the current Xcode version. + +<img src="https://developer.wordpress.org/files/2021/10/xcode-command-line-tools.png" width="700px" alt="Screenshot of XCode command line tools settings."> + +### react-native doctor + +[react-native doctor](https://reactnative.dev/blog/2019/11/18/react-native-doctor) can be used to identify anything that's missing from your development environment. From your Gutenberg checkout, or relative to `/packages/react-native-editor folder`, run: + +```sh +npx @react-native-community/cli doctor +``` + +<img src="https://developer.wordpress.org/files/2021/10/react-native-doctor.png" width="700px" alt="Screenshot of react-native-community/cli doctor tool running in the terminal."> + +See if `doctor` can fix both "common" and "iOS" issues. (Don't worry if "Android" still has ❌s at this stage, we'll get to those later!) + +### Run the demo app + +Once all common and iOS issues are resolved, try: + +``` +npm run native start:reset #starts metro +``` + +In another terminal type: + +``` +npm run native ios +``` + +After waiting for everything to build, the demo app should be running from the iOS simulator: + +<img src="https://developer.wordpress.org/files/2021/10/iOS-Simulator.png" width="700px" alt="Screenshot of the block editor in iOS simulator." /> + +## Android + +### Java Development Kit (JDK) + +The JDK recommended in [the React Native documentation](https://reactnative.dev/docs/environment-setup) is called Azul Zulu. It can be installed using [Homebrew](https://brew.sh/). To install it, run the following commands in a terminal after installing Homebrew: + +``` +brew tap homebrew/cask-versions +brew install --cask zulu11 +``` + +If you already have a JDK installed on your system, it should be JDK 11 or newer. + +### Set up Android Studio + +To compile the Android app, [download Android Studio](https://developer.android.com/studio). + +Next, open an existing project and select the Gutenberg folder you cloned. + +From here, click on the cube icon that's highlighted in the following screenshot to access the SDK Manager. Another way to the SDK Manager is to navigate to `Tools > SDK Manager`: + +<img src="https://developer.wordpress.org/files/2021/10/react-native-package-manager.png" width="700px" alt="Screenshot highlighting where the package manager button is located in Android Studio."> + +We can download SDK platforms, packages and other tools on this screen. Specific versions are hidden behind the "Show package details" checkbox, check it, since our build requires specific versions for E2E and development: + +<img src="https://developer.wordpress.org/files/2021/10/react-native-show-package-details.png" width="700px" alt="Screenshot of the package manager in Android Studio, highlighting the Show Package Details checkbox."> + +Check all related packages from [build.gradle](https://github.com/WordPress/gutenberg/blob/trunk/packages/react-native-editor/android/build.gradle). Then click on "Apply" to download items. There may be other related dependencies from build.gradle files in node_modules. + +If you don’t want to dig through files, stack traces will complain of missing packages, but it does take quite a number of tries if you go through this route. + +<img src="https://developer.wordpress.org/files/2021/10/react-native-editor-build-gradle.png" width="700px" alt="Screenshot of the build.gradle configuration file."> + +<img src="https://developer.wordpress.org/files/2021/10/react-native-sdk.png" width="700px" alt="Screenshot of the package manager displaying SDK Platforms."> + +<img src="https://developer.wordpress.org/files/2021/10/react-native-sdk-tools.png" width="700px" alt="Screenshot of the package manager displaying SDK Tools."> + +### Update Paths + +Export the following env variables and update $PATH. We can normally add this to our ` ~/.zshrc` file if we're using zsh +in our terminal, or `~/.bash_profile` if the terminal is still using bash. + +```sh +### Java that comes with Android Studio: +export JAVA_HOME=/Applications/Android\ Studio.app/Contents/jre/Contents/Home +### Android Home is configurable in Android Studio. Go to Preferences > System Settings > Android SDK +export ANDROID_HOME=$HOME/Library/Android/sdk +export PATH=$PATH:$ANDROID_HOME/emulator +export PATH=$PATH:$ANDROID_HOME/tools +export PATH=$PATH:$ANDROID_HOME/tools/bin +export PATH=$PATH:$ANDROID_HOME/platform-tools +``` + +Save then source, or open a new terminal to pick up changes. + +```sh +source ~/.zshrc +``` + +or + +```sh +source ~/.bash_profile +``` + +If the SDK path can't be found, you can verify its location by visiting Android Studio > Preferences > System Settings > Android SDK + +<img src="https://developer.wordpress.org/files/2021/10/sdk-path.png" width="700px" alt="Screenshot of where the SDK Path may be found in Android Studio."> + +### Create a new device image + +Next, let’s create a virtual device image. Click on the phone icon with an android to the bottom-right. + +<img src="https://developer.wordpress.org/files/2021/10/react-native-android-device-manager-button.png" width="700px" alt="Screenshot of where to find the android device manager button."> + +This brings up the “Android Virtual Device Manager” or (AVD). Click on “Create Virtual Device”. Pick a phone type of your choice: + +<img src="https://developer.wordpress.org/files/2021/10/react-native-android-select-hardware.png" width="700px" alt="Screenshot of the Virtual Device Configuration setup."> + +Pick the target SDK version. This is the targetSdkVersion set in the [build.gradle](https://github.com/WordPress/gutenberg/blob/trunk/packages/react-native-editor/android/build.gradle) file. + +<img src="https://developer.wordpress.org/files/2021/10/react-native-adv-system-image.png" width="700px" alt="Screenshot of picking a system image in the Android Device Manager workflow."> + +There are some advanced settings we can toggle, but these are optional. Click finish. + +### Run the demo app + +Start metro: + +``` +npm run native start:reset +``` + +In another terminal run the following to launch the demo app in the Android emulator (if the emulator isn't already running, it'll also be launched as part of this command): + +``` +npm run native android +``` + +After a bit of a wait, we’ll see something like this: + +<img src="https://developer.wordpress.org/files/2021/10/android-simulator.png" width="700px" alt="Screenshot of a the block editor in Android Simulator."> + +## Unit Tests + +```sh +npm run native test +``` + +## Integration Tests + +[Appium](https://appium.io/) has it own doctor tool. Run this with: + +```sh +npx appium-doctor +``` + +<img src="https://developer.wordpress.org/files/2021/10/CleanShot-2021-10-27-at-15.20.16.png" width="700px" alt="Screenshot of the appium-doctor tool running in the terminal."> + +Resolve any required dependencies. + +### iOS Integration Tests + +If we know we can run the iOS local environment without issue, E2Es for iOS are straightforward. Stop any running metro processes. This was launched previously with `npm run native start:reset`. + +Then in terminal type: + +```sh +npm run native test:e2e:ios:local +``` + +Passing a filename should also work to run a subset of tests: + +```sh +npm run native test:e2e:ios:local gutenberg-editor-paragraph.test.js +``` + +If all things go well, it should look like: + +<video src="https://user-images.githubusercontent.com/1270189/137403353-2a8ded47-5c7c-4f99-b2cc-fa6def4b4990.mp4" data-canonical-src="https://user-images.githubusercontent.com/1270189/137403353-2a8ded47-5c7c-4f99-b2cc-fa6def4b4990.mp4" controls="controls" muted="muted" class="d-block rounded-bottom-2 width-fit" style="max-height:640px;" alt="A video of block editor integration tests in iOS Simulator"></video> + +### Android Integration Tests + +**Create a new virtual device()** that matches the device specified in [packages/react-native-editor/**device-tests**/helpers/caps.js](https://github.com/WordPress/gutenberg/blob/trunk/packages/react-native-editor/__device-tests__/helpers/caps.js#L30) At the time of this writing, this would be a Pixel 3 XL image, using Android 9 (API 28). + +Start the virtual device first. Go back to the AVD by clicking on the phone icon, then click the green play button. + +<img src="https://developer.wordpress.org/files/2021/10/adv-integration.png" width="700px" alt="A screenshot of how to start the Android Simulator."> + +Make sure no metro processes are running. This was launched previously with `npm run native start:reset`. + +Then in a terminal run: + +```sh +npm run native test:e2e:android:local +``` + +Passing a filename should also work to run a subset of tests: + +``` +npm run native test:e2e:android:local gutenberg-editor-paragraph.test.js +``` + +After a bit of a wait we should see: + +<img src="https://developer.wordpress.org/files/2021/10/CleanShot-2021-10-27-at-15.28.22.png" width="700px" alt="A screenshot of block editor integration tests in Android Simulator."> diff --git a/docs/contributors/code/release.md b/docs/contributors/code/release.md index 51d89f852ffae..93df6eebe5f2b 100644 --- a/docs/contributors/code/release.md +++ b/docs/contributors/code/release.md @@ -4,7 +4,7 @@ This Repository is used to perform several types of releases. This document serv To release a stable version of the Gutenberg plugin you need to be part of the [Gutenberg development team](/docs/block-editor/contributors/repository-management/#teams). On top of that, you need approval from a member of the Gutenberg Core team for the final step of the release process (upload to the WordPress.org plugin repo -- see below). If you aren't a member yourself, make sure to contact one ahead of time so they'll be around at the time of the release. You can ping in the [#core-editor Slack channel](https://wordpress.slack.com/messages/C02QB2JS7). -To release Gutenberg's npm packages, you need to be part of the [WordPress organization at npm](https://www.npmjs.com/org/wordpress). 🙂 +To [release Gutenberg's npm packages](#packages-releases-to-npm-and-wordpress-core-updates), you need to be part of the [WordPress organization at npm](https://www.npmjs.com/org/wordpress). 🙂 ## Plugin Releases @@ -20,12 +20,12 @@ If critical bugs are discovered on stable versions of the plugin, patch versions ### Release Tool -> Note that at the time of writing, the tool doesn't support releasing consecutive RC releases. However, it is possible to use the tool for patch releases following the first stable release. - The plugin release process is entirely automated and happens solely on GitHub -- i.e. it doesn't require any steps to be run locally on your machine. For your convenience, here's an [11-minute video walkthrough](https://youtu.be/TnSgJd3zpJY) that demonstrates the release process. It's recommended to watch this if you're unfamiliar with it. The process is also documented in the following paragraphs. +#### Running workflow + In order to start the release process, go to Gutenberg's GitHub repository's Actions tab, and locate the ["Build Gutenberg Plugin Zip" action](https://github.com/WordPress/gutenberg/actions/workflows/build-plugin-zip.yml). Note the blue banner that says "This workflow has a `workflow_dispatch` event trigger.", and expand the "Run workflow" dropdown on its right hand side. ![Run workflow dropdown](https://raw.githubusercontent.com/WordPress/gutenberg/HEAD/docs/contributors/code/workflow-dispatch-banner.png) @@ -34,9 +34,11 @@ To release a release candidate (RC) version of the plugin, enter `rc`. To releas This will trigger a GitHub Actions (GHA) workflow that bumps the plugin version, builds the Gutenberg plugin .zip file, creates a release draft, and attaches the plugin .zip file to it. This part of the process typically takes a little under six minutes. You'll see that workflow appear at the top of the list, right under the blue banner. Once it's finished, it'll change its status icon from a yellow dot to a green checkmark. You can follow along in a more detailed view by clicking on the workflow. +#### View the release draft + As soon as the workflow has finished, you'll find the release draft under https://github.com/WordPress/gutenberg/releases. The draft is pre-populated with changelog entries based on previous release candidates for this version, and any changes that have since been cherry-picked to the release branch. Thus, when releasing the first stable version of a series, make sure to delete any RC version headers (that are only there for your information) and to move the more recent changes to the correct section (see below). -The changelog draft will be at least partially pre-organized (based on Github label) into sections and within those into "features". Take some time to read the generated notes and then edit them to ensure legibility and accuracy. +The changelog draft will be at least partially pre-organized (based on GitHub label) into sections and within those into "features". Take some time to read the generated notes and then edit them to ensure legibility and accuracy. Don't rush this part -- it's important to bring the release notes into a nice shape. You don't have to do it all in one go -- you can save the draft and come back to it later. @@ -47,15 +49,17 @@ When editing the notes, you should be sure to: You can find some more tips on writing the release notes and post in the section below. +#### Publishing the release + Only once you're happy with the shape of the release notes should you press the green "Publish release" button. This will create a `git` tag for the version, publish the release, and trigger [another GHA workflow](https://github.com/WordPress/gutenberg/actions/workflows/upload-release-to-plugin-repo.yml) that has a twofold purpose: 1. Use the release notes that you just edited to update `changelog.txt`, and -2. upload the new plugin version to the WordPress.org plugin repository (SVN) (only if you're releasing a stable version). +2. Upload the new plugin version to the WordPress.org plugin repository (SVN) (only if you're releasing a stable version). The latter step needs approval by a member of the Gutenberg Core team. Locate the ["Upload Gutenberg plugin to WordPress.org plugin repo" workflow](https://github.com/WordPress/gutenberg/actions/workflows/upload-release-to-plugin-repo.yml) for the new version, and have it [approved](https://docs.github.com/en/actions/managing-workflow-runs/reviewing-deployments#approving-or-rejecting-a-job). This will cause the new version to be available to users of WordPress all over the globe! 💃 -You should check that folks are able to install the new version from their Dashboard. +You should check that folks can install the new version from their Dashboard. Once released, all that's left to do is writing a release post on [make.wordpress.org/core](https://make.wordpress.org/core/). You can find some tips on that below. @@ -132,63 +136,100 @@ If you decide that the fixes deserve another release candidate before the stable ### Creating Point Releases -Occasionally it's necessary to create a point release (i.e. X.Y._Z_) of the Plugin. +Occasionally it's necessary to create a point release (i.e. X.Y._Z_) of the Plugin. This is most commonly to push fixes for regressions and/or bugs. + +As you proceed with the following process, it's worth bearing in mind that such point releases are not created as branches in their own right (e.g. `release/12.5.0`) but are simply [tags](https://github.com/WordPress/gutenberg/releases/tag/v12.5.1). + +The method for point releases is nearly identical to the main Plugin release process (see above) but has some notable exceptions. Please make sure to read _the whole_ of this guide before proceeding. + +#### Updating the release branch + +The point release should only contain the _specific commits_ required. To do this you should checkout the previous _minor_ stable (i.e. non-RC) release branch (e.g. `release/12.5`) locally and then cherry pick any commits that you require into that branch. + +You must also ensure that all PRs being included are assigned to the Github Milestone on which the point release is based. Bear in mind, that when PRs are _merged_ they are automatically assigned a milestone for the next _stable_ release. Therefore you will need to go back through each PR in Github and re-assign the Milestone. + +For example, if you are releasing version `12.5.4`, then all PRs picked for that release must be unassigned from the `12.6` Milestone and instead assigned to the `12.5` Milestone. + +Once you have the stable release branch in order and the correct Milestone assigned to your PRs you can _push the branch to Github_ and continue with the release process using the Github website GUI. + +#### Running the point release + +![Run workflow dropdown](https://raw.githubusercontent.com/WordPress/gutenberg/HEAD/docs/contributors/code/workflow-dispatch-banner.png) + +Go to Gutenberg's GitHub repository's Actions tab, and locate the ["Build Gutenberg Plugin Zip" action](https://github.com/WordPress/gutenberg/actions/workflows/build-plugin-zip.yml). You should now _carefully_ choose the next action based on information about the current Plugin release version: -The method for doing this is nearly identical to the main Plugin release process (see above). In the `Run workflow` control specify `stable` and, _if_ the previous version was stable (`x.y.z`), the workflow will release a point release, with z incremented (`x.y.(z+1)`) as necessary. +_If_ the previous release version was **stable** (`X.Y.Z` - e.g. `12.5.0`, `12.5.1` .etc) leave the the `Use workflow from` field as `trunk` and then specify `stable` in the text input field. The workflow will automatically create a point release, with z incremented (`x.y.(z+1)`) as required. -**Please note** however, that if the previous release was an _RC_ (e.g. `x.y.0-rc.1`), the workflow will try to release the next major _stable_ version. Therefore, should you wish to release a point release for a stable version of the Plugin (e.g. `10.1.0`) but there is an _RC already published_ for the _next_ version of the Plugin (e.g. `10.2.0-rc.1`) you will need to manually select the stable version's release branch when creating the release. +_If_ however, the previous release was an **RC** (e.g. `X.Y.0-rc.1`) you will need to _manually_ select the _stable version's release branch_ (e.g. `12.5.0`) when creating the release. Failure to do this will cause the workflow to release the next major _stable_ version (e.g. `12.6.0`) which is not what you want. -To do this, when running the Workflow, select the appropriate `release/` branch from the `Use workflow from` dropdown (e.g. `release/10.1`) and specify `stable` in the text input field. +To do this, when running the Workflow, select the appropriate `release/` branch from the `Use workflow from` dropdown (e.g. `release/12.5`) and specify `stable` in the text input field. -Please note you **cannot create point releases for previous stable releases once a more recent stable release has been published** as this would require significant changes to how we upload plugin versions to the WP.org plugin SVN repo). +Please note you **cannot create point releases for previous stable releases once a more recent stable release has been published** as this would require significant changes to how we upload plugin versions to the WP.org plugin SVN repo). Always check the latest release version before you proceed (see [this Issue](https://github.com/WordPress/gutenberg/issues/33277#issuecomment-876289457) for more information). -More more information please see [this Issue](https://github.com/WordPress/gutenberg/issues/33277#issuecomment-876289457). +#### Troubleshooting + +> The release draft was created but it was empty/contained an error message + +If you forget to assign the correct Milestone to your cherry picked PR(s) then the changelog may not be generated as you would expect. + +It is important to always manually verify that the PRs shown in the changelog match up with those cherry picked to the release branch. + +Moreover, if the release includes only a single PR, then failing to assign the PR to the correct Milestone will cause an error to be displayed when generating the changelog. In this case you can edit the release notes to include details of the missing PR (manually copying the format from a previous release). + +If for any reason the Milestone has been closed, you may reopen it for the purposes of the release. + +> The draft release only contains 1 asset file. Other releases have x3. + +This is expected. The draft release will contain only the plugin zip. Only once the release is published will the remaining assets be generated and added to the release. + +> Do I need to publish point releases to WordPress.org? + +Yes. The method for this is identical to the main Plugin release process. You will need a Gutenberg Core team member to approve the release workflow. ## Packages Releases to npm and WordPress Core Updates -The Gutenberg repository mirrors the [WordPress SVN repository](https://make.wordpress.org/core/handbook/about/release-cycle/) in terms of branching for each SVN branch, a corresponding Gutenberg `wp/*` branch is created: +The Gutenberg repository follows the [WordPress SVN repository's](https://make.wordpress.org/core/handbook/about/release-cycle/) branching strategy for every major WordPress release. In addition to that, it also contains two other special branches that control npm publishing workflows: -- The `wp/trunk` branch contains the same version of packages published to npm with the `latest` distribution tag. The WordPress core consumes those packages directly in the `trunk` branch and uses them for public releases. -- The `wp/next` branch contains the same version of packages published to npm with the `next` distribution tag. Projects should use those packages for development purposes only. -- A Gutenberg branch targeting a specific WordPress major release (including its further minor increments) is created (example `wp/5.2`) based on the `wp/trunk` Gutenberg branch when the corresponding WordPress release branch is created. (This usually happens when the first `RC` of the next WordPress major version is released). +- The `wp/latest` branch contains the same version of packages as those published to npm with the `latest` distribution tag. The goal here is to have this branch synchronized with the last Gutenberg plugin release, and the only exception would be an unplanned [bugfix release](#standalone-bugfix-package-releases). +- The `wp/next` branch contains the same version of packages as those published to npm with the `next` distribution tag. It always gets synchronized with the `trunk` branch. Projects should use those packages for development or testing purposes only. +- A Gutenberg branch `wp/*` (example `wp/6.0`) targeting a specific WordPress major release (including its further minor increments) gets created based on the `wp/latest` Gutenberg branch just after the last Gutenberg release planned for inclusion in the next major WordPress release. Release types and their schedule: -- [Synchronizing WordPress Trunk](#synchronizing-wordpress-trunk) (`latest` dist tag) – when there is no "feature-freeze" mode in WordPress Core, then publishing happens every two weeks based on the new stable version of the Gutenberg plugin. Otherwise, only bug fixes get manually included and published to npm before every next beta and RC version of the following WordPress release. -- [Minor WordPress Releases](#minor-wordpress-releases) (`patch` dist tag) – only when bug fixes or security releases need to be backported into WordPress Core. -- [Development Releases](#development-releases) (`next` dist tag) – at least every two weeks when the RC version for the Gutenberg plugin is released. +- [Synchronizing Gutenberg Plugin](#synchronizing-gutenberg-plugin) (`latest` dist tag) – publishing happens automatically every two weeks based on the newly created `release/*` (example `release/12.8`) branch with the RC1 version of the Gutenberg plugin. +- [WordPress Releases](#wordpress-releases) (`patch` dist tag) – publishing gets triggered manually from the `wp/*` (example `wp/6.0`) branch. Once we reach the point in the WordPress major release cycle (usually after Beta 1) where we only cherry-pick commits from the Gutenberg repository to the WordPress core, we use `wp/*` branch (created from `wp/latest`) for npm publishing with the `patch` dist-tag. It's also possible to use older branches to backport bug or security fixes to the corresponding older versions of WordPress Core. +- [Development Releases](#development-releases) (`next` dist tag) – it is also possible to perform development releases at any time when there is a need to test the upcoming changes. -There is also an option to perform [Standalone Bugfix Package Releases](#standalone-bugfix-package-releases) at will. It should be reserved only for critical bug fixes or security releases that must be published to _npm_ outside of a regular WordPress release cycle. +There is also an option to perform [Standalone Bugfix Package Releases](#standalone-bugfix-package-releases) at will. It should be reserved only for critical bug fixes or security releases that must be published to _npm_ outside of regular cycles. -### Synchronizing WordPress Trunk +### Synchronizing Gutenberg Plugin -For each Gutenberg plugin release, WordPress trunk should be synchronized. Note that the WordPress `trunk` branch can be closed or in "feature-freeze" mode. Usually, this happens between the first `beta` and the first `RC` of the WordPress release cycle. During this period, the Gutenberg plugin releases should not be synchronized with WordPress Core. +For each Gutenberg plugin release, we also publish to npm an updated version of WordPress packages. This is automated with the [Release Tool](#release-tool) that handles releases for the Gutenberg plugin. A successful RC1 release triggers the npm publishing job, and this needs to be approved by a Gutenberg Core team member. Locate the ["Build Gutenberg Plugin Zip" workflow](https://github.com/WordPress/gutenberg/actions/workflows/build-plugin-zip.yml) for the new version, and have it [approved](https://docs.github.com/en/actions/managing-workflow-runs/reviewing-deployments#approving-or-rejecting-a-job). -The process has three steps: 1) update the `wp/trunk` branch within the Gutenberg repo 2) publish the new package versions to npm 3) update the WordPress `trunk` branch. +We deliberately update the `wp/latest` branch within the Gutenberg repo with the content from the Gutenberg release `release/*` (example `release/12.7`) branch at the time of the Gutenberg RC1 release. This is done to ensure that the `wp/latest` branch is as close as possible to the latest version of the Gutenberg plugin. It also practically removes the chances of conflicts while backporting to `trunk` commits with updates applied during publishing to `package.json` and `CHANGELOG.md` files. In the past, we had many issues in that aspect when doing npm publishing after the regular Gutenberg release a week later. When publishing the new package versions to npm, we pick at least the `minor` version bump to account for future bugfix or security releases. -The first step is automated via `./bin/plugin/cli.js npm-latest` command. You only have to run the command, but, for the record, the manual process would look very close to the following steps: +All steps are automated via `./bin/plugin/cli.js npm-latest` command. For the record, the manual process would look very close to the following steps: 1. Ensure the WordPress `trunk` branch is open for enhancements. 2. Get the last published Gutenberg release branch with `git fetch`. -3. Check out the `wp/trunk` branch. +3. Check out the `wp/latest` branch. 4. Remove all files from the current branch: `git rm -r .`. 5. Check out all the files from the release branch: `git checkout release/x.x -- .`. -6. Commit all changes to the `wp/trunk` branch with `git commit -m "Merge changes published in the Gutenberg plugin vX.X release"` and push to the repository. -7. Update the `CHANGELOG.md` files of the packages with the new publish version calculated and commit to the `wp/trunk` branch. Assuming the package versions are written using this format `major.minor.patch`, make sure to bump at least the `minor` version number after every major WordPress release. For example, if the CHANGELOG of the package to be released indicates that the next unreleased version is `5.6.1`, choose `5.7.0` as a version in case of `minor` version. This is important as the patch version numbers should be reserved in case bug fixes are needed for a minor WordPress release (see below). +6. Commit all changes to the `wp/latest` branch with `git commit -m "Merge changes published in the Gutenberg plugin vX.X release"` and push to the repository. +7. Update the `CHANGELOG.md` files of the packages with the new publish version calculated and commit to the `wp/latest` branch. Assuming the package versions are written using this format `major.minor.patch`, make sure to bump at least the `minor` version bumps gets applied. For example, if the CHANGELOG of the package to be released indicates that the next unreleased version is `5.6.1`, choose `5.7.0` as a version in case of `minor` version. This is important as the patch version numbers should be reserved in case bug fixes are needed for a minor WordPress release (see below). 8. Log-in to npm via the console: `npm login`. Note that you should have 2FA enabled. -9. From the `wp/trunk` branch, install npm dependencies with `npm ci`. +9. From the `wp/latest` branch, install npm dependencies with `npm ci`. 10. Run the script `npm run publish:latest`. - When asked for the version numbers to choose for each package pick the values of the updated CHANGELOG files. - You'll be asked for your One-Time Password (OTP) a couple of times. This is the code from the 2FA authenticator app you use. Depending on how many packages are to be released you may be asked for more than one OTP, as they tend to expire before all packages are released. - If the publishing process ends up incomplete (perhaps because it timed-out or an bad OTP was introduce) you can resume it via [`lerna publish from-package`](https://github.com/lerna/lerna/tree/HEAD/commands/publish#bump-from-package). +11. Finally, now that the npm packages are published, cherry-pick the commits created by lerna ("Publish" and the CHANGELOG update) into the `trunk` branch of Gutenberg. -Finally, now that the npm packages are ready, a patch can be created and committed into WordPress `trunk`. You should also cherry-pick the commits created by lerna ("Publish" and the CHANGELOG update) into the `trunk` branch of Gutenberg. - -### Minor WordPress Releases +### WordPress Releases -The following workflow is needed when bug fixes or security releases need to be backported into WordPress Core. This can happen in a few use-cases: +The following workflow is needed when bug or security fixes need to be backported into WordPress Core. This can happen in a few use-cases: -- During the `RC` period of the WordPress release cycle when `wp/X.Y` (example `wp/5.7`) branch for the release is already present. +- During the `beta` and `RC` periods of the WordPress release cycle when `wp/X.Y` (example `wp/5.7`) branch for the release is already present. - For WordPress minor releases and WordPress security releases (example `5.1.1`). 1. Check out the relevant WordPress major branch (If the minor release is 5.2.1, check out `wp/5.2`). @@ -211,34 +252,34 @@ Now, the npm packages should be ready and a patch can be created and committed i ### Standalone Bugfix Package Releases -The following workflow is needed when packages require bug fixes or security releases to be published to _npm_ outside of a regular WordPress release cycle. +The following workflow is needed when packages require bug fixes or security releases to be published to _npm_ outside of a regular release cycle. -Note: Both the `trunk` and `wp/trunk` branches are restricted and can only be _pushed_ to by the Gutenberg Core team. +Note: Both the `trunk` and `wp/latest` branches are restricted and can only be _pushed_ to by the Gutenberg Core team. -Identify the commit hashes from the pull requests that need to be ported from the repo `trunk` branch to `wp/trunk` +Identify the commit hashes from the pull requests that need to be ported from the repo `trunk` branch to `wp/latest` -The `wp/trunk` branch now needs to be prepared to release and publish the packages to _npm_. +The `wp/latest` branch now needs to be prepared to release and publish the packages to _npm_. Open a terminal and perform the following steps: 1. `git checkout trunk` 2. `git pull` -3. `git checkout wp/trunk` +3. `git checkout wp/latest` 4. `git pull` -Before porting commits check that the `wp/trunk` branch does not have any outstanding packages waiting to be published: +Before porting commits check that the `wp/latest` branch does not have any outstanding packages waiting to be published: -1. `git checkout wp/trunk` +1. `git checkout wp/latest` 2. `npm run publish:check` -Now _cherry-pick_ the commits from `trunk` to `wp/trunk`, use `-m 1 commithash` if the commit was a pull request merge commit: +Now _cherry-pick_ the commits from `trunk` to `wp/latest`, use `-m 1 commithash` if the commit was a pull request merge commit: 1. `git cherry-pick -m 1 cb150a2` 2. `git push` -Whilst waiting for the GitHub actions build for `wp/trunk`[branch to pass](https://github.com/WordPress/gutenberg/actions?query=branch%3Awp%2Ftrunk), identify and begin updating the `CHANGELOG.md` files: +Whilst waiting for the GitHub actions build for `wp/latest`[branch to pass](https://github.com/WordPress/gutenberg/actions?query=branch%3Awp%2Ftrunk), identify and begin updating the `CHANGELOG.md` files: -1. `git checkout wp/trunk` +1. `git checkout wp/latest` 2. `npm run publish:check` > Example > @@ -252,103 +293,23 @@ Whilst waiting for the GitHub actions build for `wp/trunk`[branch to pass](https Check the versions listed in the current `CHANGELOG.md` file, looking through the commit history of a package e.g [@wordpress/scripts](https://github.com/WordPress/gutenberg/commits/HEAD/packages/scripts) and look out for _"chore(release): publish"_ and _"Update changelogs"_ commits to determine recent version bumps, then looking at the commits since the most recent release should aid with discovering what changes have occurred since the last release. -Note: You may discover the current version of each package is not up to date, if so updating the previous released versions would be appreciated. - -The good news is that the rest of the process is automated with `./bin/plugin/cli.js npm-bugfix` command. The rest of the section covers all the necessary steps for publishing the packages if you prefer to do it manually. - -Begin updating the _changelogs_ based on the [Maintaining Changelogs](https://github.com/WordPress/gutenberg/blob/HEAD/packages/README.md#maintaining-changelogs) documentation and commit the changes: - -1. `git checkout wp/trunk` -2. Update each of the `CHANGELOG.md` files -3. Stage the _changelog_ changes `git add packages/` -4. `git commit -m "Update changelogs"` -5. Make a note of the commit hash of this commit - > Example - > - > ``` - > [trunk 278f524f16] Update changelogs` 278f524 - > ``` -6. `git push` - -Now that the changes have been committed to the `wp/trunk` branch and the Travis CI builds for the `wp/trunk` [branch are passing](https://travis-ci.com/WordPress/gutenberg/branches) it's time to publish the packages to npm: - -1. Once again run `npm run publish:check` to confirm there are no unexpected packages ready to be published: - > Example - > - > ```shell - > npm run publish:check - > @wordpress/e2e-tests - > @wordpress/jest-preset-default - > @wordpress/scripts - > lerna success found 3 packages ready to publish - > ``` -2. Run the `npm run publish:latest` command (see more in [package release process]) but when asked for the version numbers to choose for each package use the versions you made note of above when updating each packages `CHANGELOG.md` file. - > Truncated example of publishing process output - > - > ``` - > npm run publish:latest - > - > Build Progress: [==============================] 100% - > lerna notice cli v3.18.2 - > lerna info versioning independent - > ? Select a new version for @wordpress/e2e-tests (currently 1.9.0) Patch (1.9.1) - > ? Select a new version for @wordpress/jest-preset-default (currently 5.3.0) Patch (5.3.1) - > ? Select a new version for @wordpress/scripts (currently 6.1.0) Patch (6.1.1) - > - > Changes: - > - @wordpress/e2e-tests: 1.9.0 => 1.9.1 - > - @wordpress/jest-preset-default: 5.3.0 => 5.3.1 - > - @wordpress/scripts: 6.1.0 => 6.1.1 - > - > ? Are you sure you want to publish these packages? Yes - > lerna info execute Skipping releases - > lerna info git Pushing tags... - > lerna info publish Publishing packages to npm... - > lerna info Verifying npm credentials - > lerna info Checking two-factor auth mode - > ? Enter OTP: 753566 - > lerna success published @wordpress/jest-preset-default 5.3.1 - > lerna success published @wordpress/scripts 6.1.1 - > lerna success published @wordpress/e2e-tests 1.9.1 - > Successfully published: - > - @wordpress/e2e-tests@1.9.1 - > - @wordpress/jest-preset-default@5.3.1 - > - @wordpress/scripts@6.1.1 - > lerna success published 3 packages - > ``` - -Now that the packages have been published the _"chore(release): publish"_ and _"Update changelogs"_ commits to `wp/trunk` need to be ported to the `trunk` branch: - -1. `git checkout trunk` -2. `git pull` -3. Cherry-pick the `278f524`hash you noted above from the _"Update changelogs"_ commit made to `wp/trunk` -4. `git cherry-pick 278f524` -5. Get the commit hash from the the lerna publish commit either from the terminal or [wp/trunk commits](https://github.com/WordPress/gutenberg/commits/wp/trunk) -6. Cherry-pick the `fe6ae0d` "chore(release): publish"\_ commit made to `wp/trunk` -7. `git cherry-pick fe6ae0d` -8. `git push` +Note: You may discover the current version of each package is not up to date, if so updating the previously released versions would be appreciated. -Confirm the packages dependencies do not contain `file://` links in the `dependencies` or `devdependencies` section of the packages released, e.g: +The good news is that the rest of the process is automated with `./bin/plugin/cli.js npm-bugfix` command. For the record, the manual process would look very close to the following steps: -> https://unpkg.com/browse/@wordpress/jest-preset-default@5.3.1/package.json > https://unpkg.com/browse/@wordpress/scripts@6.1.1/package.json > https://unpkg.com/browse/@wordpress/jest-preset-default@5.3.1/package.json - -Time to announce the published changes in the #core-js and #core-editor Slack channels - -> ``` -> 📣 Successfully published: -> • @wordpress/e2e-tests@1.9.1 -> • @wordpress/jest-preset-default@5.3.1 -> • @wordpress/scripts@6.1.1 -> Lerna success published 3 packages -> ``` - ---- - -Ta-da! 🎉 +1. Check out the `wp/latest` branch. +2. Update the `CHANGELOG.md` files of the packages with the new publish version calculated and commit to the `wp/latest` branch. +3. Log-in to npm via the console: `npm login`. Note that you should have 2FA enabled. +4. From the `wp/latest` branch, install npm dependencies with `npm ci`. +5. Run the script `npm run publish:latest`. + - When asked for the version numbers to choose for each package pick the values of the updated CHANGELOG files. + - You'll be asked for your One-Time Password (OTP) a couple of times. This is the code from the 2FA authenticator app you use. Depending on how many packages are to be released you may be asked for more than one OTP, as they tend to expire before all packages are released. + - If the publishing process ends up incomplete (perhaps because it timed-out or an bad OTP was introduce) you can resume it via [`lerna publish from-package`](https://github.com/lerna/lerna/tree/HEAD/commands/publish#bump-from-package). +6. Finally, now that the npm packages are published, cherry-pick the commits created by lerna ("Publish" and the CHANGELOG update) into the `trunk` branch of Gutenberg. ### Development Releases -As noted in the [Synchronizing WordPress Trunk](#synchronizing-wordpress-trunk) section, the WordPress trunk branch can be closed or in "feature-freeze" mode. Usually, this happens during the WordPress ongoing release cycle, which takes several weeks. It means that packages don't get any enhancements and new features during the ongoing WordPress major release process. Another type of release is available to address the limitation mentioned earlier and unblock ongoing development for projects that depend on WordPress packages. We are taking advantage of [package distribution tags](https://docs.npmjs.com/cli/v7/commands/npm-dist-tag) that make it possible to consume the future version of the codebase according to npm guidelines: +As noted in the [Synchronizing Gutenberg Plugin](#synchronizing-gutenberg-plugin) section, packages publishing happens every two weeks from the `wp/latest` branch. It's also possible to use the development release to test the upcoming changes present in the `trunk` branch at any time. We are taking advantage of [package distribution tags](https://docs.npmjs.com/cli/v7/commands/npm-dist-tag) that make it possible to consume the future version of the codebase according to npm guidelines: > By default, the `latest` tag is used by npm to identify the current version of a package, and `npm install <pkg>` (without any `@<version>` or `@<tag>` specifier) installs the `latest` tag. Typically, projects only use the `latest` tag for stable release versions, and use other tags for unstable versions such as prereleases. diff --git a/docs/contributors/code/testing-overview.md b/docs/contributors/code/testing-overview.md index df1f46e7e05c9..21dbb4ddd9b1d 100644 --- a/docs/contributors/code/testing-overview.md +++ b/docs/contributors/code/testing-overview.md @@ -21,7 +21,7 @@ When writing tests consider the following: Tests for JavaScript use [Jest](https://jestjs.io/) as the test runner and its API for [globals](https://jestjs.io/docs/en/api.html) (`describe`, `test`, `beforeEach` and so on) [assertions](https://jestjs.io/docs/en/expect.html), [mocks](https://jestjs.io/docs/en/mock-functions.html), [spies](https://jestjs.io/docs/en/jest-object.html#jestspyonobject-methodname) and [mock functions](https://jestjs.io/docs/en/mock-function-api.html). If needed, you can also use [React Testing Library](https://testing-library.com/docs/react-testing-library/intro) for React component testing. -It should be noted that in the past, React components were unit tested with [Enzyme](https://github.com/airbnb/enzyme). However, for new tests, it is preferred to use React Testing Library (RTL) and over time old tests should be refactored to use RTL too (typically when working on code that touches an old test). +_It should be noted that in the past, React components were unit tested with [Enzyme](https://github.com/airbnb/enzyme). However, React Testing Library (RTL) should be used for new tests instead, and over time old tests should be refactored to use RTL too (typically when working on code that touches an old test)._ Assuming you've followed the [instructions](/docs/contributors/code/getting-started-with-code-contribution.md) to install Node and project dependencies, tests can be run from the command-line with NPM: @@ -212,6 +212,86 @@ describe( 'my module', () => { } ); ``` +### User interactions + +Simulating user interactions is a great way to **write tests from the user's perspective**, and therefore avoid testing implementation details. + +When writing tests with Testing Library, there are two main alternatives for simulating user interactions: + +1. The [`fireEvent`](https://testing-library.com/docs/dom-testing-library/api-events/#fireevent) API, a utility for firing DOM events part of the Testing Library core API. +2. The [`user-event`](https://testing-library.com/docs/user-event/intro/) library, a companion library to Testing Library that simulates user interactions by dispatching the events that would happen if the interaction took place in a browser. + +The built-in `fireEvent` is a utility for dispatching DOM events. It dispatches exactly the events that are described in the test spec - even if those exact events never had been dispatched in a real interaction in a browser. + +On the other hand, the `user-event` library exposes higher-level methods (e.g. `type`, `selectOptions`, `clear`, `doubleClick`...), that dispatch events like they would happen if a user interacted with the document, and take care of any react-specific quirks. + +For the above reasons, **the `user-event` library is recommended when writing tests for user interactions**. + +**Not so good**: using `fireEvent` to dispatch DOM events. + +```javascript +import { render, screen } from '@testing-library/react'; + +test( 'fires onChange when a new value is typed', () => { + const spyOnChange = jest.fn(); + + // A component with one `input` and one `select`. + render( <MyComponent onChange={ spyOnChange } /> ); + + const input = screen.getByRole( 'textbox' ); + input.focus(); + // No clicks, no key events. + fireEvent.change( input, { target: { value: 62 } } ); + + // The `onChange` callback gets called once with '62' as the argument. + expect( spyOnChange ).toHaveBeenCalledTimes( 1 ); + + const select = screen.getByRole( 'listbox' ); + select.focus(); + // No pointer events dispatched. + fireEvent.change( select, { target: { value: 'optionValue' } } ); + + // ... +``` + +**Good**: using `user-event` to simulate user events. + +```javascript + +import { render, screen } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; + +test('fires onChange when a new value is typed', async () => { + const user = userEvent.setup(); + + const spyOnChange = jest.fn(); + + // A component with one `input` and one `select`. + render( <MyComponent onChange={ spyOnChange } /> ); + + const input = screen.getByRole( 'textbox' ); + // Focus the element, select and delete all its contents. + await user.clear( input ); + // Click the element, type each character separately (generating keydown, + // keypress and keyup events). + await user.type( input, '62' ); + + // The `onChange` callback gets called 3 times with the following arguments: + // - 1: clear ('') + // - 2: '6' + // - 3: '62' + expect( spyOnChange ).toHaveBeenCalledTimes( 3 ); + + const select = screen.getByRole( 'listbox' ); + // Dispatches events for focus, pointer, mouse, click and change. + await user.selectOptions( select, [ 'optionValue' ] ); + + // ... +}) +``` + + + ### Snapshot testing This is an overview of [snapshot testing] and how to best leverage snapshot tests. @@ -273,23 +353,22 @@ You should never create or modify a snapshot directly, they are generated and up Snapshot are mostly targeted at component testing. They make us conscious of changes to a component's structure which makes them _ideal_ for refactoring. If a snapshot is kept up to date over the course of a series of commits, the snapshot diffs record the evolution of a component's structure. Pretty cool 😎 -```js -import { shallow } from 'enzyme'; +```jsx +import { render, screen } from '@testing-library/react'; import SolarSystem from 'solar-system'; -import { Mars } from 'planets'; describe( 'SolarSystem', () => { test( 'should render', () => { - const wrapper = shallow( <SolarSystem /> ); + const { container } = render( <SolarSystem /> ); - expect( wrapper ).toMatchSnapshot(); + expect( container.firstChild ).toMatchSnapshot(); } ); test( 'should contain mars if planets is true', () => { - const wrapper = shallow( <SolarSystem planets /> ); + const { container } = render( <SolarSystem planets /> ); - expect( wrapper ).toMatchSnapshot(); - expect( wrapper.find( Mars ) ).toHaveLength( 1 ); + expect( container.firstChild ).toMatchSnapshot(); + expect( screen.getByText( /mars/i ) ).toBeInTheDocument(); } ); } ); ``` @@ -332,23 +411,41 @@ If you're starting a refactor, snapshots are quite nice, you can add them as the Snapshots themselves don't express anything about what we expect. Snapshots are best used in conjunction with other tests that describe our expectations, like in the example above: -```js +```jsx test( 'should contain mars if planets is true', () => { - const wrapper = shallow( <SolarSystem planets /> ); + const { container } = render( <SolarSystem planets /> ); // Snapshot will catch unintended changes - expect( wrapper ).toMatchSnapshot(); + expect( container.firstChild ).toMatchSnapshot(); // This is what we actually expect to find in our test - expect( wrapper.find( Mars ) ).toHaveLength( 1 ); + expect( screen.getByText( /mars/i ) ).toBeInTheDocument(); } ); ``` -[`shallow`](http://airbnb.io/enzyme/docs/api/shallow.html) rendering is your friend: +Another good technique is to use the `toMatchDiffSnapshot` function (provided by the [`snapshot-diff` package](https://github.com/jest-community/snapshot-diff)), which allows to snapshot only the difference between two different states of the DOM. This approach is useful to test the effects of a prop change on the resulting DOM while generating a much smaller snapshot, like in this example: + +```jsx +test( 'should render a darker background when isShady is true', () => { + const { container } = render( <CardBody>Body</CardBody> ); + const { container: containerShady } = render( + <CardBody isShady>Body</CardBody> + ); + expect( container ).toMatchDiffSnapshot( containerShady ); +} ); +``` -> Shallow rendering is useful to constrain yourself to testing a component as a unit, and to ensure that your tests aren't indirectly asserting on behavior of child components. +Similarly, the `toMatchStyleDiffSnapshot` function allows to snapshot only the difference between the _styles_ associated to two different states of a component, like in this example: -It's tempting to snapshot deep renders, but that makes for huge snapshots. Additionally, deep renders no longer test a single component, but an entire tree. With `shallow`, we snapshot just the components that are directly rendered by the component we want to test. +```jsx +test( 'should render margin', () => { + const { container: spacer } = render( <Spacer /> ); + const { container: spacerWithMargin } = render( <Spacer margin={ 5 } /> ); + expect( spacerWithMargin.firstChild ).toMatchStyleDiffSnapshot( + spacer.firstChild + ); +} ); +``` #### Troubleshooting @@ -371,7 +468,7 @@ Part of the unit-tests suite is a set of Jest tests run exercise native-mobile c To locally run the tests in debug mode, follow these steps: 0. Make sure you have ran `npm ci` to install all the packages -1. Run `npm run test-unit:native:debug` inside the Gutenberg root folder, on the CLI. Node is now waiting for the debugger to connect. +1. Run `npm run native test:debug` inside the Gutenberg root folder, on the CLI. Node is now waiting for the debugger to connect. 2. Open `chrome://inspect` in Chrome 3. Under the "Remote Target" section, look for a `../../node_modules/.bin/jest` target and click on the "inspect" link. That will open a new window with the Chrome DevTools debugger attached to the process and stopped at the beginning of the `jest.js` file. Alternatively, if the targets are not visible, click on the `Open dedicated DevTools for Node` link in the same page. 4. You can place breakpoints or `debugger;` statements throughout the code, including the tests code, to stop and inspect @@ -380,11 +477,17 @@ To locally run the tests in debug mode, follow these steps: ### Native mobile end-to-end tests -Contributors to Gutenberg will note that PRs include continuous integration E2E tests running the native mobile E2E tests on Android and iOS. For troubleshooting failed tests, check our guide on [native mobile tests in continious integration](docs/contributors/native-mobile.md#native-mobile-e2e-tests-in-continuous-integration). More information on running these tests locally can be found in the [relevant directory README.md](https://github.com/WordPress/gutenberg/tree/HEAD/packages/react-native-editor/__device-tests__). +Contributors to Gutenberg will note that PRs include continuous integration E2E tests running the native mobile E2E tests on Android and iOS. For troubleshooting failed tests, check our guide on [native mobile tests in continuous integration](/docs/contributors/code/react-native/integration-test-guide.md). More information on running these tests locally can be found in [here](/packages/react-native-editor/__device-tests__/README.md). + +### Native mobile integration tests + +There is an ongoing effort to add integration tests to the native mobile project using the [`react-native-testing-library`](https://testing-library.com/docs/react-native-testing-library/intro/) library. A guide to writing integration tests can be found [here](/docs/contributors/code/react-native/integration-test-guide.md). ## End-to-end Testing -End-to-end tests use [Puppeteer](https://github.com/puppeteer/puppeteer) as a headless Chromium driver, and are otherwise still run by a [Jest](https://jestjs.io/) test runner. +End-to-end tests currently use [Puppeteer](https://github.com/puppeteer/puppeteer) as a headless Chromium driver to run the tests in `packages/e2e-tests`, and are otherwise still run by a [Jest](https://jestjs.io/) test runner. + +> There's a ongoing [project](https://github.com/WordPress/gutenberg/issues/38851) to migrate them from Puppeteer to Playwright. See the [README](https://github.com/WordPress/gutenberg/tree/HEAD/test/e2e/README.md) of the new E2E tests for the updated guideline and best practices. ### Using wp-env @@ -418,23 +521,23 @@ You can additionally have the devtools automatically open for interactive debugg npm run test-e2e:watch -- --puppeteer-devtools ``` -### Using alternate enviornment +### Using alternate environment -If you're using a different setup than wp-env, you can provide the base URL, username and password like this: +If using a different setup than `wp-env`, you first need to symlink the e2e test plugins to your test site, from your site's plugins directory run: ```bash -npm run test-e2e -- --wordpress-base-url=http://localhost:8888 --wordpress-username=admin --wordpress-password=password +ln -s gutenberg/packages/e2e-tests/plugins/* . ``` -You also need to symlink all e2e test plugins to your site plugins directory: +Then to run the tests, specify the base URL, username, and passwords for your site. For example, if your test site is at `http://wp.test`, use: ```bash -ln -s gutenberg/packages/e2e-tests/plugins/* . +WP_BASE_URL=http://wp.test npm run test-e2e -- --wordpress-username=admin --wordpress-password=password ``` ### Scenario Testing -If you find that end-to-end tests pass when run locally, but fail in Travis, you may be able to isolate a CPU- or netowrk-bound race condition by simulating a slow CPU or network: +If you find that end-to-end tests pass when run locally, but fail in GitHub Actions, you may be able to isolate a CPU- or network-bound race condition by simulating a slow CPU or network: ``` THROTTLE_CPU=4 npm run test-e2e @@ -462,7 +565,11 @@ See [Chrome docs: emulateNetworkConditions](https://chromedevtools.github.io/dev ### Core Block Testing -Every core block is required to have at least one set of fixture files for its main save function and one for each deprecation. These fixtures test the parsing and serialization of the block. See [the e2e tests fixtures readme](https://github.com/wordpress/gutenberg/blob/HEAD/packages/e2e-tests/fixtures/blocks/README.md) for more information and instructions. +Every core block is required to have at least one set of fixture files for its main save function and one for each deprecation. These fixtures test the parsing and serialization of the block. See [the integration tests fixtures readme](https://github.com/wordpress/gutenberg/blob/HEAD/test/integration/fixtures/blocks/README.md) for more information and instructions. + +### Flaky Tests + +A test is considered to be **flaky** when it can pass and fail across multiple retry attempts without any code changes. We auto retry failed tests at most **twice** on CI to detect and report them to GitHub issues automatically under the [`[Type] Flaky Test`](https://github.com/WordPress/gutenberg/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22%5BType%5D+Flaky+Test%22) label via [`report-flaky-tests`](https://github.com/WordPress/gutenberg/blob/trunk/.github/report-flaky-tests/index.js) GitHub action. Note that a test that failed three times in a row is not counted as a flaky test and will not be reported to an issue. ## PHP Testing diff --git a/docs/contributors/design/reference.md b/docs/contributors/design/reference.md index b3d589576c7b0..13cec883926a3 100644 --- a/docs/contributors/design/reference.md +++ b/docs/contributors/design/reference.md @@ -1,9 +1,9 @@ # Reference -- [Glossary](/docs/getting-started/glossary.md) +- [Glossary](/docs/explanations/glossary.md) - [Coding Guidelines](/docs/contributors/code/coding-guidelines.md) - [Testing Overview](/docs/contributors/code/testing-overview.md) -- [Frequently Asked Questions](/docs/getting-started/faq.md) +- [Frequently Asked Questions](/docs/explanations/faq.md) ## Logo @@ -15,4 +15,4 @@ Released under GPL license, made by [Cristel Rossignol](https://twitter.com/cris ## Mockups -Mockup Sketch files are available in [the Design section](/docs/how-to-guides/designers/design-resources.md). +Mockup Sketch files are available in [the User Interface section](/docs/explanations/user-interface/design-resources.md). diff --git a/docs/contributors/documentation/README.md b/docs/contributors/documentation/README.md index 569e3073dc070..8bebe02c119db 100644 --- a/docs/contributors/documentation/README.md +++ b/docs/contributors/documentation/README.md @@ -6,28 +6,43 @@ A guide on how to get started contributing documentation to the Gutenberg projec The [Make WordPress Docs blog](https://make.wordpress.org/docs/) is the primary spot for the latest information around WordPress documentation: including announcements, product goals, meeting notes, meeting agendas, and more. -Real-time discussions for documentation take place in the `#docs` channel in [Make WordPress Slack](https://make.wordpress.org/chat) (registration required). Weekly meetings for the Documentation team are on Mondays at 14:00UTC. +Real-time discussions for documentation take place in the `#docs` channel in [Make WordPress Slack](https://make.wordpress.org/chat) (registration required). Weekly meetings for the Documentation team are on Tuesdays at 14:00UTC. The Gutenberg project uses GitHub for managing code and tracking issues. The main repository is at: [https://github.com/WordPress/gutenberg](https://github.com/WordPress/gutenberg). To find documentation issues to work on, browse [issues with documentation label](https://github.com/WordPress/gutenberg/issues?utf8=%E2%9C%93&q=is%3Aopen+is%3Aissue+label%3A%22%5BType%5D+Documentation%22+). -## Documentation Types +## Documentation types There are two major sets of documentation for the Gutenberg project: 1. [User documentation](https://wordpress.org/support/article/wordpress-editor/) is information on how to use the Editor as an author publishing posts. For contributing to user docs, follow the docs blog, or ask in the #docs Slack channel, to understand the current priorities. -2. [Block Editor Handbook](https://developer.wordpress.org/block-editor/) is everything related to the Gutenberg project including: developing, extending, and—what you are reading right now—contributing specific to Gutenberg. +2. [Block editor handbook](https://developer.wordpress.org/block-editor/) is everything related to the Gutenberg project including: developing, extending, and—what you are reading right now—contributing specific to Gutenberg. -The rest of this document covers contributing to the Block Editor Handbook. +The rest of this document covers contributing to the block editor handbook. -## Block Editor Handbook Process +## Block editor handbook process -The Block Editor Handbook is a mix of markdown files in the `/docs/` directory of the [Gutenberg project repository](https://github.com/WordPress/gutenberg/) and generated documentation from the packages. +The block editor handbook is a mix of markdown files in the `/docs/` directory of the [Gutenberg project repository](https://github.com/WordPress/gutenberg/) and generated documentation from the packages. -An automated job publishes the docs every 15 minutes to the [Block Editor Handbook site](https://developer.wordpress.org/block-editor/). +An automated job publishes the docs every 15 minutes to the [block editor handbook site](https://developer.wordpress.org/block-editor/). See [the Git Workflow](/docs/contributors/code/git-workflow.md) documentation for how to use git to deploy changes using pull requests. Additionally, see the [video walk-through](https://wordpress.tv/2020/09/02/marcus-kazmierczak-contribute-developer-documentation-to-gutenberg/) and the accompanying [slides for contributing documentation to Gutenberg](https://mkaz.blog/wordpress/contribute-documentation-to-gutenberg/). -### Update a Document +### Handbook structure + +The handbook is organized into four sections based on the functional types of documents. [The Documentation System](https://documentation.divio.com/) does a great job explaining the needs and functions of each type, but in short they are: + +- **Getting started tutorials** - full lessons that take learners step by step to complete an objective, for example the [create a block tutorial](/docs/getting-started/create-block/README.md). +- **How to guides** - short lessons specific to completing a small specific task, for example [how to add a button to the block toolbar](/docshow-to-guides/format-api/README.md). +- **Reference guides** - API documentation, purely functional descriptions, +- **Explanations** - longer documentation focused on learning, not a specific task. + +### Templates + +A [how to guide template](https://raw.githubusercontent.com/WordPress/gutenberg/trunk/docs/contributors/documentation/how-to-guide-template.md) is available to provide a common structure to guides. If starting a new how to guide, copy the markdown from the template to get started. + +The template is based on examples from The Good Docs Project, see their [template repository for additional examples](https://github.com/thegooddocsproject/templates) to help you create quality documentation. + +### Update a document To update an existing page: @@ -37,23 +52,23 @@ To update an existing page: 4. Commit your changes. 5. Create a pull request using "\[Type\] Documentation" label. -### Create a New Document +### Create a new document -To add a new documentation page requires a working JavaScript development environment to build the documentation, see the [JavaScript build setup documentation](/docs/how-to-guides/javascript/js-build-setup.md): +To add a new document requires a working JavaScript development environment to build the documentation, see the [JavaScript build setup documentation](/docs/how-to-guides/javascript/js-build-setup.md): -1. Create a Markdown file in the [docs](https://github.com/WordPress/gutenberg/tree/HEAD/docs) folder, use lower-case, no spaces, if needed a dash separator, and .md extension. +1. Create a Markdown file in the [docs](https://github.com/WordPress/gutenberg/tree/HEAD/docs) folder, use lower-case, no spaces, if needed a dash separator, and `.md` extension. 2. Add content, all documents require one and only H1 tag, using markdown notation. -3. Add item to the [toc.json](https://github.com/WordPress/gutenberg/blob/HEAD/docs/toc.json) hierarchy, see existing entries for format. +3. Add document entry to the [toc.json](https://github.com/WordPress/gutenberg/blob/HEAD/docs/toc.json) hierarchy, see existing entries for format. 4. Run `npm run docs:build` to update `manifest.json`. 5. Commit `manifest.json` with other files updated. If you forget to run, `npm run docs:build` your PR will fail the static analysis check, since the `manifest.json` file is an uncommitted local change that must be committed. -### Using Links +### Using links It's likely at some point you'll want to link to other internal documentation pages. It's worth emphasizing all documents can be browsed in different contexts: -- Block Editor Handbook +- Block editor handbook - GitHub website - npm website @@ -69,41 +84,39 @@ Use the full directory and filename from the Gutenberg repository, not the publi An example, the link to this page is: `/docs/contributors/documentation/README.md` -### Code Examples +### Code examples The code example in markdown should be wrapped in three tick marks \`\`\` and should additionally include a language specifier. See this [GitHub documentation around fenced code blocks](https://help.github.com/en/github/writing-on-github/creating-and-highlighting-code-blocks). -A unique feature to the Gutenberg documentation is the `codetabs` toggle, this allows two versions of code to be shown at once. This is used for showing both `ESNext` and `ES5` code samples. For example, [on this block tutorial page](/docs/how-to-guides/block-tutorial/block-controls-toolbar-and-sidebar.md). +A unique feature to the Gutenberg documentation is the `codetabs` toggle, this allows two versions of code to be shown at once. This is used for showing both `JSX` and `Plain` code samples. For example, [on this block tutorial page](/docs/how-to-guides/block-tutorial/block-controls-toolbar-and-sidebar.md). Here is an example `codetabs` section: ````md - {% codetabs %} - {% ESNext %} + \{\% codetabs \%\} + \{\% JSX \%\} ```js - // ESNext code here + // JSX code here ``` - {% ES5 %} + \{\% Plain \%\} ```js - // ES5 code here + // Plain code here ``` - {% end %} + \{\% end \%\} ```` -The preferred format for code examples is ESNext, this should be the default view. The example placed first in source will be shown as the default. +The preferred format for code examples is JSX, this should be the default view. The example placed first in source will be shown as the default. -**Note:** it is not required to include ES5 code examples. The guidance is to include `ES5` code for beginner tutorials, but the majority of code in Gutenberg packages and across the larger React and JavaScript ecosystem is in ESNext. +**Note:** It is not required to include plain JavaScript code examples for every guide. The recommendation is to include plain code for beginner tutorials or short examples, but the majority of code in Gutenberg packages and across the larger React and JavaScript ecosystem are in JSX that requires a build process. -### Callout Notices +### Callout notices The Block Editor handbook supports the same [notice styles as other WordPress handbooks](https://make.wordpress.org/docs/handbook/documentation-team-handbook/handbooks-style-and-formatting-guide/#formatting). However, the shortcode implementation is not ideal with the different locations the block editor handbook documentation is published (npm, GitHub). The recommended way to implement in markdown is to use the raw HTML and `callout callout-LEVEL` classes. For example: ```html - <div class="callout callout-info"> - This is an **info** callout. - </div> +<div class="callout callout-info">This is an **info** callout.</div> ``` The following classes are available: `info`, `tip`, `alert`, `warning` @@ -124,8 +137,7 @@ This is an **alert** callout. This is a **warning** callout. </div> - -### Editor Config +### Editor config You should configure your editor to use Prettier to auto-format markdown documents. See the [Getting Started documentation](/docs/contributors/code/getting-started-with-code-contribution.md) for complete details. @@ -144,6 +156,6 @@ An example config for using Visual Studio Code and the Prettier extensions: ## Resources -- [Copy Guidelines](/docs/contributors/copy-guide.md) for writing instructions, documentations, or other contributions to Gutenberg project. +- [Copy Guidelines](/docs/contributors/documentation/copy-guide.md) for writing instructions, documentations, or other contributions to Gutenberg project. - [Tone and Voice Guide](https://make.wordpress.org/docs/handbook/documentation-team-handbook/tone-and-voice-guide/) from WordPress Documentation. diff --git a/docs/contributors/documentation/how-to-guide-template.md b/docs/contributors/documentation/how-to-guide-template.md new file mode 100644 index 0000000000000..479219e5a95f1 --- /dev/null +++ b/docs/contributors/documentation/how-to-guide-template.md @@ -0,0 +1,56 @@ +# How to guide template + +## Overview + +A how to guide walks through a series of steps focused on completing a single task. The guide's goal is not on teaching concepts, but to answer the question "how do I ... ". + +The overview section summarizes the problem and can include context on how and where you might use the solution properly. + +## Before you start + +Include a section on assumptions and prerequisites: + +- Pre-requisite one: WordPress development environment +- Pre-requisite two: familiarity with JavaScript and Gutenberg +- Pre-requisite three: custom block or theme + +Include other important information here, such as known issues or bugs. + +## Step-by-step guide + +The guide should include step-by-step directions. Use code snippets, images, or screenshots to help illustrate each step. Include as many (or as few) steps as needed, try to keep each step short and easy to follow. + +### Step 1: Optional: title + +Brief instructions explaining the first step. + +### Step 2: Optional: title + +Lead-in sentence for an ordered list: + +1. Sub-step A +1. Sub-step B +1. Sub-step C + +### Step 3: Optional: title + +Lead-in sentence explaining the code snippet. For example: + +```shell +npm install +npm run build +``` + +## Troubleshooting + +- What can go wrong? +- What are potential error messages and what to do? + +## Conclusion + +Provide a summary of the steps completed and explain what the user has achieved. You can include links to related articles, more complex examples, or how to learn more on the topic. + +<!-- +This documentation is based on templates from The Good Docs Project. +This comment can be removed in your guide. +--> diff --git a/docs/contributors/folder-structure.md b/docs/contributors/folder-structure.md index d954bdb2f7dc7..9cee302794cda 100644 --- a/docs/contributors/folder-structure.md +++ b/docs/contributors/folder-structure.md @@ -15,6 +15,7 @@ The following snippet explains how the Gutenberg repository is structured omitti ├── .jshintignore ├── .eslintignore ├── .prettierrc.js + ├── .stylelintignore ├── .stylelintrc.json ├── .markdownlintignore ├── .npmpackagejsonlintrc.json @@ -58,7 +59,7 @@ The following snippet explains how the Gutenberg repository is structured omitti │ Demo post content used on the Gutenberg plugin to showcase the editor. │ ├── .github/* - │ Config of the different Github features (issues and PR templates, CI, owners). + │ Config of the different GitHub features (issues and PR templates, CI, owners). │ ├── bin/api-docs │ Tool/script used to generate the API Docs. diff --git a/docs/contributors/repository-management.md b/docs/contributors/repository-management.md index 5239ce3124b96..9bce2d06fd156 100644 --- a/docs/contributors/repository-management.md +++ b/docs/contributors/repository-management.md @@ -13,6 +13,7 @@ This document covers: - [Design Review](#design-review) - [Merging Pull Requests](#merging-pull-requests) - [Closing Pull Requests](#closing-pull-requests) + - [How To Get Your Pull Request Reviewed?](/docs/contributors/code/how-to-get-your-pull-request-reviewed.md) - [Projects](#projects) ## Issues @@ -103,6 +104,8 @@ Code reviews are encouraged by everyone who is willing to attempt one. If you re If you are not yet comfortable leaving a full review, try commenting on a PR. Questions about functionality or the reasoning behind a change are helpful too. You could also comment on changes to parts of the code you understand, without leaving a full review. +If you struggle with getting a review, see: [How To Get Your Pull Request Reviewed?](/docs/contributors/code/how-to-get-your-pull-request-reviewed.md) + ### Design Review If your pull request impacts the design/UI, you need to label appropriately to alert design. To request a design review, add the [Needs Design Feedback](https://github.com/WordPress/gutenberg/labels/Needs%20Design%20Feedback) label to your PR. If there are any PRs that require an update to the design/UI, please use the [Figma Library Update](https://github.com/WordPress/gutenberg/labels/Figma%20Library%20Update) label. @@ -123,7 +126,7 @@ A pull request can generally be merged once it is: - Vetted against all potential edge cases. - Changelog entries were properly added. - Reviewed by someone other than the original author. -- [Rebased](/docs/contributors/code/git-workflow.md#keeping-your-branch-up-to-date) onto the latest version of the master branch. +- [Rebased](/docs/contributors/code/git-workflow.md#keeping-your-branch-up-to-date) onto the latest version of the `trunk` branch. The final pull request merge decision is made by the **@wordpress/gutenberg-core** team. @@ -157,7 +160,7 @@ Two GitHub teams are used in the project. - [Gutenberg](https://github.com/orgs/WordPress/teams/gutenberg): A team composed of contributors with at least 2–3 meaningful contributions to the project. -If you meet this criteria of several meaningful contributions having been accepted into the repository and would like to be added to the Gutenberg team, feel free to ask in the [#core-editor Slack channel](https://make.wordpress.org/chat/). +If you meet this criterion of several meaningful contributions having been accepted into the repository and would like to be added to the Gutenberg team, feel free to ask in the [#core-editor Slack channel](https://make.wordpress.org/chat/). ## Projects diff --git a/docs/contributors/versions-in-wordpress.md b/docs/contributors/versions-in-wordpress.md index 404447ba9ef22..5f786844440c2 100644 --- a/docs/contributors/versions-in-wordpress.md +++ b/docs/contributors/versions-in-wordpress.md @@ -6,6 +6,14 @@ If anything looks incorrect here, please bring it up in #core-editor in [WordPre | Gutenberg Versions | WordPress Version | | ------------------ | ----------------- | +| 12.0-13.0 | 6.0 | +| 10.8-11.9 | 5.9.3 | +| 10.8-11.9 | 5.9.2 | +| 10.8-11.9 | 5.9.1 | +| 10.8-11.9 | 5.9 | +| 10.0-10.7 | 5.8.3 | +| 10.0-10.7 | 5.8.2 | +| 10.0-10.7 | 5.8.1 | | 10.0-10.7 | 5.8 | | 9.3-9.9 | 5.7.1 | | 9.3-9.9 | 5.7 | diff --git a/docs/explanations/architecture/assets/global-styles-input-output.excalidraw b/docs/explanations/architecture/assets/global-styles-input-output.excalidraw new file mode 100644 index 0000000000000..5257050084346 --- /dev/null +++ b/docs/explanations/architecture/assets/global-styles-input-output.excalidraw @@ -0,0 +1,922 @@ +{ + "type": "excalidraw", + "version": 2, + "source": "https://excalidraw.com", + "elements": [ + { + "type": "rectangle", + "version": 69, + "versionNonce": 1371893668, + "isDeleted": false, + "id": "dE1I-EnEvkRXGzhdq1JtQ", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 460, + "y": 200, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 180, + "height": 100, + "seed": 1590887460, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "whcfsZ0hp0-cjJAqlj0ob", + "type": "arrow" + }, + { + "id": "sL5M8MOmbWBPiIMWJPKAv", + "type": "arrow" + }, + { + "id": "iOHR_Txg1Rt_gfJPeXqZg", + "type": "arrow" + }, + { + "id": "yLz66yM1_qJAWngBli08H", + "type": "arrow" + } + ], + "updated": 1643633406183 + }, + { + "type": "text", + "version": 153, + "versionNonce": 670281809, + "isDeleted": false, + "id": "5rFvoYoEiSaqNhwmlPjxf", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 500, + "y": 220, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 106, + "height": 51, + "seed": 1103877284, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1643794034400, + "fontSize": 20, + "fontFamily": 1, + "text": "WordPress'\ntheme.json", + "baseline": 44, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "WordPress'\ntheme.json" + }, + { + "type": "rectangle", + "version": 61, + "versionNonce": 47826468, + "isDeleted": false, + "id": "otWLW4l8pmq6prNMU4yVj", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 700, + "y": 200, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 160, + "height": 100, + "seed": 1273608996, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "yLz66yM1_qJAWngBli08H", + "type": "arrow" + } + ], + "updated": 1643633405414 + }, + { + "type": "text", + "version": 128, + "versionNonce": 1069768604, + "isDeleted": false, + "id": "r1nDCG4qF6PJ6TXDA8D0W", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 720, + "y": 220, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 100, + "height": 51, + "seed": 217970972, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "yLz66yM1_qJAWngBli08H", + "type": "arrow" + } + ], + "updated": 1643633404909, + "fontSize": 20, + "fontFamily": 1, + "text": "theme's\ntheme.json", + "baseline": 44, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "theme's\ntheme.json" + }, + { + "type": "rectangle", + "version": 161, + "versionNonce": 516967708, + "isDeleted": false, + "id": "uyFiLHMSH6y7H-s3quAxV", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 920, + "y": 40, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 200, + "height": 80, + "seed": 412676132, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "rAP823QGa675R6VNN5_Fj", + "type": "arrow" + }, + { + "id": "zqYpQBYVH8MUQ1gbny0DW", + "type": "arrow" + }, + { + "id": "bZAzg4sYJCkziajbnNelc", + "type": "arrow" + }, + { + "id": "Gf8rkiJMUzlf_neDMa8Uo", + "type": "arrow" + } + ], + "updated": 1643633370772 + }, + { + "type": "text", + "version": 252, + "versionNonce": 788243108, + "isDeleted": false, + "id": "2fO2-BoHTfIU44g9j0n-S", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 940, + "y": 60, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 165, + "height": 51, + "seed": 231248924, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "Gf8rkiJMUzlf_neDMa8Uo", + "type": "arrow" + }, + { + "id": "RXAV87dIe7h-TdMpPkj8G", + "type": "arrow" + } + ], + "updated": 1643633370772, + "fontSize": 20, + "fontFamily": 1, + "text": "Global styles UI\nin site editor", + "baseline": 44, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Global styles UI\nin site editor" + }, + { + "type": "rectangle", + "version": 85, + "versionNonce": 1702175071, + "isDeleted": false, + "id": "hewO7U2_RQB8vdU_-mPPB", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 580, + "y": 660, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 340, + "height": 100, + "seed": 726898972, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "ccK0gnrFParTub-zbOTR2", + "type": "arrow" + }, + { + "id": "eP2wDSsiTc_n6dPEvV37C", + "type": "arrow" + } + ], + "updated": 1643794081747 + }, + { + "type": "text", + "version": 117, + "versionNonce": 581323025, + "isDeleted": false, + "id": "eU8Kg0BNmsuuDOweR3g88", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 660, + "y": 700, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 215, + "height": 26, + "seed": 404952740, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1643794068178, + "fontSize": 20, + "fontFamily": 1, + "text": "global-styles-inline-css", + "baseline": 18, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "global-styles-inline-css" + }, + { + "type": "text", + "version": 13, + "versionNonce": 1960935025, + "isDeleted": false, + "id": "CnDgoEZ_UKEJ24A9Y8p-H", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 597, + "y": 667, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 38, + "height": 26, + "seed": 2110409124, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1643794076348, + "fontSize": 20, + "fontFamily": 1, + "text": "CSS", + "baseline": 18, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "CSS" + }, + { + "type": "rectangle", + "version": 134, + "versionNonce": 827573105, + "isDeleted": false, + "id": "ymhNrWoCwMcy97bV3wcKR", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 480, + "y": 440, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 600.0000000000001, + "height": 60, + "seed": 856798492, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "rAP823QGa675R6VNN5_Fj", + "type": "arrow" + }, + { + "id": "zqYpQBYVH8MUQ1gbny0DW", + "type": "arrow" + }, + { + "id": "whcfsZ0hp0-cjJAqlj0ob", + "type": "arrow" + }, + { + "id": "bZAzg4sYJCkziajbnNelc", + "type": "arrow" + }, + { + "id": "sL5M8MOmbWBPiIMWJPKAv", + "type": "arrow" + }, + { + "id": "3BPPljmfDBwi9j0UFo72A", + "type": "arrow" + }, + { + "id": "iOHR_Txg1Rt_gfJPeXqZg", + "type": "arrow" + }, + { + "id": "Vb1dPpA_zGw4ibPc2H8XD", + "type": "arrow" + }, + { + "id": "4EUXGzEm8Fy3BBuebotFc", + "type": "arrow" + }, + { + "id": "celRUoUyUQIT-gGhAXyEK", + "type": "arrow" + }, + { + "id": "yLz66yM1_qJAWngBli08H", + "type": "arrow" + } + ], + "updated": 1643794050979 + }, + { + "type": "arrow", + "version": 761, + "versionNonce": 2121815743, + "isDeleted": false, + "id": "Vb1dPpA_zGw4ibPc2H8XD", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 779.6809331076444, + "y": 299.60856638674625, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 2.816506265121575, + "height": 132.78830939921954, + "seed": 1207657756, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1643794051290, + "startBinding": null, + "endBinding": { + "elementId": "ymhNrWoCwMcy97bV3wcKR", + "gap": 7.603124214034267, + "focus": 0.010960154267448993 + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 2.816506265121575, + 132.78830939921954 + ] + ] + }, + { + "type": "line", + "version": 116, + "versionNonce": 2071091108, + "isDeleted": false, + "id": "uIhYulJsyst7aUpzTX4go", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "dotted", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 340.5942201212048, + "y": 361.19947067946197, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 916.0579537755439, + "height": 0, + "seed": 1575735580, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1643633370772, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 916.0579537755439, + 0 + ] + ] + }, + { + "type": "text", + "version": 57, + "versionNonce": 1217366463, + "isDeleted": false, + "id": "siLfF4byWfGnkekw1DNmu", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "dotted", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 380, + "y": 40, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 68, + "height": 26, + "seed": 941782436, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1643794093388, + "fontSize": 20, + "fontFamily": 1, + "text": "INPUT", + "baseline": 18, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "INPUT" + }, + { + "type": "line", + "version": 155, + "versionNonce": 571458340, + "isDeleted": false, + "id": "2EOVSOSu-XvcXmsarGRNX", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "dotted", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 340.31421109884974, + "y": 599.7727356031537, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 916.0579537755439, + "height": 0, + "seed": 482945060, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1643633370772, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 916.0579537755439, + 0 + ] + ] + }, + { + "type": "text", + "version": 65, + "versionNonce": 438071580, + "isDeleted": false, + "id": "iqUBVRUA4jHj817dlF-oa", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "dotted", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 360, + "y": 640, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 89, + "height": 26, + "seed": 578631196, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1643633370772, + "fontSize": 20, + "fontFamily": 1, + "text": "OUTPUT", + "baseline": 18, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "OUTPUT" + }, + { + "type": "text", + "version": 160, + "versionNonce": 2029239972, + "isDeleted": false, + "id": "2Zb3N-iXP0MEwBqCay37k", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "dotted", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 520, + "y": 460, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 505, + "height": 26, + "seed": 934136228, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1643633370772, + "fontSize": 20, + "fontFamily": 1, + "text": "Internal Representation (WP_Theme_JSON object)", + "baseline": 18, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Internal Representation (WP_Theme_JSON object)" + }, + { + "type": "arrow", + "version": 694, + "versionNonce": 1024752273, + "isDeleted": false, + "id": "celRUoUyUQIT-gGhAXyEK", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 779.718628924312, + "y": 501, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 1.0791064091945373, + "height": 126.66251027234523, + "seed": 2100655268, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1643794051290, + "startBinding": { + "elementId": "ymhNrWoCwMcy97bV3wcKR", + "gap": 1, + "focus": 0.0018167083707156541 + }, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 1.0791064091945373, + 126.66251027234523 + ] + ] + }, + { + "type": "rectangle", + "version": 179, + "versionNonce": 1901269284, + "isDeleted": false, + "id": "4IJppZHOQRDTcVw-pjt1z", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 920, + "y": 200, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 180, + "height": 100, + "seed": 1157165980, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "rAP823QGa675R6VNN5_Fj", + "type": "arrow" + }, + { + "id": "zqYpQBYVH8MUQ1gbny0DW", + "type": "arrow" + }, + { + "id": "bZAzg4sYJCkziajbnNelc", + "type": "arrow" + }, + { + "id": "3BPPljmfDBwi9j0UFo72A", + "type": "arrow" + }, + { + "id": "4EUXGzEm8Fy3BBuebotFc", + "type": "arrow" + }, + { + "id": "Gf8rkiJMUzlf_neDMa8Uo", + "type": "arrow" + }, + { + "id": "RXAV87dIe7h-TdMpPkj8G", + "type": "arrow" + } + ], + "updated": 1643633370772 + }, + { + "type": "text", + "version": 289, + "versionNonce": 880880164, + "isDeleted": false, + "id": "CA1UwOP4UrmE6pla-3RZT", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 960, + "y": 220, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 100, + "height": 51, + "seed": 1509336100, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "RXAV87dIe7h-TdMpPkj8G", + "type": "arrow" + } + ], + "updated": 1643633398374, + "fontSize": 20, + "fontFamily": 1, + "text": "user's\ntheme.json", + "baseline": 44, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "user's\ntheme.json" + }, + { + "type": "text", + "version": 84, + "versionNonce": 773068836, + "isDeleted": false, + "id": "loyhrrk-dULHcklwEwSld", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "dotted", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 360, + "y": 380, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 118, + "height": 26, + "seed": 1415224092, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1643633370773, + "fontSize": 20, + "fontFamily": 1, + "text": "INTERNALS", + "baseline": 18, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "INTERNALS" + }, + { + "type": "arrow", + "version": 878, + "versionNonce": 400369375, + "isDeleted": false, + "id": "4EUXGzEm8Fy3BBuebotFc", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1020.5557521929989, + "y": 301, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 0.8847309846728422, + "height": 129, + "seed": 1086156700, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1643794051290, + "startBinding": { + "elementId": "4IJppZHOQRDTcVw-pjt1z", + "gap": 1, + "focus": -0.12071261013586085 + }, + "endBinding": { + "elementId": "ymhNrWoCwMcy97bV3wcKR", + "gap": 10.000000000000002, + "focus": 0.7974420373674143 + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + -0.8847309846728422, + 129 + ] + ] + }, + { + "type": "arrow", + "version": 20, + "versionNonce": 39323804, + "isDeleted": false, + "id": "RXAV87dIe7h-TdMpPkj8G", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1020.9070453807711, + "y": 120.28604858589358, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 0.9070453807711374, + "height": 59.71395141410642, + "seed": 748070564, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1643633370773, + "startBinding": { + "elementId": "2fO2-BoHTfIU44g9j0n-S", + "focus": 0.012843458210903786, + "gap": 9.286048585893582 + }, + "endBinding": { + "elementId": "4IJppZHOQRDTcVw-pjt1z", + "focus": 0.09846585725336464, + "gap": 20 + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + -0.9070453807711374, + 59.71395141410642 + ] + ] + }, + { + "type": "arrow", + "version": 897, + "versionNonce": 44630129, + "isDeleted": false, + "id": "yLz66yM1_qJAWngBli08H", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 540.1474954442242, + "y": 301, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 3.013965627388984, + "height": 131.59259259259267, + "seed": 1185633948, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1643794051290, + "startBinding": { + "elementId": "dE1I-EnEvkRXGzhdq1JtQ", + "gap": 1, + "focus": 0.1209125431173364 + }, + "endBinding": { + "elementId": "ymhNrWoCwMcy97bV3wcKR", + "gap": 7.407407407407392, + "focus": -0.7848083884682261 + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 3.013965627388984, + 131.59259259259267 + ] + ] + } + ], + "appState": { + "gridSize": 20, + "viewBackgroundColor": "#ffffff" + }, + "files": {} +} \ No newline at end of file diff --git a/docs/explanations/architecture/assets/global-styles-input-output.png b/docs/explanations/architecture/assets/global-styles-input-output.png new file mode 100644 index 0000000000000..ecfcdc6b8124d Binary files /dev/null and b/docs/explanations/architecture/assets/global-styles-input-output.png differ diff --git a/docs/explanations/architecture/full-site-editing-templates.md b/docs/explanations/architecture/full-site-editing-templates.md index dac115ef92ce8..76bc3a0f5861f 100644 --- a/docs/explanations/architecture/full-site-editing-templates.md +++ b/docs/explanations/architecture/full-site-editing-templates.md @@ -2,10 +2,6 @@ ## Template and template part flows -<div class="callout callout-alert"> -This is the documentation for the current implementation of the block templates and template parts themes. This is part of the Full Site Editing project. These features are still experimental in the plugin. “Experimental” means this is just an early implementation that is subject to potential drastic and breaking changes in iterations based on feedback from users, contributors, and theme authors. -</div> - This document will explain the internals of how templates and templates parts are rendered in the frontend and edited in the backend. For an introduction about block themes and Full site editing templates, refer to the [block theme documentation](/docs/how-to-guides/themes/block-theme-overview.md). ## Storage diff --git a/docs/explanations/architecture/key-concepts.md b/docs/explanations/architecture/key-concepts.md index 770d90462a7b2..fba75ab92f946 100644 --- a/docs/explanations/architecture/key-concepts.md +++ b/docs/explanations/architecture/key-concepts.md @@ -37,7 +37,7 @@ Given a block type, a block variation is a predefined set of its initial attribu **More on Blocks** - **[Block API](/docs/reference-guides/block-api/README.md)** -- **[Tutorial: Building A Custom Block](/docs/getting-started/tutorials/create-block/README.md)** +- **[Tutorial: Building A Custom Block](/docs/getting-started/create-block/README.md)** ## Reusable Blocks @@ -57,6 +57,8 @@ While the post editor concentrates on the content of a post, the [template](/doc Note: custom post types can also be initialized with a starting `post_content` template that should not be confused with the theme template system described above. -## Global Styles (in progress) +## Global Styles -Describes a set of configuration and default properties of blocks and their visual aspects. Global Styles is both an interface (which users access through the site editor) and a configuration system done through [a `theme.json` file](/docs/how-to-guides/themes/theme-json.md). This file absorbs most of the configuration aspects usually scattered through various `add_theme_support` calls to simplify communicating with the editor. It thus aims to improve declaring what settings should be enabled, what attributes are supported, what specific tools a theme offers (like a custom color palette), the available design tools present both globally and on each block, and an infrastructure that allows to enqueue only the relevant CSS based on what blocks are used on a page. +Global Styles is both an interface (which users access through the site editor) and a configuration system done through [a `theme.json` file](/docs/how-to-guides/themes/theme-json.md). This file absorbs most of the configuration aspects usually scattered through various `add_theme_support` calls to simplify communicating with the editor. It thus aims to improve declaring what settings should be enabled, what specific tools a theme offers (like a custom color palette), the available design tools present, and an infrastructure that allows to coordinate the styles coming from WordPress, the active theme, and the user. + +Learn more about [Global Styles](/docs/explanations/architecture/styles.md#global-styles). diff --git a/docs/explanations/architecture/performance.md b/docs/explanations/architecture/performance.md index bd6753b666422..004a105b4c65e 100644 --- a/docs/explanations/architecture/performance.md +++ b/docs/explanations/architecture/performance.md @@ -4,9 +4,9 @@ Performance is a key feature for editor applications and the Block editor is not ## Metrics -To ensure the block editor stays performant across releases and development, we monitor some key metrics using [performance testing](/docs/contributors/code/testing-overview.md#performance-testing). +To ensure the block editor stays performant across releases and development, we monitor some key metrics using [performance benchmark job](#the-performance-benchmark-job). -**Loading Time:** The time it takes to load an editor page. +**Loading Time:** The time it takes to load an editor page. This includes time the server takes to respond, times to first paint, first contentful paint, DOM content load complete, load complete and first block render. **Typing Time:** The time it takes for the browser to respond while typing on the editor. **Block Selection Time:** The time it takes for the browser to respond after a user selects block. (Inserting a block is also equivalent to selecting a block. Monitoring the selection is sufficient to cover both metrics). @@ -24,6 +24,44 @@ Rendering asynchronously in this context means that if a change is triggered in Based on the idea that **when editing a given block, it is very rare that an update to that block affects other parts of the content**, the block editor canvas only renders the selected block is synchronous mode, all the remaining blocks are rendered asynchronously. This ensures that the editor stays responsive as the post grows. +## The performance benchmark job + +A tool to compare performance accross multiple branches/tags/commits is provided. You can run it locally like so: `./bin/plugin/cli.js perf [branches]`, example: + +``` +./bin/plugin/cli.js perf trunk v8.1.0 v8.0.0 +``` + +To get the most accurate results, it's is important to use the exact same version of the tests and environment (theme...) when running the tests, the only thing that need to be different between the branches is the Gutenberg plugin version (or branch used to build the plugin). + +To achieve that the command first prepares the following folder structure: + + │ + ├── tests/packages/e2e-tests/specs/performance/* + | The actual performance tests to run + │ + ├── tests/test/emptytheme + | The theme used for the tests environment. (site editor) + │ + │── envs/branch1/.wp-env.json + │ The wp-env config file for branch1 (similar to all other branches except the plugin folder). + │── envs/branch1/plugin + │ A built clone of the Gutenberg plugin for branch1 (git checkout branch1) + │ + └── envs/branchX + The structure of perf-envs/branch1 is duplicated for all other branches. + +Once the directory above is in place, the performance command loop over the performance test suites (post editor and site editor) and does the following: + + 1- Start the environment for branch1 + 2- Run the performance test for the current suite + 3- Stop the environment for branch1 + 4- Repeat the first 3 steps for all other branches + 5- Repeat the previous 4 steps 3 times. + 6- Compute medians for all the performance metrics of the current suite. + +Once all the test suites are executed, a summary report is printed. + ## Going further - [Journey towards a performant editor](https://riad.blog/2020/02/14/a-journey-towards-a-performant-web-editor/) diff --git a/docs/explanations/architecture/styles.md b/docs/explanations/architecture/styles.md new file mode 100644 index 0000000000000..8f99eb345a941 --- /dev/null +++ b/docs/explanations/architecture/styles.md @@ -0,0 +1,457 @@ +## Styles in the block editor + +This document introduces the main concepts related to styles that affect the user content in the block editor. It points to the relevant reference guides and tutorials for readers to dig deeper into each one of the ideas presented. It's aimed to block authors and people working in the block editor project. + +1. HTML and CSS +2. Block styles + - From UI controls to HTML markup + - Block Supports API + - Current limits of the Block Supports API +3. Global styles + - Gather data + - Consolidate data + - From data to styles + - Current limits of the Global styles API + +### HTML and CSS + +By creating a post in the block editor the user is creating a number of artifacts: a HTML document plus a number of CSS stylesheets, either embedded in the document or external. + +The final HTML document is the result of a few things: + +- the [WordPress templates](https://developer.wordpress.org/themes/basics/template-files/) provided by the theme, either via PHP (classic theme) or via HTML templates (block theme) ([learn more](https://developer.wordpress.org/themes/block-themes/#differences-and-similarities-between-classic-themes-and-block-themes) about the differences) +- the [blocks](https://developer.wordpress.org/block-editor/reference-guides/core-blocks/) and patterns in use that come with a predefined structure (HTML markup) +- the user modifications to the content: adding content, transforming existing content (convert a given paragraph into a heading), or modifying it (attaching a class or inline styles to a block) + +The stylesheets loaded in the front end include: + +- **Blocks**. The stylesheets that come with the block. In the front end, you can find a single stylesheet with all block styles defined by WordPress (`wp-block-library-*` ) or separate stylesheets per block in use (as in `wp-block-group-*`, `wp-block-columns-*`, etc). See [this note](https://make.wordpress.org/core/2021/07/01/block-styles-loading-enhancements-in-wordpress-5-8/) for the full details. +- **Global styles**. These styles are generated on the fly by using data coming from a theme.json file: see [note](https://make.wordpress.org/core/2021/06/25/introducing-theme-json-in-wordpress-5-8/), [reference](https://developer.wordpress.org/block-editor/reference-guides/theme-json-reference/), and [how to guide](https://developer.wordpress.org/block-editor/how-to-guides/themes/theme-json/). Specifically, it merges the contents of the theme.json from WordPress, the theme.json from the theme (if it has one), and the user data provided via the global styles sidebar in the site editor. The result of processing this data is an embedded stylesheet whose id is `global-styles-inline-css`. +- **Theme**. Historically, themes have enqueued their own stylesheets, where the id is based on the theme name, as in `twentytwentytwo-style-css`. In addition to having their own stylesheets they can now declare a theme.json file containing styles that will be part of the stylesheet generated by global styles. +- **User**. Some of the user actions in the editor will generate style content. This is the case for features such as duotone, layout, or link color. +- **Other**. WordPress and plugins can also enqueue stylesheets. + +### Block styles + +Since the introduction of the block editor in WordPress 5.0, there were tools for the users to "add styles" to specific blocks. By using these tools, the user would attach new classes or inline styles to the blocks, modifying their visual aspect. + +By default, blocks come with a given HTML markup. Think of the paragraph block, for example: + +```html +<p></p> +``` + +In its simplest form, any style rule that targets the `p` selector will apply styles to this block, whether it comes from a block, a theme, etc. + +The user may change the state of this block by applying different styles: a text alignment, a color, a font size, a line height, etc. These states are reflected in the HTML markup of the block in the form of HTML attributes, mainly through the `class` or `style` attributes, though it can be any other the block author sees fit. + +After some user modifications to the block, the initial markup may become something like this: + +```html +<p + class="has-color has-green-color has-font-size has-small-font-size my-custom-class" + style="line-height: 1em" +></p> +``` + +This is what we refer to as "user-provided block styles", also know as "local styles" or "serialized styles". Essentially, each tool (font size, color, etc) ends up adding some classes and/or inline styles to the block markup. The CSS styling for these classes is part of the block, global, or theme stylesheets. + +The ability to modify a block state coupled with the fact that a block can live within any other block (think of a paragraph within a group), creates a vast amount of potential states and style possibilities. + +#### From UI controls to HTML markup + +If you follow the [block tutorial](https://developer.wordpress.org/block-editor/how-to-guides/block-tutorial/) you can learn up about the different parts of the [block API](https://developer.wordpress.org/block-editor/reference-guides/block-api/) presented here in more detail and also build your own block. This is an introduction to the general concepts of how a block can let users edit its state. + +To build an experience like the one described above a block author needs a few pieces: + +1. **A UI control**. It presents the user some choices, for example, to be able to change the font size of the block. The control takes care of reading the data from the block (does this block already have a font size assigned?) and other data it needs (what are the font sizes a user can use in this block?). See available [component library](https://developer.wordpress.org/block-editor/reference-guides/components/). +2. **A block attribute**. The block needs to hold data to know which modifications were applied to it: whether it has been given a font size already for example. See how blocks can define [attributes](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-attributes/). +3. **Access to style data**. A control may need external information about the styles available for a given block: the list of colors, or the list of font sizes, for example. These are called "style presets", as they are a preselection of styles usually defined by the theme, although WordPress provides some defaults. Check the [list of data](https://developer.wordpress.org/block-editor/reference-guides/theme-json-reference/theme-json-living/#settings) a theme can provide to the editor and how a block author can get access to it via [useSetting](https://developer.wordpress.org/block-editor/reference-guides/packages/packages-block-editor/#usesetting). +4. **Serialize the user style into HTML markup**. Upon a user action, the block HTML markup needs to be updated accordingly (apply the proper class or inline style). This process is called serialization and it is the [edit, save](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-edit-save/), and [render_callback](https://developer.wordpress.org/block-editor/how-to-guides/block-tutorial/creating-dynamic-blocks/) functions' responsibility: these functions take block data and convert it into HTML. + +In essence, these are the essential mechanics a block author needs to care about for their block to be able to be styled by the user. While this can be done completely manually, there's an API that automates this process for common style needs: block supports. + +#### Block Supports API + +[Block Supports](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-supports/) is an API that allows a block to declare what features it supports. By adding some info to their [block.json file](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-metadata/), the block tells the system what kind of actions a user can do to it. + +For example: + +```json +{ + "name": "core/paragraph", + "...": "...", + "supports": { + "typography": { + "fontSize": true + } + } +} +``` + +The paragraph declares support for font size in its `block.json`. This means the block will show a UI control for users to tweak its font size, unless it's disabled by the theme (learn more about how themes can disable UI controls in [the `theme.json` reference](https://developer.wordpress.org/block-editor/reference-guides/theme-json-reference/)). The system will also take care of setting up the UI control data (the font size of the block if it has one already assigned, the list of available font sizes to show), and will serialize the block data into HTML markup upon user changes (attach classes and inline styles appropriately). + +By using the block supports mechanism via `block.json`, the block author is able to create the same experience as before just by writing a couple of lines. Check the tutorials for adding block supports to [static](/docs/how-to-guides/block-tutorial/block-supports-in-static-blocks.md) and [dynamic](/docs/how-to-guides/block-tutorial/block-supports-in-dynamic-blocks.md) blocks. + +Besides the benefit of having to do less work to achieve the same results, there's a few other advantages: + +- the style information of the block becomes available for the native mobile apps and in the server +- the block will use the UI controls other blocks use for the same styles, creating a more coherent user experience +- the UI controls in use by the block will be automatically updated as they are improved, without the block author having to do anything + +#### Current limitations of the Block Supports API + +While the Block Supports API provides value, it also comes with some limitations a block author needs to be aware of. To better visualize what they are, let's run with the following example of a table block: + +```html +<table> + <thead><tr><th>Header</th></tr></thead> + <tbody> + <tr><th>First</th></tr> + <tr><th>Second</th></tr> + </tbody> + <tfoot> + <tr><th>Footer</th></tr> + </tfoot> +</table> +``` + +1. **Only one style type per block.** + +One of the limitations is that, from all the [styles available](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-supports/), there can be only one instance of any them in use by the block. Following the example, the table block can only have a single font size. If the block author wanted to have three different font sizes (head, body, and footer) it can't do it using the current block supports API. See [this issue](https://github.com/WordPress/gutenberg/issues/33255) for more detailed info and ways forward. + +2. **Styles are serialized to the outermost HTML node of the block, the wrapper.** + +The block supports API only serializes the font size value to the wrapper, resulting in the following HTML `<table class="has-small-font-size">` . The current block supports API doesn't serialize this value to a different node, for example, the `<tbody>`. + +This is an active area of work you can follow [in the tracking issue](https://github.com/WordPress/gutenberg/issues/38167). The linked proposal is exploring a different way to serialize the user changes: instead of each block support serializing its own data (for example, classes such as `has-small-font-size`, `has-green-color`) the idea is the block would get a single class instead (for example, `wp-style-UUID`) and the CSS styling for that class will be generated in the server by WordPress. + +While work continues in that proposal, there's an escape hatch, an experimental option block authors can use. Any block support can skip the serialization to HTML markup by using `__experimentalSkipSerialization`. For example: + +```json +{ + "name": "core/paragraph", + "...": "...", + "supports": { + "typography": { + "fontSize": true, + "__experimentalSkipSerialization": true + } + } +} +``` + +This means that the typography block support will do all of the things (create a UI control, bind the block attribute to the control, etc) except serializing the user values into the HTML markup. The classes and inline styles will not be automatically applied to the wrapper and it is the block author's responsibility to implement this in the `edit`, `save`, and `render_callback` functions. See [this issue](https://github.com/WordPress/gutenberg/issues/28913) for examples of how it was done for some blocks provided by WordPress. + +Note that, once `__experimentalSkipSerialization` is enabled for a group (typography, color, spacing) it affects all block supports within this group (font size, line height, and font family within typography, and so on). There's [ongoing work](https://github.com/WordPress/gutenberg/pull/36293) to be able to disable block supports individually, you can follow that issue to check the status. + +### Global styles + +Global Styles refers to a mechanism that generates site-wide styles. Unlike the block styles described in the previous section, these are not serialized into the post content and are not attached to the block HTML. Instead, the output of this system is a new stylesheet with id `global-styles-inline-css`. + +This mechanism was [introduced in WordPress 5.8](https://make.wordpress.org/core/2021/06/25/introducing-theme-json-in-wordpress-5-8/). At the time, it only took data from WordPress and the active theme. WordPress 5.9 expanded the system to also take style data from users. + +This is the general data flow: + +![Data flow of Global Styles](https://raw.githubusercontent.com/WordPress/gutenberg/HEAD/docs/explanations/architecture/assets/global-styles-input-output.png) + +The process of generating the stylesheet has, in essence, three steps: + +1. Gather data: the `theme.json` file [bundled with WordPress](https://github.com/WordPress/wordpress-develop/blob/trunk/src/wp-includes/theme.json), the `theme.json` file of the active theme if it exists, and the user's styles provided via the global styles UI in the site editor. +2. Consolidate data: the structured information from different origins -WordPress defaults, theme, and user- is normalized and merged into a single structure. +3. Convert data into a stylesheet: convert the internal representation into CSS style rules and enqueue them as a stylesheet. + +#### Gather data + +The data can come from three different origins: WordPress defaults, the active theme, or the user. All three of them use the same [`theme.json` format](https://developer.wordpress.org/block-editor/reference-guides/theme-json-reference/). + + Data from WordPress and the active theme is retrieved from the corresponding `theme.json` file. Data from the user is pulled from the database, where it's stored after the user saves the changes they did via the global styles sidebar in the site editor. + +#### Consolidate data + +The goal of this phase is to build a consolidated structure. + +There are two important processes going on in this phase. First, the system needs to normalize all the incoming data, as different origins may be using different versions of the `theme.json` format. For example, a theme may be using [v1](https://developer.wordpress.org/block-editor/reference-guides/theme-json-reference/theme-json-v1/) while the WordPress base is using [the latest version](https://developer.wordpress.org/block-editor/reference-guides/theme-json-reference/theme-json-living/). Second, the system needs to decide how to merge the input into a single structure. This will be the focus of the following sections. + +##### Styles + +Different parts of the incoming `theme.json` structure are treated differently. The data present in the `styles` section is blended together following this logic: user data overrides theme data, and theme data overrides WordPress data. + +For example, if we had the following three `theme.json` structures coming from WordPress, the theme, and the user respectively: + +```json +{ + "styles": { + "color": { + "background": "<WordPress value>" + }, + "typography": { + "fontSize": "<WordPress value>" + } + } +} +``` + +```json +{ + "styles": { + "typography": { + "fontSize": "<theme value>", + "lineHeight": "<theme value>" + } + } +} +``` + +```json +{ + "styles": { + "typography": { + "lineHeight": "<user value>" + } + } +} +``` + +The result after the consolidation would be: + +```json +{ + "styles": { + "color": { + "background": "<WordPress value>" + }, + "typography": { + "fontSize": "<theme value>", + "lineHeight": "<user value>" + } + } +} +``` + +##### Settings + +The `settings` section works differently than styles. Most of the settings are only used to configure the editor and have no effect on the global styles. Only a few of them are part of the resulting stylesheet: the presets. + +Presets are the predefined styles that are shown to the user in different parts of the UI: the color palette or the font sizes, for example. They comprise the following settings: `color.duotone`, `color.gradients`, `color.palette`, `typography.fontFamilies`, `typography.fontSizes`. Unlike `styles`, presets from an origin don't override values from other origins. Instead, all of them are stored in the consolidated structure. + +For example, if we have the following `theme.json` structures coming from WordPress, the theme, and the user respectively: + +```json +{ + "settings": { + "color": { + "palette": [ "<WordPress values>" ], + "gradients": [ "<WordPress values>" ] + } + } +} +``` + +```json +{ + "settings": { + "color": { + "palette": [ "<theme values>" ] + }, + "typography": { + "fontFamilies": [ "<theme values>" ] + } + } +} +``` + +```json +{ + "settings": { + "color": { + "palette": [ "<user values>" ] + } + } +} +``` + +The result after the consolidation would be: + +```json +{ + "settings": { + "color": { + "palette": { + "default": [ "<WordPress values>" ], + "theme": [ "<theme values>" ], + "user": [ "<user values>" ] + }, + "gradients": { + "default": [ "<WordPress values>" ] + } + }, + "typography": { + "fontFamilies": { + "theme": [ "<theme values>" ] + } + } + } +} +``` + +#### From data to styles + +The last phase of generating the stylesheet is converting the consolidated data into CSS style rules. + +##### Styles to CSS rules + +The `styles` section can be thought of as a structured representation of CSS rules, each chunk representing a CSS rule: + +- A key/value in theme.json maps to a CSS declaration (`property: value`). +- The CSS selector for a given chunk is generated based on its semantics: + - The top-level section uses the `body` selector. + - The top-level elements use an ID selector matching the HTML element they represent (for example, `h1` or `a`). + - Blocks use the default class name they generate (`core/group` becomes `.wp-block-group`) unless they explicitly set a different one using their `block.json` (`core/paragraph` becomes `p`). See the "Current limits" section for more about this. + - Elements within a block use the concatenation of the block and element selector. + +For example, the following `theme.json` structure: + +```json +{ + "styles": { + "typography": { + "fontSize": "<top-level value>" + }, + "elements": { + "h1": { + "typography": { + "fontSize": "<h1 value>" + } + } + }, + "blocks": { + "core/paragraph": { + "color": { + "text": "<paragraph value>" + } + }, + "core/group": { + "color": { + "text": "<group value>" + }, + "elements": { + "h1": { + "color": { + "text": "<h1 within group value>" + } + } + } + } + } + } +} +``` + +is converted to the following CSS: + +```css +body { + font-size: <top-level value>; +} +h1 { + font-size: <h1 value>; +} +p { + color: <paragraph value>; +} +.wp-block-group { + color: <group value>; +} +.wp-block-group h1 { + color: <h1 within group value>; +} +``` + +##### Settings to CSS rules + +From the `settings` section, all the values of any given presets will be converted to a CSS Custom Property that follows this naming structure: `--wp--preset--<category>-<slug>`. The selectors follow the same rules described in the styles section above. + +For example, the following theme.json + +```json +{ + "settings": { + "color": { + "palette": { + "default": [ + { "slug": "vivid-red", "value": "#cf2e2e", "name": "Vivid Red" } + ], + "theme": [ + { "slug": "foreground", "value": "#000", "name": "Foreground" } + ] + } + }, + "blocks": { + "core/site-title": { + "color": { + "palette": { + "theme": [ + { "slug": "foreground", "value": "#1a4548", "name": "Foreground" } + ] + } + } + } + } + } +} +``` + +Will be converted to the following CSS style rule: + +```CSS +body { + --wp--preset--color--vivid-red: #cf2e2e; + --wp--preset--color--foreground: #000; +} + +.wp-block-site-title { + --wp--preset--color--foreground: #1a4548; +} +``` + +In addition to the CSS Custom Properties, all presets but duotone generate CSS classes for each value. The example above will generate the following CSS classes as well: + +```CSS +/* vivid-red */ +.has-vivid-red-color { color: var(--wp--preset--color--vivid-red) !important; } +.has-vivid-red-background-color { background-color: var(--wp--preset--color--vivid-red) !important; } +.has-vivid-red-bordfer-color { border-color: var(--wp--preset--color--vivid-red) !important; } + +/* foreground */ +.has-foreground-color { color: var(--wp--preset--color--foreground) !important; } +.has-foreground-background-color { background-color: var(--wp--preset--color--foreground) !important; } +.has-foreground-border-color { border-color: var(--wp--preset--color--foreground) !important; } + +/* foreground within site title*/ +.wp-block-site-title .has-foreground-color { color: var(--wp--preset--color--foreground) !important; } +.wp-block-site-title .has-foreground-background-color { background-color: var(--wp--preset--color--foreground) !important; } +.wp-block-site-title .has-foreground-border-color { border-color: var(--wp--preset--color--foreground) !important; } +``` + +#### Current limitations of the Global Styles API + +1. **Setting a different CSS selector for blocks requires server-registration** + +By default, the selector assigned to a block is `.wp-block-<block-name>`. However, blocks can change this should they need. They can provide a CSS selector via the `__experimentalSelector` property in its `block.json`. + +If blocks do this, they need to be registered in the server using the `block.json`, otherwise, the global styles code doesn't have access to that information and will use the default CSS selector for the block. + +2. **Can't target different HTML nodes for different styles** + +Every chunk of styles can only use a single selector. + +This is particularly relevant if the block is using `__experimentalSkipSerialization` to serialize the different style properties to different nodes other than the wrapper. See "Current limitations of blocks supports" for more. + +3. **Only a single property per block** + +Similarly to block supports, there can be only one instance of any style in use by the block. For example, the block can only have a single font size. See related "Current limitations of block supports". + +4. **Only blocks using block supports are shown in the Global Styles UI** + +The global styles UI in the site editor has a screen for per-block styles. The list of blocks is generated dynamically using the block supports from the `block.json` of blocks. If a block wants to be listed there, it needs to use the block supports mechanism. diff --git a/docs/getting-started/faq.md b/docs/explanations/faq.md similarity index 84% rename from docs/getting-started/faq.md rename to docs/explanations/faq.md index 4273c0cd775b7..b1eb22b330964 100644 --- a/docs/getting-started/faq.md +++ b/docs/explanations/faq.md @@ -2,8 +2,61 @@ What follows is a set of questions that have come up from the last few years of Gutenberg development. If you have any questions you’d like to have answered and included here, [just open up a GitHub issue](https://github.com/WordPress/gutenberg/issues) with your question. We’d love the chance to answer and provide clarity to questions we might not have thought to answer. For a look back historically, please see Matt's November 2018 post [WordPress 5.0: A Gutenberg FAQ](https://ma.tt/2018/11/a-gutenberg-faq/). + +## Table of Contents + +### The Gutenberg Project +- [What is Gutenberg?](#what-is-gutenberg) +- [What’s on the roadmap long term?](#whats-on-the-roadmap-long-term) +- [When was Gutenberg started?](#when-was-gutenberg-started) +- [When was Gutenberg merged into WordPress?](#when-was-gutenberg-merged-into-wordpress) +- [WordPress is already the world's most popular publishing platform. Why change the editor at all?](#wordpress-is-already-the-worlds-most-popular-publishing-platform-why-change-the-editor-at-all) + + +### The Editing Experience +- [What are “blocks” and why are we using them?](#what-are-blocks-and-why-are-we-using-them) +- [What is the writing experience like?](#what-is-the-writing-experience-like) +- [Is Gutenberg built on top of TinyMCE?](#is-gutenberg-built-on-top-of-tinymce) +- [Are there Keyboard Shortcuts for Gutenberg?](#are-there-keyboard-shortcuts-for-gutenberg) + * [Editor shortcuts](#editor-shortcuts) + * [Selection shortcuts](#selection-shortcuts) + * [Block shortcuts](#block-shortcuts) + * [Text formatting](#text-formatting) +- [Does Gutenberg support columns?](#does-gutenberg-support-columns) +- [Does Gutenberg support nested blocks?](#does-gutenberg-support-nested-blocks) +- [Does drag and drop work for rearranging blocks?](#does-drag-and-drop-work-for-rearranging-blocks) + +### The Development Experience +- [How do I make my own block?](#how-do-i-make-my-own-block) +- [Does Gutenberg involve editing posts/pages in the front-end?](#does-gutenberg-involve-editing-postspages-in-the-front-end) +- [Given Gutenberg is built in JavaScript, how do old meta boxes (PHP) work?](#given-gutenberg-is-built-in-javascript-how-do-old-meta-boxes-php-work) +- [How can plugins extend the Gutenberg UI?](#how-can-plugins-extend-the-gutenberg-ui) +- [Are Custom Post Types still supported?](#are-custom-post-types-still-supported) + +### Styles +- [Can themes _style_ blocks?](#can-themes-_style_-blocks) +- [How do block styles work in both the front-end and back-end?](#how-do-block-styles-work-in-both-the-front-end-and-back-end) +- [What are block variations? Are they the same as block styles?](#what-are-block-variations-are-they-the-same-as-block-styles) +- [How do editor styles work?](#how-do-editor-styles-work) + +### Compatibility +- [What browsers does Gutenberg support?](#what-browsers-does-gutenberg-support) +- [Should I be concerned that Gutenberg will make my plugin obsolete?](#should-i-be-concerned-that-gutenberg-will-make-my-plugin-obsolete) +- [Is it possible to opt out of Gutenberg for my site?](#is-it-possible-to-opt-out-of-gutenberg-for-my-site) +- [How do custom TinyMCE buttons work in Gutenberg?](#how-do-custom-tinymce-buttons-work-in-gutenberg) +- [How do shortcodes work in Gutenberg?](#how-do-shortcodes-work-in-gutenberg) +- [Should I move shortcodes to content blocks?](#should-i-move-shortcodes-to-content-blocks) + +### Miscellaneous +- [Is Gutenberg made to be properly accessible?](#is-gutenberg-made-to-be-properly-accessible) +- [How is data stored? I've seen HTML comments, what is their purpose?](#how-is-data-stored-ive-seen-html-comments-what-is-their-purpose) +- [How can I parse the post content back out into blocks in PHP or JS?](#how-can-i-parse-the-post-content-back-out-into-blocks-in-php-or-js) + +---- + ## What is Gutenberg? + “Gutenberg” is the name of the project to create a new editor experience for WordPress — contributors have been working on it since January 2017 and it’s one of the most significant changes to WordPress in years. It’s built on the idea of using “blocks” to write and design posts and pages. This will serve as the foundation for future improvements to WordPress, including blocks as a way not just to design posts and pages, but also entire sites. The overall goal is to simplify the first-time user experience of WordPress — for those who are writing, editing, publishing, and designing web pages. The editing experience is intended to give users a better visual representation of what their post or page will look like when they hit publish. Originally, this was the kickoff goal: > The editor will endeavour to create a new page and post building experience that makes writing rich posts effortless, and has “blocks” to make it easy what today might take shortcodes, custom HTML, or “mystery meat” embed discovery. @@ -33,6 +86,10 @@ The editor focus started in early 2017 with the first three months spent designi Gutenberg was first merged into [WordPress 5.0](https://wordpress.org/news/2018/12/bebo/) in December 2018. See [the versions in WordPress page](https://developer.wordpress.org/block-editor/principles/versions-in-wordpress/) for a complete list of Gutenberg plugin versions merged into WordPress core releases. +## WordPress is already the world's most popular publishing platform. Why change the editor at all? + +The Editor is where most of the action happens in WordPress’s daily use, and it was a place where we could polish and perfect the block experience in a contained environment. Further, as an open-source project, we believe that it is critical for WordPress to continue to innovate and keep working to make the core experience intuitive and enjoyable for all users. As a community project, Gutenberg has the potential to do just that, and we’re excited to pursue this goal together. If you’d like to test, contribute, or offer feedback, we welcome you to [share what you find on GitHub](https://github.com/WordPress/gutenberg/issues). + ## What are “blocks” and why are we using them? The classic WordPress editor is an open text window—it’s always been a wonderful blank canvas for writing, but when it comes to building posts and pages with images, multimedia, embedded content from social media, polls, and other elements, it required a mix of different approaches that were not always intuitive: @@ -50,6 +107,10 @@ As we thought about these uses and how to make them obvious and consistent, we b Our goal with Gutenberg is not just to create a seamless post- and page-building experience. We also want to ensure that it provides a seamless writing experience. To test this out yourself, [head to this demo and give it a try](https://wordpress.org/gutenberg/)! +## Is Gutenberg built on top of TinyMCE? + +No. [TinyMCE](https://www.tinymce.com/) is only used for the "Classic" block. + ## Are there Keyboard Shortcuts for Gutenberg? Yes. There are a lot! There is a help modal showing all available keyboard shortcuts. @@ -131,7 +192,7 @@ This is the canonical list of keyboard shortcuts: </tr> <tr> <td>Toggle fullscreen mode.</td> - <td><kbd>CMD</kbd>+<kbd>Option</kbd>+<kbd>Shift</kbd>+<kbd>F</kbd></td> + <td><kbd>Ctrl</kbd>+<kbd>Alt</kbd>+<kbd>Shift</kbd>+<kbd>F</kbd></td> <td><kbd>⇧</kbd><kbd>⌥</kbd><kbd>⌘</kbd><kbd>F</kbd></td> </tr> </tbody> @@ -268,19 +329,22 @@ Here is a brief animation illustrating how to find and use the keyboard shortcut ![GIF showing how to access keyboard shortcuts](https://make.wordpress.org/core/files/2020/07/keyboard-shortcuts.gif) -## Is Gutenberg built on top of TinyMCE? +## Does Gutenberg support columns? -No. [TinyMCE](https://www.tinymce.com/) is only used for the "Classic" block. +Yes, a columns block is available in Gutenberg. -## What browsers does Gutenberg support? +## Does Gutenberg support nested blocks? -Gutenberg works in modern browsers, and Internet Explorer 11. +Yes, it is supported. You can have multiple levels of nesting – blocks within blocks within blocks. See the [Nested Block Tutorial](https://developer.wordpress.org/block-editor/tutorials/block-tutorial/nested-blocks-inner-blocks/) for more information. + +## Does drag and drop work for rearranging blocks? + +Yes, you can drag and drop blocks to rearrange their order. -Our [list of supported browsers can be found in the Make WordPress handbook](https://make.wordpress.org/core/handbook/best-practices/browser-support/). By “modern browsers” we generally mean the _current and past two versions_ of each major browser. ## How do I make my own block? -The best place to start is the [Create a Block Tutorial](https://developer.wordpress.org/block-editor/tutorials/create-block/). +The best place to start is the [Create a Block Tutorial](https://developer.wordpress.org/block-editor/getting-started/create-block/). ## Does Gutenberg involve editing posts/pages in the front-end? @@ -288,11 +352,11 @@ No, we are designing Gutenberg primarily as a replacement for the post and page ## Given Gutenberg is built in JavaScript, how do old meta boxes (PHP) work? -See the [Meta Box Tutorial](https://developer.wordpress.org/block-editor/tutorials/metabox/) for more information on using Meta boxes with the new block editor. +See the [Meta Box Tutorial](https://developer.wordpress.org/block-editor/how-to-guides/metabox/) for more information on using Meta boxes with the new block editor. ## How can plugins extend the Gutenberg UI? -The main extension point we want to emphasize is creating new blocks. Blocks are added to the block editor using plugins, see the [Create a Block Tutorial](https://developer.wordpress.org/block-editor/tutorials/create-block/) to get started. +The main extension point we want to emphasize is creating new blocks. Blocks are added to the block editor using plugins, see the [Create a Block Tutorial](https://developer.wordpress.org/block-editor/getting-stared/create-block/) to get started. ## Are Custom Post Types still supported? @@ -304,12 +368,13 @@ Yes, a columns block is available in Gutenberg. ## Does Gutenberg support nested blocks? -Yes, it is supported. You can have multiple levels of nesting – blocks within blocks within blocks. See the [Nested Block Tutorial](https://developer.wordpress.org/block-editor/tutorials/block-tutorial/nested-blocks-inner-blocks/) for more information. +Yes, it is supported. You can have multiple levels of nesting – blocks within blocks within blocks. See the [Nested Block Tutorial](/docs/how-to-guides/block-tutorial/nested-blocks-inner-blocks.md) for more information. ## Does drag and drop work for rearranging blocks? Yes, you can drag and drop blocks to rearrange their order. + ## Can themes _style_ blocks? Yes. Blocks can provide their own styles, which themes can add to or override, or they can provide no styles at all and rely fully on what the theme provides. @@ -341,6 +406,12 @@ add_action( 'enqueue_block_editor_assets', 'gutenbergtheme_editor_styles' ); _See:_ [Editor Styles](/docs/how-to-guides/themes/theme-support.md#editor-styles) +## What browsers does Gutenberg support? + +Gutenberg works in modern browsers, and Internet Explorer 11. + +Our [list of supported browsers can be found in the Make WordPress handbook](https://make.wordpress.org/core/handbook/best-practices/browser-support/). By “modern browsers” we generally mean the _current and past two versions_ of each major browser. + ## Should I be concerned that Gutenberg will make my plugin obsolete? The goal of Gutenberg is not to put anyone out of business. It's to evolve WordPress so there's more business to be had in the future, for everyone. @@ -405,6 +476,4 @@ In PHP: $blocks = parse_blocks( $post_content ); ``` -## WordPress is already the world's most popular publishing platform. Why change the editor at all? -The Editor is where most of the action happens in WordPress’s daily use, and it was a place where we could polish and perfect the block experience in a contained environment. Further, as an open-source project, we believe that it is critical for WordPress to continue to innovate and keep working to make the core experience intuitive and enjoyable for all users. As a community project, Gutenberg has the potential to do just that, and we’re excited to pursue this goal together. If you’d like to test, contribute, or offer feedback, we welcome you to [share what you find on GitHub](https://github.com/WordPress/gutenberg/issues). diff --git a/docs/explanations/glossary.md b/docs/explanations/glossary.md new file mode 100644 index 0000000000000..bff8925e4619e --- /dev/null +++ b/docs/explanations/glossary.md @@ -0,0 +1,139 @@ +# Glossary + +## Attribute sources + +An object describing the attributes shape of a block. The keys can be named as most appropriate to describe the state of a block type. The value for each key is a function which describes the strategy by which the attribute value should be extracted from the content of a saved post's content. When processed, a new object is created, taking the form of the keys defined in the attribute sources, where each value is the result of the attribute source function. + +## Attributes + +The object representation of the current state of a block in post content. When loading a saved post, this is determined by the attribute sources for the block type. These values can change over time during an editing session when the user modifies a block, and are used when determining how to serialize the block. + +## Block + +The abstract term used to describe units of markup that, composed together, form the content or layout of a webpage. The idea combines concepts of what in WordPress today we achieve with shortcodes, custom HTML, and embed discovery into a single consistent API and user experience. + +## Block Styles + +The CSS styles that are part of the block, either via its stylesheet or via the block markup itself. For example, a class attached to the block markup is considered block styles. + +Compare to <a href="#global-styles">Global Styles</a>. In contraposition to Global Styles, block styles are sometimes referred to as <a href="#local-styles">Local Styles</a>. + +Learn more about [Block Styles](/docs/explanations/architecture/styles.md#block-styles). + +## Block Supports + +An API for blocks to declare what features they support. By declaring support for a feature, the API would add additional <a href="#attributes">attributes</a> to the block and matching UI controls for most of the existing block supports. + +See <a href="https://developer.wordpress.org/block-editor/reference-guides/block-api/block-supports/">Block Supports reference documentation</a> for a deep dive into the API. + +## Block Theme + +A theme built in block forward way that allows Full Site Editing to work. The core of a block theme are its block templates and block template parts. To date, block theme templates have been HTML files of block markup that map to templates from the standard WordPress template hierarchy. + +## Block categories + +These are not a WordPress taxonomy, but instead used internally to sort blocks in the Block Library. + +## Block ~Inserter~ Library + +Primary interface for selecting from the available blocks, triggered by plus icon buttons on Blocks or in the top-left of the editor interface. + +## Block name + +A unique identifier for a block type, consisting of a plugin-specific namespace and a short label describing the block's intent. e.g. <code>core/image</code> + +## Block Templates + +A template is a pre-defined arrangement of blocks, possibly with predefined attributes or placeholder content. You can provide a template for a post type, to give users a starting point when creating a new piece of content, or inside a custom block with the <code>InnerBlocks</code> component. At their core, templates are simply HTML files of block markup that map to templates from the standard WordPress template hierarchy, for example index, single or archive. This helps control the front-end defaults of a site that are not edited via the Page Editor or the Post Editor. See the <a href="../../developers/block-api/block-templates/">templates documentation</a> for more information. + +## Block Template Parts + +Building on Block Templates, these parts help set structure for reusable items like a Footer or Header that one typically sees in a WordPress site. They are primarily site structure and are never to be mixed with the post content editor. With Full Site Editing and block based themes, users can create their own arbitrary Template Parts, save those in the database for their site, and re-use them throughout their site. Template parts are equivalent – in blocks – of theme template parts. They are generally defined by a theme first, carry some semantic meaning (could be swapped between themes such as a header), and can only be inserted in the site editor context (within “templates”). + +## Block type + +In contrast with the blocks composing a particular post, a block type describes the blueprint by which any block of that type should behave. So while there may be many images within a post, each behaves consistent with a unified image block type definition. + +## Classic block + +A block which embeds the TinyMCE editor as a block, TinyMCE was the base of the previous core editor. Older content created prior to the block editor will be loaded in to a single Classic block. + +## Dynamic block + +A type of block where the content of which may change and cannot be determined at the time of saving a post, instead calculated any time the post is shown on the front of a site. These blocks may save fallback content or no content at all in their JavaScript implementation, instead deferring to a PHP block implementation for runtime rendering. + +## Full Site Editing + +This refers to a collection of features that ultimately allows users to edit their entire website using blocks as the starting point. This feature set includes everything from block patterns to global styles to templates to design tools for blocks (and more). First released in WordPress 5.9. + +## Global Styles + +The CSS styles generated by WordPress and enqueued as an embedded stylesheet in the front end of the site. The stylesheet ID is `global-styles-inline-css`. The contents of this stylesheet come from the default `theme.json` of WordPress, the theme's `theme.json`, and the styles provided by the user via the global styles sidebar in the site editor. + +See [theme.json reference docs](/docs/reference-guides/theme-json-reference.md)</a>, the [how to guide](/docs/how-to-guides/themes/theme-json.md), and an introduction to [styles in the block editor](/docs/explanations/architecture/styles.md). + +Compare to <a href="#block-styles">block styles</a>. + +## Inspector + +Deprecated term. See <a href="#settings-sidebar">Settings Sidebar.</a> + +## Local Styles + +See <a href="#block-styles">Block Styles</a>. + +## Navigation Block + +A block that allows you to edit a site's navigation menu, both in terms of structure and design.</a> + +## Patterns + +Patterns are predefined layouts of blocks that can be inserted as starter content that are meant to be changed by the user every time. Once inserted, they exist as a local save and are not global. + +## Post settings + +A sidebar region containing metadata fields for the post, including scheduling, visibility, terms, and featured image. + +## Query Block + +A block that replicates the classic WP_Query and allows for further customization with additional functionality. + +## Reusable block + +A block that is saved and then can be shared as a reusable, repeatable piece of content. + +## RichText + +A common component enabling rich content editing including bold, italics, hyperlinks, etc. + +## Serialization + +The process of converting a block's attributes object into HTML markup, which occurs each time a block is edited. + +## Settings Sidebar + +The panel on the right that contains the document and block settings. The sidebar is toggled using the Settings gear icon. Block settings are shown when a block is selected, otherwise document settings are shown. + +## Site Editor + +The cohesive experience that allows you to directly edit and navigate between various templates, template parts, styling options, and more. + +## Static block + +A type of block where the content of which is known at the time of saving a post. A static block will be saved with HTML markup directly in post content. + +## Template Editing Mode + +A scaled down direct editing experience allowing you to edit/change/create the template a post/page uses. + +## Theme Blocks + +Blocks that accomplish everything possible in traditional templates using template tags (ex: Post Author Block). A full list can be found [here](https://github.com/WordPress/gutenberg/issues/22724). + +## TinyMCE + +<a href="https://www.tinymce.com/">TinyMCE</a> is a web-based JavaScript WYSIWYG (What You See Is What You Get) editor. + +## Toolbar + +A set of button controls. In the context of a block, usually referring to the toolbar of block controls shown above the selected block. diff --git a/docs/getting-started/history.md b/docs/explanations/history.md similarity index 89% rename from docs/getting-started/history.md rename to docs/explanations/history.md index 25e596e9fe946..db2b7518bd896 100644 --- a/docs/getting-started/history.md +++ b/docs/explanations/history.md @@ -1,5 +1,7 @@ # History +A set of links and resources covering the history of the Gutenberg project, how it got started, sources of inspiration, and initial thinking. + ## Survey There was a survey done: [https://make.wordpress.org/core/2017/04/07/editor-experience-survey-results/](https://make.wordpress.org/core/2017/04/07/editor-experience-survey-results/) diff --git a/docs/how-to-guides/designers/user-interface.md b/docs/explanations/user-interface/README.md similarity index 100% rename from docs/how-to-guides/designers/user-interface.md rename to docs/explanations/user-interface/README.md diff --git a/docs/how-to-guides/designers/animation.md b/docs/explanations/user-interface/animation.md similarity index 100% rename from docs/how-to-guides/designers/animation.md rename to docs/explanations/user-interface/animation.md diff --git a/docs/how-to-guides/designers/block-design.md b/docs/explanations/user-interface/block-design.md similarity index 89% rename from docs/how-to-guides/designers/block-design.md rename to docs/explanations/user-interface/block-design.md index 2a71b611b9427..5df99b5398867 100644 --- a/docs/how-to-guides/designers/block-design.md +++ b/docs/explanations/user-interface/block-design.md @@ -76,11 +76,11 @@ When referring to a block in documentation or UI, use title case for the block t Blocks should have an identifying icon, ideally using a single color. Try to avoid using the same icon used by an existing block. The core block icons are based on [Material Design Icons](https://material.io/tools/icons/). Look to that icon set, or to [Dashicons](https://developer.wordpress.org/resource/dashicons/) for style inspiration. -![A screenshot of the block library with concise block names](https://raw.githubusercontent.com/WordPress/gutenberg/HEAD/docs/how-to-guides/designers/assets/blocks-do.png) +![A screenshot of the block library with concise block names](https://developer.wordpress.org/files/2022/01/blocks-do.png) **Do:** Use concise block names. -![A screenshot of the block library with long, multi-line block names](https://raw.githubusercontent.com/WordPress/gutenberg/HEAD/docs/how-to-guides/designers/assets/blocks-dont.png) +![A screenshot of the block library with long, multi-line block names](https://developer.wordpress.org/files/2022/01/blocks-dont.png) **Don't:** Avoid long, multi-line block names. @@ -92,15 +92,15 @@ You can add a description by using the description attribute in the [registerBlo Stick to a single imperative sentence with an action + subject format. Examples: -- Start with the building block of all narrative. +- Start with the basic building block of all narrative. - Introduce new sections and organize content to help visitors (and search engines) understand the structure of your content. - Create a bulleted or numbered list. -![A screenshot of a short block description](https://raw.githubusercontent.com/WordPress/gutenberg/HEAD/docs/how-to-guides/designers/assets/block-descriptions-do.png) +![A screenshot of a short block description](https://developer.wordpress.org/files/2022/01/block-descriptions-do.png) **Do:** Use a short, simple block description. -![A screenshot of a long block description that includes branding](https://raw.githubusercontent.com/WordPress/gutenberg/HEAD/docs/how-to-guides/designers/assets/block-descriptions-dont.png) +![A screenshot of a long block description that includes branding](https://developer.wordpress.org/files/2022/01/block-descriptions-dont.png) **Don't:** Avoid long descriptions and branding. @@ -108,11 +108,11 @@ Avoid long descriptions and branding. If your block requires a user to configure some options before you can display it, you should provide an instructive placeholder state. -![A screenshot of the Gallery block's placeholder](https://raw.githubusercontent.com/WordPress/gutenberg/HEAD/docs/how-to-guides/designers/assets/placeholder-do.png) +![A screenshot of the Gallery block's placeholder](https://developer.wordpress.org/files/2022/01/placeholder-do.png) **Do:** Provide an instructive placeholder state. -![An example Gallery block placeholder but with intense, distracting colors and no instructions](https://raw.githubusercontent.com/WordPress/gutenberg/HEAD/docs/how-to-guides/designers/assets/placeholder-dont.png) +![An example Gallery block placeholder but with intense, distracting colors and no instructions](https://developer.wordpress.org/files/2022/01/placeholder-dont.png) **Don't:** Avoid branding and relying on the title alone to convey instructions. @@ -122,11 +122,11 @@ When unselected, your block should preview its content as closely to the front-e When selected, your block may surface additional options like input fields or buttons to configure the block directly, especially when they are necessary for basic operation. -![A Google Maps block with inline, always-accessible controls required for the block to function](https://raw.githubusercontent.com/WordPress/gutenberg/HEAD/docs/how-to-guides/designers/assets/block-controls-do.png) +![A Google Maps block with inline, always-accessible controls required for the block to function](https://developer.wordpress.org/files/2022/01/block-controls-do.png) **Do:** For controls that are essential for the operation of the block, provide them directly inside the block edit view. -![A Google Maps block with essential controls moved to the sidebar where they can be contextually hidden](https://raw.githubusercontent.com/WordPress/gutenberg/HEAD/docs/how-to-guides/designers/assets/block-controls-dont.png) +![A Google Maps block with essential controls moved to the sidebar where they can be contextually hidden](https://developer.wordpress.org/files/2022/01/block-controls-dont.png) **Don't:** Do not put controls that are essential to the block in the sidebar, otherwise the block will appear non-functional to mobile users or desktop users who have dismissed the sidebar. @@ -134,7 +134,7 @@ Do not put controls that are essential to the block in the sidebar, otherwise th The “Block” tab of the Settings Sidebar can contain additional block options and configuration. Keep in mind that a user can dismiss the sidebar and never use it. You should not put critical options in the Sidebar. -![A screenshot of the Paragraph block's advanced settings in the sidebar](https://raw.githubusercontent.com/WordPress/gutenberg/HEAD/docs/how-to-guides/designers/assets/advanced-settings-do.png) +![A screenshot of the Paragraph block's advanced settings in the sidebar](https://developer.wordpress.org/files/2022/01/advanced-settings-do.png) **Do:** Because the Drop Cap feature is not necessary for the basic operation of the block, you can put it to the Block tab as optional configuration. diff --git a/docs/how-to-guides/designers/design-resources.md b/docs/explanations/user-interface/design-resources.md similarity index 100% rename from docs/how-to-guides/designers/design-resources.md rename to docs/explanations/user-interface/design-resources.md diff --git a/docs/getting-started/README.md b/docs/getting-started/README.md index e3b8b1dc274e7..9c32f67239cc5 100644 --- a/docs/getting-started/README.md +++ b/docs/getting-started/README.md @@ -1,14 +1,60 @@ # Getting Started -## [Tutorials](/docs/getting-started/tutorials/README.md) +Welcome! Let's get started building with blocks. Blocks are at the core of extending WordPress. You can create custom blocks, your own block patterns, or combine them together to build a block theme. At a high level, here are a few ways to begin your journey but read on to explore more: -- [Development Environment](/docs/getting-started/tutorials/devenv/README.md) -- [Create a Block Tutorial](/docs/getting-started/tutorials/create-block/README.md) +- Learn more about where this work is going by [reviewing the long term roadmap](https://wordpress.org/about/roadmap/). +- Explore the [GitHub repo](https://github.com/WordPress/gutenberg/) to see the latest issues and PRs folks are working on, especially [Good First Issues](https://github.com/WordPress/gutenberg/issues?q=is%3Aopen+is%3Aissue+label%3A%22Good+First+Issue%22). +- Join the [Slack community](https://make.wordpress.org/chat/) to join meetings, ongoing conversations, and more. +- Take courses on how to use the block editor and more on [Learn WordPress](https://learn.wordpress.org/). +- Expand your knowledge by reviewing more developer docs at the overall [developer.wordpress.org resource](https://developer.wordpress.org/). +- Subscribe to [updates on Make Core](https://make.wordpress.org/core/), the main site where ongoing project updates happen. -## [Glossary](/docs/getting-started/glossary.md) +## Tutorials -## [FAQ](/docs/getting-started/faq.md) +[Development Environment](/docs/getting-started/devenv/README.md) - A guide to setup your local environment for JavaScript development for creating plugins, themes, and the tools you will need to extend WordPress or contribute to the block editor. -## [History](/docs/getting-started/history.md) +[Create a Block Tutorial](/docs/getting-started/create-block/README.md) - Learn how to create your first block for the WordPress block editor. -## [Outreach](/docs/getting-started/outreach.md) +[Full Site Editing](/docs/getting-started/full-site-editing.md) - Full Site Editing (FSE) is an umbrella project name for the collection of features that bring the experience and extendability of blocks to all parts of your site—from settings and styles, to templates and themes, and more. + +- Learn [about using theme.json](/docs/how-to-guides/themes/theme-json.md) to define settings and styles for your theme. + +- [Create a Block Theme](/docs/how-to-guides/themes/create-block-theme.md) - Learn how block themes use blocks to build templates and the theme.json to provide styles. +- [Convert as Classic Theme to a Block Theme](https://developer.wordpress.org/themes/block-themes/converting-a-classic-theme-to-a-block-theme/) - Learn how to adopt various pieces of full site editing in your classic theme. + +## Ways to Stay Informed + +New features and changes are important to keep up to date on as the Gutenberg project continues. Each person will have their own unique needs in keeping up with a project of this scale. What follows is more of a catalogue of ways to keep up rather than a recommendation for how to do so. + +**Yearly:** + +The [WordPress.org Roadmap](https://wordpress.org/about/roadmap/) with Four Phases of Gutenberg updated by project leadership. This is the highest level overview of the changes coming to WordPress. + +**Quarterly:** + +[Quarterly Updates](https://make.wordpress.org/updates/tag/quarterly-updates/) from Contribution Teams. These updates give an overview on what each team is working on, struggling with, and how to get involved. + +**Monthly:** + +[“What’s Next In Gutenberg?” posts](https://make.wordpress.org/core/tag/gutenberg-next/). These updates are wrangled by the Core Editor team and highlight areas of work aligned with the Gutenberg roadmap for contributors to help, how to get involved, and more. + +[Block Based Themes Meeting](https://make.wordpress.org/themes/tags/block-based-meeting/). These meetings are currently wrangled in the #themereview Slack channel and are dedicated to sharing FSE changes that will specifically impact themes. Agendas and summaries are shared on the [Make Themes blog](https://make.wordpress.org/themes/). + +**Biweekly:** + +[“What’s New In Gutenberg?” release posts](https://make.wordpress.org/core/tag/gutenberg-new/). These updates are wrangled by the Core Editor team and focus on what’s been released in each biweekly Gutenberg release. They include the most relevant features released and a full changelog. + +**Weekly:** + +[Core Editor meetings](https://make.wordpress.org/core/tag/core-editor-summary/). These meetings are wrangled by volunteer members in the #core-editor Slack channel. [Agendas](https://make.wordpress.org/core/tag/core-editor-summary/) and [summaries](https://make.wordpress.org/core/tag/core-editor-summary/) are shared on the [Make Core blog](https://make.wordpress.org/core/). They focus on task coordination and relevant discussions around Gutenberg releases. There is an Open Floor period in each chat where people can suggest topics to discuss. + +[Weekly Theme Related Gutenberg Updates](https://make.wordpress.org/themes/tags/gutenberg-themes-roundup/). These posts are focused on themes, including everything from current discussions to recent changes, as well as helpful resources for theme authors. + +**Daily:** + +Checking in on [issues](https://github.com/WordPress/gutenberg/issues) and [PRs](https://github.com/WordPress/gutenberg/pulls) on GitHub. This will give you a nearly real-time understanding of what’s being worked on by the developers and designers. + +- [Glossary](/docs/explanations/glossary.md) +- [Frequently Asked Questions](/docs/explanations/faq.md) +- [Project History](/docs/explanations/history.md) +- [Outreach](/docs/getting-started/outreach.md) diff --git a/docs/getting-started/create-block/README.md b/docs/getting-started/create-block/README.md new file mode 100644 index 0000000000000..ae56e4b123f0e --- /dev/null +++ b/docs/getting-started/create-block/README.md @@ -0,0 +1,37 @@ +# Create a Block Tutorial + +Let's get you started creating your first block for the WordPress Block Editor. We will create a simple block that allows the user to type a message and style it. + +The tutorial includes setting up your development environment, tools, and getting comfortable with the new development model. If you are already comfortable, try the quick start below, otherwise step through whatever part of the tutorial you need. + +## Prerequisites + +The first thing you need is a development environment and tools. This includes setting up your WordPress environment, Node, NPM, and your code editor. If you need help, see the [setting up your development environment documentation](/docs/getting-started/devenv/README.md). + +## Quick Start + +The `@wordpress/create-block` package exists to create the necessary block scaffolding to get you started. See [create-block package documentation](https://www.npmjs.com/package/@wordpress/create-block) for additional features. This quick start assumes you have a development environment with node installed, and a WordPress site. + +From your plugins directory, to create your block run: + +```sh +npx @wordpress/create-block gutenpride --template @wordpress/create-block-tutorial-template +``` + +The [npx command](https://docs.npmjs.com/cli/v8/commands/npx) runs a command from a remote package, in this case our create-block package that will create a new directory called `gutenpride`, installs the necessary files, and builds the block plugin. If you want an interactive mode that prompts you for details, run the command without the `gutenpride` name. + +You now need to activate the plugin from inside wp-admin plugins page. + +After activated, go to the block editor and use the inserter to search and add your new block. + +## Table of Contents + +The create a block tutorials breaks down to the following sections. + +1. [WordPress Plugin](/docs/getting-started/create-block/wp-plugin.md) +2. [Anatomy of a Gutenberg Block ](/docs/getting-started/create-block/block-anatomy.md) +3. [Block Attributes](/docs/getting-started/create-block/attributes.md) +4. [Code Implementation](/docs/getting-started/create-block/block-code.md) +5. [Authoring Experience](/docs/getting-started/create-block/author-experience.md) +6. [Finishing Touches](/docs/getting-started/create-block/finishing.md) +7. [Share your Block with the World](/docs/getting-started/create-block/submitting-to-block-directory.md) diff --git a/docs/getting-started/create-block/attributes.md b/docs/getting-started/create-block/attributes.md new file mode 100644 index 0000000000000..5ec6f60c3d6a4 --- /dev/null +++ b/docs/getting-started/create-block/attributes.md @@ -0,0 +1,87 @@ +# Block Attributes + +Attributes are the way a block stores data, they define how a block is parsed to extract data from the saved content. + +For this block tutorial, we want to allow the user to type in a message that we will display stylized in the published post. So, we need to add a **message** attribute that will hold the user message. The following code defines a **message** attribute; the attribute type is a string; the source is the text from the selector which is a `div` tag. + +```json +"attributes": { + "message": { + "type": "string", + "source": "text", + "selector": "div", + "default": "" + } +}, +``` + +Add this to the `src/block.json` file. The `attributes` are at the same level as the _name_ and _title_ fields. + +When the block loads it will look at the saved content for the block, look for the div tag, take the text portion, and store the content in an `attributes.message` variable. + +Note: The text portion is equivalent to `innerText` attribute of a DOM element. For more details and other examples see the [Block Attributes documentation](/docs/reference-guides/block-api/block-attributes.md). + +## Edit and Save + +The **attributes** are passed to the `edit` and `save` functions, along with a **setAttributes** function to set the values. Additional parameters are also passed in to these functions, see [the edit/save documentation](/docs/reference-guides/block-api/block-edit-save.md) for more details. + +The `attributes` is a JavaScript object containing the values of each attribute, or default values if defined. The `setAttributes` is a function to update an attribute. + +```js +export default function Edit( { attributes, setAttributes } ) { + // ... +} +``` + +## TextControl Component + +For our example block, the component we are going to use is the **TextControl** component, it is similar to an HTML text input field. You can see [documentation for TextControl component](/packages/components/src/text-control/README.md). You can browse an [interactive set of components in this Storybook](https://wordpress.github.io/gutenberg/). + +The component is added similar to an HTML tag, setting a label, the `value` is set to the `attributes.message` and the `onChange` function uses the `setAttributes` to update the message attribute value. + +The save function will simply write the `attributes.message` as a div tag since that is how we defined it to be parsed. + +OPTIONAL: For IDE support (code completion and hints), you can install the `@wordpress/components` module which is where the TextControl component is imported from. This install command is optional since the build process automatically detects `@wordpress/*` imports and specifies as dependencies in the assets file. + +```shell +npm install @wordpress/components --save +``` + +Update the edit.js and save.js files to the following, replacing the existing functions. + +**edit.js** file: + +```js +import { __ } from '@wordpress/i18n'; +import { useBlockProps } from '@wordpress/block-editor'; +import { TextControl } from '@wordpress/components'; +import './editor.scss'; + +export default function Edit( { attributes, setAttributes } ) { + return ( + <div { ...useBlockProps() }> + <TextControl + label={ __( 'Message', 'gutenpride' ) } + value={ attributes.message } + onChange={ ( val ) => setAttributes( { message: val } ) } + /> + </div> + ); +} +``` + +**save.js** file: + +```jsx +import { useBlockProps } from '@wordpress/block-editor'; + +export default function save( { attributes } ) { + const blockProps = useBlockProps.save(); + return <div { ...blockProps }>{ attributes.message }</div>; +} +``` + +If you have previously run `npm run start`, and the script is still running, you can reload the editor now and add the block to test. +Otherwise rebuild the block using `npm run build`, reload the editor and add the block. Type a message in the editor, save, and view it in the post. + +Next Section: [Code Implementation](/docs/getting-started/create-block/block-code.md) diff --git a/docs/getting-started/tutorials/create-block/author-experience.md b/docs/getting-started/create-block/author-experience.md similarity index 93% rename from docs/getting-started/tutorials/create-block/author-experience.md rename to docs/getting-started/create-block/author-experience.md index 911baa512bb45..140238eaff0f9 100644 --- a/docs/getting-started/tutorials/create-block/author-experience.md +++ b/docs/getting-started/create-block/author-experience.md @@ -11,6 +11,7 @@ The state when a block has been inserted, but no data has been entered yet, is c To use the Placeholder, wrap the `<TextControl>` component so it becomes a child element of the `<Placeholder>` component. Try it out in your code. After updating, you might have something like: ```jsx +import { useBlockProps } from '@wordpress/block-editor'; import { Placeholder, TextControl } from '@wordpress/components'; import { __ } from '@wordpress/i18n'; @@ -73,7 +74,7 @@ attributes.message && ! isSelected; If the message is set and `!isSelected`, meaning we are not editing the block, the focus is elsewhere, then display the message not the text field. -All so this combined together here's what the edit function looks like this: +All of this combined together, here's what the edit function looks like: ```jsx import { Placeholder, TextControl } from '@wordpress/components'; @@ -114,7 +115,7 @@ Update `src/editor.scss` to: ```scss .wp-block-create-block-gutenpride input[type='text'] { - font-family: Gilbert; + font-family: Gilbert, sans-serif; font-size: 64px; color: inherit; background: inherit; @@ -125,15 +126,16 @@ Update `src/editor.scss` to: The edit function can simply be: ```jsx -import { useBlockProps } from '@wordpress/block-editor'; import { TextControl } from '@wordpress/components'; +import { useBlockProps } from '@wordpress/block-editor'; import './editor.scss'; export default function Edit( { attributes, setAttributes } ) { + const blockProps = useBlockProps(); return ( <TextControl - { ...useBlockProps() } + { ...blockProps } value={ attributes.message } onChange={ ( val ) => setAttributes( { message: val } ) } /> @@ -141,4 +143,4 @@ export default function Edit( { attributes, setAttributes } ) { } ``` -Next Section: [Finishing Touches](/docs/getting-started/tutorials/create-block/finishing.md) +Next Section: [Finishing Touches](/docs/getting-started/create-block/finishing.md) diff --git a/docs/getting-started/tutorials/create-block/block-anatomy.md b/docs/getting-started/create-block/block-anatomy.md similarity index 82% rename from docs/getting-started/tutorials/create-block/block-anatomy.md rename to docs/getting-started/create-block/block-anatomy.md index aad4a32cda98d..3f43c018cea39 100644 --- a/docs/getting-started/tutorials/create-block/block-anatomy.md +++ b/docs/getting-started/create-block/block-anatomy.md @@ -15,9 +15,9 @@ import './style.scss'; import Edit from './edit'; import save from './save'; +import metadata from './block.json'; -registerBlockType( 'create-block/gutenpride', { - apiVersion: 2, +registerBlockType( metadata.name, { /** * @see ./edit.js */ @@ -39,27 +39,29 @@ The results of the edit function is what the editor will render to the editor pa The results of the save function is what the editor will insert into the **post_content** field when the post is saved. The post_content field is the field in the WordPress database used to store the content of the post. -Most of the properties are set in the `block.json` file. +Most of the properties are set in the `src/block.json` file. ```json { + "$schema": "https://schemas.wp.org/trunk/block.json", "apiVersion": 2, "name": "create-block/gutenpride", + "version": "0.1.0", "title": "Gutenpride", - "category": "widgets", - "icon": "smiley", - "description": "Example block written with ESNext standard and JSX support – build step required.", + "category": "text", + "icon": "flag", + "description": "A Gutenberg block to show your pride! This block enables you to type text and style it with the color font Gilbert from Type with Pride.", "supports": { "html": false }, "textdomain": "gutenpride", - "editorScript": "file:./build/index.js", - "editorStyle": "file:./build/index.css", - "style": "file:./build/style-index.css" + "editorScript": "file:./index.js", + "editorStyle": "file:./index.css", + "style": "file:./style-index.css" } ``` -The **title** is the title of the block shown in the Inserter. +The **title** is the title of the block shown in the Inserter and in other areas of the editor. The **icon** is the icon shown in the Inserter. The icon property expects any Dashicon name as a string, see [list of available icons](https://developer.wordpress.org/resource/dashicons/). You can also provide an SVG object, but for now it's easiest to just pick a Dashicon name. @@ -75,4 +77,4 @@ __( 'Gutenpride – hello from the saved content!', 'gutenpride' ); This is an internationalization wrapper that allows for the string "Gutenpride" to be translated. The second parameter, "gutenpride" is called the text domain and gives context for where the string is from. The JavaScript internationalization, often abbreviated i18n, matches the core WordPress internationalization process. See the [Internationalization in Plugin Developer Handbook](https://developer.wordpress.org/plugins/internationalization/) for more details. -Next Section: [Block Attributes](/docs/getting-started/tutorials/create-block/attributes.md) +Next Section: [Block Attributes](/docs/getting-started/create-block/attributes.md) diff --git a/docs/getting-started/create-block/block-code.md b/docs/getting-started/create-block/block-code.md new file mode 100644 index 0000000000000..11f478772c6df --- /dev/null +++ b/docs/getting-started/create-block/block-code.md @@ -0,0 +1,46 @@ +# Code Implementation + +The basic block is in place, the next step is to add styles to the block. Feel free to style and adjust for your own preference, the main lesson is showing how to create and load external resources. For this example we're going to load the colorized gilbert font from [Type with Pride](https://www.typewithpride.com/). + +Note: The color may not work with all browsers until they support the proper color font properly, but the font itself still loads and styles. See [colorfonts.wtf](https://www.colorfonts.wtf/) for browser support and details on color fonts. + +## Load Font File + +Download and extract the font from the Type with Pride site, and copy it in the `assets` directory of your plugin naming it `gilbert-color.otf`. To load the font file, we need to add CSS using standard WordPress enqueue, [see Including CSS & JavaScript documentation](https://developer.wordpress.org/themes/basics/including-css-javascript/). + +In the `gutenpride.php` file, the enqueue process is already setup from the generated script, so `build/index.css` and `build/style-index.css` files are loaded using: + +```php +function create_block_gutenpride_block_init() { + register_block_type( __DIR__ . '/build' ); +} +add_action( 'init', 'create_block_gutenpride_block_init' ); +``` + +This function checks the `build/block.json` file for JS and CSS files, and will pass them on to [enqueue](https://developer.wordpress.org/themes/basics/including-css-javascript/) these files, so they are loaded on the appropriate pages. + +The `build/index.css` is compiled from `src/editor.scss` and loads only within the editor, and after the `style-index.css`. +The `build/style-index.css` is compiled from `src/style.scss` and loads in both the editor and front-end — published post view. + +## Add CSS Style for Block + +We only need to add the style to `build/style-index.css` since it will show while editing and viewing the post. Edit the `src/style.scss` to add the following. + +Note: the block classname is prefixed with `wp-block`. The `create-block/gutenpride` is converted to the classname `.wp-block-create-block-gutenpride`. + +```scss +@font-face { + font-family: Gilbert; + src: url( ../assets/gilbert-color.otf ); + font-weight: 700; +} + +.wp-block-create-block-gutenpride { + font-family: Gilbert, sans-serif; + font-size: 64px; +} +``` + +After updating, rebuild the block using `npm run build` then reload the post and refresh the browser. If you are using a browser that supports color fonts (Firefox) then you will see it styled. + +Next Section: [Authoring Experience](/docs/getting-started/create-block/author-experience.md) diff --git a/docs/getting-started/tutorials/create-block/finishing.md b/docs/getting-started/create-block/finishing.md similarity index 91% rename from docs/getting-started/tutorials/create-block/finishing.md rename to docs/getting-started/create-block/finishing.md index 1691547970414..227e01e212276 100644 --- a/docs/getting-started/tutorials/create-block/finishing.md +++ b/docs/getting-started/create-block/finishing.md @@ -22,4 +22,6 @@ Nested blocks, a block that contains additional blocks, is a common pattern used One of the best sources for information and reference is the Block Editor itself, all the core blocks are built the same way. A good way to learn how things are done is to find a core block code that does something close to what you are interested in and then using the same approach for your own block. -All core blocks source are in the [block library package on Github](https://github.com/WordPress/gutenberg/tree/HEAD/packages/block-library/src). +All core blocks source are in the [block library package on GitHub](https://github.com/WordPress/gutenberg/tree/HEAD/packages/block-library/src). + +Next Section: [Share your Block with the World](/docs/getting-started/create-block/submitting-to-block-directory.md) diff --git a/docs/getting-started/tutorials/create-block/submitting-to-block-directory.md b/docs/getting-started/create-block/submitting-to-block-directory.md similarity index 100% rename from docs/getting-started/tutorials/create-block/submitting-to-block-directory.md rename to docs/getting-started/create-block/submitting-to-block-directory.md diff --git a/docs/getting-started/tutorials/create-block/wp-plugin.md b/docs/getting-started/create-block/wp-plugin.md similarity index 80% rename from docs/getting-started/tutorials/create-block/wp-plugin.md rename to docs/getting-started/create-block/wp-plugin.md index b3d4a4a636e8c..33142659680b9 100644 --- a/docs/getting-started/tutorials/create-block/wp-plugin.md +++ b/docs/getting-started/create-block/wp-plugin.md @@ -8,7 +8,7 @@ A WordPress plugin is a set of files within the site's `wp-content/plugins` dire ### Switch to Working Directory -(1A) If you do not plan to use `wp-env`, change to your local WordPress plugin directory. For example in Local it is: `~\Local Sites\mywp\wp-content\plugins` +(1A) If you do not plan to use `wp-env`, change to your local WordPress plugin directory. For example in Local it is: `~\Local Sites\mywp\app\public\wp-content\plugins` -or- @@ -29,15 +29,17 @@ The main plugin file created is the PHP file `gutenpride.php`, at the top of thi ```php /** - * Plugin Name: Gutenpride - * Description: Example block - * Version: 0.1.0 - * Author: The WordPress Contributors - * License: GPL-2.0-or-later - * License URI: https://www.gnu.org/licenses/gpl-2.0.html - * Text Domain: gutenpride + * Plugin Name: Gutenpride + * Description: Example static block scaffolded with Create Block tool. + * Requires at least: 5.8 + * Requires PHP: 7.0 + * Version: 0.1.0 + * Author: The WordPress Contributors + * License: GPL-2.0-or-later + * License URI: https://www.gnu.org/licenses/gpl-2.0.html + * Text Domain: gutenpride * - * @package create-block + * @package create-block */ ``` @@ -49,7 +51,7 @@ Let's confirm the plugin is loaded and working. -or- -(3B) If you are using `wp-env`, see [Development Environment setup](/docs/getting-started/tutorials/devenv/README.md), then you should now run from inside the `gutenpride` directory: +(3B) If you are using `wp-env`, see [Development Environment setup](/docs/getting-started/devenv/README.md), then you should now run from inside the `gutenpride` directory: ```sh wp-env start @@ -59,7 +61,7 @@ This will start your local WordPress site and use the current directory as your ### Confirm Plugin Installed -The generated plugin should now be listed on the Plugins admin page in your WordPress install. Switch WorPress to the plugins page and activate. +The generated plugin should now be listed on the Plugins admin page in your WordPress install. Switch WordPress to the plugins page and activate. For more on creating a WordPress plugin see [Plugin Basics](https://developer.wordpress.org/plugins/plugin-basics/), and [Plugin Header requirements](https://developer.wordpress.org/plugins/plugin-basics/header-requirements/) for explanation and additional fields you can include in your plugin header. @@ -67,7 +69,7 @@ For more on creating a WordPress plugin see [Plugin Basics](https://developer.wo The `package.json` file defines the JavaScript properties for your project. This is a standard file used by NPM for defining properties and scripts it can run, the file and process is not specific to WordPress. -A `package.json` file was created with the create script, this defines the dependecies and scripts needed. You can install dependencies. The only initial dependency is the `@wordpress/scripts` package that bundles the tools and configurations needed to build blocks. +A `package.json` file was created with the create script, this defines the dependencies and scripts needed. You can install dependencies. The only initial dependency is the `@wordpress/scripts` package that bundles the tools and configurations needed to build blocks. In `package.json`, there is a `scripts` property that defines what command to run when using `npm run (cmd)`. In our generated `package.json` file, the two main scripts point to the commands in the `wp-scripts` package: @@ -78,7 +80,7 @@ In `package.json`, there is a `scripts` property that defines what command to ru }, ``` -These scripts are run by using: `npm run build` or `npm run start` +These scripts are run by using: `npm run build` or `npm run start`. Use `npm run build` for running once to create a "production" build. This compresses the code down so it downloads faster, but makes it harder to read using browser tools—good for final deployment but not while developing. @@ -88,36 +90,38 @@ By default, the build scripts looks for `src/index.js` for the JavaScript file t ## Plugin to Load Script -To load the built script, so it is run within the editor, you need to tell WordPress about the script. This done in the init action in the `gutenpride.php` file. +To load the built script, so it is run within the editor, you need to tell WordPress about the script. This is done in the init action in the `gutenpride.php` file. ```php function create_block_gutenpride_block_init() { - register_block_type( __DIR__ ); + register_block_type( __DIR__ . '/build' ); } add_action( 'init', 'create_block_gutenpride_block_init' ); ``` -The `register_block_type` function registers the block we are going to create and specifies the editor script handle registered from the metadata provided in `block.json` file with the `editorScript` field. So now when the editor loads it will load this script. +The `register_block_type` function registers the block we are going to create and specifies the editor script handle registered from the metadata provided in `build/block.json` file with the `editorScript` field. So now when the editor loads it will load this script. The source metadata file `src/block.json` is copied during the build process: ```json { + "$schema": "https://schemas.wp.org/trunk/block.json", "apiVersion": 2, "name": "create-block/gutenpride", + "version": "0.1.0", "title": "Gutenpride", "category": "widgets", "icon": "smiley", - "description": "Example block written with ESNext standard and JSX support – build step required.", + "description": "Example static block scaffolded with Create Block tool.", "supports": { "html": false }, "textdomain": "gutenpride", - "editorScript": "file:./build/index.js", - "editorStyle": "file:./build/index.css", - "style": "file:./build/style-index.css" + "editorScript": "file:./index.js", + "editorStyle": "file:./index.css", + "style": "file:./style-index.css" } ``` -For the `editorScript` provided in the block metadata, the build process creates a secondary asset file that contains the list of dependencies and a file version based on the timestamp, this is the `index.asset.php` file. +For the `editorScript` provided in the block metadata, the build process creates a secondary asset file that contains the list of dependencies and a file version based on the timestamp, this is the `build/index.asset.php` file. The `wp_register_script` function used internally registers a name, called the handle, and relates that name to the script file. The dependencies are used to specify if the script requires including other libraries. The version is specified so the browser will reload if the file changed. @@ -139,4 +143,4 @@ For more info, see the build section of the [Getting Started with JavaScript tut Hopefully, at this point, you have your plugin created and activated. We have the `package.json` with the `@wordpress/scripts` dependency, that defines the build and start scripts. The basic block is in place and can be added to the editor. -Next Section: [Anatomy of a Block](/docs/getting-started/tutorials/create-block/block-anatomy.md) +Next Section: [Anatomy of a Block](/docs/getting-started/create-block/block-anatomy.md) diff --git a/docs/getting-started/devenv/README.md b/docs/getting-started/devenv/README.md new file mode 100644 index 0000000000000..ecafeadc0dc37 --- /dev/null +++ b/docs/getting-started/devenv/README.md @@ -0,0 +1,228 @@ +# Development Environment + +This guide is for setting up your local environment for JavaScript development for creating plugins and tools to extend WordPress and the block editor. If you are looking to contribute to Gutenberg project itself, see additional documentation in the [Getting Started guide](/docs/contributors/code/getting-started-with-code-contribution.md). + +A development environment is a catch-all term for what you need setup on your computer to work. The three main pieces needed for our development environment are: + +1. Node/NPM Development Tools +2. WordPress Development Site +3. Code Editor + +## Quick Start + +Here is a summary of the guide. See each section for additional details and explanations. + +**1. Install Node development tools** + +Download and install [Node Version Manager](https://github.com/nvm-sh/nvm) (nvm) + +``` +curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash +``` + +Quit and restart terminal +Install Node.js v14. + +``` +nvm install 14 +``` + +**2. WordPress Development Site** + +First download, install, and start [Docker Desktop](https://www.docker.com/products/docker-desktop) following the instructions for your OS. + +- Install WordPress environment tool + +``` +npm -g install @wordpress/env +``` + +Start the environment from an existing plugin or theme directory, or a new working directory: + +``` +wp-env start +``` + +You will have a full WordPress site installed, navigate to: http://localhost:8888/ using your browser, log in to the WordPress dashboard at http://localhost:8888/wp-admin/ using Username "admin" and Password "password", without the quotes. + +**3. Code Editor** + +You can use any text editor to write code. For example, [Visual Studio Code](https://code.visualstudio.com/) is a popular open-source editor. You can follow instructions on their site to install it for your OS. + +## Node Development Tools + +The tools needed for development are **Node** and **NPM**. **Nodejs** is a runtime environment that allows running JavaScript outside of the browser. NPM is the Node Package Manager, it is used for installing dependencies and running scripts. The script `npx` is also installed with Nodejs—this script is used to run packages not yet installed—we will use `npx` to bootstrap a block. + +The tools are used to convert the JavaScript we are going to write into a format that browsers can run. This is called transpiling or the build step. + +For Mac and Linux, it is recommended to use the [Node Version Manager](https://github.com/nvm-sh/nvm) (nvm). Using `nvm` to install node allows installing specific versions, plus installs locally in your home directory and avoids any global permission issues. + +For Windows, or alternative installs, you can [download a Nodejs installer](https://nodejs.org/en/download/) directly from the main Node.js website, v14 is recommended. Installers are available for Windows and Mac, and binaries available for Linux. See Node.js site for additional installation methods. + +Here are the quick instructions to install using nvm, see the [full installation instructions](https://github.com/nvm-sh/nvm#installing-and-updating) for additional details. + +Run the following on the command-line to install nvm: + +```sh +curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash +``` + +Note: On macOS, the required developer tools are not installed by default, if not already installed you may be prompted to download the install. + +<img src="https://developer.wordpress.org/files/2020/07/git-install-prompt.png" alt="Mac git command requies command line developer tools" width="400" height="195"/> + +After installing nvm, you need to use it to install Node.js, to install v14, run: + +```sh +nvm install 14 +``` + +If there is an error running the above command, for example a common error that occurs is: + +```sh +$ nvm install 14 +zsh: command not found: nvm +``` + +First, try quitting and restarting your terminal to pick up the installed config. + +If restarting did not resolve the problem, you might need to create the default profile file. + +On macOS Catalina, the default shell is zsh, to create the profile file type `touch ~/.zshrc` on the command-line. It is fine to run if the file already exists. Note, `~/` is a shortcut to your home directory. For Ubuntu, including WSL, the default profile is bash, use `touch ~/.bashrc` to create. + +After creating the profile file, re-run the install command: + +```sh +nvm install 14 +``` + +The important part after installing is being able to use them in your terminal. Open a terminal command-line and type `node -v` and `npm -v` to confirm they are installed. + +```sh +> node -v +v14.19.0 + +> npm -v +6.14.16 +``` + +Your versions may not match exactly, that is fine. The minimum version for Node.js is >= 12 and for npm >= 6.9, using v14 will be supported until upgrade is required. + +## WordPress Development Site + +There are several ways to run WordPress locally on your own computer, or you could even develop on a cloud hosted computer, though this may be slower. + +The WordPress [wp-env package](https://www.npmjs.com/package/@wordpress/env) lets you set up a local WordPress environment for building and testing plugins and themes, without any additional configuration. + +The `wp-env` tool uses Docker to create a virtual machine that runs the WordPress site. There are instructions available for installing Docker on [Windows 10 Pro](https://docs.docker.com/docker-for-windows/install/), [other versions of Windows 10](https://docs.docker.com/docker-for-windows/wsl/), [macOS](https://docs.docker.com/docker-for-mac/install/), and [Linux](https://docs.docker.com/v17.12/install/linux/docker-ce/ubuntu/#install-using-the-convenience-script). If using Ubuntu, see our additional notes for [help installing Docker on Ubuntu](/docs/getting-started/devenv/docker-ubuntu.md). + +After you have installed Docker, go ahead and install the `wp-env` tool. This command will install the tool globally, which means you can run it from any directory: + +```sh +npm -g install @wordpress/env +``` + +To confirm it is installed and available, run: + +```sh +wp-env --version +> 1.6.0 +``` + +The `wp-env` script is used to create a Docker WordPress environment. You can use this script to start an environment with your plugin activated by running it from the directory containing your plugin. For example if you are following the create block tutorial, this would be in the generated directory like so: + +```sh +npx @wordpress/create-block starter-block +cd starter-block +wp-env start +``` + +You can access your environment in your browser at: [http://localhost:8888/](http://localhost:8888/), the default username is `admin` and default password is `password`. For more information controlling the Docker environment see the [@wordpress/env package readme](/packages/env/README.md). + +When using the script while developing a single plugin, `wp-env start` can mount and activate the plugin automatically when run from the directory containing the plugin. Note: This also works for themes when run from the directory in which you are developing the theme. + +If you run `wp-env start` from a directory that is not a plugin or theme, a generic WordPress environment will be created. The script will display the following warning, it is fine if this is your intention. + +``` +!! Warning: could not find a .wp-env.json configuration file and could not determine if 'DIR' is a WordPress installation, a plugin, or a theme. +``` + +You can use the `.wp-env.json` configuration file to create an environment that works with multiple plugins and/or themes. See the [@wordpress/env package for additional details](/packages/env/README.md#wp-envjson). + +#### Troubleshooting + +A common issue when running `wp-env` is `Error while running docker-compose command.` + +- Check that Docker Desktop is started and running. +- Check Docker Desktop dashboard for logs, restart, or remove existing VMs. + +If you see the error: `Host is already in use by another container` + +- The container is already running, or another one is. You can stop an existing container running use `wp-env stop` from the directory you started it. +- If you do not remember the directory you started wp-env in, you can stop all containers with `docker stop $(docker ps -q)`. Please note, this will stop all containers, use caution with this command. + +### Alternative to Docker + +Docker is just one method to run a local WordPress environment. Block development and extending WordPress is done using normal plugins, so any WordPress environment can be used. Here are some alternatives that you can consider which do not require installing Docker. + +- [Local](https://localwp.com/) - Local is a single application you download and install. You will need to know where the plugin directory is located after install. If you create a site called `mywp` typically the plugin directory is installed at `~\Local Sites\mywp\app\public\wp-content\plugins` + +- [WampServer](http://www.wampserver.com/en/) or [MAMP](https://www.mamp.info/) environments, both are quite similar to Local, combining a web server, PHP, and database. However these tools are not WordPress specific, so if you are not already using them, Local might be an easier option. + +- Remote server - you can work on a remote server, most hosts provide a quick WordPress setup. However, this will require additional time thorughout development syncing to the server, or working directly on the remote server. + +The important part is having a WordPress site installed, and know where and how to update files in the plugins directory. + +## Code Editor + +[Visual Studio Code](https://code.visualstudio.com/) is a popular code editor for JavaScript development. It works quite well across the three major platforms (Windows, Linux, and Mac), it is open-source and actively maintained by Microsoft. Plus Visual Studio Code has a vibrant community providing plugins and extensions; it is becoming the defacto standard for web development. + +Alternative editors include [Sublime Text](https://www.sublimetext.com/) that is also available across platforms, though is a commercial product; or other free alternatives include [Vim](https://www.vim.org/), [Atom](https://atom.io/), and [Notepad++](https://notepad-plus-plus.org/) all support standard JavaScript style development. + +You can use any editor you're comfortable with, it is more a personal preference. The development setup for WordPress block editor is a common JavaScript environment and most editors have plugins and support. The key is having a way to open, edit, and save text files. + +## Uninstall - Start Over + +Here are a few instructions if you need to start over, or want to remove what was installed. + +### Local Environment + +- If you just want to reset and clean the WordPress database: + +``` +wp-env clean all +``` + +- To remove the local environment completely for a specific project: + +``` +wp-env destroy +``` + +- To completely uninstall wp-env tool: + +``` +npm -g uninstall @wordpress/env +``` + +- To uninstall Docker, or Visual Studio Code use your OS method to remove packages. For example, on Windows run "Add or remove programs". You can additionally uninstall from the Docker Desktop app, click the bug icon at the top to switch to this Troubleshoot screen. Click Uninstall or remove. + +![Docker Troubleshoot Screenshot](https://developer.wordpress.org/files/2020/08/docker-uninstall-screen.png) + +### Uninstall Node/NVM + +To uninstall Node/NVM, delete the NVM directory, this is typically installed at `$HOME/.nvm`, delete using + +``` +rm -rf "$HOME/.nvm" +``` + +If this does not work and the `$NVM_DIR` environment variable is set you can remove using `rm -rf "$NVM_DIR"` + +To clean up any installed JavaScript packages remove the global `.npm` directory at `$HOME/.npm`, + +``` +rm -rf "$HOME/.npm" +``` + +Just as you confirmed the installation worked, you can confirm the uninstall worked. First quit and restart terminal and then try to run `npm -v`, `node -v`, and `nvm -v` you should then see a "command not found" error in the terminal. diff --git a/docs/getting-started/tutorials/devenv/docker-ubuntu.md b/docs/getting-started/devenv/docker-ubuntu.md similarity index 100% rename from docs/getting-started/tutorials/devenv/docker-ubuntu.md rename to docs/getting-started/devenv/docker-ubuntu.md diff --git a/docs/getting-started/glossary.md b/docs/getting-started/glossary.md deleted file mode 100644 index 45342f6b838b2..0000000000000 --- a/docs/getting-started/glossary.md +++ /dev/null @@ -1,88 +0,0 @@ -# Glossary - -<dl> -<dt>Attribute sources</dt> -<dd>An object describing the attributes shape of a block. The keys can be named as most appropriate to describe the state of a block type. The value for each key is a function which describes the strategy by which the attribute value should be extracted from the content of a saved post's content. When processed, a new object is created, taking the form of the keys defined in the attribute sources, where each value is the result of the attribute source function.</dd> - -<dt>Attributes</dt> -<dd>The object representation of the current state of a block in post content. When loading a saved post, this is determined by the attribute sources for the block type. These values can change over time during an editing session when the user modifies a block, and are used when determining how to serialize the block.</dd> - -<dt>Block</dt> -<dd>The abstract term used to describe units of markup that, composed together, form the content or layout of a webpage. The idea combines concepts of what in WordPress today we achieve with shortcodes, custom HTML, and embed discovery into a single consistent API and user experience.</dd> - -<dt>Block Theme</dt> -<dd>A theme built in block forward way that allows Full Site Editing to work. The core of a block theme are its block templates and block template parts. To date, block theme templates have been HTML files of block markup that map to templates from the standard WordPress template hierarchy. </dd> - -<dt>Block categories</dt> -<dd>These are not a WordPress taxonomy, but instead used internally to sort blocks in the Block Library.</dd> - -<dt>Block ~Inserter~ Library</dt> -<dd>Primary interface for selecting from the available blocks, triggered by plus icon buttons on Blocks or in the top-left of the editor interface.</dd> - -<dt>Block name</dt> -<dd>A unique identifier for a block type, consisting of a plugin-specific namespace and a short label describing the block's intent. e.g. <code>core/image</code></dd> - -<dt>Block Templates</dt> -<dd> A template is a pre-defined arrangement of blocks, possibly with predefined attributes or placeholder content. You can provide a template for a post type, to give users a starting point when creating a new piece of content, or inside a custom block with the <code>InnerBlocks</code> component. At their core, templates are simply HTML files of block markup that map to templates from the standard WordPress template hierarchy, for example index, single or archive. This helps control the front-end defaults of a site that are not edited via the Page Editor or the Post Editor. See the <a href="../../developers/block-api/block-templates/">templates documentation</a> for more information. </dd> - -<dt>Block Template Parts</dt> -<dd>Building on Block Templates, these parts help set structure for reusable items like a Footer or Header that one typically sees in a WordPress site. They are primarily site structure and are never to be mixed with the post content editor. With Full Site Editing and block based themes, users can create their own arbitrary Template Parts, save those in the database for their site, and re-use them throughout their site. Template parts are equivalent – in blocks – of theme template parts. They are generally defined by a theme first, carry some semantic meaning (could be swapped between themes such as a header), and can only be inserted in the site editor context (within “templates”). </dd> - -<dt>Patterns</dt> -<dd>Patterns are predefined layouts of blocks that can be inserted as starter content that are meant to be changed by the user every time. Once inserted, they exist as a local save and are not global.</dd> - -<dt>Block type</dt> -<dd>In contrast with the blocks composing a particular post, a block type describes the blueprint by which any block of that type should behave. So while there may be many images within a post, each behaves consistent with a unified image block type definition.</dd> - -<dt>Classic block</dt> -<dd>A block which embeds the TinyMCE editor as a block, TinyMCE was the base of the previous core editor. Older content created prior to the block editor will be loaded in to a single Classic block.</dd> - -<dt>Dynamic block</dt> -<dd>A type of block where the content of which may change and cannot be determined at the time of saving a post, instead calculated any time the post is shown on the front of a site. These blocks may save fallback content or no content at all in their JavaScript implementation, instead deferring to a PHP block implementation for runtime rendering.</dd> - -<dt>Full Site Editing </dt> -<dd>This refers to a collection of features that ultimately allows users to edit their entire website using blocks as the starting point. This feature set includes everything from block patterns to global styles to templates to design tools for blocks (and more). Currently, it's still in an experimental phase.</dd> - -<dt>Inspector</dt> -<dd>Deprecated term. See <a href="#settings-sidebar">Settings Sidebar.</a></dd> - -<dt>Navigation Block</dt> -<dd>A block that allows you to edit a site's navigation menu, both in terms of structure and design.</a></dd> - -<dt>Post settings</dt> -<dd>A sidebar region containing metadata fields for the post, including scheduling, visibility, terms, and featured image.</dd> - -<dt>Query Block</dt> -<dd>A block that replicates the classic WP_Query and allows for further customization with additional functionality.</dd> - -<dt>RichText</dt> -<dd>A common component enabling rich content editing including bold, italics, hyperlinks, etc.</dd> - -<dt>Reusable block</dt> -<dd>A block that is saved and then can be shared as a reusable, repeatable piece of content.</dd> - -<dt id="settings-sidebar">Settings Sidebar</dt> -<dd>The panel on the right that contains the document and block settings. The sidebar is toggled using the Settings gear icon. Block settings are shown when a block is selected, otherwise document settings are shown.</dd> - -<dt>Serialization</dt> -<dd>The process of converting a block's attributes object into HTML markup, which occurs each time a block is edited.</dd> - -<dt>Site Editor</dt> -<dd>The cohesive experience that allows you to directly edit and navigate between various templates, template parts, styling options, and more. </dd> - -<dt>Static block</dt> -<dd>A type of block where the content of which is known at the time of saving a post. A static block will be saved with HTML markup directly in post content.</dd> - -<dt>Template Editing Mode</dt> -<dd>A scaled down direct editing experience allowing you to edit/change/create the template a post/page uses. </dd> - -<dt>Theme Blocks</dt> -<dd>Blocks that accomplish everything possible in traditional templates using template tags (ex: Post Author Block). A full list can be found [here](https://github.com/WordPress/gutenberg/issues/22724).</dd> - -<dt>TinyMCE</dt> -<dd><a href="https://www.tinymce.com/">TinyMCE</a> is a web-based JavaScript WYSIWYG (What You See Is What You Get) editor.</dd> - -<dt>Toolbar</dt> -<dd>A set of button controls. In the context of a block, usually referring to the toolbar of block controls shown above the selected block.</dd> - -</dl> diff --git a/docs/getting-started/tutorials/README.md b/docs/getting-started/tutorials/README.md deleted file mode 100644 index 7dea27c0fd235..0000000000000 --- a/docs/getting-started/tutorials/README.md +++ /dev/null @@ -1,19 +0,0 @@ -# Tutorials - -- First things first, see [setting up your development environment](/docs/getting-started/tutorials/devenv/README.md) for the tools and setup you need to extend the block editor. - -- See the [Getting Started with JavaScript Tutorial](/docs/how-to-guides/javascript/README.md) to learn about how to use JavaScript within WordPress. - -- Beginners: The [Create a Block Tutorial](/docs/getting-started/tutorials/create-block/README.md) walks through creating a block plugin using the `@wordpress/create-block` package; a quick and easy way to start creating your own block. - -- Intermediate: The [Block Tutorial](/docs/how-to-guides/block-tutorial/README.md) covers different aspects of block development. The documentation is slightly dated but still valid, if you are new to block development, start with the Create Block Tutorial above. - -- See the [Meta Boxes Tutorial](/docs/how-to-guides/metabox/README.md) for new ways of extending the editor storing and using post meta data. - -- Check out the [Notices Tutorial](/docs/how-to-guides/notices/README.md) to learn how to display informational UI at the top of the editor. - -- The [Sidebar Tutorial](/docs/how-to-guides/sidebar-tutorial/plugin-sidebar-0.md) will walk you through the steps of creating a sidebar to update data from the `post_meta` table. - -- Learn how to add customized buttons to the toolbar with the [Format API tutorial](/docs/how-to-guides/format-api/). - -- Build your own [custom block editor instance](/docs/reference-guides/platform/custom-block-editor/) - this will walk you through building a standalone instance of the block editor within WP Admin. diff --git a/docs/getting-started/tutorials/create-block/README.md b/docs/getting-started/tutorials/create-block/README.md deleted file mode 100644 index b0c741a18d120..0000000000000 --- a/docs/getting-started/tutorials/create-block/README.md +++ /dev/null @@ -1,37 +0,0 @@ -# Create a Block Tutorial - -Let's get you started creating your first block for the WordPress Block Editor. We will create a simple block that allows the user to type a message and style it. - -The tutorial includes setting up your development environment, tools, and getting comfortable with the new development model. If you are already comfortable, try the quick start below, otherwise step through whatever part of the tutorial you need. - -## Prerequisites - -The first thing you need is a development environment and tools. This includes setting up your WordPress environment, Node, NPM, and your code editor. If you need help, see the [setting up your development environment documentation](/docs/getting-started/tutorials/devenv/README.md). - -## Quick Start - -The `@wordpress/create-block` package exists to create the necessary block scaffolding to get you started. See [create-block package documentation](https://www.npmjs.com/package/@wordpress/create-block) for additional features. This quick start assumes you have a development environment with node installed, and a WordPress site. - -From your plugins directory, to create your block run: - -```sh -npx @wordpress/create-block gutenpride -``` - -The above command creates a new directory called `gutenpride`, installs the necessary files, and builds the block plugin. If you want an interactive mode that prompts you for details, run the command without the `gutenpride` name. - -You now need to activate the plugin from inside wp-admin plugins page. - -After activated, go to the block editor and use the inserter to search and add your new block. - -## Table of Contents - -The create a block tutorials breaks down to the following sections. - -1. [WordPress Plugin](/docs/getting-started/tutorials/create-block/wp-plugin.md) -2. [Anatomy of a Gutenberg Block ](/docs/getting-started/tutorials/create-block/block-anatomy.md) -3. [Block Attributes](/docs/getting-started/tutorials/create-block/attributes.md) -4. [Code Implementation](/docs/getting-started/tutorials/create-block/block-code.md) -5. [Authoring Experience](/docs/getting-started/tutorials/create-block/author-experience.md) -6. [Finishing Touches](/docs/getting-started/tutorials/create-block/finishing.md) -7. [Share your Block with the World](/docs/getting-started/tutorials/create-block/submitting-to-block-directory.md) diff --git a/docs/getting-started/tutorials/create-block/attributes.md b/docs/getting-started/tutorials/create-block/attributes.md deleted file mode 100644 index 768231c867d4e..0000000000000 --- a/docs/getting-started/tutorials/create-block/attributes.md +++ /dev/null @@ -1,84 +0,0 @@ -# Block Attributes - -Attributes are the way a block stores data, they define how a block is parsed to extract data from the saved content. - -For this block tutorial, we want to allow the user to type in a message that we will display stylized in the published post. So, we need to add a **message** attribute that will hold the user message. The following code defines a **message** attribute; the attribute type is a string; the source is the text from the selector which is a `div` tag. - -```js -registerBlockType( 'create-block/gutenpride', { - apiVersion: 2, - attributes: { - message: { - type: 'string', - source: 'text', - selector: 'div', - default: '', // empty default - }, - }, - // other settings, like the save and edit functions. -} ); -``` - -Add this to the `index.js` file within the `registerBlockType` function. The `attributes` are at the same level as the _edit_ and _save_ fields. - -When the block loads it will look at the saved content for the block, look for the div tag, take the text portion, and store the content in an `attributes.message` variable. - -Note: The text portion is equivalent to `innerText` attribute of a DOM element. For more details and other examples see the [Block Attributes documentation](/docs/reference-guides/block-api/block-attributes.md). - -## Edit and Save - -The **attributes** are passed to the `edit` and `save` functions, along with a **setAttributes** function to set the values. Additional parameters are also passed in to these functions, see [the edit/save documentation](/docs/reference-guides/block-api/block-edit-save.md) for more details. - -The `attributes` is a JavaScript object containing the values of each attribute, or default values if defined. The `setAttributes` is a function to update an attribute. - -```js -export default function Edit( { attributes, setAttributes } ) { - // ... -} -``` - -## TextControl Component - -For our example block, the component we are going to use is the **TextControl** component, it is similar to an HTML text input field. You can see [documentation for TextControl component](/packages/components/src/text-control/README.md). You can browse an [interactive set of components in this Storybook](https://wordpress.github.io/gutenberg/). - -The component is added similar to an HTML tag, setting a label, the `value` is set to the `attributes.message` and the `onChange` function uses the `setAttributes` to update the message attribute value. - -The save function will simply write the `attributes.message` as a div tag since that is how we defined it to be parsed. - -Update the edit.js and save.js files to the following, replacing the existing functions. - -**edit.js** file: - -```js -import { __ } from '@wordpress/i18n'; -import { useBlockProps } from '@wordpress/block-editor'; -import { TextControl } from '@wordpress/components'; -import './editor.scss'; - -export default function Edit( { attributes, setAttributes } ) { - return ( - <div { ...useBlockProps() }> - <TextControl - label={ __( 'Message', 'gutenpride' ) } - value={ attributes.message } - onChange={ ( val ) => setAttributes( { message: val } ) } - /> - </div> - ); -} -``` - -**save.js** file: - -```jsx -import { __ } from '@wordpress/i18n'; -import { useBlockProps } from '@wordpress/block-editor'; - -export default function save( { attributes } ) { - return <div { ...useBlockProps.save() }>{ attributes.message }</div>; -} -``` - -Rebuild the block using `npm run build`, reload the editor and add the block. Type a message in the editor, save, and view it in the post. - -Next Section: [Code Implementation](/docs/getting-started/tutorials/create-block/block-code.md) diff --git a/docs/getting-started/tutorials/create-block/block-code.md b/docs/getting-started/tutorials/create-block/block-code.md deleted file mode 100644 index 8a82d6c975dfd..0000000000000 --- a/docs/getting-started/tutorials/create-block/block-code.md +++ /dev/null @@ -1,46 +0,0 @@ -# Code Implementation - -The basic block is in place, the next step is to add styles to the block. Feel free to style and adjust for your own preference, the main lesson is showing how to create and load external resources. For this example we're going to load the colorized gilbert font from [Type with Pride](https://www.typewithpride.com/). - -Note: The color may not work with all browsers until they support the proper color font properly, but the font itself still loads and styles. See [colorfonts.wtf](https://www.colorfonts.wtf/) for browser support and details on color fonts. - -## Load Font File - -Download and extract the font from the Type with Pride site, and copy it in the `src` directory of your plugin naming it `gilbert-color.otf`. To load the font file, we need to add CSS using standard WordPress enqueue, [see Including CSS & JavaScript documentation](https://developer.wordpress.org/themes/basics/including-css-javascript/). - -In the `gutenpride.php` file, the enqueue process is already setup from the generated script, so `index.css` and `style-index.css` files are loaded using: - -```php -function create_block_gutenpride_block_init() { - register_block_type( __DIR__ ); -} -add_action( 'init', 'create_block_gutenpride_block_init' ); -``` - -This function checks the `block.json` file for js and css files, and will pass them on to [enqueue](https://developer.wordpress.org/themes/basics/including-css-javascript/) these files, so they are loaded on the appropriate pages. - -The `build/index.css` is compiled from `src/editor.scss` and loads only within the editor, and after the `style-index.css`. -The `build/style-index.css` is compiled from `src/style.scss` and loads in both the editor and front-end — published post view. - -## Add CSS Style for Block - -We only need to add the style to `build/style-index.css` since it will show while editing and viewing the post. Edit the `src/style.scss` to add the following. - -Note: the block classname is prefixed with `wp-block`. The `create-block/gutenpride` is converted to the classname `.wp-block-create-block-gutenpride`. - -```scss -@font-face { - font-family: Gilbert; - src: url( gilbert-color.otf ); - font-weight: bold; -} - -.wp-block-create-block-gutenpride { - font-family: Gilbert; - font-size: 64px; -} -``` - -After updating, rebuild the block using `npm run build` then reload the post and refresh the browser. If you are using a browser that supports color fonts (Firefox) then you will see it styled. - -Next Section: [Authoring Experience](/docs/getting-started/tutorials/create-block/author-experience.md) diff --git a/docs/getting-started/tutorials/devenv/README.md b/docs/getting-started/tutorials/devenv/README.md deleted file mode 100644 index 3d793d0c139a6..0000000000000 --- a/docs/getting-started/tutorials/devenv/README.md +++ /dev/null @@ -1,227 +0,0 @@ -# Development Environment - -This guide is for setting up your local environment for JavaScript development for creating plugins and tools to extend WordPress and the block editor. If you are looking to contribute to Gutenberg project itself, see additional documentation in the [Getting Started guide](/docs/contributors/code/getting-started-with-code-contribution.md). - -A development environment is a catch-all term for what you need setup on your computer to work. The three main pieces needed for our development environment are: - -1. Node/NPM Development Tools -2. WordPress Development Site -3. Code Editor - -## Quick Start - -Here is a summary of the guide. See each section for additional details and explanations. - -**1. Install Node development tools** - -Download and install [Node Version Manager](https://github.com/nvm-sh/nvm) (nvm) - -``` -curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh | bash -``` - -Quit and restart terminal -Install the long-term support (lts) version of node. - -``` -nvm install --lts -``` - -**2. WordPress Development Site** - -First download, install, and start [Docker Desktop](https://www.docker.com/products/docker-desktop) following the instructions for your OS. - -- Install WordPress environment tool - -``` -npm -g install @wordpress/env -``` - -Start the environment from an existing plugin or theme directory, or a new working directory: - -``` -wp-env start -``` - -You will have a full WordPress site installed, navigate to: http://localhost:8888/ using your browser, log in to the WordPress dashboard at http://localhost:8888/wp-admin/ using Username "admin" and Password "password", without the quotes. - -**3. Code Editor** - -You can use any text editor to write code. For example, [Visual Studio Code](https://code.visualstudio.com/) is a popular open-source editor. You can follow instructions on their site to install it for your OS. - -## Node Development Tools - -The tools needed for development are **Node** and **NPM**. **Nodejs** is a runtime environment that allows running JavaScript outside of the browser. NPM is the Node Package Manager, it is used for installing dependencies and running scripts. The script `npx` is also installed with Nodejs—this script is used to run packages not yet installed—we will use `npx` to bootstrap a block. - -The tools are used to convert the JavaScript we are going to write into a format that browsers can run. This is called transpiling or the build step. - -For Mac and Linux, it is recommended to use the [Node Version Manager](https://github.com/nvm-sh/nvm) (nvm). Using `nvm` to install node allows installing specific versions, plus installs locally in your home directory and avoids any global permission issues. - -For Windows, or alternative installs, you can [download a Nodejs installer](https://nodejs.org/en/download/) directly from the main Node.js website, the long term support (LTS) version is recommended. Installers are available for Windows and Mac, and binaries available for Linux. See Node.js site for additional installation methods. - -Here are the quick instructions to install using nvm, see the [full installation instructions](https://github.com/nvm-sh/nvm#installing-and-updating) for additional details. - -Run the following on the command-line to install nvm: - -```sh -curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash -``` - -Note: On macOS, the required developer tools are not installed by default, if not already installed you may be prompted to download the install. - -<img src="https://developer.wordpress.org/files/2020/07/git-install-prompt.png" alt="Mac git command requies command line developer tools" width="400" height="195"/> - -After installing nvm, you need to use it to install node, to install the LTS version of node, run: - -```sh -nvm install --lts -``` - -If there is an error running the above command, for example a common error that occurs is: - -```sh -$ nvm install --lts -zsh: command not found: nvm -``` - -First, try quitting and restarting your terminal to pick up the installed config. - -If restarting did not resolve the problem, you might need to create the default profile file. - -On macOS Catalina, the default shell is zsh, to create the profile file type `touch ~/.zshrc` on the command-line. It is fine to run if the file already exists. Note, `~/` is a shortcut to your home directory. For Ubuntu, including WSL, the default profile is bash, use `touch ~/.bashrc` to create. - -After creating the profile file, re-run the install command: - -```sh -nvm install --lts -``` - -The important part after installing is being able to use them in your terminal. Open a terminal command-line and type `node -v` and `npm -v` to confirm they are installed. - -```sh -> node -v -v12.18.0 - -> npm -v -6.14.4 -``` - -Your versions may not match exactly, that is fine. The minimum version for node is >= 10.x and for npm >= 6.9x, using the current LTS version will always be supported. - -## WordPress Development Site - -There are several ways to run WordPress locally on your own computer, or you could even develop on a cloud hosted computer, though this may be slower. - -The WordPress [wp-env package](https://www.npmjs.com/package/@wordpress/env) lets you set up a local WordPress environment for building and testing plugins and themes, without any additional configuration. - -The `wp-env` tool uses Docker to create a virtual machine to that runs the WordPress site. There are instructions available for installing Docker on [Windows 10 Pro](https://docs.docker.com/docker-for-windows/install/), [other versions of Windows 10](https://docs.docker.com/docker-for-windows/wsl/), [macOS](https://docs.docker.com/docker-for-mac/install/), and [Linux](https://docs.docker.com/v17.12/install/linux/docker-ce/ubuntu/#install-using-the-convenience-script). If using Ubuntu, see our additional notes for [help installing Docker on Ubuntu](/docs/getting-started/tutorials/devenv/docker-ubuntu.md). - -After you have installed Docker, go ahead and install the `wp-env` tool. This command will install the tool globally, which means you can run it from any directory: - -```sh -npm -g install @wordpress/env -``` - -To confirm it is installed and available, run: - -```sh -wp-env --version -> 1.6.0 -``` - -The `wp-env` script is used to create a Docker WordPress environment. You can use this script to start an environment with your plugin activated by running it from the directory containing your plugin. For example if you are following the create block tutorial, this would be in the generated directory like so: - -```sh -npx @wordpress/create-block starter-block -cd starter-block -wp-env start -``` - -You can access your environment in your browser at: [http://localhost:8888/](http://localhost:8888/), the default username is `admin` and default password is `password`. For more information controlling the Docker environment see the [@wordpress/env package readme](/packages/env/README.md). - -When using the script while developing a single plugin, `wp-env start` can mount and activate the plugin automatically when run from the directory containing the plugin. Note: This also works for themes when run from the directory in which you are developing the theme. - -If you run `wp-env start` from a directory that is not a plugin or theme, a generic WordPress environment will be created. The script will display the following warning, it is fine if this is your intention. - -``` -!! Warning: could not find a .wp-env.json configuration file and could not determine if 'DIR' is a WordPress installation, a plugin, or a theme. -``` - -You can use the `.wp-env.json` configuration file to create an environment that works with multiple plugins and/or themes. See the [@wordpress/env package for additional details](/packages/env/README.md#wp-envjson). - -#### Troubleshooting - -A common issue when running `wp-env` is `Error while running docker-compose command.` - -- Check that Docker Desktop is started and running. -- Check Docker Desktop dashboard for logs, restart, or remove existing VMs. - -If you see the error: `Host is already in use by another container` - -- The container is already running, or another one is. You can stop an existing container running use `wp-env stop` from the directory you started it. - -### Alternative to Docker - -Docker is just one method to run a local WordPress environment. Block development and extending WordPress is done using normal plugins, so any WordPress environment can be used. Here are some alternatives that you can consider which do not require installing Docker. - -- [Local by Flywheel](https://localbyflywheel.com/) - Local is a single application you download and install. You will need to know where the plugin directory is located after install. If you create a site called `mywp` typically the plugin directory is installed at `~\Local Sites\mywp\app\public\wp-content\plugins` - -- [WampServer](http://www.wampserver.com/en/) or [MAMP](https://www.mamp.info/) environments, both are quite similar to Local, combining a web server, PHP, and database. However these tools are not WordPress specific, so if you are not already using them, Local might be an easier option. - -- Remote server - you can work on a remote server, most hosts provide a quick WordPress setup. However, this will require additional time thorughout development syncing to the server, or working directly on the remote server. - -The important part is having a WordPress site installed, and know where and how to update files in the plugins directory. - -## Code Editor - -[Visual Studio Code](https://code.visualstudio.com/) is a popular code editor for JavaScript development. It works quite well across the three major platforms (Windows, Linux, and Mac), it is open-source and actively maintained by Microsoft. Plus Visual Studio Code has a vibrant community providing plugins and extensions; it is becoming the defacto standard for web development. - -Alternative editors include [Sublime Text](https://www.sublimetext.com/) that is also available across platforms, though is a commercial product; or other free alternatives include [Vim](https://www.vim.org/), [Atom](https://atom.io/), and [Notepad++](https://notepad-plus-plus.org/) all support standard JavaScript style development. - -You can use any editor you're comfortable with, it is more a personal preference. The development setup for WordPress block editor is a common JavaScript environment and most editors have plugins and suppport. The key is having a way to open, edit, and save text files. - -## Uninstall - Start Over - -Here are a few instructions if you need to start over, or want to remove what was installed. - -### Local Environment - -- If you just want to reset and clean the WordPress database: - -``` -wp-env clean all -``` - -- To remove the local environment completely for a specific project: - -``` -wp-env destroy -``` - -- To completely uninstall wp-env tool: - -``` -npm -g uninstall @wordpress/env -``` - -- To uninstall Docker, or Visual Studio Code use your OS method to remove packages. For example, on Windows run "Add or remove programs". You can additionally uninstall from the Docker Desktop app, click the bug icon at the top to switch to this Troubleshoot screen. Click Uninstall or remove. - -![Docker Troubleshoot Screenshot](https://developer.wordpress.org/files/2020/08/docker-uninstall-screen.png) - -### Uninstall Node/NVM - -To uninstall Node/NVM, delete the NVM directory, this is typically installed at `$HOME/.nvm`, delete using - -``` -rm -rf "$HOME/.nvm" -``` - -If this does not work and the `$NVM_DIR` environment variable is set you can remove using `rm -rf "$NVM_DIR"` - -To clean up any installed JavaScript packages remove the global `.npm` directory at `$HOME/.npm`, - -``` -rm -rf "$HOME/.npm" -``` - -Just as you confirmed the installation worked, you can confirm the uninstall worked. First quit and restart terminal and then try to run `npm -v`, `node -v`, and `nvm -v` you should then see a "command not found" error in the terminal. diff --git a/docs/how-to-guides/README.md b/docs/how-to-guides/README.md index 8cc028f7b2e59..1aeee6c5c3b87 100644 --- a/docs/how-to-guides/README.md +++ b/docs/how-to-guides/README.md @@ -6,7 +6,7 @@ The new editor is highly flexible, like most of WordPress. You can build custom The editor is about blocks, and the main extensibility API is the Block API. It allows you to create your own static blocks, [Dynamic Blocks](/docs/how-to-guides/block-tutorial/creating-dynamic-blocks.md) ( rendered on the server ) and also blocks capable of saving data to Post Meta for more structured content. -If you want to learn more about block creation, see the [Create a Block tutorial](/docs/getting-started/tutorials/create-block/README.md) for the best place to start. +If you want to learn more about block creation, see the [Create a Block tutorial](/docs/getting-started/create-block/README.md) for the best place to start. ## Extending Blocks @@ -24,9 +24,7 @@ You can also filter certain aspects of the editor; this is documented on the [Ed ## Meta Boxes -Porting PHP meta boxes to blocks or sidebar plugins is highly encouraged, learn how through these [meta data tutorials](/docs/how-to-guides/metabox/README.md). - -See how the new editor [supports existing Meta Boxes](/docs/reference-guides/backward-compatibility/meta-box.md). +Porting PHP meta boxes to blocks or sidebar plugins is highly encouraged, learn how in the [meta box](/docs/how-to-guides/metabox.md) and [sidebar plugin](/docs/how-to-guides/plugin-sidebar-0.md) guides. ## Theme Support diff --git a/docs/how-to-guides/backward-compatibility/meta-box.md b/docs/how-to-guides/backward-compatibility/meta-box.md deleted file mode 100644 index 28839e4256a68..0000000000000 --- a/docs/how-to-guides/backward-compatibility/meta-box.md +++ /dev/null @@ -1,80 +0,0 @@ -# Meta Boxes - -This is a brief document detailing how meta box support works in the block editor. With the superior developer and user experience of blocks, especially once block templates are available, **porting PHP meta boxes to blocks is highly encouraged!** See the [Meta Block tutorial](/docs/how-to-guides/metabox/meta-block-1-intro.md) for how to store post meta data using blocks. - -### Testing, Converting, and Maintaining Existing Meta Boxes - -Before converting meta boxes to blocks, it may be easier to test if a meta box works with the block editor, and explicitly mark it as such. - -If a meta box _doesn't_ work with the block editor, and updating it to work correctly is not an option, the next step is to add the `__block_editor_compatible_meta_box` argument to the meta box declaration: - -```php -add_meta_box( 'my-meta-box', 'My Meta Box', 'my_meta_box_callback', - null, 'normal', 'high', - array( - '__block_editor_compatible_meta_box' => false, - ) -); -``` - -WordPress won't show the meta box but a message saying that it isn't compatible with the block editor, including a link to the Classic Editor plugin. By default, `__block_editor_compatible_meta_box` is `true`. - -After a meta box is converted to a block, it can be declared as existing for backward compatibility: - -```php -add_meta_box( 'my-meta-box', 'My Meta Box', 'my_meta_box_callback', - null, 'normal', 'high', - array( - '__back_compat_meta_box' => true, - ) -); -``` - -When the block editor is used, this meta box will no longer be displayed in the meta box area, as it now only exists for backward compatibility purposes. It will continue to display correctly in the classic editor. - -### Meta Box Data Collection - -On each block editor page load, we register an action that collects the meta box data to determine if an area is empty. The original global state is reset upon collection of meta box data. - -See [`register_and_do_post_meta_boxes`](https://developer.wordpress.org/reference/functions/register_and_do_post_meta_boxes/). - -It will run through the functions and hooks that `post.php` runs to register meta boxes; namely `add_meta_boxes`, `add_meta_boxes_{$post->post_type}`, and `do_meta_boxes`. - -Meta boxes are filtered to strip out any core meta boxes, standard custom taxonomy meta boxes, and any meta boxes that have declared themselves as only existing for backward compatibility purposes. - -Then each location for this particular type of meta box is checked for whether it is active. If it is not empty a value of true is stored, if it is empty a value of false is stored. This meta box location data is then dispatched by the editor Redux store in `INITIALIZE_META_BOX_STATE`. - -Ideally, this could be done at instantiation of the editor and help simplify this flow. However, it is not possible to know the meta box state before `admin_enqueue_scripts`, where we are calling `initializeEditor()`. This will have to do, unless we want to move `initializeEditor()` to fire in the footer or at some point after `admin_head`. With recent changes to editor bootstrapping this might now be possible. Test with ACF to make sure. - -### Redux and React Meta Box Management - -When rendering the block editor, the meta boxes are rendered to a hidden div `#metaboxes`. - -_The Redux store will hold all meta boxes as inactive by default_. When -`INITIALIZE_META_BOX_STATE` comes in, the store will update any active meta box areas by setting the `isActive` flag to `true`. Once this happens React will check for the new props sent in by Redux on the `MetaBox` component. If that `MetaBox` is now active, instead of rendering null, a `MetaBoxArea` component will be rendered. The `MetaBox` component is the container component that mediates between the `MetaBoxArea` and the Redux Store. _If no meta boxes are active, nothing happens. This will be the default behavior, as all core meta boxes have been stripped._ - -#### MetaBoxArea Component - -When the component renders it will store a reference to the meta boxes container and retrieve the meta boxes HTML from the prefetch location. - -When the post is updated, only meta box areas that are active will be submitted. This prevents unnecessary requests. No extra revisions are created by the meta box submissions. A Redux action will trigger on `REQUEST_POST_UPDATE` for any active meta box. See `editor/effects.js`. The `REQUEST_META_BOX_UPDATES` action will set that meta box's state to `isUpdating`. The `isUpdating` prop will be sent into the `MetaBoxArea` and cause a form submission. - -When the meta box area is saving, we display an updating overlay, to prevent users from changing the form values while a save is in progress. - -An example save url would look like: - -`mysite.com/wp-admin/post.php?post=1&action=edit&meta-box-loader=1` - -This url is automatically passed into React via a `_wpMetaBoxUrl` global variable. - -This page mimics the `post.php` post form, so when it is submitted it will fire all of the normal hooks and actions, and have the proper global state to correctly fire any PHP meta box mumbo jumbo without needing to modify any existing code. On successful submission, React will signal a `handleMetaBoxReload` to remove the updating overlay. - -### Common Compatibility Issues - -Most PHP meta boxes should continue to work in the block editor, but some meta boxes that include advanced functionality could break. Here are some common reasons why meta boxes might not work as expected in the block editor: - -- Plugins relying on selectors that target the post title, post content fields, and other metaboxes (of the old editor). -- Plugins relying on TinyMCE's API because there's no longer a single TinyMCE instance to talk to in the block editor. -- Plugins making updates to their DOM on "submit" or on "save". - -Please also note that if your plugin triggers a PHP warning or notice to be output on the page, this will cause the HTML document type (`<!DOCTYPE html>`) to be output incorrectly. This will cause the browser to render using "Quirks Mode", which is a compatibility layer that gets enabled when the browser doesn't know what type of document it is parsing. The block editor is not meant to work in this mode, but it can _appear_ to be working just fine. If you encounter issues such as _meta boxes overlaying the editor_ or other layout issues, please check the raw page source of your document to see that the document type definition is the first thing output on the page. There will also be a warning in the JavaScript console, noting the issue. diff --git a/docs/how-to-guides/block-tutorial/README.md b/docs/how-to-guides/block-tutorial/README.md index d16645fdf45e0..b1ff5a19119c2 100644 --- a/docs/how-to-guides/block-tutorial/README.md +++ b/docs/how-to-guides/block-tutorial/README.md @@ -4,6 +4,6 @@ The purpose of this tutorial is to step through the fundamentals of creating a n To follow along with this tutorial, you can [download the accompanying WordPress plugin](https://github.com/WordPress/gutenberg-examples) which includes all of the examples for you to try on your own site. At each step along the way, experiment by modifying the examples with your own ideas, and observe the effects they have on the block's behavior. -Code snippets are provided in two formats "ES5" and "ESNext". ES5 refers to "classic" JavaScript (ECMAScript 5), while ESNext refers to the next versions of the language standard, plus JSX syntax. You can change between them using tabs found above each code example. Using ESNext, does require you to run [the JavaScript build step](/docs/how-to-guides/javascript/js-build-setup/) to compile your code to a browser compatible format. +Code snippets are provided in two formats "JSX" and "Plain". JSX refers to JavaScript code that uses JSX syntax which requires a build step. Plain refers to "classic" JavaScript that does not require building. You can change between them using tabs found above each code example. Using JSX, does require you to run [the JavaScript build step](/docs/how-to-guides/javascript/js-build-setup/) to compile your code to a browser compatible format. -Note that it is not required to use ESNext to create blocks or extend the editor, you can use classic JavaScript. However, once familiar with ESNext, developers find it is easier to read and write, thus most code examples you'll find use the ESNext syntax. +Note that it is not required to use JSX to create blocks or extend the editor, you can use classic JavaScript. However, once familiar with JSX and the build step, many developers tend to find it is easier to read and write, thus most code examples you'll find use the JSX syntax. diff --git a/docs/how-to-guides/block-tutorial/applying-styles-with-stylesheets.md b/docs/how-to-guides/block-tutorial/applying-styles-with-stylesheets.md index 7ffa80cb2d471..8fbbe08265483 100644 --- a/docs/how-to-guides/block-tutorial/applying-styles-with-stylesheets.md +++ b/docs/how-to-guides/block-tutorial/applying-styles-with-stylesheets.md @@ -1,55 +1,143 @@ -# Applying Styles From a Stylesheet +# Use styles and stylesheets -In the [previous section](/docs/how-to-guides/block-tutorial/writing-your-first-block-type.md), the block had applied its own styles by an inline `style` attribute. While this might be adequate for very simple components, you will quickly find that it becomes easier to write your styles by extracting them to a separate stylesheet file. +## Overview -The editor will automatically generate a class name for each block type to simplify styling. It can be accessed from the object argument passed to the edit and save functions. In this section, we will create a stylesheet to use that class name. +A block typically inserts markup (HTML) into post content that you want to style in someway. This guides walks through a few different ways you can use CSS with the block editor and how to work with styles and stylesheets. + +## Before you start + +You will need a basic block and WordPress development environment to implement the examples shown in this guide. See the [create a basic block](/docs/how-to-guides/block-tutorial/writing-your-first-block-type.md) or [block tutorial](/docs/getting-started/create-block/README.md) to get setup. + +## Methods to add style + +The following are different methods you can use to add style to your block, either in the editor or when saved. + +## Method 1: Inline style + +The first method shows adding the style inline. This transforms the defined style into a property on the element inserted. + +The `useBlockProps` React hook is used to set and apply properties on the block's wrapper element. The following example shows how: {% codetabs %} -{% ESNext %} +{% JSX %} + +```jsx +import { registerBlockType } from '@wordpress/blocks'; +import { useBlockProps } from '@wordpress/block-editor'; + +registerBlockType( 'gutenberg-examples/example-02-stylesheets', { + edit() { + const greenBackground = { + backgroundColor: '#090', + color: '#fff', + padding: '20px', + }; + + const blockProps = useBlockProps( { style: greenBackground } ); + + return ( + <p { ...blockProps }>Hello World (from the editor, in green).</p> + ); + }, + save() { + const redBackground = { + backgroundColor: '#900', + color: '#fff', + padding: '20px', + }; + + const blockProps = useBlockProps.save( { style: redBackground } ); + + return ( + <p { ...blockProps }>Hello World (from the frontend, in red).</p> + ); + }, +} ); +``` + +{% Plain %} + +```js +( function ( blocks, element, blockEditor ) { + var el = element.createElement; + + blocks.registerBlockType( 'gutenberg-examples/example-02-stylesheets', { + edit: function ( props ) { + const greenBackground = { + backgroundColor: '#090', + color: '#fff', + padding: '20px', + }; + const blockProps = blockEditor.useBlockProps( { + style: greenBackground, + } ); + return el( + 'p', + blockProps, + 'Hello World (from the editor, in green).' + ); + }, + save: function () { + const redBackground = { + backgroundColor: '#090', + color: '#fff', + padding: '20px', + }; + const blockProps = blockEditor.useBlockProps.save( { + style: redBackground, + } ); + return el( + 'p', + blockProps, + 'Hello World (from the frontend, in red).' + ); + }, + } ); +} )( window.wp.blocks, window.wp.element, window.wp.blockEditor ); +``` + +{% end %} + +## Method 2: Block classname + +The inline style works well for a small amount of CSS to apply. If you have much more than the above you will likely find that it is easier to manage with them in a separate stylesheet file. + +The `useBlockProps` hooks includes the classsname for the block automatically, it generates a name for each block using the block's name prefixed with `wp-block-`, replacing the `/` namespace separator with a single `-`. + +For example the block name: `gutenberg-examples/example-02-stylesheets` would get the classname: `wp-block-gutenberg-examples-example-02-stylesheets`. It might be a bit long but best to avoid conflicts with other blocks. + +{% codetabs %} +{% JSX %} ```jsx import { registerBlockType } from '@wordpress/blocks'; import { useBlockProps } from '@wordpress/block-editor'; registerBlockType( 'gutenberg-examples/example-02-stylesheets', { - apiVersion: 2, - title: 'Example: Stylesheets', - icon: 'universal-access-alt', - category: 'design', - example: {}, edit() { const blockProps = useBlockProps(); return ( - <p { ...blockProps }> - Hello World (from the editor, in green). - </p> + <p { ...blockProps }>Hello World (from the editor, in green).</p> ); }, save() { const blockProps = useBlockProps.save(); return ( - <p { ...blockProps }> - Hello World (from the frontend, in red). - </p> + <p { ...blockProps }>Hello World (from the frontend, in red).</p> ); }, } ); ``` -{% ES5 %} +{% Plain %} ```js ( function ( blocks, element, blockEditor ) { var el = element.createElement; blocks.registerBlockType( 'gutenberg-examples/example-02-stylesheets', { - apiVersion: 2, - title: 'Example: Stylesheets', - icon: 'universal-access-alt', - category: 'design', - example: {}, edit: function ( props ) { var blockProps = blockEditor.useBlockProps(); return el( @@ -72,75 +160,58 @@ registerBlockType( 'gutenberg-examples/example-02-stylesheets', { {% end %} -The class name is generated using the block's name prefixed with `wp-block-`, replacing the `/` namespace separator with a single `-`. +### Enqueue stylesheets -## Enqueueing Editor and Front end Assets +Like scripts, you can enqueue your block's styles using the `block.json` file. -Like scripts, you need to enqueue your block's styles. As explained in the section before, you use the `editor_style` handle for styles only relevant in the editor, and the `style` handle for common styles applied both in the editor and the front of your site. +Use the `editorStyle` property to a CSS file you want to load in the editor view, and use the `style` property for a CSS file you want to load on the frontend when the block is used. -The stylesheets enqueued by `style` are the base styles and are loaded first. The `editor` stylesheet will be loaded after it. +For example: -Let's move on into code. Create a file called `editor.css`: +```json +{ + "apiVersion": 2, + "name": "gutenberg-examples/example-02-stylesheets", + "title": "Example: Stylesheets", + "icon": "universal-access-alt", + "category": "layout", + "editorScript": "file:./block.js", + "editorStyle": "file:./editor.css", + "style": "file:./style.css" +} +``` + +So in your plugin directory, create an `editor.css` file to load in editor view: ```css +/* green background */ .wp-block-gutenberg-examples-example-02-stylesheets { - color: green; - background: #cfc; - border: 2px solid #9c9; + background: #090; + color: white; padding: 20px; } ``` -And a new `style.css` file containing: +And a `style.css` file to load on the frontend: ```css +/* red background */ .wp-block-gutenberg-examples-example-02-stylesheets { - color: darkred; - background: #fcc; - border: 2px solid #c99; + background: #900; + color: white; padding: 20px; } ``` -Configure your plugin to use these new styles: - -```php -<?php -/** - * Plugin Name: Gutenberg Examples Stylesheets - */ - -function gutenberg_examples_02_register_block() { - wp_register_script( - 'gutenberg-examples-02', - plugins_url( 'block.js', __FILE__ ), - array( 'wp-blocks', 'wp-element' ), - filemtime( plugin_dir_path( __FILE__ ) . 'block.js' ) - ); - - wp_register_style( - 'gutenberg-examples-02-editor', - plugins_url( 'editor.css', __FILE__ ), - array( 'wp-edit-blocks' ), - filemtime( plugin_dir_path( __FILE__ ) . 'editor.css' ) - ); - - wp_register_style( - 'gutenberg-examples-02', - plugins_url( 'style.css', __FILE__ ), - array( ), - filemtime( plugin_dir_path( __FILE__ ) . 'style.css' ) - ); - - // Allow inlining small stylesheets on the frontend if possible. - wp_style_add_data( 'gutenberg-examples-02', 'path', dirname( __FILE__ ) . '/style.css' ); - - register_block_type( 'gutenberg-examples/example-02-stylesheets', array( - 'api_version' => 2, - 'style' => 'gutenberg-examples-02', - 'editor_style' => 'gutenberg-examples-02-editor', - 'editor_script' => 'gutenberg-examples-02', - ) ); -} -add_action( 'init', 'gutenberg_examples_02_register_block' ); -``` +The files will automatically be enqueued when specified in the block.json. + +**Note:** If you have multiple files to include, you can use standard `wp_enqueue_style` functions like any other plugin or theme. You will want to use the following hooks for the block editor: + +- `enqueue_block_editor_assets` - to load only in editor view +- `enqueue_block_assets` - loads both on frontend and editor view + +## Conclusion + +This guide showed a couple of different ways to apply styles to your block, by either inline or in its own style sheet. Both of these methods use the `useBlockProps` hook, see the [block wrapper reference documentation](/docs/reference-guides/block-api/block-edit-save.md#block-wrapper-props) for additional details. + +See the complete [example-02-stlyesheets](https://github.com/WordPress/gutenberg-examples/tree/trunk/02-stylesheets) code in the [gutenberg-examples repository](https://github.com/WordPress/gutenberg-examples). diff --git a/docs/how-to-guides/block-tutorial/block-controls-toolbar-and-sidebar.md b/docs/how-to-guides/block-tutorial/block-controls-toolbar-and-sidebar.md index 06492136e6337..798acf6575f82 100644 --- a/docs/how-to-guides/block-tutorial/block-controls-toolbar-and-sidebar.md +++ b/docs/how-to-guides/block-tutorial/block-controls-toolbar-and-sidebar.md @@ -11,7 +11,7 @@ When the user selects a block, a number of control buttons may be shown in a too You can also customize the toolbar to include controls specific to your block type. If the return value of your block type's `edit` function includes a `BlockControls` element, those controls will be shown in the selected block's toolbar. {% codetabs %} -{% ESNext %} +{% JSX %} ```jsx import { registerBlockType } from '@wordpress/blocks'; @@ -92,7 +92,7 @@ registerBlockType( 'gutenberg-examples/example-04-controls-esnext', { } ); ``` -{% ES5 %} +{% Plain %} ```js ( function ( blocks, blockEditor, element ) { @@ -279,3 +279,5 @@ registerBlockType( 'create-block/gutenpride', { Block controls rendered in both the toolbar and sidebar will also be used when multiple blocks of the same type are selected. + +**Note :** In the example above, we added text and background color customization support to our block to demonstrate the use of `InspectorControls` to add custom controls to the sidebar. That said, for common customization settings including color, border, spacing customization and more, we will see on the [next chapter](/docs/how-to-guides/block-tutorial/block-supports-in-static-blocks.md) that you can rely on block supports to provide the same functionality in a more efficient way. diff --git a/docs/how-to-guides/block-tutorial/block-supports-in-dynamic-blocks.md b/docs/how-to-guides/block-tutorial/block-supports-in-dynamic-blocks.md new file mode 100644 index 0000000000000..b458b135104f9 --- /dev/null +++ b/docs/how-to-guides/block-tutorial/block-supports-in-dynamic-blocks.md @@ -0,0 +1,217 @@ +# Block Supports in dynamic blocks + +Dynamic blocks are blocks that build their structure and content on the fly when the block is rendered on the front end. + +**Note :** All the details about the creation of dynamic blocks are documented [here](/docs/how-to-guides/block-tutorial/creating-dynamic-blocks.md). The below examples demonstrate the usage of `block supports` in dynamic blocks. + +A lot of blocks, including core blocks, offer similar customization options. Whether that is to change the background color, text color, or to add padding, margin customization options... + +Let's examine the scenario to enable a user to change the background color and text color of a block. + +### Without using block supports + +```jsx +import { registerBlockType } from '@wordpress/blocks'; +import { useSelect } from '@wordpress/data'; +import { + useBlockProps, + ColorPalette, + InspectorControls, +} from '@wordpress/block-editor'; + +registerBlockType( 'gutenberg-examples/example-dynamic', { + apiVersion: 2, + title: 'Example: last post title', + icon: 'megaphone', + category: 'widgets', + attributes: { + bgColor: { type: 'string' }, + textColor: { type: 'string' }, + }, + edit: function BlockEdit( { + attributes: { bgColor, textColor }, + setAttributes, + } ) { + const blockProps = useBlockProps(); + const posts = useSelect( ( select ) => { + return select( 'core' ).getEntityRecords( 'postType', 'post', { + per_page: 1, + } ); + }, [] ); + const onChangeBGColor = ( hexColor ) => { + setAttributes( { bgColor: hexColor } ); + }; + const onChangeTextColor = ( newColor ) => { + setAttributes( { textColor: newColor } ); + }; + if ( ! posts ) { + return null; + } + return ( + <div { ...blockProps }> + <InspectorControls key="setting"> + <fieldset> + <legend className="blocks-base-control__label"> + { __( 'Background color' ) } + </legend> + <ColorPalette // Element Tag for Gutenberg standard colour selector + onChange={ onChangeBGColor } // onChange event callback + /> + </fieldset> + <fieldset> + <legend className="blocks-base-control__label"> + { __( 'Text color' ) } + </legend> + <ColorPalette // Element Tag for Gutenberg standard colour selector + onChange={ onChangeTextColor } // onChange event callback + /> + </fieldset> + </InspectorControls> + { !! posts.length && ( + <h3 + style={ { + backgroundColor: bgColor, + color: textColor, + } } + > + { posts[ 0 ].title.rendered } + </h3> + ) } + </div> + ); + }, +} ); +``` + +Because it is a dynamic block it doesn't need to override the default `save` implementation on the client. Instead, it needs a server component. The contents in the front of your site depend on the function called by the `render_callback` property of `register_block_type`. + +```php +<?php + +function gutenberg_examples_dynamic_render_callback( $block_attributes, $content ) { + $recent_posts = wp_get_recent_posts( array( + 'numberposts' => 1, + 'post_status' => 'publish', + ) ); + if ( count( $recent_posts ) === 0 ) { + return 'No posts'; + } + $post = $recent_posts[ 0 ]; + $post_id = $post['ID']; + $styles = ''; + if ( ! empty( $block_attributes['bgColor'] ) ) { + $styles .= "background-color:{$block_attributes['bgColor']};"; + } + if ( ! empty( $block_attributes['textColor'] ) ) { + $styles .= "color:{$block_attributes['textColor']};"; + } + $wrapper_attributes = get_block_wrapper_attributes(); + return sprintf( + '<h3 %1$s href="%2$s" style="%3$s">%4$s<h3>', + $wrapper_attributes, + esc_url( get_permalink( $post_id ) ), + esc_attr( $styles ), + esc_html( get_the_title( $post_id ) ) + ); +} + +function gutenberg_examples_dynamic() { + register_block_type( + 'gutenberg-examples/example-dynamic', + array( + 'api_version' => 2, + 'category' => 'widgets', + 'attributes' => array( + 'bgColor' => array( 'type' => 'string' ), + 'textColor' => array( 'type' => 'string' ), + ), + 'render_callback' => 'gutenberg_examples_dynamic_render_callback', + 'skip_inner_blocks' => true, + ) + ); +} +add_action( 'init', 'gutenberg_examples_dynamic' ); + +``` + +### With block supports + +Let's see how we can achieve the same functionality, but by using `block supports`. + +```jsx +import { registerBlockType } from '@wordpress/blocks'; +import { useSelect } from '@wordpress/data'; +import { useBlockProps } from '@wordpress/block-editor'; + +registerBlockType( 'gutenberg-examples/example-dynamic-block-supports', { + apiVersion: 2, + title: 'Example: last post title(block supports)', + icon: 'megaphone', + category: 'widgets', + edit: function BlockEdit() { + const blockProps = useBlockProps(); + const posts = useSelect( ( select ) => { + return select( 'core' ).getEntityRecords( 'postType', 'post', { + per_page: 1, + } ); + }, [] ); + if ( ! posts ) { + return null; + } + return ( + <div { ...blockProps }> + { !! posts.length && <h3>{ posts[ 0 ].title.rendered }</h3> } + </div> + ); + }, + supports: { color: true }, +} ); +``` + +And the server side part becomes: + +```php +<?php +function gutenberg_examples_dynamic_block_supports_render_callback( $block_attributes, $content ) { + $recent_posts = wp_get_recent_posts( array( + 'numberposts' => 1, + 'post_status' => 'publish', + ) ); + if ( count( $recent_posts ) === 0 ) { + return 'No posts'; + } + $post = $recent_posts[ 0 ]; + $post_id = $post['ID']; + $wrapper_attributes = get_block_wrapper_attributes(); + return sprintf( + '<h3 %1$s href="%2$s">%3$s<h3>', + $wrapper_attributes, + esc_url( get_permalink( $post_id ) ), + esc_html( get_the_title( $post_id ) ) + ); +} + +function gutenberg_examples_dynamic_block_supports() { + register_block_type( + 'gutenberg-examples/example-dynamic-block-supports', + array( + 'api_version' => 2, + 'category' => 'widgets', + 'supports' => array( 'color' => true ), + 'render_callback' => 'gutenberg_examples_dynamic_block_supports_render_callback', + 'skip_inner_blocks' => true, + ) + ); +} +add_action( 'init', 'gutenberg_examples_dynamic_block_supports' ); + +``` + +And that's it, the addition of the "supports" key above, will automatically make the following changes to the block: + +- Add a `style` attribute to the block to store the link, text and background colors. +- Add a "Colors" panel to the sidebar of the block editor to allow users to tweak the text, link and background colors. +- Automatically use the `theme.json` config: allow disabling colors, inherit palettes... +- Automatically inject the right styles and apply them to the block wrapper when the user make changes to the colors. + +To learn more about the block supports and see all the available properties that you can enable for your own blocks, please refer to [the supports documentation](/docs/reference-guides/block-api/block-supports.md). diff --git a/docs/how-to-guides/block-tutorial/block-supports-in-static-blocks.md b/docs/how-to-guides/block-tutorial/block-supports-in-static-blocks.md new file mode 100644 index 0000000000000..6dc993739a279 --- /dev/null +++ b/docs/how-to-guides/block-tutorial/block-supports-in-static-blocks.md @@ -0,0 +1,153 @@ +# Block Supports + +A lot of blocks, including core blocks, offer similar customization options. Whether that is to change the background color, text color, or to add padding, margin customization options... + +To avoid duplicating the same logic over and over in your blocks and to align the behavior of your block with core blocks, you can make use of the different `supports` properties. + +Let's take the block we wrote in the previous chapter (example 3) and with just a single line of code, add support for text, link and background color customizations. + +Here's the exact same code we used to register the block previously. + +{% codetabs %} +{% JSX %} + +```jsx +import { registerBlockType } from '@wordpress/blocks'; +import { useBlockProps, RichText } from '@wordpress/block-editor'; + +registerBlockType( 'gutenberg-examples/example-03-editable-esnext', { + apiVersion: 2, + title: 'Example: Basic with block supports', + icon: 'universal-access-alt', + category: 'design', + attributes: { + content: { + type: 'array', + source: 'children', + selector: 'p', + }, + }, + example: { + attributes: { + content: 'Hello World', + }, + }, + edit: ( props ) => { + const { + attributes: { content }, + setAttributes, + className, + } = props; + const blockProps = useBlockProps(); + const onChangeContent = ( newContent ) => { + setAttributes( { content: newContent } ); + }; + return ( + <RichText + { ...blockProps } + tagName="p" + onChange={ onChangeContent } + value={ content } + /> + ); + }, + save: ( props ) => { + const blockProps = useBlockProps.save(); + return ( + <RichText.Content + { ...blockProps } + tagName="p" + value={ props.attributes.content } + /> + ); + }, +} ); +``` + +{% Plain %} + +```js +( function ( blocks, blockEditor, element ) { + var el = element.createElement; + var RichText = blockEditor.RichText; + var useBlockProps = blockEditor.useBlockProps; + + blocks.registerBlockType( 'gutenberg-examples/example-03-editable', { + apiVersion: 2, + title: 'Example: Basic with block supports', + icon: 'universal-access-alt', + category: 'design', + + attributes: { + content: { + type: 'array', + source: 'children', + selector: 'p', + }, + }, + example: { + attributes: { + content: 'Hello World', + }, + }, + edit: function ( props ) { + var blockProps = useBlockProps(); + var content = props.attributes.content; + function onChangeContent( newContent ) { + props.setAttributes( { content: newContent } ); + } + + return el( + RichText, + Object.assign( blockProps, { + tagName: 'p', + onChange: onChangeContent, + value: content, + } ) + ); + }, + + save: function ( props ) { + var blockProps = useBlockProps.save(); + return el( + RichText.Content, + Object.assign( blockProps, { + tagName: 'p', + value: props.attributes.content, + } ) + ); + }, + } ); +} )( window.wp.blocks, window.wp.blockEditor, window.wp.element ); +``` + +{% end %} + +Now, let's alter the block.json file for that block, and add the supports key. (If you're not using a block.json file, you can also add the key to the `registerBlockType` function call) + +```json +{ + "apiVersion": 2, + "name": "gutenberg-examples/example-03-editable-esnext", + "title": "Example: Basic with block supports", + "icon": "universal-access-alt", + "category": "layout", + "editorScript": "file:./build/index.js", + "supports": { + "color": { + "text": true, + "background": true, + "link": true + } + } +} +``` + +And that's it, the addition of the "supports" key above, will automatically make the following changes to the block: + + - Add a `style` attribute to the block to store the link, text and background colors. + - Add a "Colors" panel to the sidebar of the block editor to allow users to tweak the text, link and background colors. + - Automatically use the `theme.json` config: allow disabling colors, inherit palettes... + - Automatically inject the right styles and apply them to the block wrapper when the user make changes to the colors. + +To learn more about the block supports and see all the available properties that you can enable for your own blocks, please refer to [the supports documentation](/docs/reference-guides/block-api/block-supports.md). diff --git a/docs/how-to-guides/block-tutorial/creating-dynamic-blocks.md b/docs/how-to-guides/block-tutorial/creating-dynamic-blocks.md index bf86d303fc643..7b5f2cb7fe086 100644 --- a/docs/how-to-guides/block-tutorial/creating-dynamic-blocks.md +++ b/docs/how-to-guides/block-tutorial/creating-dynamic-blocks.md @@ -18,11 +18,11 @@ Block attributes can be used for any content or setting you want to save for tha The following code example shows how to create a dynamic block that shows only the last post as a link. {% codetabs %} -{% ESNext %} +{% JSX %} ```jsx import { registerBlockType } from '@wordpress/blocks'; -import { withSelect } from '@wordpress/data'; +import { useSelect } from '@wordpress/data'; import { useBlockProps } from '@wordpress/block-editor'; registerBlockType( 'gutenberg-examples/example-dynamic', { @@ -31,12 +31,11 @@ registerBlockType( 'gutenberg-examples/example-dynamic', { icon: 'megaphone', category: 'widgets', - edit: withSelect( ( select ) => { - return { - posts: select( 'core' ).getEntityRecords( 'postType', 'post' ), - }; - } )( ( { posts } ) => { + edit: () => { const blockProps = useBlockProps(); + const posts = useSelect( ( select ) => { + return select( 'core' ).getEntityRecords( 'postType', 'post' ); + }, [] ); return ( <div { ...blockProps }> @@ -49,17 +48,17 @@ registerBlockType( 'gutenberg-examples/example-dynamic', { ) } </div> ); - } ), + }, } ); ``` -{% ES5 %} +{% Plain %} ```js ( function ( blocks, element, data, blockEditor ) { var el = element.createElement, registerBlockType = blocks.registerBlockType, - withSelect = data.withSelect, + useSelect = data.useSelect, useBlockProps = blockEditor.useBlockProps; registerBlockType( 'gutenberg-examples/example-dynamic', { @@ -67,24 +66,23 @@ registerBlockType( 'gutenberg-examples/example-dynamic', { title: 'Example: last post', icon: 'megaphone', category: 'widgets', - edit: withSelect( function ( select ) { - return { - posts: select( 'core' ).getEntityRecords( 'postType', 'post' ), - }; - } )( function ( props ) { - var blockProps = useBlockProps(); + edit: function () { var content; - if ( ! props.posts ) { + var blockProps = useBlockProps(); + var posts = useSelect( function ( select ) { + return select( 'core' ).getEntityRecords( 'postType', 'post' ); + }, [] ); + if ( ! posts ) { content = 'Loading...'; - } else if ( props.posts.length === 0 ) { + } else if ( posts.length === 0 ) { content = 'No posts'; } else { - var post = props.posts[ 0 ]; + var post = posts[ 0 ]; content = el( 'a', { href: post.link }, post.title.rendered ); } return el( 'div', blockProps, content ); - } ), + }, } ); } )( window.wp.blocks, @@ -150,6 +148,8 @@ There are a few things to notice: - The built-in `save` function just returns `null` because the rendering is performed server-side. - The server-side rendering is a function taking the block and the block inner content as arguments, and returning the markup (quite similar to shortcodes) +**Note :** For common customization settings including color, border, spacing customization and more, we will see on the [next chapter](/docs/how-to-guides/block-tutorial/block-supports-in-dynamic-blocks.md) how you can rely on block supports to provide such functionality in an efficient way. + ## Live rendering in the block editor Gutenberg 2.8 added the [`<ServerSideRender>`](/packages/server-side-render/README.md) block which enables rendering to take place on the server using PHP rather than in JavaScript. @@ -157,7 +157,7 @@ Gutenberg 2.8 added the [`<ServerSideRender>`](/packages/server-side-render/READ _Server-side render is meant as a fallback; client-side rendering in JavaScript is always preferred (client rendering is faster and allows better editor manipulation)._ {% codetabs %} -{% ESNext %} +{% JSX %} ```jsx import { registerBlockType } from '@wordpress/blocks'; @@ -184,7 +184,7 @@ registerBlockType( 'gutenberg-examples/example-dynamic', { } ); ``` -{% ES5 %} +{% Plain %} ```js ( function ( blocks, element, serverSideRender, blockEditor ) { @@ -221,4 +221,4 @@ registerBlockType( 'gutenberg-examples/example-dynamic', { {% end %} -Note that this code uses the `wp-server-side-render` package but not `wp-data`. Make sure to update the dependencies in the PHP code. You can use wp-scripts and ESNext setup for auto dependencies (see the [gutenberg-examples repo](https://github.com/WordPress/gutenberg-examples/tree/HEAD/01-basic-esnext) for PHP code setup). +Note that this code uses the `wp-server-side-render` package but not `wp-data`. Make sure to update the dependencies in the PHP code. You can use wp-scripts to automatically build dependencies (see the [gutenberg-examples repo](https://github.com/WordPress/gutenberg-examples/tree/HEAD/01-basic-esnext) for PHP code setup). diff --git a/docs/how-to-guides/block-tutorial/generate-blocks-with-wp-cli.md b/docs/how-to-guides/block-tutorial/generate-blocks-with-wp-cli.md index b2b4c9efb8930..891f8e7d4e1b8 100644 --- a/docs/how-to-guides/block-tutorial/generate-blocks-with-wp-cli.md +++ b/docs/how-to-guides/block-tutorial/generate-blocks-with-wp-cli.md @@ -4,4 +4,4 @@ **Deprecated:** It is no longer recommended to use WP-CLI or create-guten-block to generate block scaffolding. -The official script to generate a block is the new [@wordpress/create-block](/packages/create-block/README.md) package. This package follows the new block directory guidelines, and creates the proper block, environment, and standards set by the project. See the new [Create a Block tutorial](/docs/getting-started/tutorials/create-block/README.md) for a complete walk-through. +The official script to generate a block is the new [@wordpress/create-block](/packages/create-block/README.md) package. This package follows the new block directory guidelines, and creates the proper block, environment, and standards set by the project. See the new [Create a Block tutorial](/docs/getting-started/create-block/README.md) for a complete walk-through. diff --git a/docs/how-to-guides/block-tutorial/introducing-attributes-and-editable-fields.md b/docs/how-to-guides/block-tutorial/introducing-attributes-and-editable-fields.md index ed0a708c927d4..c95965b04bb69 100644 --- a/docs/how-to-guides/block-tutorial/introducing-attributes-and-editable-fields.md +++ b/docs/how-to-guides/block-tutorial/introducing-attributes-and-editable-fields.md @@ -30,7 +30,7 @@ There are a number of [components available](/docs/reference-guides/packages/pac The `RichText` component can be considered as a super-powered `textarea` element, enabling rich content editing including bold, italics, hyperlinks, etc. -To use the `RichText` component, and using ES5 code, remember to add `wp-editor` to the dependency array of registered script handles when calling `wp_register_script`. +To use the `RichText` component, and using ES5 code, remember to add `wp-block-editor` to the dependency array of registered script handles when calling `wp_register_script`. ```php // automatically load dependencies and version @@ -53,7 +53,7 @@ Because `RichText` allows for nested nodes, you'll most often use it in conjunct Here is the complete block definition for Example 03. {% codetabs %} -{% ESNext %} +{% JSX %} ```jsx import { registerBlockType } from '@wordpress/blocks'; @@ -108,7 +108,7 @@ registerBlockType( 'gutenberg-examples/example-03-editable-esnext', { } ); ``` -{% ES5 %} +{% Plain %} ```js ( function ( blocks, blockEditor, element ) { diff --git a/docs/how-to-guides/block-tutorial/nested-blocks-inner-blocks.md b/docs/how-to-guides/block-tutorial/nested-blocks-inner-blocks.md index 3c6e8cb2418aa..aff5e2852fae7 100644 --- a/docs/how-to-guides/block-tutorial/nested-blocks-inner-blocks.md +++ b/docs/how-to-guides/block-tutorial/nested-blocks-inner-blocks.md @@ -7,7 +7,7 @@ Note: A single block can only contain one `InnerBlock` component. Here is the basic InnerBlocks usage. {% codetabs %} -{% ESNext %} +{% JSX %} ```js import { registerBlockType } from '@wordpress/blocks'; @@ -38,7 +38,7 @@ registerBlockType( 'gutenberg-examples/example-06', { } ); ``` -{% ES5 %} +{% Plain %} ```js ( function ( blocks, element, blockEditor ) { @@ -79,20 +79,20 @@ const ALLOWED_BLOCKS = [ 'core/image', 'core/paragraph' ]; ## Orientation -By default, `InnerBlocks` expects its blocks to be shown in a vertical list. A valid use-case is to style InnerBlocks to appear horizontally. When blocks are styled in such a way, the `orientation` prop can be used to indicate a horizontal layout: +By default, `InnerBlocks` expects its blocks to be shown in a vertical list. A valid use-case is to style inner blocks to appear horizontally, for instance by adding CSS flex or grid properties to the inner blocks wrapper. When blocks are styled in such a way, the `orientation` prop can be set to indicate that a horizontal layout is being used: ```js <InnerBlocks orientation="horizontal" /> ``` -Specifying this prop will result in the block movers being shown horizontally, and also ensure drag and drop works correctly. +Specifying this prop does not affect the layout of the inner blocks, but results in the block mover icons in the child blocks being displayed horizontally, and also ensures that drag and drop works correctly. ## Template Use the template property to define a set of blocks that prefill the InnerBlocks component when inserted. You can set attributes on the blocks to define their use. The example below shows a book review template using InnerBlocks component and setting placeholders values to show the block usage. {% codetabs %} -{% ESNext %} +{% JSX %} ```js const MY_TEMPLATE = [ @@ -113,7 +113,7 @@ const MY_TEMPLATE = [ }, ``` -{% ES5 %} +{% Plain %} ```js const MY_TEMPLATE = [ @@ -137,7 +137,7 @@ const MY_TEMPLATE = [ {% end %} -Use the `templateLock` property to lock down the template. Using `all` locks the template complete, no changes can be made. Using `insert` prevents additional blocks to be inserted, but existing blocks can be reordered. See [templateLock documentation](https://github.com/WordPress/gutenberg/tree/HEAD/packages/block-editor/src/components/inner-blocks/README.md#templatelock) for additional information. +Use the `templateLock` property to lock down the template. Using `all` locks the template completely so no changes can be made. Using `insert` prevents additional blocks from being inserted, but existing blocks can be reordered. See [templateLock documentation](https://github.com/WordPress/gutenberg/tree/HEAD/packages/block-editor/src/components/inner-blocks/README.md#templatelock) for additional information. ### Post Template @@ -155,18 +155,30 @@ add_action( 'init', function() { } ); ``` -## Parent-Child InnerBlocks +## Child InnerBlocks: Parent and Ancestors -A common pattern for using InnerBlocks is to create a custom block that will be included only in the InnerBlocks. An example of this is the Columns block, that creates a single parent block called `columns` and then creates an child block called `column`. The parent block is defined to only allow the child blocks. See [Column code for reference](https://github.com/WordPress/gutenberg/tree/HEAD/packages/block-library/src/column). +A common pattern for using InnerBlocks is to create a custom block that will be included only in the InnerBlocks. + +An example of this is the Columns block, that creates a single parent block called `columns` and then creates an child block called `column`. The parent block is defined to only allow the child blocks. See [Column code for reference](https://github.com/WordPress/gutenberg/tree/HEAD/packages/block-library/src/column). When defining a child block, use the `parent` block setting to define which block is the parent. This prevents the block showing in the inserter outside of the InnerBlock it is defined for. -```js -export const settings = { - title: __( 'Column' ), - parent: [ 'core/columns' ], - icon, - description: __( 'A single column within a columns block.' ), - //... -}; +```json +{ + "title": "Column", + "name": "core/column", + "parent": [ "core/columns" ], + // ... +} +``` + +Another example is using the `ancestors` block setting to define a block that must be present as an ancestor, but it doesn't need to be the direct parent (like with `parent`). This prevents the block from showing in the inserter if the ancestor is not in the tree, but other blocks can be added in between, like a Columns or Group block. See [Comment Author Name code for reference](https://github.com/WordPress/gutenberg/tree/HEAD/packages/block-library/src/comment-author-name). + +```json +{ + "title": "Comment Author Name", + "name": "core/comment-author-name", + "ancestor": [ "core/comment-template" ], + // ... +} ``` diff --git a/docs/how-to-guides/block-tutorial/writing-your-first-block-type.md b/docs/how-to-guides/block-tutorial/writing-your-first-block-type.md index b0a0551485238..48f6726964120 100644 --- a/docs/how-to-guides/block-tutorial/writing-your-first-block-type.md +++ b/docs/how-to-guides/block-tutorial/writing-your-first-block-type.md @@ -1,137 +1,175 @@ -# Writing Your First Block Type +# Create a basic block -To keep things simple for our first example, let's create a new block type which displays a styled message in a post. At this point, we won't allow the user to edit the message. We'll learn more about editable fields in later sections. +This guide takes you through creating a basic block to display a message in a post. This message will be fixed, we won't allow the user to edit the message, the goal of the guide is to show how to register and load a block. -Blocks containing static content are implemented entirely in JavaScript using the `registerBlockType` function. This function is responsible for specifying the blueprint of a block, describing the behaviors necessary for the editor to understand how it appears, changes when edited, and is ultimately saved in the post's content. +## Overview -## Enqueuing Block Scripts +There are two main types of blocks: static and dynamic, this guide focuses on static blocks. A static block is used to insert HTML content into the post and save it with the post. A dynamic block builds the content on the fly when rendered on the front end, see the [dynamic blocks guide](/docs/how-to-guides/block-tutorial/creating-dynamic-blocks.md). -While the block's editor behaviors are implemented in JavaScript, you'll need to register your block server-side to ensure that the script is enqueued when the editor loads. Register scripts and styles using [`wp_register_script`](https://developer.wordpress.org/reference/functions/wp_register_script/) and [`wp_register_style`](https://developer.wordpress.org/reference/functions/wp_register_style/), then assign these as handles associated with your block using the `script`, `style`, `editor_script`, and `editor_style` block type registration settings. +This guide focuses on just the block, see the [Create a Block tutorial](/docs/getting-started/create-block/README.md) for a complete setup. -The `editor_script` and `editor_style` files will only be enqueued in the editor, while the `script` and `style` will be enqueued both in the editor and when viewing a post on the front of your site. +## Before you start -```php -<?php -/* -Plugin Name: Gutenberg examples 01 -*/ -function gutenberg_examples_01_register_block() { +Static blocks are implemented in JavaScript, so a basic level of JavaScript is helpful, see the [Getting Started with JavaScript](/docs/how-to-guides/javascript/README.md) for a refresher. + +Blocks are added to WordPress using plugins, so you will need: + +- WordPress development environment, see [setup guide](/docs/getting-started/devenv/README.md) +- JavaScript build tools (node/npm) if using JSX example + +## Step-by-step guide - // automatically load dependencies and version - $asset_file = include( plugin_dir_path( __FILE__ ) . 'build/index.asset.php'); +### Step 1: Configure block.json - wp_register_script( - 'gutenberg-examples-01-esnext', - plugins_url( 'build/index.js', __FILE__ ), - $asset_file['dependencies'], - $asset_file['version'] - ); +The functions of a static block are defined in JavaScript, however the settings and other metadata should be defined in a block.json file. - register_block_type( 'gutenberg-examples/example-01-basic-esnext', array( - 'api_version' => 2, - 'editor_script' => 'gutenberg-examples-01-esnext', - ) ); +Here are the basic settings: +- `apiVersion`: Block API version +- `title`: Block title shown in inserter +- `name`: Unique name defines your block +- `category`: Category in inserter (text, media, design, widgets, theme, embed) +- `icon`: Dashicon icon displayed for block +- `editorScript`: JavaScript file to load for block + +The `block.json` file should be added to your plugin. To start a new plugin, create a directory in `/wp-content/plugins/` in your WordPress. + +Create a basic `block.json` file there: + +{% codetabs %} +{% JSX %} + +```json +{ + "apiVersion": 2, + "title": "Example: Basic (ESNext)", + "name": "gutenberg-examples/example-01-basic-esnext", + "category": "layout", + "icon": "universal-access-alt", + "editorScript": "file:./build/index.js" } -add_action( 'init', 'gutenberg_examples_01_register_block' ); ``` -Note the above example, shows using the [wp-scripts build step](/docs/how-to-guides/javascript/js-build-setup/) that automatically sets dependencies and versions the file. +{% Plain %} + +```json +{ + "apiVersion": 2, + "title": "Example: Basic", + "name": "gutenberg-examples/example-01-basic", + "category": "layout", + "icon": "universal-access-alt", + "editorScript": "file:./block.js" +} +``` + +{% end %} + +### Step 2: Register block in plugin + +With the `block.json` in place, the registration for the block is a single function call in PHP, this will setup the block and JavaScript file specified in the `editorScript` property to load in the editor. + +Create a full plugin file, `index.php` like the following, the same PHP code works for both JSX and Plain code. + +```php +<?php +/** + * Plugin Name: Gutenberg examples 01 + */ +function gutenberg_examples_01_register_block() { + register_block_type( __DIR__ ); +} +add_action( 'init', 'gutenberg_examples_01_register_block' ); +``` -If you were using the ES5 code, you would specify `array( 'wp-blocks', 'wp-element' )` as the dependency array. See the [example 01](https://github.com/WordPress/gutenberg-examples/blob/HEAD/01-basic/index.php) in Gutenberg Examples repository for full syntax. +### Step 3: Block edit and save functions -- **`wp-blocks`** includes block type registration and related functions -- **`wp-element`** includes the [WordPress Element abstraction](/packages/element/README.md) for describing the structure of your blocks +The `editorScript` entry is enqueued automatically in the block editor. This file contains the JavaScript portion of the block registration and defines two important functions for the block, the `edit` and `save` functions. -## Registering the Block +The `edit` function is a component that is shown in the editor when the block is inserted. -With the script enqueued, let's look at the implementation of the block itself: +The `save` function is a component that defines the final markup returned by the block and saved in `post_content`. {% codetabs %} -{% ESNext %} +{% JSX %} + +Add the following in `src/index.js` ```jsx +/** + * WordPress dependencies + */ import { registerBlockType } from '@wordpress/blocks'; -import { useBlockProps } from '@wordpress/block-editor'; - -const blockStyle = { - backgroundColor: '#900', - color: '#fff', - padding: '20px', -}; +// Register the block registerBlockType( 'gutenberg-examples/example-01-basic-esnext', { - apiVersion: 2, - title: 'Example: Basic (esnext)', - icon: 'universal-access-alt', - category: 'design', - example: {}, - edit() { - const blockProps = useBlockProps( { style: blockStyle } ); - - return ( - <div { ...blockProps }>Hello World (from the editor).</div> - ); + edit: function () { + return <p> Hello world (from the editor)</p>; }, - save() { - const blockProps = useBlockProps.save( { style: blockStyle } ); - - return ( - <div { ...blockProps }> - Hello World (from the frontend). - </div> - ); + save: function () { + return <p> Hola mundo (from the frontend) </p>; }, } ); ``` -{% ES5 %} +{% Plain %} + +Add the following to `block.js` ```js -( function ( blocks, element, blockEditor ) { +( function ( blocks, element ) { var el = element.createElement; - var useBlockProps = blockEditor.useBlockProps; - - var blockStyle = { - backgroundColor: '#900', - color: '#fff', - padding: '20px', - }; blocks.registerBlockType( 'gutenberg-examples/example-01-basic', { - apiVersion: 2, - title: 'Example: Basic', - icon: 'universal-access-alt', - category: 'design', - example: {}, edit: function () { - var blockProps = useBlockProps( { style: blockStyle } ); - return el( - 'p', - blockProps, - 'Hello World (from the editor).' - ); + return el( 'p', {}, 'Hello World (from the editor).' ); }, save: function () { - var blockProps = useBlockProps.save( { style: blockStyle } ); - return el( - 'p', - blockProps, - 'Hello World (from the frontend).' - ); + return el( 'p', {}, 'Hola mundo (from the frontend).' ); }, } ); -} )( window.wp.blocks, window.wp.element, window.wp.blockEditor ); +} )( window.wp.blocks, window.wp.element ); ``` {% end %} -_By now you should be able to see `Hello World (from the editor).` in the admin side and `Hello World (from the frontend).` on the frontend side._ +NOTE: If using the JSX version, you need to run `npm run build` and it will create the JavaScript file that is loaded in the editor at `build/index.js` + +### Step 4: Confirm + +Open your editor and try adding your new block. It will show in the inserter using the `title`. +When inserted you will see the `Hello World (from the editor)` message. + +When you save the post and view it published, you will see the `Hola mundo (from the frontend)` message. + +**Troubleshooting** - If you run into any issues, here are a few things to try: + +- Check the filenames are correct and loading properly, +- Check the developer console in your browser for errors, +- If using JSX remember to build after each change + +## Conclusion + +This shows the most basic static block. The [gutenberg-examples](https://github.com/WordPress/gutenberg-examples) repository has complete examples for both. + +- [Basic Example with JSX build](https://github.com/WordPress/gutenberg-examples/tree/trunk/blocks-jsx/01-basic-esnext) + +- [Basic Example Plain JavaScript](https://github.com/WordPress/gutenberg-examples/tree/trunk/blocks-non-jsx/01-basic), + +**NOTE:** The examples include a more complete block setup with translation features included, it is recommended to follow those examples for a production block. The internationalization features were left out of this guide for simplicity and focusing on the very basics of a block. + +### Additional + +A couple of things to note when creating your blocks: + +- A block name must be prefixed with a namespace specific to your plugin. This helps prevent conflicts when more than one plugin registers a block with the same name. In this example, the namespace is `gutenberg-examples`. + +- Block names _must_ include only lowercase alphanumeric characters or dashes and start with a letter. Example: `my-plugin/my-custom-block`. -Once a block is registered, you should immediately see that it becomes available as an option in the editor inserter dialog, using values from `title`, `icon`, and `category` to organize its display. You can choose an icon from any included in the built-in [Dashicons icon set](https://developer.wordpress.org/resource/dashicons/), or provide a [custom svg element](/docs/reference-guides/block-api/block-registration.md#icon-optional). +### Resources -A block name must be prefixed with a namespace specific to your plugin. This helps prevent conflicts when more than one plugin registers a block with the same name. In this example, the namespace is `gutenberg-examples`. +- block.json [metadata reference](/docs/reference-guides/block-api/block-metadata.md) documentation -Block names _must_ include only lowercase alphanumeric characters or dashes and start with a letter. Example: `my-plugin/my-custom-block`. +- Block [edit and save function reference](/docs/reference-guides/block-api/block-edit-save.md) -The `edit` and `save` functions describe the structure of your block in the context of the editor and the saved content respectively. While the difference is not obvious in this simple example, in the following sections we'll explore how these are used to enable customization of the block in the editor preview. +- [Dashicons icon set](https://developer.wordpress.org/resource/dashicons/) diff --git a/docs/how-to-guides/data-basics/1-data-basics-setup.md b/docs/how-to-guides/data-basics/1-data-basics-setup.md new file mode 100644 index 0000000000000..e899da5bf4a1d --- /dev/null +++ b/docs/how-to-guides/data-basics/1-data-basics-setup.md @@ -0,0 +1,193 @@ +# Setup + +We will build the application as a WordPress plugin, which means you need to have WordPress itself installed. One way to do this is by following the instructions on the [Getting Started](/docs/contributors/code/getting-started-with-code-contribution.md) page. Once your setup is complete, you can follow along with the rest of this tutorial. + +Also, this tutorial will lean heavily on Redux concepts such as state, actions, and selectors. If you are not familiar with them, you may want to start by reviewing [Getting Started With Redux](https://redux.js.org/introduction/getting-started). + +## Creating a plugin + +We'll do all the development inside of a WordPress plugin. Let's start by creating a `wp-content/plugins/my-first-gutenberg-app` directory in your local WordPress environment. We will need to create four files inside that directory: + +- my-first-gutenberg-app.php – to create a new admin page +- src/index.js – for our JavaScript application +- style.css – for the minimal stylesheet +- package.json – for the build process + +Go ahead and create these files using the following snippets: + +**src/index.js:** + +```js +import { render } from '@wordpress/element'; + +function MyFirstApp() { + return <span>Hello from JavaScript!</span>; +} + +window.addEventListener( + 'load', + function () { + render( + <MyFirstApp />, + document.querySelector( '#my-first-gutenberg-app' ) + ); + }, + false +); +``` + +**style.css:** + +```css +.toplevel_page_my-first-gutenberg-app #wpcontent { + background: #fff; + height: 1000px; +} +#my-first-gutenberg-app { + max-width: 500px; +} +#my-first-gutenberg-app ul, +#my-first-gutenberg-app ul li { + list-style-type: disc; +} +.my-gutenberg-form .form-buttons { + display: flex; + margin-top: 20px; + margin-left: 1px; +} +.my-gutenberg-form .form-error { + color: #cc1818; +} +.my-gutenberg-form .form-buttons button { + margin-right: 4px; +} +.my-gutenberg-form .form-buttons .components-spinner { + margin-top: 0; +} +#my-first-gutenberg-app ul { + padding-left: 20px; +} +#my-first-gutenberg-app .components-search-control__input { + height: 36px; + margin-left: 0; +} +``` + +**my-first-gutenberg-app.php:** + +```php +<?php +/** + * Plugin Name: My first Gutenberg App + * + */ + +function my_admin_menu() { + // Create a new admin page for our app. + add_menu_page( + __( 'My first Gutenberg app', 'gutenberg' ), + __( 'My first Gutenberg app', 'gutenberg' ), + 'manage_options', + 'my-first-gutenberg-app', + function () { + echo ' + <h2>Pages</h2> + <div id="my-first-gutenberg-app"></div> + '; + }, + 'dashicons-schedule', + 3 + ); +} + +add_action( 'admin_menu', 'my_admin_menu' ); + +function load_custom_wp_admin_scripts( $hook ) { + // Load only on ?page=my-first-gutenberg-app. + if ( 'toplevel_page_my-first-gutenberg-app' !== $hook ) { + return; + } + + // Load the required WordPress packages. + + // Automatically load imported dependencies and assets version. + $asset_file = include plugin_dir_path( __FILE__ ) . 'build/index.asset.php'; + + // Enqueue CSS dependencies. + foreach ( $asset_file['dependencies'] as $style ) { + wp_enqueue_style( $style ); + } + + // Load our app.js. + wp_register_script( + 'my-first-gutenberg-app', + plugins_url( 'build/index.js', __FILE__ ), + $asset_file['dependencies'], + $asset_file['version'] + ); + wp_enqueue_script( 'my-first-gutenberg-app' ); + + // Load our style.css. + wp_register_style( + 'my-first-gutenberg-app', + plugins_url( 'style.css', __FILE__ ), + array(), + $asset_file['version'] + ); + wp_enqueue_style( 'my-first-gutenberg-app' ); +} + +add_action( 'admin_enqueue_scripts', 'load_custom_wp_admin_scripts' ); +``` + +**package.json:** + +```json +{ + "name": "05-recipe-card-esnext", + "version": "1.1.0", + "private": true, + "description": "Example: Recipe Card (ESNext).", + "author": "The WordPress Contributors", + "license": "GPL-2.0-or-later", + "keywords": [ "WordPress", "block" ], + "homepage": "https://github.com/WordPress/gutenberg-examples/", + "repository": "git+https://github.com/WordPress/gutenberg-examples.git", + "bugs": { + "url": "https://github.com/WordPress/gutenberg-examples/issues" + }, + "main": "build/index.js", + "devDependencies": { + "@wordpress/scripts": "^18.0.1" + }, + "scripts": { + "build": "wp-scripts build", + "format": "wp-scripts format", + "lint:js": "wp-scripts lint-js", + "packages-update": "wp-scripts packages-update", + "start": "wp-scripts start" + } +} +``` + +## Setting up the build pipeline + +This tutorial will proceed assuming the reader is familiar with ESNext syntax and the concept of build tools (like webpack). If that sounds confusing, you may want to review the [Getting started with JavaScript Build Setup](/docs/how-to-guides/javascript/js-build-setup.md) first. + +To install the build tool, navigate to the plugin directory using your terminal and run `npm install`. + +Once all the dependencies are in place, all that's left is to run `npm start` and voila! A watcher will run in the terminal. You can then edit away in your text editor; after each save, it will automatically build. + +## Testing if it worked + +If you now go to the Plugins page, you should see a plugin called **My first Gutenberg App**. Go ahead and activate it. A new menu item labeled _My first Gutenberg app_ should show up. Once you click it, you will see a page that says _Hello from JavaScript!_: + +![](https://raw.githubusercontent.com/WordPress/gutenberg/HEAD/docs/how-to-guides/data-basics/media/setup/hello-from-js.jpg) + +Congratulations! You are now ready to start building the app! + +## What's next? + +- Previous part: [Introduction](/docs/how-to-guides/data-basics/README.md) +- Next part: [Building a basic list of pages](/docs/how-to-guides/data-basics/2-building-a-list-of-pages.md) +- (optional) Review the [finished app](https://github.com/WordPress/gutenberg-examples/tree/trunk/09-code-data-basics-esnext) in the gutenberg-examples repository diff --git a/docs/how-to-guides/data-basics/2-building-a-list-of-pages.md b/docs/how-to-guides/data-basics/2-building-a-list-of-pages.md new file mode 100644 index 0000000000000..c830e9d3b21bd --- /dev/null +++ b/docs/how-to-guides/data-basics/2-building-a-list-of-pages.md @@ -0,0 +1,434 @@ +# Building a list of pages + +In this part, we will build a filterable list of all WordPress pages. This is what the app will look like at the end of this section: + +![](https://raw.githubusercontent.com/WordPress/gutenberg/HEAD/docs/how-to-guides/data-basics/media/list-of-pages/part1-finished.jpg) + +Let’s see how we can get there step by step. + +## Step 1: Build the PagesList component + +Let’s start by building a minimal React component to display the list of pages: + +```js +function MyFirstApp() { + const pages = [{ id: 'mock', title: 'Sample page' }] + return <PagesList pages={ pages }/>; +} + +function PagesList( { pages } ) { + return ( + <ul> + { pages?.map( page => ( + <li key={ page.id }> + { page.title } + </li> + ) ) } + </ul> + ); +} +``` + +Note that this component does not fetch any data yet, only presents the hardcoded list of pages. When you refresh the page, you should see the following: + +![](https://raw.githubusercontent.com/WordPress/gutenberg/HEAD/docs/how-to-guides/data-basics/media/list-of-pages/simple-list.jpg) + +## Step 2: Fetch the data + +The hard-coded sample page isn’t very useful. We want to display your actual WordPress pages so let’s fetch the actual list of pages from the [WordPress REST API](https://developer.wordpress.org/rest-api/). + +Before we start, let’s confirm we actually have some pages to fetch. Within WPAdmin, Navigate to Pages using the sidebar menu and ensure it shows at least four or five Pages: + +![](https://raw.githubusercontent.com/WordPress/gutenberg/HEAD/docs/how-to-guides/data-basics/media/list-of-pages/pages-list.jpg) + +If it doesn’t, go ahead and create a few pages – you can use the same titles as on the screenshot above. Be sure to _publish_ and not just _save_ them. + +Now that we have the data to work with, let’s dive into the code. We will take advantage of the [`@wordpress/core-data` package](https://github.com/WordPress/gutenberg/tree/trunk/packages/core-data) package which provides resolvers, selectors, and actions to work with the WordPress core API. `@wordpress/core-data` builds on top of the [`@wordpress/data` package](https://github.com/WordPress/gutenberg/tree/trunk/packages/data). + +To fetch the list of pages, we will use the [`getEntityRecords`](/docs/reference-guides/data/data-core/#getentityrecords) selector. In broad strokes, it will issue the correct API request, cache the results, and return the list of the records we need. Here’s how to use it: + +```js +wp.data.select( 'core' ).getEntityRecords( 'postType', 'page' ) +``` + +If you run that following snippet in your browser’s dev tools, you will see it returns `null`. Why? The pages are only requested by the `getEntityRecords` resolver after first running the _selector_. If you wait a moment and re-run it, it will return the list of all pages. + +Similarly, the `MyFirstApp` component needs to re-run the selector once the data is available. That’s exactly what the `useSelect` hook does: + +```js +import { useSelect } from '@wordpress/data'; +import { store as coreDataStore } from '@wordpress/core-data'; + +function MyFirstApp() { + const pages = useSelect( + select => + select( coreDataStore ).getEntityRecords( 'postType', 'page' ), + [] + ); + // ... +} +``` + +Note that we use an `import` statement inside index.js. This enables the plugin to automatically load the dependencies using `wp_enqueue_script`. Any references to `coreDataStore` are compiled to the same `wp.data` reference we use in browser's devtools. + +`useSelect` takes two arguments: a callback and dependencies. In broad strokes, it re-runs the callback whenever either the dependencies or the underlying data store changes. You can learn more about [useSelect](/packages/data/README.md#useselect) in the [data module documentation](/packages/data/README.md#useselect). + +Putting it together, we get the following code: + +```js +import { useSelect } from '@wordpress/data'; +import { store as coreDataStore } from '@wordpress/core-data'; +import { decodeEntities } from '@wordpress/html-entities'; + +function MyFirstApp() { + const pages = useSelect( + select => + select( coreDataStore ).getEntityRecords( 'postType', 'page' ), + [] + ); + return <PagesList pages={ pages }/>; +} + +function PagesList( { pages } ) { + return ( + <ul> + { pages?.map( page => ( + <li key={ page.id }> + { decodeEntities( page.title.rendered ) } + </li> + ) ) } + </ul> + ) +} +``` + +Note that post title may contain HTML entities like `á`, so we need to use the [`decodeEntities`](https://developer.wordpress.org/block-editor/reference-guides/packages/packages-html-entities/) function to replace them with the symbols they represent like `á`. + +Refreshing the page should display a list similar to this one: + +![](https://raw.githubusercontent.com/WordPress/gutenberg/HEAD/docs/how-to-guides/data-basics/media/list-of-pages/fetch-the-data.jpg) + +## Step 3: Turn it into a table + +```js +function PagesList( { pages } ) { + return ( + <table className="wp-list-table widefat fixed striped table-view-list"> + <thead> + <tr> + <th>Title</th> + </tr> + </thead> + <tbody> + { pages?.map( page => ( + <tr key={ page.id }> + <td>{ decodeEntities( page.title.rendered ) }</td> + </tr> + ) ) } + </tbody> + </table> + ); +} +``` + +![](https://raw.githubusercontent.com/WordPress/gutenberg/HEAD/docs/how-to-guides/data-basics/media/list-of-pages/make-a-table.jpg) + +## Step 4: Add a search box + +The list of pages is short for now; however, the longer it grows, the harder it is to work with. WordPress admins typically solves this problem with a search box – let’s implement one too! + +Let’s start by adding a search field: + +```js +import { SearchControl } from '@wordpress/components'; +import { useState, render } from '@wordpress/element'; + +function MyFirstApp() { + const [searchTerm, setSearchTerm] = useState( '' ); + // ... + return ( + <div> + <SearchControl + onChange={ setSearchTerm } + value={ searchTerm } + /> + {/* ... */ } + </div> + ) +} +``` + +Note that instead of using an `input` tag, we took advantage of the [SearchControl](https://developer.wordpress.org/block-editor/reference-guides/components/search-control/) component. This is what it looks like: + +![](https://raw.githubusercontent.com/WordPress/gutenberg/HEAD/docs/how-to-guides/data-basics/media/list-of-pages/filter-field.jpg) + +The field starts empty, and the contents are stored in the `searchTerm` state value. If you aren’t familiar with the [useState](https://reactjs.org/docs/hooks-state.html) hook, you can learn more in [React’s documentation](https://reactjs.org/docs/hooks-state.html). + +We can now request only the pages matching the `searchTerm`. + +After checking with the [WordPress API documentation](https://developer.wordpress.org/rest-api/reference/pages/), we see that the [/wp/v2/pages](https://developer.wordpress.org/rest-api/reference/pages/) endpoint accepts a `search` query parameter and uses it to _limit results to those matching a string_. But how can we use it? We can pass custom query parameters as the third argument to `getEntityRecords` as below: + +```js +wp.data.select( 'core' ).getEntityRecords( 'postType', 'page', { search: 'home' } ) +``` + +Running that snippet in your browser’s dev tools will trigger a request to `/wp/v2/pages?search=home` instead of just `/wp/v2/pages`. + +Let’s mirror this in our `useSelect` call as follows: + +```js +import { useSelect } from '@wordpress/data'; +import { store as coreDataStore } from '@wordpress/core-data'; + +function MyFirstApp() { + // ... + const { pages } = useSelect( select => { + const query = {}; + if ( searchTerm ) { + query.search = searchTerm; + } + return { + pages: select( coreDataStore ).getEntityRecords( 'postType', 'page', query ) + } + }, [searchTerm] ); + + // ... +} +``` + +The `searchTerm` is now used as a `search` query parameter when provided. Note that `searchTerm` is also specified inside the list of `useSelect` dependencies to make sure `getEntityRecords` is re-run when the `searchTerm` changes. + +Finally, here’s how `MyFirstApp` looks once we wire it all together: + +```js +import { SearchControl } from '@wordpress/components'; +import { useState, render } from '@wordpress/element'; +import { useSelect } from '@wordpress/data'; +import { store as coreDataStore } from '@wordpress/core-data'; + +function MyFirstApp() { + const [searchTerm, setSearchTerm] = useState( '' ); + const pages = useSelect( select => { + const query = {}; + if ( searchTerm ) { + query.search = searchTerm; + } + return select( coreDataStore ).getEntityRecords( 'postType', 'page', query ); + }, [searchTerm] ); + + return ( + <div> + <SearchControl + onChange={ setSearchTerm } + value={ searchTerm } + /> + <PagesList pages={ pages }/> + </div> + ) +} +``` + +Voila! We can now filter the results: + +![](https://raw.githubusercontent.com/WordPress/gutenberg/HEAD/docs/how-to-guides/data-basics/media/list-of-pages/filter.jpg) + +### Using core-data instead vs calling the API directly + +Let’s take a pause for a moment to consider the downsides of an alternative approach we could have taken - working with the API directly. Imagine we sent the API requests directly: + +```js +import { apiFetch } from '@wordpress/api-fetch'; +function MyFirstApp() { + // ... + const [pages, setPages] = useState( [] ); + useEffect( () => { + const url = '/wp-json/wp/v2/pages?search=' + searchTerm; + apiFetch( { url } ) + .then( setPages ) + }, [searchTerm] ); + // ... +} +``` + +Working outside of core-data, we would need to solve two problems here. + +Firstly, out-of-order updates. Searching for „About” would trigger five API requests filtering for `A`, `Ab`, `Abo`, `Abou`, and `About`. Theese requests could finish in a different order than they started. It is possible that _search=A_ would resolve after _ search=About_ and thus we’d display the wrong data. + +Gutenberg data helps by handling the asynchronous part behind the scenes. `useSelect` remembers the most recent call and returns only the data we expect. + +Secondly, every keystroke would trigger an API request. If you typed `About`, deleted it, and retyped it, it would issue 10 requests in total even though we could reuse the data. + +Gutenberg data helps by caching the responses to API requests triggered by `getEntityRecords()` and reuses them on subsequent calls. This is especially important when other components rely on the same entity records. + +All in all, the utilities built into core-data are designed to solve the typical problems so that you can focus on your application instead. + +## Step 5: Loading Indicator + +There is one problem with our search feature. We can’t be quite sure whether it’s still searching or showing no results: + +![](https://raw.githubusercontent.com/WordPress/gutenberg/HEAD/docs/how-to-guides/data-basics/media/list-of-pages/unclear-status.jpg) + +A few messages like _Loading…_ or _No results_ would clear it up. Let’s implement them! First, `PagesList` has to be aware of the current status: + +```js +import { SearchControl, Spinner } from '@wordpress/components'; +function PagesList( { hasResolved, pages } ) { + if ( !hasResolved ) { + return <Spinner/> + } + if ( !pages?.length ) { + return <div>No results</div> + } + // ... +} + +function MyFirstApp() { + // ... + + return ( + <div> + // ... + <PagesList hasResolved={ hasResolved } pages={ pages }/> + </div> + ) +} +``` + +Note that instead of building a custom loading indicator, we took advantage of the [Spinner](https://developer.wordpress.org/block-editor/reference-guides/components/spinner/) component. + +We still need to know whether the pages selector `hasResolved` or not. We can find out using the `hasFinishedResolution` selector: + +`wp.data.select('core').hasFinishedResolution( 'getEntityRecords', [ 'postType', 'page', { search: 'home' } ] )` + +It takes the name of the selector and the _exact same arguments you passed to that selector_ and returns either `true` if the data was already loaded or `false` if we’re still waiting. Let’s add it to `useSelect`: + +```js +import { useSelect } from '@wordpress/data'; +import { store as coreDataStore } from '@wordpress/core-data'; + +function MyFirstApp() { + // ... + const { pages, hasResolved } = useSelect( select => { + // ... + return { + pages: select( coreDataStore ).getEntityRecords( 'postType', 'page', query ), + hasResolved: + select( coreDataStore ).hasFinishedResolution( 'getEntityRecords', ['postType', 'page', query] ), + } + }, [searchTerm] ); + + // ... +} +``` + +There is just one last problem. It is easy to make a typo and end up passing different arguments to `getEntityRecords` and `hasFinishedResolution`. It is critical that they are identical. We can remove this risk by storing the arguments in a variable: + +```js +import { useSelect } from '@wordpress/data'; +import { store as coreDataStore } from '@wordpress/core-data'; +function MyFirstApp() { + // ... + const { pages, hasResolved } = useSelect( select => { + // ... + const selectorArgs = [ 'postType', 'page', query ]; + return { + pages: select( coreDataStore ).getEntityRecords( ...selectorArgs ), + hasResolved: + select( coreDataStore ).hasFinishedResolution( 'getEntityRecords', selectorArgs ), + } + }, [searchTerm] ); + + // ... +} +``` + +And voilà! That's it. + +### Wiring it all together + +All the pieces are in place, great! Here’s the complete JavaScript code of our app: + +```js +import { SearchControl, Spinner } from '@wordpress/components'; +import { useState, render } from '@wordpress/element'; +import { useSelect } from '@wordpress/data'; +import { store as coreDataStore } from '@wordpress/core-data'; + +function MyFirstApp() { + const [ searchTerm, setSearchTerm ] = useState( '' ); + const { pages, hasResolved } = useSelect( + ( select ) => { + const query = {}; + if ( searchTerm ) { + query.search = searchTerm; + } + const selectorArgs = [ 'postType', 'page', query ]; + return { + pages: select( coreDataStore ).getEntityRecords( + ...selectorArgs + ), + hasResolved: select( coreDataStore ).hasFinishedResolution( + 'getEntityRecords', + selectorArgs + ), + }; + }, + [ searchTerm ] + ); + + return ( + <div> + <SearchControl onChange={ setSearchTerm } value={ searchTerm } /> + <PagesList hasResolved={ hasResolved } pages={ pages } /> + </div> + ); +} + +function PagesList( { hasResolved, pages } ) { + if ( ! hasResolved ) { + return <Spinner />; + } + if ( ! pages?.length ) { + return <div>No results</div>; + } + + return ( + <table className="wp-list-table widefat fixed striped table-view-list"> + <thead> + <tr> + <td>Title</td> + </tr> + </thead> + <tbody> + { pages?.map( ( page ) => ( + <tr key={ page.id }> + <td>{ decodeEntities( page.title.rendered ) }</td> + </tr> + ) ) } + </tbody> + </table> + ); +} + +window.addEventListener( + 'load', + function () { + render( + <MyFirstApp />, + document.querySelector( '#my-first-gutenberg-app' ) + ); + }, + false +); +``` + +All that’s left is to refresh the page and enjoy the brand new status indicator: + +![](https://raw.githubusercontent.com/WordPress/gutenberg/HEAD/docs/how-to-guides/data-basics/media/list-of-pages/indicator.jpg) +![](https://raw.githubusercontent.com/WordPress/gutenberg/HEAD/docs/how-to-guides/data-basics/media/list-of-pages/no-results.jpg) + +## What's next? + +* **Previous part:** [Setup](/docs/how-to-guides/data-basics/1-data-basics-setup.md) +* **Next part:** [Building an edit form](/docs/how-to-guides/data-basics/3-building-an-edit-form.md) +* (optional) Review the [finished app](https://github.com/WordPress/gutenberg-examples/tree/trunk/09-code-data-basics-esnext) in the gutenberg-examples repository diff --git a/docs/how-to-guides/data-basics/3-building-an-edit-form.md b/docs/how-to-guides/data-basics/3-building-an-edit-form.md new file mode 100644 index 0000000000000..6fd8be0f75d4c --- /dev/null +++ b/docs/how-to-guides/data-basics/3-building-an-edit-form.md @@ -0,0 +1,544 @@ +# Building an edit form + +This part is about adding an *Edit* feature to our app. Here's a glimpse of what we're going to build: + +![](https://raw.githubusercontent.com/WordPress/gutenberg/HEAD/docs/how-to-guides/data-basics/media/edit-form/form-finished.png) + +### Step 1: Add an _Edit_ button + +We can't have an *Edit* form without an *Edit* button, so let's start by adding one to our `PagesList` component: + +```js +import { Button } from '@wordpress/components'; +import { decodeEntities } from '@wordpress/html-entities'; + +const PageEditButton = () => ( + <Button variant="primary"> + Edit + </Button> +) + +function PagesList( { hasResolved, pages } ) { + if ( ! hasResolved ) { + return <Spinner />; + } + if ( ! pages?.length ) { + return <div>No results</div>; + } + + return ( + <table className="wp-list-table widefat fixed striped table-view-list"> + <thead> + <tr> + <td>Title</td> + <td style={{width: 120}}>Actions</td> + </tr> + </thead> + <tbody> + { pages?.map( ( page ) => ( + <tr key={page.id}> + <td>{ decodeEntities( page.title.rendered ) }</td> + <td> + <PageEditButton pageId={ page.id } /> + </td> + </tr> + ) ) } + </tbody> + </table> + ); +} +``` + +The only change in `PagesList` is the additional column labeled _Actions_: + +![](https://raw.githubusercontent.com/WordPress/gutenberg/HEAD/docs/how-to-guides/data-basics/media/edit-form/edit-button.png) + +### Step 2: Display an _Edit_ form + +Our button looks nice but doesn't do anything yet. To display an edit form, we need to have one first – let's create it: + +```js +import { Button, TextControl } from '@wordpress/components'; +export function EditPageForm( { pageId, onCancel, onSaveFinished } ) { + return ( + <div className="my-gutenberg-form"> + <TextControl + value='' + label='Page title:' + /> + <div className="form-buttons"> + <Button onClick={ onSaveFinished } variant="primary"> + Save + </Button> + <Button onClick={ onCancel } variant="tertiary"> + Cancel + </Button> + </div> + </div> + ); +} +``` + +Now let's make the button display the form we just created. As this tutorial is not focused on web design, we will wire the two together using a component that requires the least amount of code: [`Modal`](https://developer.wordpress.org/block-editor/reference-guides/components/modal/). Let's update `PageEditButton` accordingly: + +```js +import { Button, Modal, TextControl } from '@wordpress/components'; + +function PageEditButton({ pageId }) { + const [ isOpen, setOpen ] = useState( false ); + const openModal = () => setOpen( true ); + const closeModal = () => setOpen( false ); + return ( + <> + <Button + onClick={ openModal } + variant="primary" + > + Edit + </Button> + { isOpen && ( + <Modal onRequestClose={ closeModal } title="Edit page"> + <EditPageForm + pageId={pageId} + onCancel={closeModal} + onSaveFinished={closeModal} + /> + </Modal> + ) } + </> + ) +} +``` + +When you click the *Edit* button now, you should see the following modal: + +![](https://raw.githubusercontent.com/WordPress/gutenberg/HEAD/docs/how-to-guides/data-basics/media/edit-form/form-scaffold.png) + +Great! We now have a basic user interface to work with. + +### Step 3: Populate the form with page details + +We want the `EditPageForm` to display the title of the currently edited page. You may have noticed that it doesn't receive a `page` prop, only `pageId`. That's okay. Gutenberg Data allows us to easily access entity records from any component. + +In this case, we need to use the [`getEntityRecord`](/docs/reference-guides/data/data-core/#getentityrecord) selector. The list of records is already available thanks to the `getEntityRecords` call in `MyFirstApp`, so there won't even be any additional HTTP requests involved – we'll get the cached record right away. + +Here's how you can try it in your browser's dev tools: + +```js +wp.data.select( 'core' ).getEntityRecord( 'postType', 'page', 9 ); // Replace 9 with an actual page ID +``` + +Let's update `EditPageForm` accordingly: + +```js +export function EditPageForm( { pageId, onCancel, onSaveFinished } ) { + const page = useSelect( + select => select( coreDataStore ).getEntityRecord( 'postType', 'page', pageId ), + [pageId] + ); + return ( + <div className="my-gutenberg-form"> + <TextControl + label='Page title:' + value={ page.title } + /> + { /* ... */ } + </div> + ); +} +``` + +Now it should look like that: + +![](https://raw.githubusercontent.com/WordPress/gutenberg/HEAD/docs/how-to-guides/data-basics/media/edit-form/form-populated.png) + +### Step 4: Making the Page title field editable + +There's one problem with our _Page title_ field: you can't edit it. It receives a fixed `value` but doesn't update it when typing. We need an `onChange` handler. + + +You may have seen a pattern similar to this one in other React apps. It's known as a ["controlled component"](https://reactjs.org/docs/forms.html#controlled-components): + +```js +export function VanillaReactForm({ initialTitle }) { + const [title, setTitle] = useState( initialTitle ); + return ( + <TextControl + value={ title } + onChange={ setTitle } + /> + ); +} +``` + +Updating entity records in Gutenberg Data is similar but instead of using `setTitle` to store in local (component level) state, we use the `editEntityRecord` action which stores the updates in the _Redux_ state. Here's how you can try it out in your browser's dev tools: + +```js +// We need a valid page ID to call editEntityRecord, so let's get the first available one using getEntityRecords. +const pageId = wp.data.select( 'core' ).getEntityRecords( 'postType', 'page' )[0].id; + +// Update the title +wp.data.dispatch( 'core' ).editEntityRecord( 'postType', 'page', pageId, { title: 'updated title' } ); +``` + +At this point, you may ask _how is `editEntityRecord` better than `useState`? The answer is that it offers a few features you wouldn't otherwise get. + +Firstly, we can save the changes as easily as we retrieve the data and ensure that all caches will be correctly updated. + +Secondly, the changes applied via `editEntityRecord` are easily undo-able via the `undo` and `redo` actions. + +Lastly, because the changes live in the _Redux_ state, they are "global" and can be accessed by other components. For example, we could make the `PagesList` display the currently edited title. + +To that last point, let's see what happens when we use `getEntityRecord` to access the entity record we just updated: + +```js +wp.data.select( 'core' ).getEntityRecord( 'postType', 'page', pageId ).title +``` + +It doesn't reflect the edits. What's going on? + +Well, `<PagesList />` renders the data returned by `getEntityRecord()`. If `getEntityRecord()` reflected the updated title, then anything the user types in the `TextControl` would be immediately displayed inside `<PagesList />`, too. This is not what we want. The edits shouldn't leak outside the form until the user decides to save them. + +Gutenberg Data solves this problem by making a distinction between *Entity Records* and *Edited Entity Records*. *Entity Records* reflect the data from the API and ignore any local edits, while *Edited Entity Records* also have all the local edits applied on top. Both co-exist in the Redux state at the same time. + +Let's see what happens if we call `getEditedEntityRecord`: + +```js +wp.data.select( 'core' ).getEditedEntityRecord( 'postType', 'page', pageId ).title +// "updated title" + +wp.data.select( 'core' ).getEntityRecord( 'postType', 'page', pageId ).title +// { "rendered": "<original, unchanged title>", "raw": "..." } +``` + +As you can see, the `title` of an Entity Record is an object, but the `title` of an Edited Entity record is a string. + +This is no accident. Fields like `title`, `excerpt`, and `content` may contain [shortcodes](https://developer.wordpress.org/apis/handbook/shortcode/) or [dynamic blocks](/docs/how-to-guides/block-tutorial/creating-dynamic-blocks.md), which means they can only be rendered on the server. For such fields, the REST API exposes both the `raw` markup _and_ the `rendered` string. For example, in the block editor, `content.rendered` could used as a visual preview, and `content.raw` could be used to populate the code editor. + +So why is the `content` of an Edited Entity Record a string? Since Javascript is not be able to properly render arbitrary block markup, it stores only the `raw` markup without the `rendered` part. And since that's a string, the entire field becomes a string. + +We can now update `EditPageForm` accordingly. We can access the actions using the [`useDispatch`](/packages/data/README.md#usedispatch) hook similarly to how we use `useSelect` to access selectors: + +```js +import { useDispatch } from '@wordpress/data'; + +export function EditPageForm( { pageId, onCancel, onSaveFinished } ) { + const page = useSelect( + select => select( coreDataStore ).getEditedEntityRecord( 'postType', 'page', pageId ), + [ pageId ] + ); + const { editEntityRecord } = useDispatch( coreDataStore ); + const handleChange = ( title ) => editEntityRecord( 'postType', 'page', pageId, { title } ); + + return ( + <div className="my-gutenberg-form"> + <TextControl + label="Page title:" + value={ page.title } + onChange={ handleChange } + /> + <div className="form-buttons"> + <Button onClick={ onSaveFinished } variant="primary"> + Save + </Button> + <Button onClick={ onCancel } variant="tertiary"> + Cancel + </Button> + </div> + </div> + ); +} +``` + +We added an `onChange` handler to keep track of edits via the `editEntityRecord` action and then changed the selector to `getEditedEntityRecord` so that `page.title` always reflects the changes. + +This is what it looks like now: + +![](https://raw.githubusercontent.com/WordPress/gutenberg/HEAD/docs/how-to-guides/data-basics/media/edit-form/form-editable.png) + +### Step 5: Saving the form data + +Now that we can edit the page title let's also make sure we can save it. In Gutenberg data, we save changes to the WordPress REST API using the `saveEditedEntityRecord` action. It sends the request, processes the result, and updates the cached data in the Redux state. + +Here's an example you may try in your browser's dev tools: + +```js +// Replace 9 with an actual page ID +wp.data.dispatch( 'core' ).editEntityRecord( 'postType', 'page', 9, { title: 'updated title' } ); +wp.data.dispatch( 'core' ).saveEditedEntityRecord( 'postType', 'page', 9 ); +``` + +The above snippet saved a new title. Unlike before, `getEntityRecord` now reflects the updated title: + +```js +// Replace 9 with an actual page ID +wp.data.select( 'core' ).getEntityRecord( 'postType', 'page', 9 ).title.rendered +// "updated title" +``` + +Entity records are updated to reflect any saved changes right after the REST API request is finished. + +This is how the `EditPageForm` looks like with a working *Save* button: + +```js +export function EditPageForm( { pageId, onCancel, onSaveFinished } ) { + // ... + const { saveEditedEntityRecord } = useDispatch( coreDataStore ); + const handleSave = () => saveEditedEntityRecord( 'postType', 'page', pageId ); + + return ( + <div className="my-gutenberg-form"> + {/* ... */} + <div className="form-buttons"> + <Button onClick={ handleSave } variant="primary"> + Save + </Button> + {/* ... */} + </div> + </div> + ); +} +``` + +It works, but there's still one thing to fix: the form modal doesn't automatically close because we never call `onSaveFinished`. Lucky for us, `saveEditedEntityRecord` returns a promise that resolves once the save operation is finished. Let's take advantage of it in `EditPageForm`: + +```js +export function EditPageForm( { pageId, onCancel, onSaveFinished } ) { + // ... + const handleSave = async () => { + await saveEditedEntityRecord( 'postType', 'page', pageId ); + onSaveFinished(); + }; + // ... +} +``` + +### Step 6: Handle errors + +We optimistically assumed that a *save* operation would always succeed. Unfortunately, it may fail in many ways: + +* The website can be down +* The update may be invalid +* The page could have been deleted by someone else in the meantime + +To tell the user when any of these happens, we have to make two adjustments. We don't want to close the form modal when the update fails. The promise returned by `saveEditedEntityRecord` is resolved with an updated record only if the update actually worked. When something goes wrong, it resolves with an empty value. Let's use it to keep the modal open: + +```js +export function EditPageForm( { pageId, onSaveFinished } ) { + // ... + const handleSave = async () => { + const updatedRecord = await saveEditedEntityRecord( 'postType', 'page', pageId ); + if ( updatedRecord ) { + onSaveFinished(); + } + }; + // ... +} +``` + +Great! Now, let's display an error message. The failure details can be grabbed using the `getLastEntitySaveError` selector: + +```js +// Replace 9 with an actual page ID +wp.data.select( 'core' ).getLastEntitySaveError( 'postType', 'page', 9 ) +``` + +Here's how we can use it in `EditPageForm`: + +```js +export function EditPageForm( { pageId, onSaveFinished } ) { + // ... + const { lastError, page } = useSelect( + select => ({ + page: select( coreDataStore ).getEditedEntityRecord( 'postType', 'page', pageId ), + lastError: select( coreDataStore ).getLastEntitySaveError( 'postType', 'page', pageId ) + }), + [ pageId ] + ) + // ... + return ( + <> + {/* ... */} + { lastError ? ( + <div className="form-error"> + Error: { lastError.message } + </div> + ) : false } + {/* ... */} + </> + ); +} +``` + +Great! `EditPageForm` is now fully aware of errors. + +Let's see that error message in action. We'll trigger an invalid update and let it fail. The post title is hard to break, so let's set a `date` property to `-1` instead – that's a guaranteed validation error: + +```js +export function EditPageForm( { pageId, onCancel, onSaveFinished } ) { + // ... + const handleChange = ( title ) => editEntityRecord( 'postType', 'page', pageId, { title, date: -1 } ); + // ... +} +``` + +Once you refresh the page, open the form, change the title, and hit save, you should see the following error message: + +![](https://raw.githubusercontent.com/WordPress/gutenberg/HEAD/docs/how-to-guides/data-basics/media/edit-form/form-error.png) + +Fantastic! We can now **restore the previous version of `handleChange`** and move on to the next step. + +### Step 7: Status indicator + +There is one last problem with our form: no visual feedback. We can’t be quite sure whether the *Save* button worked until either the form disappears or an error message shows. + +We're going to clear it up and communicate two states to the user: _Saving_ and _No changes detected_. The relevant selectors are `isSavingEntityRecord` and `hasEditsForEntityRecord`. Unlike `getEntityRecord`, they never issue any HTTP requests but only return the current entity record state. + +Let's use them in `EditPageForm`: + +```js +export function EditPageForm( { pageId, onSaveFinished } ) { + // ... + const { isSaving, hasEdits, /* ... */ } = useSelect( + select => ({ + isSaving: select( coreDataStore ).isSavingEntityRecord( 'postType', 'page', pageId ), + hasEdits: select( coreDataStore ).hasEditsForEntityRecord( 'postType', 'page', pageId ), + // ... + }), + [ pageId ] + ) +} +``` + +We can now use `isSaving` and `hasEdits` to display a spinner when saving is in progress and grey out the save button when there are no edits: + +```js + +export function EditPageForm( { pageId, onSaveFinished } ) { + // ... + return ( + // ... + <div className="form-buttons"> + <Button onClick={ handleSave } variant="primary" disabled={ ! hasEdits || isSaving }> + { isSaving ? ( + <> + <Spinner/> + Saving + </> + ) : 'Save' } + </Button> + <Button + onClick={ onCancel } + variant="tertiary" + disabled={ isSaving } + > + Cancel + </Button> + </div> + // ... + ); +} +``` + +Note that we disable the _save_ button when there are no edits and when the page is currently being saved. This is to prevent the user from accidentally pressing the button twice. + +Also, interrupting a *save* in progress is not supported by `@wordpress/data` so we also conditionally disabled the _cancel_ button. + +Here's what it looks like in action: + +![](https://raw.githubusercontent.com/WordPress/gutenberg/HEAD/docs/how-to-guides/data-basics/media/edit-form/form-inactive.png) +![](https://raw.githubusercontent.com/WordPress/gutenberg/HEAD/docs/how-to-guides/data-basics/media/edit-form/form-spinner.png) + +### Wiring it all together + +All the pieces are in place, great! Here’s everything we built in this chapter in one place: + +```js +import { useDispatch } from '@wordpress/data'; +import { Button, Modal, TextControl } from '@wordpress/components'; + +function PageEditButton( { pageId } ) { + const [ isOpen, setOpen ] = useState( false ); + const openModal = () => setOpen( true ); + const closeModal = () => setOpen( false ); + return ( + <> + <Button onClick={ openModal } variant="primary"> + Edit + </Button> + { isOpen && ( + <Modal onRequestClose={ closeModal } title="Edit page"> + <EditPageForm + pageId={ pageId } + onCancel={ closeModal } + onSaveFinished={ closeModal } + /> + </Modal> + ) } + </> + ); +} + +export function EditPageForm( { pageId, onCancel, onSaveFinished } ) { + const { page, lastError, isSaving, hasEdits } = useSelect( + ( select ) => ( { + page: select( coreDataStore ).getEditedEntityRecord( 'postType', 'page', pageId ), + lastError: select( coreDataStore ).getLastEntitySaveError( 'postType', 'page', pageId ), + isSaving: select( coreDataStore ).isSavingEntityRecord( 'postType', 'page', pageId ), + hasEdits: select( coreDataStore ).hasEditsForEntityRecord( 'postType', 'page', pageId ), + } ), + [ pageId ] + ); + + const { saveEditedEntityRecord, editEntityRecord } = useDispatch( coreDataStore ); + const handleSave = async () => { + const savedRecord = await saveEditedEntityRecord( 'postType', 'page', pageId ); + if ( savedRecord ) { + onSaveFinished(); + } + }; + const handleChange = ( title ) => editEntityRecord( 'postType', 'page', page.id, { title } ); + + return ( + <div className="my-gutenberg-form"> + <TextControl + label="Page title:" + value={ page.title } + onChange={ handleChange } + /> + { lastError ? ( + <div className="form-error">Error: { lastError.message }</div> + ) : ( + false + ) } + <div className="form-buttons"> + <Button + onClick={ handleSave } + variant="primary" + disabled={ ! hasEdits || isSaving } + > + { isSaving ? ( + <> + <Spinner/> + Saving + </> + ) : 'Save' } + </Button> + <Button + onClick={ onCancel } + variant="tertiary" + disabled={ isSaving } + > + Cancel + </Button> + </div> + </div> + ); +} +``` + +## What's next? + +* **Previous part:** [Building a list of pages](/docs/how-to-guides/data-basics/2-building-a-list-of-pages.md) +* **Next part:** Building a *New Page* form (coming soon) +* (optional) Review the [finished app](https://github.com/WordPress/gutenberg-examples/tree/trunk/09-code-data-basics-esnext) in the gutenberg-examples repository diff --git a/docs/how-to-guides/data-basics/4-building-a-create-page-form.md b/docs/how-to-guides/data-basics/4-building-a-create-page-form.md new file mode 100644 index 0000000000000..911ccdd51042a --- /dev/null +++ b/docs/how-to-guides/data-basics/4-building-a-create-page-form.md @@ -0,0 +1,416 @@ +# Part 4: Building a _Create page_ form + +In the [previous part](/docs/how-to-guides/data-basics/3-building-an-edit-form.md) we created an *Edit page* feature, +and in this part we will add a *Create page* feature. Here's a glimpse of what we're going to build: + +![](/docs/how-to-guides/data-basics/media/create-form/create-form-with-text.png) + +### Step 1: Add a _Create a new page_ button + +Let’s start by building a button to display the _create page_ form. It’s similar to an _Edit_ button we have built in +the [part 3](/docs/how-to-guides/data-basics/3-building-an-edit-form.md): + +```js +import { useDispatch } from '@wordpress/data'; +import { Button, Modal, TextControl } from '@wordpress/components'; + +function CreatePageButton() { + const [isOpen, setOpen] = useState( false ); + const openModal = () => setOpen( true ); + const closeModal = () => setOpen( false ); + return ( + <> + <Button onClick={ openModal } variant="primary"> + Create a new Page + </Button> + { isOpen && ( + <Modal onRequestClose={ closeModal } title="Create a new page"> + <CreatePageForm + onCancel={ closeModal } + onSaveFinished={ closeModal } + /> + </Modal> + ) } + </> + ); +} + +function CreatePageForm() { + // Empty for now + return <div/>; +} + +``` + +Great! Now let’s make `MyFirstApp` display our shiny new button: + +```js +function MyFirstApp() { + // ... + return ( + <div> + <div className="list-controls"> + <SearchControl onChange={ setSearchTerm } value={ searchTerm }/> + <CreatePageButton/> + </div> + <PagesList hasResolved={ hasResolved } pages={ pages }/> + </div> + ); +} +``` + +The final result should look as follows: + +![](/docs/how-to-guides/data-basics/media/create-form/create-button.png) + +### Step 2: Extract a controlled PageForm + +Now that the button is in place, we can focus entirely on building the form. This tutorial is about managing data, so we +will not build a complete page editor. Instead, the form will only contain one field: post title. + +Luckily, the `EditPageForm` we built in [part three](/docs/how-to-guides/data-basics/3-building-an-edit-form.md) already +takes us 80% of the way there. The bulk of the user interface is already available, and we will reuse it in +the `CreatePageForm`. Let’s start by extracting the form UI into a separate component: + +```js +export function EditPageForm( { pageId, onCancel, onSaveFinished } ) { + // ... + return ( + <PageForm + title={ page.title } + onChangeTitle={ handleChange } + hasEdits={ hasEdits } + lastError={ lastError } + isSaving={ isSaving } + onCancel={ onCancel } + onSave={ handleSave } + /> + ); +} + +export function PageForm( { title, onChangeTitle, hasEdits, lastError, isSaving, onCancel, onSave } ) { + return ( + <div className="my-gutenberg-form"> + <TextControl + label="Page title:" + value={ title } + onChange={ onChangeTitle } + /> + { lastError ? ( + <div className="form-error">Error: { lastError.message }</div> + ) : ( + false + ) } + <div className="form-buttons"> + <Button + onClick={ onSave } + variant="primary" + disabled={ !hasEdits || isSaving } + > + { isSaving ? ( + <> + <Spinner/> + Saving + </> + ) : 'Save' } + </Button> + <Button + onClick={ onCancel } + variant="tertiary" + disabled={ isSaving } + > + Cancel + </Button> + </div> + </div> + ); +} +``` + +This code quality change should not alter anything about how the application works. Let’s try to edit a page just to be +sure: + +![](/docs/how-to-guides/data-basics/media/create-form/edit-page-form.png) + +Great! The edit form is still there, and now we have a building block to power the new `CreatePageForm`. + +### Step 3: Build a CreatePageForm + +The only thing that `CreatePageForm` component must do is to provide the following seven properties needed to render +the `PageForm` component: + +* title +* onChangeTitle +* hasEdits +* lastError +* isSaving +* onCancel +* onSave + +Let’s see how we can do that: + +#### Title, onChangeTitle, hasEdits + +The `EditPageForm` updated and saved an existing entity record that lived in the Redux state. Because of that, we relied +on the `editedEntityRecords` selector. + +In case of the `CreatePageForm` however, there is no pre-existing entity record. There is only an empty form. Anything +that the user types is local to that form, which means we can keep track of it using the React’s `useState` hook: + +```js +export function CreatePageForm( { onCancel, onSaveFinished } ) { + const [title, setTitle] = useState(); + const handleChange = ( title ) => setTitle( title ); + return ( + <PageForm + title={ title } + onChangeTitle={ setTitle } + hasEdits={ !!title } + { /* ... */ } + /> + ); +} +``` + +#### onSave, onCancel + +In the `EditPageForm`, we dispatched the `saveEditedEntityRecord('postType', 'page', pageId )` action to save the edits +that lived in the Redux state. + +In the `CreatePageForm` however, we do not have any edits in the Redux state, nor we do have a `pageId`. The action we +need to dispatch in this case is +called [`saveEntityRecord`](https://developer.wordpress.org/block-editor/reference-guides/data/data-core/#saveentityrecord) ( +without the word _Edited_ in the name) and it accepts an object representing the new entity record instead of a `pageId` +. + +The data passed to `saveEntityRecord` is sent via a POST request to the appropriate REST API endpoint. For example, +dispatching the following action: + +```js +saveEntityRecord( 'postType', 'page', { title: "Test" } ); +``` + +Triggers a POST request to +the [`/wp/v2/pages` WordPress REST API](https://developer.wordpress.org/rest-api/reference/pages/) endpoint with a +single field in the request body: `title=Test`. + +Now that we know more about `saveEntityRecord`, let's use it in `CreatePageForm`. + +```js +export function CreatePageForm( { onSaveFinished, onCancel } ) { + // ... + const { saveEntityRecord } = useDispatch( coreDataStore ); + const handleSave = async () => { + const savedRecord = await saveEntityRecord( + 'postType', + 'page', + { title } + ); + if ( savedRecord ) { + onSaveFinished(); + } + }; + return ( + <PageForm + { /* ... */ } + onSave={ handleSave } + onCancel={ onCancel } + /> + ); +} +``` + +There is one more detail to address: our newly created pages are not yet picked up by the `PagesList`. Accordingly to +the REST API documentation, the `/wp/v2/pages` endpoint creates (`POST` requests) pages with `status=draft` by default, +but _returns_ (`GET` requests) pages with `status=publish`. The solution is to pass the `status` parameter explicitly: + +```js +export function CreatePageForm( { onSaveFinished, onCancel } ) { + // ... + const { saveEntityRecord } = useDispatch( coreDataStore ); + const handleSave = async () => { + const savedRecord = await saveEntityRecord( + 'postType', + 'page', + { title, status: 'publish' } + ); + if ( savedRecord ) { + onSaveFinished(); + } + }; + return ( + <PageForm + { /* ... */ } + onSave={ handleSave } + onCancel={ onCancel } + /> + ); +} +``` + +Go ahead and apply that change to your local `CreatePageForm` component, and let’s tackle the remaining two props. + +#### lastError, isSaving + +The `EditPageForm` retrieved the error and progress information via the `getLastEntitySaveError` +and `isSavingEntityRecord` selectors. In both cases, it passed the following three +arguments: `( 'postType', 'page', pageId )`. + +In `CreatePageForm` however, we do not have a `pageId`. What now? We can skip the `pageId` argument to retrieve the +information about the entity record without any id – this will be the newly created one. The `useSelect` call is thus +very similar to the one from `EditPageForm`: + +```js +export function CreatePageForm( { onCancel, onSaveFinished } ) { + // ... + const { lastError, isSaving } = useSelect( + ( select ) => ( { + // Notice the missing pageId argument: + lastError: select( coreDataStore ) + .getLastEntitySaveError( 'postType', 'page' ), + // Notice the missing pageId argument + isSaving: select( coreDataStore ) + .isSavingEntityRecord( 'postType', 'page' ), + } ), + [] + ); + // ... + return ( + <PageForm + { /* ... */ } + lastError={ lastError } + isSaving={ isSaving } + /> + ); +} +``` + +And that’s it! Here's what our new form looks like in action: + +![](/docs/how-to-guides/data-basics/media/create-form/create-saving.png) +![](/docs/how-to-guides/data-basics/media/create-form/created-item.png) + +### Wiring it all together + +Here’s everything we built in this chapter in one place: + +```js +export function CreatePageForm( { onCancel, onSaveFinished } ) { + const [title, setTitle] = useState(); + const { lastError, isSaving } = useSelect( + ( select ) => ( { + lastError: select( coreDataStore ) + .getLastEntitySaveError( 'postType', 'page' ), + isSaving: select( coreDataStore ) + .isSavingEntityRecord( 'postType', 'page' ), + } ), + [] + ); + + const { saveEntityRecord } = useDispatch( coreDataStore ); + const handleSave = async () => { + const savedRecord = await saveEntityRecord( + 'postType', + 'page', + { title, status: 'publish' } + ); + if ( savedRecord ) { + onSaveFinished(); + } + }; + + return ( + <PageForm + title={ title } + onChangeTitle={ setTitle } + hasEdits={ !!title } + onSave={ handleSave } + lastError={ lastError } + onCancel={ onCancel } + isSaving={ isSaving } + /> + ); +} + +export function EditPageForm( { pageId, onCancel, onSaveFinished } ) { + const { page, lastError, isSaving, hasEdits } = useSelect( + ( select ) => ( { + page: select( coreDataStore ).getEditedEntityRecord( 'postType', 'page', pageId ), + lastError: select( coreDataStore ).getLastEntitySaveError( 'postType', 'page', pageId ), + isSaving: select( coreDataStore ).isSavingEntityRecord( 'postType', 'page', pageId ), + hasEdits: select( coreDataStore ).hasEditsForEntityRecord( 'postType', 'page', pageId ), + } ), + [pageId] + ); + + const { saveEditedEntityRecord, editEntityRecord } = useDispatch( coreDataStore ); + const handleSave = async () => { + const savedRecord = await saveEditedEntityRecord( 'postType', 'page', pageId ); + if ( savedRecord ) { + onSaveFinished(); + } + }; + const handleChange = ( title ) => editEntityRecord( 'postType', 'page', page.id, { title } ); + + return ( + <PageForm + title={ page.title } + onChangeTitle={ handleChange } + hasEdits={ hasEdits } + lastError={ lastError } + isSaving={ isSaving } + onCancel={ onCancel } + onSave={ handleSave } + /> + ); +} + +export function PageForm( { title, onChangeTitle, hasEdits, lastError, isSaving, onCancel, onSave } ) { + return ( + <div className="my-gutenberg-form"> + <TextControl + label="Page title:" + value={ title } + onChange={ onChangeTitle } + /> + { lastError ? ( + <div className="form-error">Error: { lastError.message }</div> + ) : ( + false + ) } + <div className="form-buttons"> + <Button + onClick={ onSave } + variant="primary" + disabled={ !hasEdits || isSaving } + > + { isSaving ? ( + <> + <Spinner/> + Saving + </> + ) : 'Save' } + </Button> + <Button + onClick={ onCancel } + variant="tertiary" + disabled={ isSaving } + > + Cancel + </Button> + </div> + </div> + ); +} +``` + +All that’s left is to refresh the page and enjoy the form: + +![](/docs/how-to-guides/data-basics/media/create-form/create-form-with-text.png) + +## What's next? + +* **Previous part:** [Building an edit form](/docs/how-to-guides/data-basics/3-building-an-edit-form.md) +* (optional) Review + the [finished app](https://github.com/WordPress/gutenberg-examples/tree/trunk/09-code-data-basics-esnext) in the + gutenberg-examples repository diff --git a/docs/how-to-guides/data-basics/README.md b/docs/how-to-guides/data-basics/README.md new file mode 100644 index 0000000000000..c8e477e621c66 --- /dev/null +++ b/docs/how-to-guides/data-basics/README.md @@ -0,0 +1,14 @@ +# Create your First App with Gutenberg Data + +This tutorial aims to get you comfortable with the Gutenberg data layer. It guides you through building a simple React application that enables the user to manage their WordPress pages. The finished app will look like this: + +![](https://raw.githubusercontent.com/WordPress/gutenberg/HEAD/docs/how-to-guides/data-basics/media/list-of-pages/part1-finished.jpg) + +You may review the [finished app](https://github.com/WordPress/gutenberg-examples/tree/trunk/09-code-data-basics-esnext) in the gutenberg-examples repository. + +### Table of Contents + +1. [Setup](/docs/how-to-guides/data-basics/1-data-basics-setup.md) +2. [Building a basic list of pages](/docs/how-to-guides/data-basics/2-building-a-list-of-pages.md) +3. [Building an edit form](/docs/how-to-guides/data-basics/3-building-an-edit-form.md) +4. [Building a _create page_ form](/docs/how-to-guides/data-basics/4-building-a-create-page-form.md) diff --git a/docs/how-to-guides/data-basics/media/create-form/basic-create-form.png b/docs/how-to-guides/data-basics/media/create-form/basic-create-form.png new file mode 100644 index 0000000000000..f061d341a20c0 Binary files /dev/null and b/docs/how-to-guides/data-basics/media/create-form/basic-create-form.png differ diff --git a/docs/how-to-guides/data-basics/media/create-form/create-button.png b/docs/how-to-guides/data-basics/media/create-form/create-button.png new file mode 100644 index 0000000000000..63c1a915f2cf1 Binary files /dev/null and b/docs/how-to-guides/data-basics/media/create-form/create-button.png differ diff --git a/docs/how-to-guides/data-basics/media/create-form/create-form-with-text.png b/docs/how-to-guides/data-basics/media/create-form/create-form-with-text.png new file mode 100644 index 0000000000000..d7853137e0598 Binary files /dev/null and b/docs/how-to-guides/data-basics/media/create-form/create-form-with-text.png differ diff --git a/docs/how-to-guides/data-basics/media/create-form/create-saving.png b/docs/how-to-guides/data-basics/media/create-form/create-saving.png new file mode 100644 index 0000000000000..cea62faa5e965 Binary files /dev/null and b/docs/how-to-guides/data-basics/media/create-form/create-saving.png differ diff --git a/docs/how-to-guides/data-basics/media/create-form/created-item.png b/docs/how-to-guides/data-basics/media/create-form/created-item.png new file mode 100644 index 0000000000000..64cd31fd6bd47 Binary files /dev/null and b/docs/how-to-guides/data-basics/media/create-form/created-item.png differ diff --git a/docs/how-to-guides/data-basics/media/create-form/edit-page-form.png b/docs/how-to-guides/data-basics/media/create-form/edit-page-form.png new file mode 100644 index 0000000000000..08ca7ea69332b Binary files /dev/null and b/docs/how-to-guides/data-basics/media/create-form/edit-page-form.png differ diff --git a/docs/how-to-guides/data-basics/media/edit-form/edit-button.png b/docs/how-to-guides/data-basics/media/edit-form/edit-button.png new file mode 100644 index 0000000000000..bc0c0699437cc Binary files /dev/null and b/docs/how-to-guides/data-basics/media/edit-form/edit-button.png differ diff --git a/docs/how-to-guides/data-basics/media/edit-form/form-editable.png b/docs/how-to-guides/data-basics/media/edit-form/form-editable.png new file mode 100644 index 0000000000000..38babc258328c Binary files /dev/null and b/docs/how-to-guides/data-basics/media/edit-form/form-editable.png differ diff --git a/docs/how-to-guides/data-basics/media/edit-form/form-error.png b/docs/how-to-guides/data-basics/media/edit-form/form-error.png new file mode 100644 index 0000000000000..116a3214eeb91 Binary files /dev/null and b/docs/how-to-guides/data-basics/media/edit-form/form-error.png differ diff --git a/docs/how-to-guides/data-basics/media/edit-form/form-finished.png b/docs/how-to-guides/data-basics/media/edit-form/form-finished.png new file mode 100644 index 0000000000000..1d1b1f0c42be3 Binary files /dev/null and b/docs/how-to-guides/data-basics/media/edit-form/form-finished.png differ diff --git a/docs/how-to-guides/data-basics/media/edit-form/form-inactive.png b/docs/how-to-guides/data-basics/media/edit-form/form-inactive.png new file mode 100644 index 0000000000000..69653888d6e33 Binary files /dev/null and b/docs/how-to-guides/data-basics/media/edit-form/form-inactive.png differ diff --git a/docs/how-to-guides/data-basics/media/edit-form/form-populated.png b/docs/how-to-guides/data-basics/media/edit-form/form-populated.png new file mode 100644 index 0000000000000..f412ff65f7654 Binary files /dev/null and b/docs/how-to-guides/data-basics/media/edit-form/form-populated.png differ diff --git a/docs/how-to-guides/data-basics/media/edit-form/form-scaffold.png b/docs/how-to-guides/data-basics/media/edit-form/form-scaffold.png new file mode 100644 index 0000000000000..a569a8f828c55 Binary files /dev/null and b/docs/how-to-guides/data-basics/media/edit-form/form-scaffold.png differ diff --git a/docs/how-to-guides/data-basics/media/edit-form/form-spinner.png b/docs/how-to-guides/data-basics/media/edit-form/form-spinner.png new file mode 100644 index 0000000000000..460663023216b Binary files /dev/null and b/docs/how-to-guides/data-basics/media/edit-form/form-spinner.png differ diff --git a/docs/how-to-guides/data-basics/media/edit-form/modal-initial.png b/docs/how-to-guides/data-basics/media/edit-form/modal-initial.png new file mode 100644 index 0000000000000..b98f34fb2e645 Binary files /dev/null and b/docs/how-to-guides/data-basics/media/edit-form/modal-initial.png differ diff --git a/docs/how-to-guides/data-basics/media/finished-app.jpg b/docs/how-to-guides/data-basics/media/finished-app.jpg new file mode 100644 index 0000000000000..533b37144de40 Binary files /dev/null and b/docs/how-to-guides/data-basics/media/finished-app.jpg differ diff --git a/docs/how-to-guides/data-basics/media/list-of-pages/fetch-the-data.jpg b/docs/how-to-guides/data-basics/media/list-of-pages/fetch-the-data.jpg new file mode 100644 index 0000000000000..c87c994479acb Binary files /dev/null and b/docs/how-to-guides/data-basics/media/list-of-pages/fetch-the-data.jpg differ diff --git a/docs/how-to-guides/data-basics/media/list-of-pages/filter-field.jpg b/docs/how-to-guides/data-basics/media/list-of-pages/filter-field.jpg new file mode 100644 index 0000000000000..877152f7fbc83 Binary files /dev/null and b/docs/how-to-guides/data-basics/media/list-of-pages/filter-field.jpg differ diff --git a/docs/how-to-guides/data-basics/media/list-of-pages/filter.jpg b/docs/how-to-guides/data-basics/media/list-of-pages/filter.jpg new file mode 100644 index 0000000000000..27d22faf87926 Binary files /dev/null and b/docs/how-to-guides/data-basics/media/list-of-pages/filter.jpg differ diff --git a/docs/how-to-guides/data-basics/media/list-of-pages/indicator.jpg b/docs/how-to-guides/data-basics/media/list-of-pages/indicator.jpg new file mode 100644 index 0000000000000..92da78df9aabc Binary files /dev/null and b/docs/how-to-guides/data-basics/media/list-of-pages/indicator.jpg differ diff --git a/docs/how-to-guides/data-basics/media/list-of-pages/make-a-table.jpg b/docs/how-to-guides/data-basics/media/list-of-pages/make-a-table.jpg new file mode 100644 index 0000000000000..4455e1ea1f960 Binary files /dev/null and b/docs/how-to-guides/data-basics/media/list-of-pages/make-a-table.jpg differ diff --git a/docs/how-to-guides/data-basics/media/list-of-pages/no-results.jpg b/docs/how-to-guides/data-basics/media/list-of-pages/no-results.jpg new file mode 100644 index 0000000000000..4c855c14a1478 Binary files /dev/null and b/docs/how-to-guides/data-basics/media/list-of-pages/no-results.jpg differ diff --git a/docs/how-to-guides/data-basics/media/list-of-pages/pages-list.jpg b/docs/how-to-guides/data-basics/media/list-of-pages/pages-list.jpg new file mode 100644 index 0000000000000..f597019bff27d Binary files /dev/null and b/docs/how-to-guides/data-basics/media/list-of-pages/pages-list.jpg differ diff --git a/docs/how-to-guides/data-basics/media/list-of-pages/part1-finished.jpg b/docs/how-to-guides/data-basics/media/list-of-pages/part1-finished.jpg new file mode 100644 index 0000000000000..0e138996630f9 Binary files /dev/null and b/docs/how-to-guides/data-basics/media/list-of-pages/part1-finished.jpg differ diff --git a/docs/how-to-guides/data-basics/media/list-of-pages/simple-list.jpg b/docs/how-to-guides/data-basics/media/list-of-pages/simple-list.jpg new file mode 100644 index 0000000000000..be3550c07733b Binary files /dev/null and b/docs/how-to-guides/data-basics/media/list-of-pages/simple-list.jpg differ diff --git a/docs/how-to-guides/data-basics/media/list-of-pages/unclear-status.jpg b/docs/how-to-guides/data-basics/media/list-of-pages/unclear-status.jpg new file mode 100644 index 0000000000000..6438ea6eee06d Binary files /dev/null and b/docs/how-to-guides/data-basics/media/list-of-pages/unclear-status.jpg differ diff --git a/docs/how-to-guides/data-basics/media/setup/hello-from-js.jpg b/docs/how-to-guides/data-basics/media/setup/hello-from-js.jpg new file mode 100644 index 0000000000000..6fe0bcd2dcd80 Binary files /dev/null and b/docs/how-to-guides/data-basics/media/setup/hello-from-js.jpg differ diff --git a/docs/how-to-guides/designers/README.md b/docs/how-to-guides/designers/README.md deleted file mode 100644 index a630847b37661..0000000000000 --- a/docs/how-to-guides/designers/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Designer Documentation - -For those designing blocks and other block editor integrations, this documentation will provide resources for creating beautiful and intuitive layouts. diff --git a/docs/how-to-guides/designers/assets/advanced-settings-do.png b/docs/how-to-guides/designers/assets/advanced-settings-do.png deleted file mode 100644 index c589ace4c1348..0000000000000 Binary files a/docs/how-to-guides/designers/assets/advanced-settings-do.png and /dev/null differ diff --git a/docs/how-to-guides/designers/assets/block-controls-do.png b/docs/how-to-guides/designers/assets/block-controls-do.png deleted file mode 100644 index 86f2019638fe0..0000000000000 Binary files a/docs/how-to-guides/designers/assets/block-controls-do.png and /dev/null differ diff --git a/docs/how-to-guides/designers/assets/block-controls-dont.png b/docs/how-to-guides/designers/assets/block-controls-dont.png deleted file mode 100644 index 301a521154641..0000000000000 Binary files a/docs/how-to-guides/designers/assets/block-controls-dont.png and /dev/null differ diff --git a/docs/how-to-guides/designers/assets/block-descriptions-do.png b/docs/how-to-guides/designers/assets/block-descriptions-do.png deleted file mode 100644 index 53d6a443c7890..0000000000000 Binary files a/docs/how-to-guides/designers/assets/block-descriptions-do.png and /dev/null differ diff --git a/docs/how-to-guides/designers/assets/block-descriptions-dont.png b/docs/how-to-guides/designers/assets/block-descriptions-dont.png deleted file mode 100644 index 9225cb5d8575a..0000000000000 Binary files a/docs/how-to-guides/designers/assets/block-descriptions-dont.png and /dev/null differ diff --git a/docs/how-to-guides/designers/assets/blocks-do.png b/docs/how-to-guides/designers/assets/blocks-do.png deleted file mode 100644 index bd79797dfea12..0000000000000 Binary files a/docs/how-to-guides/designers/assets/blocks-do.png and /dev/null differ diff --git a/docs/how-to-guides/designers/assets/blocks-dont.png b/docs/how-to-guides/designers/assets/blocks-dont.png deleted file mode 100644 index 2c69f1ada0921..0000000000000 Binary files a/docs/how-to-guides/designers/assets/blocks-dont.png and /dev/null differ diff --git a/docs/how-to-guides/designers/assets/placeholder-do.png b/docs/how-to-guides/designers/assets/placeholder-do.png deleted file mode 100644 index dc5f1327d429a..0000000000000 Binary files a/docs/how-to-guides/designers/assets/placeholder-do.png and /dev/null differ diff --git a/docs/how-to-guides/designers/assets/placeholder-dont.png b/docs/how-to-guides/designers/assets/placeholder-dont.png deleted file mode 100644 index 4f313ccee5ac1..0000000000000 Binary files a/docs/how-to-guides/designers/assets/placeholder-dont.png and /dev/null differ diff --git a/docs/how-to-guides/feature-flags.md b/docs/how-to-guides/feature-flags.md index db27255f12ddb..847cb36a17621 100644 --- a/docs/how-to-guides/feature-flags.md +++ b/docs/how-to-guides/feature-flags.md @@ -1,69 +1,69 @@ # Feature Flags -With phase 2 of the Gutenberg project there's a need for improved control over how code changes are released. Newer features developed for phase 2 and beyond should only be released to the Gutenberg plugin, while improvements and bug fixes should still continue to make their way into core releases. +Often in the Gutenberg project, there's a need to control whether the code we write is shipped to WordPress core, or whether certain more experimental features are only active in the plugin. -The technique for handling this is known as a 'feature flag'. +Often this is handled using a 'feature flag'. -## Introducing `process.env.GUTENBERG_PHASE` +## Introducing `process.env.IS_GUTENBERG_PLUGIN` -The `process.env.GUTENBERG_PHASE` is an environment variable containing a number that represents the phase. When the codebase is built for the plugin, this variable will be set to `2`. When building for core, it will be set to `1`. +The `process.env.IS_GUTENBERG_PLUGIN` is an environment variable that represents whether code is currently executing within the plugin. When the codebase is built for the plugin, this variable will be set to `true`. When building for core, it will be set to `false` or `undefined`. ## Basic Use -A phase 2 function or constant should be exported using the following ternary syntax: +A plugin only function or constant should be exported using the following ternary syntax: ```js -function myPhaseTwoFeature() { +function myPluginOnlyFeature() { // implementation } -export const phaseTwoFeature = - process.env.GUTENBERG_PHASE === 2 ? myPhaseTwoFeature : undefined; +export const pluginOnlyFeature = + process.env.IS_GUTENBERG_PLUGIN ? myPluginOnlyFeature : undefined; ``` -In phase 1 environments the `phaseTwoFeature` export will be `undefined`. +In non-plugin environments the `phaseTwoFeature` export will be `undefined`. -If you're attempting to import and call a phase 2 feature, be sure to wrap the call to the function in an if statement to avoid an error: +If you're attempting to import and call a plugin only feature, be sure to wrap the call to the function in an if statement to avoid an error: ```js -import { phaseTwoFeature } from '@wordpress/foo'; +import { pluginOnlyFeature } from '@wordpress/foo'; -if ( process.env.GUTENBERG_PHASE === 2 ) { - phaseTwoFeature(); +if ( process.env.IS_GUTENBERG_PLUGIN ) { + pluginOnlyFeature(); } ``` ### How it works -During the webpack build, any instances of `process.env.GUTENBERG_PHASE` will be replaced using webpack's define plugin (https://webpack.js.org/plugins/define-plugin/). +During the webpack build, any instances of `process.env.IS_GUTENBERG_PLUGIN` will be replaced using webpack's define plugin (https://webpack.js.org/plugins/define-plugin/). If you write the following code: ```js -if ( process.env.GUTENBERG_PHASE === 2 ) { - phaseTwoFeature(); +if ( process.env.IS_GUTENBERG_PLUGIN ) { + pluginOnlyFeature(); } ``` -When building the codebase for the plugin the variable will be replaced with the number literal `2`: +When building the codebase for the plugin the variable will be replaced with the boolean `true`: ```js -if ( 2 === 2 ) { - phaseTwoFeature(); +if ( true ) { + pluginOnlyFeature(); } ``` -Any code within the body of the if statement will be executed within the gutenberg plugin since `2 === 2` evaluates to `true`. +Any code within the body of the if statement will be executed because of this truthyness. -For core, the `process.env.GUTENBERG_PHASE` variable is replaced with `1`, so the built code will look like: +For core, the `process.env.IS_GUTENBERG_PLUGIN` variable is replaced with `undefined`, so the built code will look like: ```js -if ( 1 === 2 ) { - phaseTwoFeature(); +if ( undefined ) { + pluginOnlyFeature(); } ``` -`1 === 2` evaluates to false so the phase 2 feature will not be executed within core. +`undefined` evaluates to `false` so the plugin only feature will not be executed within core. ### Dead Code Elimination @@ -72,47 +72,29 @@ When building code for production, webpack 'minifies' code (https://en.wikipedia When the following code is encountered, webpack determines that the surrounding `if`statement is unnecessary: ```js -if ( 2 === 2 ) { - phaseTwoFeature(); +if ( true ) { + pluginOnlyFeature(); } ``` The condition will always evaluates to `true`, so can be removed leaving just the code in the body: ```js -phaseTwoFeature(); +pluginOnlyFeature(); ``` Similarly when building for core, the condition in the following `if` statement always resolves to false: ```js -if ( 1 === 2 ) { - phaseTwoFeature(); +if ( undefined ) { + pluginOnlyFeature(); } ``` -The minification process will remove the entire `if` statement including the body, ensuring code destined for phase 2 is not included in the built JavaScript intended for core. +The minification process will remove the entire `if` statement including the body, ensuring plugin only code is not included in the built JavaScript intended for core. ## FAQ -#### Why should I only use `===` or `!==` when comparing `process.env.GUTENBERG_PHASE` and not `>`, `>=`, `<` or `<=`? - -This is a restriction due to the behaviour of the greater than or less than operators in JavaScript when `process.env.GUTENBERG_PHASE` is undefined, as might be the case for third party users of WordPress npm packages. Both `process.env.GUTENBERG_PHASE < 2` and `process.env.GUTENBERG_PHASE > 1` resolve to false. When writing `if ( process.env.GUTENBERG_PHASE > 1 )`, the intention might be to avoid executing the phase 2 code in the following `if` statement's body. That's fine since it will evaluate to false. - -However, the following code doesn't quite have the intended behaviour: - -``` -function myPhaseTwoFeature() { - if ( process.env.GUTENBERG_PHASE < 2 ) { - return; - } - - // implementation of phase 2 feature -} -``` - -Here an early return is used to avoid execution of a phase 2 feature, but because the `if` condition resolves to false, the early return is bypassed and the phase 2 feature is incorrectly triggered. - -#### Why shouldn't I assign the result of an expression involving `GUTENBERG_PHASE` to a variable, e.g. `const isMyFeatureActive = process.env.GUTENBERG_PHASE === 2`? +#### Why shouldn't I assign the result of an expression involving `IS_GUTENBERG_PLUGIN` to a variable, e.g. `const isMyFeatureActive = process.env.IS_GUTENBERG_PLUGIN === 2`? The aim here is to avoid introducing any complexity that could result in webpack's minifier not being able to eliminate dead code. See the [Dead Code Elimination](#dead-code-elimination) section for further details. diff --git a/docs/how-to-guides/format-api.md b/docs/how-to-guides/format-api.md new file mode 100644 index 0000000000000..02e22ea73ae81 --- /dev/null +++ b/docs/how-to-guides/format-api.md @@ -0,0 +1,199 @@ +# Formatting Toolbar API + +## Overview + +The Format API makes it possible for developers to add custom buttons to the formatting toolbar and have them apply a _format_ to a text selection. Bold is an example of a standard button in the formatting toolbar. + +![Format API Toolbar animated example](https://developer.wordpress.org/files/2021/12/format-api-example.gif) + +In WordPress lingo, a _format_ is a [HTML tag with text-level semantics](https://www.w3.org/TR/html5/textlevel-semantics.html#text-level-semantics-usage-summary) used to give some special meaning to a text selection. For example, in this tutorial, the button to be hooked into the format toolbar will wrap a particular text selection with the `<samp>` HTML tag. + +## Before you start + +This guide assumes you are already familiar with WordPress plugins and loading JavaScript with them, see the [Plugin Handbook](https://developer.wordpress.org/plugins/) or [JavaScript Tutorial](/docs/how-to-guides/javascript/README.md) to brush up. + +You will need: + +- WordPress development environment +- A minimal plugin activated and setup ready to edit +- JavaScript setup for building and enqueuing + +The [complete format-api example](https://github.com/WordPress/gutenberg-examples/tree/trunk/format-api) is available that you can use as a reference for your setup. + +## Step-by-step guide + +The guide will refer to `src/index.js` as the JavaScript file where the changes are made. After each step, running `npm run build` creates `build/index.js` that is then loaded on the post editor screen. + +### Step 1: Register a new format + +The first step is to register the new format, add `src/index.js` with the following: + +```js +import { registerFormatType } from '@wordpress/rich-text'; + +registerFormatType( 'my-custom-format/sample-output', { + title: 'Sample output', + tagName: 'samp', + className: null, +} ); +``` + +The list of available format types is maintained in the `core/rich-text` store. You can query the store to check that your custom format is now available. + +Run this code in your browser's console to confirm: + +```js +wp.data.select( 'core/rich-text' ).getFormatTypes(); +``` + +It'll return an array containing the format types, including your own. + +### Step 2: Add a button to the toolbar + +With the format available, the next step is to add a button to the UI by registering a component for the edit property. + +Using the `RichTextToolbarButton` component, update `src/index.js`: + +```js +import { registerFormatType } from '@wordpress/rich-text'; +import { RichTextToolbarButton } from '@wordpress/block-editor'; + +const MyCustomButton = ( props ) => { + return ( + <RichTextToolbarButton + icon="editor-code" + title="Sample output" + onClick={ () => { + console.log( 'toggle format' ); + } } + /> + ); +}; + +registerFormatType( 'my-custom-format/sample-output', { + title: 'Sample output', + tagName: 'samp', + className: null, + edit: MyCustomButton, +} ); +``` + +Let's check that everything is working as expected. Build and reload and then select a text block. Confirm the new button was added to the format toolbar. + +![Toolbar with custom button](https://developer.wordpress.org/files/2021/12/format-api-toolbar.png) + +Click the button and check the console.log for the "toggle format" message. + +If you do not see the button or message, double check you are building and loading the JavScript properly; and check the console.log for any errors. + +### Step 3: Apply a format when clicked + +Next is to update the button to apply a format when clicked. + +For our example, the `<samp>` tag format is binary - either a text selection has the tag or not, so we can use the `toggleFormat` method from the RichText package. + +Update `src/index.js` changing the `onClick` action: + +```js +import { registerFormatType, toggleFormat } from '@wordpress/rich-text'; +import { RichTextToolbarButton } from '@wordpress/block-editor'; + +const MyCustomButton = ( { isActive, onChange, value } ) => { + return ( + <RichTextToolbarButton + icon="editor-code" + title="Sample output" + onClick={ () => { + onChange( + toggleFormat( value, { + type: 'my-custom-format/sample-output', + } ) + ); + } } + isActive={ isActive } + /> + ); +}; + +registerFormatType( 'my-custom-format/sample-output', { + title: 'Sample output', + tagName: 'samp', + className: null, + edit: MyCustomButton, +} ); +``` + +Confirm it is working: first build and reload, then make a text selection and click the button. Your browser will likely display that selection differently than the surrounding text. + +You can also confirm by switching to HTML view (Code editor Ctrl+Shift+Alt+M) and see the text selection wrapped with `<samp>` HTML tags. + +Use the `className` option when registering to add your own custom class to the tag. You can use that class and custom CSS to target that element and style as you wish. + +### Step 4: Show the button only for specific blocks (Optional) + +By default, the button is rendered on every rich text toolbar (image captions, buttons, paragraphs, etc). You can render the button only on blocks of a certain type by using `wp.data.withSelect` together with `wp.compose.ifCondition`. + +Here is an example that only shows the button for Paragraph blocks: + +```js +import { registerFormatType, toggleFormat } from '@wordpress/rich-text'; +import { RichTextToolbarButton } from '@wordpress/block-editor'; +import { useSelect } from '@wordpress/data'; + +function ConditionalButton( { isActive, onChange, value } ) { + const selectedBlock = useSelect( ( select ) => { + return select( 'core/block-editor' ).getSelectedBlock(); + }, [] ); + + if ( selectedBlock && selectedBlock.name !== 'core/paragraph' ) { + return null; + } + + return ( + <RichTextToolbarButton + icon="editor-code" + title="Sample output" + onClick={ () => { + onChange( + toggleFormat( value, { + type: 'my-custom-format/sample-output', + } ) + ); + } } + isActive={ isActive } + /> + ); +} + +registerFormatType( 'my-custom-format/sample-output', { + title: 'Sample output', + tagName: 'samp', + className: null, + edit: ConditionalButton, +} ); +``` + +## Troubleshooting + +If you run into errors: + +- Double check that you run `npm run build` first. +- Confirm no syntax errors or issues in build process. +- Confirm the JavaScript is loading in the editor. +- Check for any console error messages. + +## Additional Resources + +Reference documentation used in this guide: + +- RichText: [`registerFormatType`](/packages/rich-text/README.md#registerformattype) +- Components: [`RichTextToolbarButton`](/packages/block-editor/src/components/rich-text#richtexttoolbarbutton) +- RichText: [`applyFormat`](/packages/rich-text/README.md#applyformat) +- RichText: [`removeFormat`](/packages/rich-text/README.md#removeformat) +- RichText: [`toggleFormat`](/packages/rich-text/README.md#toggleformat) + +## Conclusion + +The guide showed you how to add a button to the toolbar and have it apply a format to the selected text. Try it out and see what you can build with it in your next plugin. + +Download the [format-api example](https://github.com/WordPress/gutenberg-examples/tree/trunk/format-api) from the [gutenberg-examples](https://github.com/WordPress/gutenberg-examples) repository. diff --git a/docs/how-to-guides/format-api/1-register-format.md b/docs/how-to-guides/format-api/1-register-format.md deleted file mode 100644 index ddef1b23d20bb..0000000000000 --- a/docs/how-to-guides/format-api/1-register-format.md +++ /dev/null @@ -1,63 +0,0 @@ -# Register a New Format - -The first thing you're going to do in this tutorial is to register the new format that the plugin intends to apply. WordPress has the [`registerFormatType`](/packages/rich-text/README.md#registerFormatType) function to do so. - -Let's prepare a minimal plugin to make this work. Create a new folder and a file named `my-custom-format.php` within it containing the necessary PHP code to register and enqueue the JavaScript assets: - -```php -<?php -/** - * Plugin Name: My custom format - */ - -function my_custom_format_script_register() { - wp_register_script( - 'my-custom-format-js', - plugins_url( 'my-custom-format.js', __FILE__ ), - array( 'wp-rich-text' ) - ); -} -add_action( 'init', 'my_custom_format_script_register' ); - -function my_custom_format_enqueue_assets_editor() { - wp_enqueue_script( 'my-custom-format-js' ); -} -add_action( 'enqueue_block_editor_assets', 'my_custom_format_enqueue_assets_editor' ); -``` - -Then add a new file named `my-custom-format.js` with the following contents: - -{% codetabs %} -{% ES5 %} - -```js -( function ( wp ) { - wp.richText.registerFormatType( 'my-custom-format/sample-output', { - title: 'Sample output', - tagName: 'samp', - className: null, - } ); -} )( window.wp ); -``` - -{% ESNext %} - -```js -import { registerFormatType } from '@wordpress/rich-text'; - -registerFormatType( 'my-custom-format/sample-output', { - title: 'Sample output', - tagName: 'samp', - className: null, -} ); -``` - -{% end %} - -Make that plugin available in your WordPress setup and activate it. Then, load a new page/post. - -The list of available format types is maintained in the `core/rich-text` store. You can query the store to check that your custom format is now available. To do so, run this code in your browser's console: - - wp.data.select( 'core/rich-text' ).getFormatTypes(); - -It'll return an array containing the format types, including your own. diff --git a/docs/how-to-guides/format-api/2-toolbar-button.md b/docs/how-to-guides/format-api/2-toolbar-button.md deleted file mode 100644 index ddc10df8c9877..0000000000000 --- a/docs/how-to-guides/format-api/2-toolbar-button.md +++ /dev/null @@ -1,157 +0,0 @@ -# Add a Button to the Toolbar - -Now that the format is available, the next step is to surface it to the UI. You can make use of the [`RichTextToolbarButton`](https://github.com/WordPress/gutenberg/tree/HEAD/packages/block-editor/src/components/rich-text#richtexttoolbarbutton) component to extend the format toolbar. - -Paste this code in `my-custom-format.js`: - -{% codetabs %} -{% ES5 %} - -```js -( function ( wp ) { - var MyCustomButton = function ( props ) { - return wp.element.createElement( wp.editor.RichTextToolbarButton, { - icon: 'editor-code', - title: 'Sample output', - onClick: function () { - console.log( 'toggle format' ); - }, - } ); - }; - wp.richText.registerFormatType( 'my-custom-format/sample-output', { - title: 'Sample output', - tagName: 'samp', - className: null, - edit: MyCustomButton, - } ); -} )( window.wp ); -``` - -{% ESNext %} - -```js -import { registerFormatType } from '@wordpress/rich-text'; -import { RichTextToolbarButton } from '@wordpress/block-editor'; - -const MyCustomButton = ( props ) => { - return ( - <RichTextToolbarButton - icon="editor-code" - title="Sample output" - onClick={ () => { - console.log( 'toggle format' ); - } } - /> - ); -}; - -registerFormatType( 'my-custom-format/sample-output', { - title: 'Sample output', - tagName: 'samp', - className: null, - edit: MyCustomButton, -} ); -``` - -{% end %} - -**Important**: note that this code is using two new utilities (`wp.element.createElement`, and `wp.editor.RichTextToolbarButton`) so don't forget adding the corresponding `wp-element` and `wp-editor` packages to the dependencies array in the PHP file along with the existing `wp-rich-text`. - -Let's check that everything is working as expected. Reload the post/page and select a text block. Make sure that the new button was added to the format toolbar, it uses the [editor-code dashicon](https://developer.wordpress.org/resource/dashicons/#editor-code), and the hover text is what you set in the title: - -![Toolbar with custom button](https://raw.githubusercontent.com/WordPress/gutenberg/HEAD/docs/assets/toolbar-with-custom-button.png) - -You may also want to check that upon clicking the button the `toggle format` message is shown in your browser's console. - -## Show the button only for specific blocks - -By default, the button is rendered on every rich text toolbar (image captions, buttons, paragraphs, etc). -It is possible to render the button only on blocks of a certain type by using `wp.data.withSelect` together with `wp.compose.ifCondition`. -The following sample code renders the previously shown button only on Paragraph blocks: - -{% codetabs %} -{% ES5 %} - -```js -( function ( wp ) { - var withSelect = wp.data.withSelect; - var ifCondition = wp.compose.ifCondition; - var compose = wp.compose.compose; - var MyCustomButton = function ( props ) { - return wp.element.createElement( wp.editor.RichTextToolbarButton, { - icon: 'editor-code', - title: 'Sample output', - onClick: function () { - console.log( 'toggle format' ); - }, - } ); - }; - var ConditionalButton = compose( - withSelect( function ( select ) { - return { - selectedBlock: select( 'core/editor' ).getSelectedBlock(), - }; - } ), - ifCondition( function ( props ) { - return ( - props.selectedBlock && - props.selectedBlock.name === 'core/paragraph' - ); - } ) - )( MyCustomButton ); - - wp.richText.registerFormatType( 'my-custom-format/sample-output', { - title: 'Sample output', - tagName: 'samp', - className: null, - edit: ConditionalButton, - } ); -} )( window.wp ); -``` - -{% ESNext %} - -```js -import { compose, ifCondition } from '@wordpress/compose'; -import { registerFormatType } from '@wordpress/rich-text'; -import { RichTextToolbarButton } from '@wordpress/block-editor'; -import { withSelect } from '@wordpress/data'; - -const MyCustomButton = ( props ) => { - return ( - <RichTextToolbarButton - icon="editor-code" - title="Sample output" - onClick={ () => { - console.log( 'toggle format' ); - } } - /> - ); -}; - -const ConditionalButton = compose( - withSelect( function ( select ) { - return { - selectedBlock: select( 'core/editor' ).getSelectedBlock(), - }; - } ), - ifCondition( function ( props ) { - return ( - props.selectedBlock && props.selectedBlock.name === 'core/paragraph' - ); - } ) -)( MyCustomButton ); - -registerFormatType( 'my-custom-format/sample-output', { - title: 'Sample output', - tagName: 'samp', - className: null, - edit: ConditionalButton, -} ); -``` - -{% end %} - -Don't forget adding `wp-compose` and `wp-data` to the dependencies array in the PHP script. - -More advanced conditions can be used, e.g., only render the button depending on specific attributes of the block. diff --git a/docs/how-to-guides/format-api/3-apply-format.md b/docs/how-to-guides/format-api/3-apply-format.md deleted file mode 100644 index da1d419269260..0000000000000 --- a/docs/how-to-guides/format-api/3-apply-format.md +++ /dev/null @@ -1,76 +0,0 @@ -# Apply the Format When the Button Is Clicked - -So far, your custom button doesn't modify the text selected, it only renders a message in the console. Let's change that. - -The [rich-text package](/packages/rich-text/README.md) offers a few utilities to work with formats: [applyFormat](/packages/rich-text/README.md#applyFormat), [removeFormat](/packages/rich-text/README.md#removeFormat), and [toggleFormat](/packages/rich-text/README.md#toggleFormat). In this particular example, the format you want to apply (the `<samp>` tag) may be considered binary - either a text selection has the tag or not. Taking that into account, the `toggleFormat` primitive seems more convenient. - -Update `my-custom-format.js` with this new code: - -{% codetabs %} -{% ES5 %} - -```js -( function ( wp ) { - var MyCustomButton = function ( props ) { - return wp.element.createElement( wp.blockEditor.RichTextToolbarButton, { - icon: 'editor-code', - title: 'Sample output', - onClick: function () { - props.onChange( - wp.richText.toggleFormat( props.value, { - type: 'my-custom-format/sample-output', - } ) - ); - }, - isActive: props.isActive, - } ); - }; - wp.richText.registerFormatType( 'my-custom-format/sample-output', { - title: 'Sample output', - tagName: 'samp', - className: null, - edit: MyCustomButton, - } ); -} )( window.wp ); -``` - -{% ESNext %} - -```js -import { registerFormatType, toggleFormat } from '@wordpress/rich-text'; -import { RichTextToolbarButton } from '@wordpress/block-editor'; - -const MyCustomButton = ( props ) => { - return ( - <RichTextToolbarButton - icon="editor-code" - title="Sample output" - onClick={ () => { - props.onChange( - toggleFormat( props.value, { - type: 'my-custom-format/sample-output', - } ) - ); - } } - isActive={ props.isActive } - /> - ); -}; - -registerFormatType( 'my-custom-format/sample-output', { - title: 'Sample output', - tagName: 'samp', - className: null, - edit: MyCustomButton, -} ); -``` - -{% end %} - -Now, let's check that is working as intended: reload the post/page, make a text selection, click the button, and then change to HTML view to confirm that the tag was effectively applied. - -The expected behavior is that the format will be toggled, meaning that the text selected will be wrapped by a `<samp>` tag if it isn't yet, or the tag will be removed if the selection is already wrapped with the tag. Notice that the button renders a different style depending on whether the selection has the tag or not as well - this is controlled by the `isActive` property of the `RichTextToolbarButton` component. - -Your browser may have already displayed the selection differently once the tag was applied, but you may want to use a special style of your own. You can use the `className` option in [`registerFormatType`](/packages/rich-text/README.md#registerFormatType) to target the new element by class name: if `className` is set, it'll be added to the new element. - -That's it. This is all that is necessary to make a custom format available in the new editor. From here, you may want to check out other [tutorials](/docs/getting-started/tutorials/) or apply your new knowledge to your next plugin! diff --git a/docs/how-to-guides/format-api/README.md b/docs/how-to-guides/format-api/README.md deleted file mode 100644 index dfaafaf2206e5..0000000000000 --- a/docs/how-to-guides/format-api/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# Introduction to the Format API - -The purpose of this tutorial is to introduce you to the Format API. The Format API makes it possible for developers to add custom buttons to the formatting toolbar and have them apply a _format_ to a text selection. Bold is an example of a standard button in the formatting toolbar. - -In WordPress lingo, a _format_ is a [HTML tag with text-level semantics](https://www.w3.org/TR/html5/textlevel-semantics.html#text-level-semantics-usage-summary) used to give some special meaning to a text selection. For example, in this tutorial, the button to be hooked into the format toolbar will let users wrap a particular text selection with the [`<samp>` HTML tag](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/samp). - -If you are unfamiliar with how to work with WordPress plugins and JavaScript, you may want to check the [JavaScript Tutorial](/docs/how-to-guides/javascript/README.md) first. - -## Table of Contents - -1. [Register a new format](/docs/how-to-guides/format-api/1-register-format.md) -2. [Add a button to the toolbar](/docs/how-to-guides/format-api/2-toolbar-button.md) -3. [Apply the format when the button is clicked](/docs/how-to-guides/format-api/3-apply-format.md) diff --git a/docs/how-to-guides/internationalization.md b/docs/how-to-guides/internationalization.md index 4204a9680d936..fa28b78b37690 100644 --- a/docs/how-to-guides/internationalization.md +++ b/docs/how-to-guides/internationalization.md @@ -38,7 +38,7 @@ add_action( 'init', 'myguten_block_init' ); In your code, you can include the i18n functions. The most common function is **\_\_** (a double underscore) which provides translation of a simple string. Here is a basic block example: {% codetabs %} -{% ESNext %} +{% JSX %} ```js import { __ } from '@wordpress/i18n'; @@ -64,7 +64,7 @@ registerBlockType( 'myguten/simple', { } ); ``` -{% ES5 %} +{% Plain %} ```js const { __ } = wp.i18n; diff --git a/docs/how-to-guides/javascript/js-build-setup.md b/docs/how-to-guides/javascript/js-build-setup.md index 15bcf85f4914c..d6a2669da5037 100644 --- a/docs/how-to-guides/javascript/js-build-setup.md +++ b/docs/how-to-guides/javascript/js-build-setup.md @@ -34,7 +34,7 @@ First, you need to set up Node.js for your development environment. The steps re - macOS: `brew install node` - Windows: `choco install node` -If you are not using a package manager, see the [developer environment setup documentation](/docs/getting-started/tutorials/devenv/README.md) for setting up Node using nvm, or see the official [Node.js download page](https://nodejs.org/en/download/) for installers and binaries. +If you are not using a package manager, see the [developer environment setup documentation](/docs/getting-started/devenv/README.md) for setting up Node using nvm, or see the official [Node.js download page](https://nodejs.org/en/download/) for installers and binaries. **Note:** The build tools and process occur on the command-line, so basic familiarity using a terminal application is required. Some text editors have a terminal built-in that is fine to use; Visual Studio Code and PhpStorm are two popular options. diff --git a/docs/how-to-guides/javascript/troubleshooting.md b/docs/how-to-guides/javascript/troubleshooting.md index fc43ad0fec368..99484054d7b01 100644 --- a/docs/how-to-guides/javascript/troubleshooting.md +++ b/docs/how-to-guides/javascript/troubleshooting.md @@ -6,7 +6,7 @@ If you're having trouble getting your JavaScript code to work, here are a few ti The console log is a JavaScript developer's best friend. It is a good practice to work with it open, as it displays errors and notices in one place. See Mozilla's [JavaScript console](https://developer.mozilla.org/en-US/docs/Learn/Common_questions/What_are_browser_developer_tools#The_JavaScript_console) documentation for more. -To open the JavaScript console, find the correct key combination for your broswer and OS: +To open the JavaScript console, find the correct key combination for your browser and OS: | Browser | Windows | Linux | Mac | | ------- | ------------ | ------------ | --------- | diff --git a/docs/how-to-guides/javascript/versions-and-building.md b/docs/how-to-guides/javascript/versions-and-building.md index afe4c365b51d7..dd2f63c946906 100644 --- a/docs/how-to-guides/javascript/versions-and-building.md +++ b/docs/how-to-guides/javascript/versions-and-building.md @@ -1,15 +1,14 @@ # JavaScript Versions and Build Step -The Block Editor Handbook shows JavaScript examples in two syntaxes: ES5 and ESNext. These are version names for the JavaScript language standard definitions. You may also see elsewhere the names ES6, or ECMAScript 2015 mentioned. See the [ECMAScript](https://en.wikipedia.org/wiki/ECMAScript) Wikipedia article for all the details. +The Block Editor Handbook shows JavaScript examples in two syntaxes: JSX and Plain. -ES5 code is compatible with WordPress's minimum [target for browser support](https://make.wordpress.org/core/handbook/best-practices/browser-support/). +Plain refers to JavaScript code compatible with WordPress's minimum [target for browser support](https://make.wordpress.org/core/handbook/best-practices/browser-support/) without requiring a transpilation step. This step is commonly referred to as a build process. -"ESNext" doesn't refer to a specific version of JavaScript, but is "dynamic" and refers to the next language definitions, whatever they might be. Because some browsers won't support these features yet (because they're new or proposed), an extra build step is required to transform the code to a syntax that works in all browsers. Webpack and babel are the tools that perform this transformation step. +"JSX" doesn't refer to a specific version of JavaScript, but refers to the latest language definition plus +[JSX syntax](https://reactjs.org/docs/introducing-jsx.html), a syntax that blends HTML and JavaScript. JSX makes it easier to read and write markup code, but does require a build step to transpile into code compatible with browers. Webpack and babel are the tools that perform this transpilation step. -Additionally, the ESNext code examples in the handbook include [JSX syntax](https://reactjs.org/docs/introducing-jsx.html), a syntax that blends HTML and JavaScript. JSX makes it easier to read and write markup code, but does require a build step to transform into compatible code. +For simplicity, the JavaScript tutorial uses the Plain definition, without JSX. This code can run straight in your browser and does not require an additional build step. In many cases, it is perfectly fine to follow the same approach for simple plugins or experimenting. As your codebase grows in complexity it might be a good idea to switch to JSX. You will find the majority of code and documentation across the block editor uses JSX. -For simplicity, the JavaScript tutorial uses the ES5 definition, without JSX. This code can run straight in your browser and does not require an additional build step. In many cases, it is perfectly fine to follow the same approach for simple plugins or experimenting. As your codebase grows in complexity it might be a good idea to switch to ESNext. You will find the majority of code and documentation across the block editor uses ESNext. +See the [JavaScript Build Setup documentation](/docs/how-to-guides/javascript/js-build-setup.md) for setting up a development environment using JSX syntax. -See the [JavaScript Build Setup documentation](/docs/how-to-guides/javascript/js-build-setup.md) for setting up a development environment using ESNext syntax. - -See the [ESNext syntax documentation](/docs/how-to-guides/javascript/esnext-js.md) for explanation and examples about common code differences between standard JavaScript and ESNext. +See the [ESNext syntax documentation](/docs/how-to-guides/javascript/esnext-js.md) for explanation and examples about common code differences between standard JavaScript and more modern approaches. diff --git a/docs/how-to-guides/metabox.md b/docs/how-to-guides/metabox.md new file mode 100644 index 0000000000000..aaa858558a046 --- /dev/null +++ b/docs/how-to-guides/metabox.md @@ -0,0 +1,261 @@ +# Meta Boxes + +## Overview + +Prior to the block editor, custom meta boxes were used to extend the editor. Now there are new ways to extend, giving more power to the developer and a better experience for the authors. It is recommended to port older custom meta boxes to one of these new methods to create a more unified and consistent experience for those using the editor. + +The block editor does support most existing meta boxes, see [the backward compatibility section below](#backward-compatibility) for details . + +If you are interested in working with the post meta outside the editor, check out the [Sidebar Tutorial](/docs/how-to-guides/sidebar-tutorial/plugin-sidebar-0.md). + +### Use Blocks to Store Meta + +Typically, blocks store attribute values in the serialized block HTML. However, you can also create a block that saves its attribute values as post meta, that can be accessed programmatically anywhere in your template. + +This guide shows how to create a block that prompts a user for a single value, and saves it to post meta. + +## Before you start + +This guide assumes you are already familiar with WordPress plugins, post meta, and basic JavaScript. Review the [Getting started with JavaScript tutorial](/docs/how-to-guides/javascript/README.md) for an introduction. + +The guide will walk through creating a basic block, but recommended to go through the [Create Block tutorial](/docs/getting-started/create-block/README.md) for a deeper understanding of creating custom blocks. + +You will need: + +- WordPress development environment, +- A minimal plugin activated and ready to edit +- JavaScript setup for building and enqueuing + +A [complete meta-block example](https://github.com/WordPress/gutenberg-examples/tree/trunk/meta-block) is available that you can use as a reference for your setup. + +## Step-by-step guide + +1. [Register Meta Field](#step-1-register-meta-field) +2. [Add Meta Block](#step-2-add-meta-block) +3. [Use Post Meta Data](#step-3-use-post-meta-data) +4. [Finishing Touches](#step-4-use-block-templates-optional) + +### Step 1: Register Meta Field + +A post meta field is a WordPress object used to store extra data about a post. You need to first register a new meta field prior to use. See Managing [Post Metadata](https://developer.wordpress.org/plugins/metadata/managing-post-metadata/) to learn more about post meta. + +When registering the field, note the `show_in_rest` parameter. This ensures the data will be included in the REST API, which the block editor uses to load and save meta data. See the [`register_post_meta`](https://developer.wordpress.org/reference/functions/register_post_meta/) function definition for extra information. + +Additionally, your post type needs to support `custom-fields` for `register_post_meta` function to work + +To register the field, add the following to your PHP plugin: + +```php +<?php +// register custom meta tag field +function myguten_register_post_meta() { + register_post_meta( 'post', 'myguten_meta_block_field', array( + 'show_in_rest' => true, + 'single' => true, + 'type' => 'string', + ) ); +} +add_action( 'init', 'myguten_register_post_meta' ); +``` + +### Step 2: Add Meta Block + +With the meta field registered in the previous step, next create a new block to display the field value to the user. + +The hook `useEntityProp` can be used by the blocks to get or change meta values. + +Add this code to the JavaScript `src/index.js`: + +```js +import { registerBlockType } from '@wordpress/blocks'; +import { TextControl } from '@wordpress/components'; +import { useSelect } from '@wordpress/data'; +import { useEntityProp } from '@wordpress/core-data'; +import { useBlockProps } from '@wordpress/block-editor'; + +registerBlockType( 'myguten/meta-block', { + edit: ( { setAttributes, attributes } ) => { + const blockProps = useBlockProps(); + const postType = useSelect( + ( select ) => select( 'core/editor' ).getCurrentPostType(), + [] + ); + + const [ meta, setMeta ] = useEntityProp( 'postType', postType, 'meta' ); + + const metaFieldValue = meta[ 'myguten_meta_block_field' ]; + const updateMetaValue = ( newValue ) => { + setMeta( { ...meta, myguten_meta_block_field: newValue } ); + }; + + return ( + <div { ...blockProps }> + <TextControl + label="Meta Block Field" + value={ metaFieldValue } + onChange={ updateMetaValue } + /> + </div> + ); + }, + + // No information saved to the block. + // Data is saved to post meta via the hook. + save: () => { + return null; + }, +} ); +``` + +Confirm this works by creating a post and add the Meta Block. You will see your field that you can type a value in. When you save the post, either as a draft or published, the post meta value will be saved too. You can verify by +saving and reloading your draft, the form will still be filled in on reload. + +You could also confirm the data is saved by checking the database table `wp_postmeta` and confirm the new post id contains the new field data. + +**Troubleshooting**: Be sure to build your code between changes, you updated the PHP code from Step 1, and JavaScript files are enqueued. Check the build output and developer console for errors. + +### Step 3: Use Post Meta Data + +You can use the post meta data stored in the last step in multiple ways. + +#### Use Post Meta in PHP + +The first example uses the value from the post meta field and appends it to the end of the post content wrapped in a `H4` tag. + +```php +function myguten_content_filter( $content ) { + $value = get_post_meta( get_the_ID(), 'myguten_meta_block_field', true ); + if ( $value ) { + return sprintf( "%s <h4> %s </h4>", $content, esc_html( $value ) ); + } else { + return $content; + } +} +add_filter( 'the_content', 'myguten_content_filter' ); +``` + +#### Use Post Meta in Block + +You can also use the post meta data in other blocks. For this example the data is loaded at the end of every Paragraph block when it is rendered, ie. shown to the user. You can replace this for any core or custom block types as needed. + +In PHP, use the [register_block_type](https://developer.wordpress.org/reference/functions/register_block_type/) function to set a callback when the block is rendered to include the meta value. + +```php +function myguten_render_paragraph( $block_attributes, $content ) { + $value = get_post_meta( get_the_ID(), 'myguten_meta_block_field', true ); + // check value is set before outputting + if ( $value ) { + return sprintf( "%s (%s)", $content, esc_html( $value ) ); + } else { + return $content; + } +} + +register_block_type( 'core/paragraph', array( + 'api_version' => 2, + 'render_callback' => 'myguten_render_paragraph', +) ); +``` + +### Step 4: Use Block Templates (optional) + +One problem using a meta block is the block is easy for an author to forget, since it requires being added to each post. You solve this by using [block templates](/docs/reference-guides/block-api/block-templates.md). A block template is a predefined list of block items per post type. Templates allow you to specify a default initial state for a post type. + +For this example, you use a template to automatically insert the meta block at the top of a post. + +Add the following code to the `myguten-meta-block.php` file: + +```php +function myguten_register_template() { + $post_type_object = get_post_type_object( 'post' ); + $post_type_object->template = array( + array( 'myguten/meta-block' ), + ); +} +add_action( 'init', 'myguten_register_template' ); +``` + +You can also add other block types in the array, including placeholders, or even lock down a post to a set of specific blocks. Templates are a powerful tool for controlling the editing experience, see the documentation linked above for more. + +## Conclusion + +This guide showed how using blocks you can read and write to post meta. See the section below for backward compatibility with existing meta boxes. + +## Backward Compatibility + +### Testing, Converting, and Maintaining Existing Meta Boxes + +Before converting meta boxes to blocks, it may be easier to test if a meta box works with the block editor, and explicitly mark it as such. + +If a meta box _doesn't_ work with the block editor, and updating it to work correctly is not an option, the next step is to add the `__block_editor_compatible_meta_box` argument to the meta box declaration: + +```php +add_meta_box( 'my-meta-box', 'My Meta Box', 'my_meta_box_callback', + null, 'normal', 'high', + array( + '__block_editor_compatible_meta_box' => false, + ) +); +``` + +WordPress won't show the meta box but a message saying that it isn't compatible with the block editor, including a link to the Classic Editor plugin. By default, `__block_editor_compatible_meta_box` is `true`. + +After a meta box is converted to a block, it can be declared as existing for backward compatibility: + +```php +add_meta_box( 'my-meta-box', 'My Meta Box', 'my_meta_box_callback', + null, 'normal', 'high', + array( + '__back_compat_meta_box' => true, + ) +); +``` + +When the block editor is used, this meta box will no longer be displayed in the meta box area, as it now only exists for backward compatibility purposes. It will display as before in the classic editor. + +### Meta Box Data Collection + +On each block editor page load, we register an action that collects the meta box data to determine if an area is empty. The original global state is reset upon collection of meta box data. + +See [`register_and_do_post_meta_boxes`](https://developer.wordpress.org/reference/functions/register_and_do_post_meta_boxes/). + +It will run through the functions and hooks that `post.php` runs to register meta boxes; namely `add_meta_boxes`, `add_meta_boxes_{$post->post_type}`, and `do_meta_boxes`. + +Meta boxes are filtered to strip out any core meta boxes, standard custom taxonomy meta boxes, and any meta boxes that have declared themselves as only existing for backward compatibility purposes. + +Then each location for this particular type of meta box is checked for whether it is active. If it is not empty a value of true is stored, if it is empty a value of false is stored. This meta box location data is then dispatched by the editor Redux store in `INITIALIZE_META_BOX_STATE`. + +Ideally, this could be done at instantiation of the editor and help simplify this flow. However, it is not possible to know the meta box state before `admin_enqueue_scripts`, where we are calling `initializeEditor()`. This will have to do, unless we want to move `initializeEditor()` to fire in the footer or at some point after `admin_head`. With recent changes to editor bootstrapping this might now be possible. Test with ACF to make sure. + +### Redux and React Meta Box Management + +When rendering the block editor, the meta boxes are rendered to a hidden div `#metaboxes`. + +_The Redux store will hold all meta boxes as inactive by default_. When +`INITIALIZE_META_BOX_STATE` comes in, the store will update any active meta box areas by setting the `isActive` flag to `true`. Once this happens React will check for the new props sent in by Redux on the `MetaBox` component. If that `MetaBox` is now active, instead of rendering null, a `MetaBoxArea` component will be rendered. The `MetaBox` component is the container component that mediates between the `MetaBoxArea` and the Redux Store. _If no meta boxes are active, nothing happens. This will be the default behavior, as all core meta boxes have been stripped._ + +#### MetaBoxArea Component + +When the component renders it will store a reference to the meta boxes container and retrieve the meta boxes HTML from the prefetch location. + +When the post is updated, only meta box areas that are active will be submitted. This prevents unnecessary requests. No extra revisions are created by the meta box submissions. A Redux action will trigger on `REQUEST_POST_UPDATE` for any active meta box. See `editor/effects.js`. The `REQUEST_META_BOX_UPDATES` action will set that meta box's state to `isUpdating`. The `isUpdating` prop will be sent into the `MetaBoxArea` and cause a form submission. + +When the meta box area is saving, we display an updating overlay, to prevent users from changing the form values while a save is in progress. + +An example save url would look like: + +`mysite.com/wp-admin/post.php?post=1&action=edit&meta-box-loader=1` + +This url is automatically passed into React via a `_wpMetaBoxUrl` global variable. + +This page mimics the `post.php` post form, so when it is submitted it will fire all of the normal hooks and actions, and have the proper global state to correctly fire any PHP meta box mumbo jumbo without needing to modify any existing code. On successful submission, React will signal a `handleMetaBoxReload` to remove the updating overlay. + +### Common Compatibility Issues + +Most PHP meta boxes should continue to work in the block editor, but some meta boxes that include advanced functionality could break. Here are some common reasons why meta boxes might not work as expected in the block editor: + +- Plugins relying on selectors that target the post title, post content fields, and other metaboxes (of the old editor). +- Plugins relying on TinyMCE's API because there's no longer a single TinyMCE instance to talk to in the block editor. +- Plugins making updates to their DOM on "submit" or on "save". + +Please also note that if your plugin triggers a PHP warning or notice to be output on the page, this will cause the HTML document type (`<!DOCTYPE html>`) to be output incorrectly. This will cause the browser to render using "Quirks Mode", which is a compatibility layer that gets enabled when the browser doesn't know what type of document it is parsing. The block editor is not meant to work in this mode, but it can _appear_ to be working just fine. If you encounter issues such as _meta boxes overlaying the editor_ or other layout issues, please check the raw page source of your document to see that the document type definition is the first thing output on the page. There will also be a warning in the JavaScript console, noting the issue. diff --git a/docs/how-to-guides/metabox/README.md b/docs/how-to-guides/metabox/README.md deleted file mode 100644 index a5e7917035f84..0000000000000 --- a/docs/how-to-guides/metabox/README.md +++ /dev/null @@ -1,17 +0,0 @@ -# Meta Boxes - -Prior to the block editor, custom meta boxes were used to extend the editor. With the new editor there are new ways to extend, giving more power to the developer and a better experience for the authors. Porting older custom meta boxes to one of these new methods is encouraged as to create a more unified and consistent experience for those using the editor. - -The new block editor does support most existing meta boxes, see [this backward compatibility article](/docs/reference-guides/backward-compatibility/meta-box.md) for more support details . - -Here are two mini-tutorials for creating similar functionality to meta boxes in the block editor. - -## Use Blocks to Store Meta - -The first method is to use Blocks to store extra data with a post. The data is stored in a post meta field, similar to how meta boxes store information. - -- [Store Post Meta with a Block](/docs/how-to-guides/metabox/meta-block-1-intro.md) - -## Sidebar Plugin - -If you are interested in working with the post meta outside the editor, check out the [Sidebar Tutorial](/docs/how-to-guides/sidebar-tutorial/plugin-sidebar-0.md). diff --git a/docs/how-to-guides/metabox/meta-block-1-intro.md b/docs/how-to-guides/metabox/meta-block-1-intro.md deleted file mode 100644 index 5111ca356972c..0000000000000 --- a/docs/how-to-guides/metabox/meta-block-1-intro.md +++ /dev/null @@ -1,16 +0,0 @@ -# Store Post Meta with a Block - -Typically, blocks store their attribute values in the serialised block HTML. However, you can also create a block that saves its attribute values as post meta, which can be accessed programmatically anywhere in your template. - -In this short tutorial you will create one of these blocks, which will prompt a user for a single value, and save it as post meta. - -For background around the thinking of blocks as the interface, please see the [key concepts section](/docs/explanations/architecture/key-concepts.md) of the handbook. - -Before starting this tutorial, you will need a plugin to hold your code. Please take a look at the first two steps of [the JavaScript tutorial](/docs/how-to-guides/javascript/README.md) for information setting up a plugin. - -## Table of Contents - -1. [Register Meta Field](/docs/how-to-guides/metabox/meta-block-2-register-meta.md) -2. [Add Meta Block](/docs/how-to-guides/metabox/meta-block-3-add.md) -3. [Use Post Meta Data](/docs/how-to-guides/metabox/meta-block-4-use-data.md) -4. [Finishing Touches](/docs/how-to-guides/metabox/meta-block-5-finishing.md) diff --git a/docs/how-to-guides/metabox/meta-block-2-register-meta.md b/docs/how-to-guides/metabox/meta-block-2-register-meta.md deleted file mode 100644 index 5b22366dbdd41..0000000000000 --- a/docs/how-to-guides/metabox/meta-block-2-register-meta.md +++ /dev/null @@ -1,39 +0,0 @@ -# Register Meta Field - -A post meta field is a WordPress object used to store extra data about a post. You need to first register a new meta field prior to use. See Managing [Post Metadata](https://developer.wordpress.org/plugins/metadata/managing-post-metadata/) to learn more about post meta. - -When registering the field, note the `show_in_rest` parameter. This ensures the data will be included in the REST API, which the block editor uses to load and save meta data. See the [`register_post_meta`](https://developer.wordpress.org/reference/functions/register_post_meta/) function definition for extra information. - -Additionally, your post type needs to support `custom-fields` for `register_post_meta` function to work - -To register the field, create a PHP plugin file called `myguten-meta-block.php` including: - -```php -<?php -/** - * Plugin Name: Meta Block - */ - -// register custom meta tag field -function myguten_register_post_meta() { - register_post_meta( 'post', 'myguten_meta_block_field', array( - 'show_in_rest' => true, - 'single' => true, - 'type' => 'string', - ) ); -} -add_action( 'init', 'myguten_register_post_meta' ); -``` - -**Note:** If the meta key name starts with an underscore WordPress considers it a protected field. Editing this field requires passing a permission check, which is set as the `auth_callback` in the `register_post_meta` function. Here is an example: - -```php -register_post_meta( 'post', '_myguten_protected_key', array( - 'show_in_rest' => true, - 'single' => true, - 'type' => 'string', - 'auth_callback' => function() { - return current_user_can( 'edit_posts' ); - } -) ); -``` diff --git a/docs/how-to-guides/metabox/meta-block-3-add.md b/docs/how-to-guides/metabox/meta-block-3-add.md deleted file mode 100644 index 09a1e74337f7b..0000000000000 --- a/docs/how-to-guides/metabox/meta-block-3-add.md +++ /dev/null @@ -1,130 +0,0 @@ -# Create Meta Block - -With the meta field registered in the previous step, next you will create a new block used to display the field value to the user. See the [Block Tutorial](/docs/how-to-guides/block-tutorial/README.md) for a deeper understanding of creating custom blocks. - -For this block, you will use the TextControl component, which is similar to an HTML input text field. For additional components, check out the [Component Reference](/packages/components/README.md). - -The hook `useEntityProp` can be used by the blocks to get or change meta values. - -Add this code to your JavaScript file (this tutorial will call the file `myguten.js`): - -{% codetabs %} -{% ESNext %} - -```js -import { registerBlockType } from '@wordpress/blocks'; -import { TextControl } from '@wordpress/components'; -import { useSelect } from '@wordpress/data'; -import { useEntityProp } from '@wordpress/core-data'; -import { useBlockProps } from '@wordpress/block-editor'; - -registerBlockType( 'myguten/meta-block', { - title: 'Meta Block', - icon: 'smiley', - category: 'text', - - edit( { setAttributes, attributes } ) { - const blockProps = useBlockProps(); - const postType = useSelect( - ( select ) => select( 'core/editor' ).getCurrentPostType(), - [] - ); - const [ meta, setMeta ] = useEntityProp( 'postType', postType, 'meta' ); - const metaFieldValue = meta[ 'myguten_meta_block_field' ]; - function updateMetaValue( newValue ) { - setMeta( { ...meta, myguten_meta_block_field: newValue } ); - } - - return ( - <div { ...blockProps }> - <TextControl - label="Meta Block Field" - value={ metaFieldValue } - onChange={ updateMetaValue } - /> - </div> - ); - }, - - // No information saved to the block - // Data is saved to post meta via the hook - save() { - return null; - }, -} ); -``` - -{% ES5 %} - -```js -( function ( wp ) { - var el = wp.element.createElement; - var registerBlockType = wp.blocks.registerBlockType; - var TextControl = wp.components.TextControl; - var useSelect = wp.data.useSelect; - var useEntityProp = wp.coreData.useEntityProp; - var useBlockProps = wp.blockEditor.useBlockProps; - - registerBlockType( 'myguten/meta-block', { - title: 'Meta Block', - icon: 'smiley', - category: 'text', - - edit: function ( props ) { - var blockProps = useBlockProps(); - var postType = useSelect( function ( select ) { - return select( 'core/editor' ).getCurrentPostType(); - }, [] ); - var entityProp = useEntityProp( 'postType', postType, 'meta' ); - var meta = entityProp[ 0 ]; - var setMeta = entityProp[ 1 ]; - - var metaFieldValue = meta[ 'myguten_meta_block_field' ]; - function updateMetaValue( newValue ) { - setMeta( - Object.assign( {}, meta, { - myguten_meta_block_field: newValue, - } ) - ); - } - - return el( - 'div', - blockProps, - el( TextControl, { - label: 'Meta Block Field', - value: metaFieldValue, - onChange: updateMetaValue, - } ) - ); - }, - - // No information saved to the block - // Data is saved to post meta via attributes - save: function () { - return null; - }, - } ); -} )( window.wp ); -``` - -{% end %} - -**Important:** Before you test, you need to enqueue your JavaScript file and its dependencies. Note the WordPress packages used above are `wp.element`, `wp.blocks`, `wp.components`, `wp.data`, and `wp.coreData`. Each of these need to be included in the array of dependencies. Update the `myguten-meta-block.php` file adding the enqueue function: - -```php -function myguten_enqueue() { - wp_enqueue_script( - 'myguten-script', - plugins_url( 'myguten.js', __FILE__ ), - array( 'wp-blocks', 'wp-element', 'wp-components', 'wp-data', 'wp-core-data', 'wp-block-editor' ) - ); -} -add_action( 'enqueue_block_editor_assets', 'myguten_enqueue' ); -``` - -You can now edit a draft post and add a Meta Block to the post. You will see your field that you can type a value in. When you save the post, either as a draft or published, the post meta value will be saved too. You can verify by saving and reloading your draft, the form will still be filled in on reload. - -![Meta Block](https://raw.githubusercontent.com/WordPress/gutenberg/HEAD/docs/how-to-guides/metabox/meta-block.png) - -You can now use the post meta data in a template, or another block. See next section for [using post meta data](/docs/how-to-guides/metabox/meta-block-4-use-data.md). You could also confirm the data is saved by checking the database table `wp_postmeta` and confirm the new post id contains the new field data. diff --git a/docs/how-to-guides/metabox/meta-block-4-use-data.md b/docs/how-to-guides/metabox/meta-block-4-use-data.md deleted file mode 100644 index b445e07c0a8a0..0000000000000 --- a/docs/how-to-guides/metabox/meta-block-4-use-data.md +++ /dev/null @@ -1,42 +0,0 @@ -# Use Post Meta Data - -You can use the post meta data stored in the last step in multiple ways. - -## Use Post Meta in PHP - -The first example uses the value from the post meta field and appends it to the end of the post content wrapped in a H4 tag. This method in PHP is unchanged in WordPress 5.0. - -```php -function myguten_content_filter( $content ) { - $value = get_post_meta( get_the_ID(), 'myguten_meta_block_field', true ); - if ( $value ) { - return sprintf( "%s <h4> %s </h4>", $content, esc_html( $value ) ); - } else { - return $content; - } -} -add_filter( 'the_content', 'myguten_content_filter' ); -``` - -## Use Post Meta in Block - -You can also use the post meta data in other blocks. For this example the data is loaded at the end of every Paragraph block when it is rendered, ie. shown to the user. You can replace this for any core or custom block types as needed. - -In PHP, use the [register_block_type](https://developer.wordpress.org/reference/functions/register_block_type/) function to set a callback when the block is rendered to include the meta value. - -```php -function myguten_render_paragraph( $block_attributes, $content ) { - $value = get_post_meta( get_the_ID(), 'myguten_meta_block_field', true ); - // check value is set before outputting - if ( $value ) { - return sprintf( "%s (%s)", $content, esc_html( $value ) ); - } else { - return $content; - } -} - -register_block_type( 'core/paragraph', array( - 'api_version' => 2, - 'render_callback' => 'myguten_render_paragraph', -) ); -``` diff --git a/docs/how-to-guides/metabox/meta-block-5-finishing.md b/docs/how-to-guides/metabox/meta-block-5-finishing.md deleted file mode 100644 index d190369c43fae..0000000000000 --- a/docs/how-to-guides/metabox/meta-block-5-finishing.md +++ /dev/null @@ -1,19 +0,0 @@ -# Finishing Touches - -One problem using a meta block is the block is easy for an author to forget, since it requires being added to each post. You solve this by using [block templates](/docs/reference-guides/block-api/block-templates.md). A block template is a predefined list of block items per post type. Templates allow you to specify a default initial state for a post type. - -For this example, you use a template to automatically insert the meta block at the top of a post. - -Add the following code to the `myguten-meta-block.php` file: - -```php -function myguten_register_template() { - $post_type_object = get_post_type_object( 'post' ); - $post_type_object->template = array( - array( 'myguten/meta-block' ), - ); -} -add_action( 'init', 'myguten_register_template' ); -``` - -You can also add other block types in the array, including placeholders, or even lock down a post to a set of specific blocks. Templates are a powerful tool for controlling the editing experience, see the documentation linked above for more. diff --git a/docs/how-to-guides/notices/README.md b/docs/how-to-guides/notices/README.md index b81519e798a3e..4b9a32c664a96 100644 --- a/docs/how-to-guides/notices/README.md +++ b/docs/how-to-guides/notices/README.md @@ -1,4 +1,4 @@ -# Displaying Notices from Your Plugin or Theme +# Notices Notices are informational UI displayed near the top of admin pages. WordPress core, themes, and plugins all use notices to indicate the result of an action, or to draw the user's attention to necessary information. diff --git a/docs/how-to-guides/platform/README.md b/docs/how-to-guides/platform/README.md index c6d85fa6d12fc..ed9b73c90c66c 100644 --- a/docs/how-to-guides/platform/README.md +++ b/docs/how-to-guides/platform/README.md @@ -1,6 +1,6 @@ -# Gutenberg as a Development Platform +# Development Platform -The Gutenberg Project is not only building a better editor for WordPress, but also creating a platform to build upon. This platform consists of a set of JavaScript packages and tools that you can use in your web application. [View the list packages available on npm](https://www.npmjs.com/org/wordpress). +The Gutenberg Project is not only building a better editor for WordPress, but also creating a platform to build upon. This platform consists of a set of JavaScript packages and tools that you can use in your web application. [View the list of packages available on npm](https://www.npmjs.com/org/wordpress). ## UI Components diff --git a/docs/how-to-guides/platform/custom-block-editor/README.md b/docs/how-to-guides/platform/custom-block-editor/README.md index 22a53e7224415..0db06e7193513 100644 --- a/docs/how-to-guides/platform/custom-block-editor/README.md +++ b/docs/how-to-guides/platform/custom-block-editor/README.md @@ -12,8 +12,6 @@ To follow along with this tutorial, you can [download the accompanying WordPress ## Code Syntax -Code snippets are provided in "ESNext". ESNext refers to the next versions of the language standard, plus JSX syntax. - -Note that it is not required to use ESNext to create blocks or extend the editor, you can use classic JavaScript. However, once familiar with ESNext, developers find it is easier to read and write, thus most code examples you'll find use the ESNext syntax. +Code snippets are provided using JSX syntax. Note it is not required to use JSX to create blocks or extend the editor, you can use plain JavaScript. However, once familiar with JSX, many developers tend find it is easier to read and write, thus most code examples you'll find use that syntax. - [Start custom block editor tutorial](/docs/reference-guides/platform/custom-block-editor/tutorial.md) diff --git a/docs/how-to-guides/platform/custom-block-editor/tutorial.md b/docs/how-to-guides/platform/custom-block-editor/tutorial.md index 390dc5b971131..4547f52f5de97 100644 --- a/docs/how-to-guides/platform/custom-block-editor/tutorial.md +++ b/docs/how-to-guides/platform/custom-block-editor/tutorial.md @@ -620,4 +620,4 @@ If you've made it this far then congratulations! I hope you now have a better un In addition, you've reviewed an working example of the code required to implement your own custom functioning block editor. This information should prove useful, especially as Gutenberg expands beyond editing just the `Post` and into Widgets, Full Site Editing and beyond! -The full code for the custom functioning block editor we've just built is [available on Github](https://github.com/getdave/standalone-block-editor). I encourage you to download and try it out for yourself. Experiment, then and take things even further! +The full code for the custom functioning block editor we've just built is [available on GitHub](https://github.com/getdave/standalone-block-editor). I encourage you to download and try it out for yourself. Experiment, then and take things even further! diff --git a/docs/how-to-guides/plugin-sidebar-0.md b/docs/how-to-guides/plugin-sidebar-0.md new file mode 100644 index 0000000000000..7cba7657c20b9 --- /dev/null +++ b/docs/how-to-guides/plugin-sidebar-0.md @@ -0,0 +1,382 @@ +# Plugin Sidebar + +## Overview + +How to add a sidebar to your plugin. A sidebar is the region to the far right of the editor. Your plugin can add an additional icon next to the InspectorControls (gear icon) that can be expanded. + +![Example sidebar](https://raw.githubusercontent.com/WordPress/gutenberg/HEAD/docs/assets/sidebar-up-and-running.png) + +_Note: this tutorial covers a custom sidebar, if you are looking to add controls to the sidebar see the [Block Toolbar and Settings Sidebar](/docs/how-to-guides/block-tutorial/block-controls-toolbar-and-sidebar.md)_ + +## Before you start + +The tutorial assumes you have an existing plugin setup and are ready to add PHP and JavaScript code. Please, refer to [Getting started with JavaScript](/docs/how-to-guides/javascript/README.md) tutorial for an introduction to WordPress plugins and how to use JavaScript to extend the block editor. + +## Step-by-step guide + +### Step 1: Get a Sidebar up and Running + +The first step is to tell the editor that there is a new plugin that will have its own sidebar. Use the [registerPlugin](/packages/plugins/README.md), [PluginSidebar](/packages/edit-post/README.md#pluginsidebar), and [createElement](/packages/element/README.md) utilities provided by the `@wordpress/plugins`, `@wordpress/edit-post`, and `@wordpress/element` packages, respectively. + +Add the following code to a JavaScript file called `plugin-sidebar.js` and save it within your plugin's directory: + +```js +( function ( wp ) { + var registerPlugin = wp.plugins.registerPlugin; + var PluginSidebar = wp.editPost.PluginSidebar; + var el = wp.element.createElement; + + registerPlugin( 'my-plugin-sidebar', { + render: function () { + return el( + PluginSidebar, + { + name: 'my-plugin-sidebar', + icon: 'admin-post', + title: 'My plugin sidebar', + }, + 'Meta field' + ); + }, + } ); +} )( window.wp ); +``` + +For this code to work, those utilities need to be available in the browser, so you must specify `wp-plugins`, `wp-edit-post`, and `wp-element` as dependencies of your script. + +Here is the PHP code to register your script and specify the dependencies: + +```php +<?php + +/* +Plugin Name: Sidebar plugin +*/ + +function sidebar_plugin_register() { + wp_register_script( + 'plugin-sidebar-js', + plugins_url( 'plugin-sidebar.js', __FILE__ ), + array( 'wp-plugins', 'wp-edit-post', 'wp-element' ) + ); +} +add_action( 'init', 'sidebar_plugin_register' ); + +function sidebar_plugin_script_enqueue() { + wp_enqueue_script( 'plugin-sidebar-js' ); +} +add_action( 'enqueue_block_editor_assets', 'sidebar_plugin_script_enqueue' ); +``` + +After installing and activating this plugin, there is a new icon resembling a tack in the top-right of the editor. Upon clicking it, the plugin's sidebar will be opened: + +![Sidebar Up and Running](https://raw.githubusercontent.com/WordPress/gutenberg/HEAD/docs/assets/sidebar-up-and-running.png) + +### Step 2: Tweak the sidebar style and add controls + +After the sidebar is up and running, the next step is to fill it up with the necessary components and basic styling. + +To visualize and edit the meta field value you'll use an input component. The `@wordpress/components` package contains many components available for you to reuse, and, specifically, the [TextControl](/packages/components/src/text-control/README.md) is aimed at creating an input field: + +```js +( function ( wp ) { + var registerPlugin = wp.plugins.registerPlugin; + var PluginSidebar = wp.editPost.PluginSidebar; + var el = wp.element.createElement; + var TextControl = wp.components.TextControl; + + registerPlugin( 'my-plugin-sidebar', { + render: function () { + return el( + PluginSidebar, + { + name: 'my-plugin-sidebar', + icon: 'admin-post', + title: 'My plugin sidebar', + }, + el( + 'div', + { className: 'plugin-sidebar-content' }, + el( TextControl, { + label: 'Meta Block Field', + value: 'Initial value', + onChange: function ( content ) { + console.log( 'content changed to ', content ); + }, + } ) + ) + ); + }, + } ); +} )( window.wp ); +``` + +Update the `plugin-sidebar.js` with this new code. Notice that it uses a new utility called `wp.components` from the `@wordpress/components` package. Be sure to add `wp-components` to the dependencies in the `wp_register_script` function in the PHP file. + +The code introduces: + +- a CSS class `plugin-sidebar-content` to the `div` element to target styles, +- a `TextControl` component instead of the plain `'Meta field'` text. + +With the new CSS class available you can add a little style. Create a new file in your plugin directory called `plugin-sidebar.css` with the following to give some padding: + +```css +.plugin-sidebar-content { + padding: 16px; +} +``` + +Register the script and enqueue it to load with `enqueue_block_editor_assets` alongside the JavaScript file. + +After those changes, the PHP code will look like this: + +```php +<?php + +/* +Plugin Name: Sidebar example +*/ + +function sidebar_plugin_register() { + wp_register_script( + 'plugin-sidebar-js', + plugins_url( 'plugin-sidebar.js', __FILE__ ), + array( + 'wp-plugins', + 'wp-edit-post', + 'wp-element', + 'wp-components' + ) + ); + wp_register_style( + 'plugin-sidebar-css', + plugins_url( 'plugin-sidebar.css', __FILE__ ) + ); +} +add_action( 'init', 'sidebar_plugin_register' ); + +function sidebar_plugin_script_enqueue() { + wp_enqueue_script( 'plugin-sidebar-js' ); + wp_enqueue_style( 'plugin-sidebar-css' ); +} +add_action( 'enqueue_block_editor_assets', 'sidebar_plugin_script_enqueue' ); +``` + +Reload the editor and open the sidebar: + +![Sidebar with style and controls](https://raw.githubusercontent.com/WordPress/gutenberg/HEAD/docs/assets/sidebar-style-and-controls.png) + +This code doesn't let users store or retrieve data just yet, so the next steps will focus on how to connect it to the meta block field. + +### Step 3: Register the Meta Field + +To work with fields in the `post_meta` table, use the [register_post_meta](https://developer.wordpress.org/reference/functions/register_post_meta/). function to create a new field called `sidebar_plugin_meta_block_field`. + +Note: this field needs to be available to the REST API because that's how the block editor access data. + +Add the PHP code in your plugins `init` callback function: + +```php +register_post_meta( 'post', 'sidebar_plugin_meta_block_field', array( + 'show_in_rest' => true, + 'single' => true, + 'type' => 'string', +) ); +``` + +To confirm, query the block editor store to see the field is loaded. After implementing, reload the editor page and open your browser's developer console. Use this JavaScript snippet in the console to confirm: + +```js +wp.data.select( 'core/editor' ).getCurrentPost().meta; +``` + +The function will return an object containing the registered meta field you registered. + +If the code returns `undefined` make sure your post type supports `custom-fields`. Either when [registering the post](https://developer.wordpress.org/reference/functions/register_post_type/#supports) or with [add_post_type_support function](https://developer.wordpress.org/reference/functions/add_post_type_support/). + +### Step 4: Initialize the Input Control + +With the field available in the editor store, it can now be surfaced to the UI. We extract the input control to a function to keep the code clean as we add functionality. + +```js +( function ( wp ) { + var registerPlugin = wp.plugins.registerPlugin; + var PluginSidebar = wp.editPost.PluginSidebar; + var el = wp.element.createElement; + var TextControl = wp.components.TextControl; + + var MetaBlockField = function () { + return el( TextControl, { + label: 'Meta Block Field', + value: 'Initial value', + onChange: function ( content ) { + console.log( 'content changed to ', content ); + }, + } ); + }; + + registerPlugin( 'my-plugin-sidebar', { + render: function () { + return el( + PluginSidebar, + { + name: 'my-plugin-sidebar', + icon: 'admin-post', + title: 'My plugin sidebar', + }, + el( + 'div', + { className: 'plugin-sidebar-content' }, + el( MetaBlockField ) + ) + ); + }, + } ); +} )( window.wp ); +``` + +We want to initialize the value in the `MetaBlockField` component with the value of `sidebar_plugin_meta_block_field`, and keep it updated when that value changes. + +The `useSelect` function is used to fetch data when the component loads and will update if the data changes. Here is the code update with `useSelect`: + +```js +( function ( wp ) { + var registerPlugin = wp.plugins.registerPlugin; + var PluginSidebar = wp.editPost.PluginSidebar; + var el = wp.element.createElement; + var Text = wp.components.TextControl; + var useSelect = wp.data.useSelect; + + var MetaBlockField = function () { + var metaFieldValue = useSelect( function ( select ) { + return select( 'core/editor' ).getEditedPostAttribute( + 'meta' + )[ 'sidebar_plugin_meta_block_field' ]; + }, [] ); + + return el( Text, { + label: 'Meta Block Field', + value: metaFieldValue, + onChange: function ( content ) { + console.log( 'content has changed to ', content ); + }, + } ); + }; + + registerPlugin( 'my-plugin-sidebar', { + render: function () { + return el( + PluginSidebar, + { + name: 'my-plugin-sidebar', + icon: 'admin-post', + title: 'My plugin sidebar', + }, + el( + 'div', + { className: 'plugin-sidebar-content' }, + el( MetaBlockField ) + ) + ); + }, + } ); +} )( window.wp ); +``` + +The `wp.data.useSelect` function is from the `@wordpress/data` package, so `wp-data` needs to be added as a dependency in the `wp_register_script` function in PHP. + +Note: The `getEditedPostAttribute` call is used to retrieve the most recent values of the post, including user editions that haven't been yet saved. + +Confirm it's working by updating the code, reloading, and opening the sidebar. The input's content is no longer `Initial value` but a void string. Users can't type values yet, but you can check that the component is updated if the value in the store changes. Open the browser's console, execute + +```js +wp.data + .dispatch( 'core/editor' ) + .editPost( { meta: { sidebar_plugin_meta_block_field: 'hello world!' } } ); +``` + +You can observe the content changing in the input component. + +### Step 5: Update the Meta Field When the Input's Content Changes + +The last step is to update the meta field when the input content changes. +The `useDispatch` function takes a store name as its only argument and returns methods that you can use to update the store, in this case we'll use `editPost` + +```js +( function ( wp ) { + var registerPlugin = wp.plugins.registerPlugin; + var PluginSidebar = wp.editPost.PluginSidebar; + var el = wp.element.createElement; + var TextControl = wp.components.TextControl; + var useSelect = wp.data.useSelect; + var useDispatch = wp.data.useDispatch; + + var MetaBlockField = function ( props ) { + var metaFieldValue = useSelect( function ( select ) { + return select( 'core/editor' ).getEditedPostAttribute( + 'meta' + )[ 'sidebar_plugin_meta_block_field' ]; + }, [] ); + + var editPost = useDispatch( 'core/editor' ).editPost; + + return el( TextControl, { + label: 'Meta Block Field', + value: metaFieldValue, + onChange: function ( content ) { + editPost( { + meta: { sidebar_plugin_meta_block_field: content }, + } ); + }, + } ); + }; + + registerPlugin( 'my-plugin-sidebar', { + render: function () { + return el( + PluginSidebar, + { + name: 'my-plugin-sidebar', + icon: 'admin-post', + title: 'My plugin sidebar', + }, + el( + 'div', + { className: 'plugin-sidebar-content' }, + el( MetaBlockField ) + ) + ); + }, + } ); +} )( window.wp ); +``` + +After the update, when the user types, the input control calls `editPost` and updates the editor store on each keystroke. + +Update the JavaScript, load the sidebar, and type in the input field. You can confirm it is saved by typing something in the input control and executing the JavaScript snippet in your browser's development console: + +```js +wp.data.select( 'core/editor' ).getEditedPostAttribute( 'meta' )[ + 'sidebar_plugin_meta_block_field' +]; +``` + +The message displayed should be what you typed in the input. + +When saving a post, you can confirm it is stored properly in the database by reloading after a save and confirming the input control is initialized with the last value you typed. + +## Additional resources + +Documentation for working with the [@wordpress/data package](/packages/data/README.md). + +Functions used in this guide: + +- [useSelect](/packages/data/README.md#useselect). +- [getEditedPostAttribute](/docs/reference-guides/data/data-core-editor.md#geteditedpostattribute) +- [useDispatch](/packages/data/README.md#usedispatch) + +## Conclusion + +You now have a custom sidebar that you can use to update `post_meta` content. + +A complete example is available, download the [plugin-sidebar example](https://github.com/WordPress/gutenberg-examples/tree/trunk/plugin-sidebar) from the [gutenberg-examples](https://github.com/WordPress/gutenberg-examples) repository. diff --git a/docs/how-to-guides/sidebar-tutorial/plugin-sidebar-0.md b/docs/how-to-guides/sidebar-tutorial/plugin-sidebar-0.md deleted file mode 100644 index 750a12236d660..0000000000000 --- a/docs/how-to-guides/sidebar-tutorial/plugin-sidebar-0.md +++ /dev/null @@ -1,12 +0,0 @@ -# Creating a Sidebar for Your Plugin - -This tutorial starts with you having an existing plugin setup and ready to add PHP and JavaScript code. Please, refer to [Getting started with JavaScript](/docs/how-to-guides/javascript/) tutorial for an introduction to WordPress plugins and how to use JavaScript to extend the block editor. - -In the next sections, you're going to create a custom sidebar for a plugin that contains a text control so the user can update a value that is stored in the `post_meta` table. - -1. [Get a sidebar up and running](/docs/how-to-guides/sidebar-tutorial/plugin-sidebar-1-up-and-running.md) -2. [Tweak the sidebar style and add controls](/docs/how-to-guides/sidebar-tutorial/plugin-sidebar-2-styles-and-controls.md) -3. [Register a new meta field](/docs/how-to-guides/sidebar-tutorial/plugin-sidebar-3-register-meta.md) -4. [Initialize the input control with the meta field value](/docs/how-to-guides/sidebar-tutorial/plugin-sidebar-4-initialize-input.md) -5. [Update the meta field value when input's content changes](/docs/how-to-guides/sidebar-tutorial/plugin-sidebar-5-update-meta.md) -6. [Finishing touches](/docs/how-to-guides/sidebar-tutorial/plugin-sidebar-6-finishing-touches.md) diff --git a/docs/how-to-guides/sidebar-tutorial/plugin-sidebar-1-up-and-running.md b/docs/how-to-guides/sidebar-tutorial/plugin-sidebar-1-up-and-running.md deleted file mode 100644 index 180eafb52e948..0000000000000 --- a/docs/how-to-guides/sidebar-tutorial/plugin-sidebar-1-up-and-running.md +++ /dev/null @@ -1,59 +0,0 @@ -# Get a Sidebar up and Running - -_Note: this tutorial covers a custom sidebar, Adding controls to the sidebar is covered in [Block Toolbar and Settings Sidebar](/docs/how-to-guides/block-tutorial/block-controls-toolbar-and-sidebar.md)_ - -The first step in the journey is to tell the editor that there is a new plugin that will have its own sidebar. You can do so by using the [registerPlugin](/packages/plugins/README.md), [PluginSidebar](/packages/edit-post/README.md#pluginsidebar), and [createElement](/packages/element/README.md) utilities provided by WordPress, to be found in the `@wordpress/plugins`, `@wordpress/edit-post`, and `@wordpress/element` [packages](/docs/reference-guides/packages.md), respectively. - -Add the following code to a JavaScript file called `plugin-sidebar.js` and save it within your plugin's directory: - -```js -( function ( wp ) { - var registerPlugin = wp.plugins.registerPlugin; - var PluginSidebar = wp.editPost.PluginSidebar; - var el = wp.element.createElement; - - registerPlugin( 'my-plugin-sidebar', { - render: function () { - return el( - PluginSidebar, - { - name: 'my-plugin-sidebar', - icon: 'admin-post', - title: 'My plugin sidebar', - }, - 'Meta field' - ); - }, - } ); -} )( window.wp ); -``` - -For this code to work, those utilities need to be available in the browser, so you tell WordPress to enqueue the packages that include them by introducing `wp-plugins`, `wp-edit-post`, and `wp-element` as dependencies of your script. - -Copy this code to a PHP file within your plugin's directory: - -```php -<?php - -/* -Plugin Name: Sidebar plugin -*/ - -function sidebar_plugin_register() { - wp_register_script( - 'plugin-sidebar-js', - plugins_url( 'plugin-sidebar.js', __FILE__ ), - array( 'wp-plugins', 'wp-edit-post', 'wp-element' ) - ); -} -add_action( 'init', 'sidebar_plugin_register' ); - -function sidebar_plugin_script_enqueue() { - wp_enqueue_script( 'plugin-sidebar-js' ); -} -add_action( 'enqueue_block_editor_assets', 'sidebar_plugin_script_enqueue' ); -``` - -After installing and activating this plugin, there is a new icon resembling a tack in the top-right of the editor. Upon clicking it, the plugin's sidebar will be opened: - -![Sidebar Up and Running](https://raw.githubusercontent.com/WordPress/gutenberg/HEAD/docs/assets/sidebar-up-and-running.png) diff --git a/docs/how-to-guides/sidebar-tutorial/plugin-sidebar-2-styles-and-controls.md b/docs/how-to-guides/sidebar-tutorial/plugin-sidebar-2-styles-and-controls.md deleted file mode 100644 index 581cd5c4e0f6f..0000000000000 --- a/docs/how-to-guides/sidebar-tutorial/plugin-sidebar-2-styles-and-controls.md +++ /dev/null @@ -1,99 +0,0 @@ -# Tweak the sidebar style and add controls - -After the sidebar is up and running, the next step is to fill it up with the necessary components and basic styling. - -To visualize and edit the meta field value you'll use an input component. The `@wordpress/components` package contains many components available for you to reuse, and, specifically, the [TextControl](/packages/components/src/text-control/README.md) is aimed at creating an input field: - -```js -( function ( wp ) { - var registerPlugin = wp.plugins.registerPlugin; - var PluginSidebar = wp.editPost.PluginSidebar; - var el = wp.element.createElement; - var Text = wp.components.TextControl; - - registerPlugin( 'my-plugin-sidebar', { - render: function () { - return el( - PluginSidebar, - { - name: 'my-plugin-sidebar', - icon: 'admin-post', - title: 'My plugin sidebar', - }, - el( - 'div', - { className: 'plugin-sidebar-content' }, - el( Text, { - label: 'Meta Block Field', - value: 'Initial value', - onChange: function ( content ) { - console.log( 'content changed to ', content ); - }, - } ) - ) - ); - }, - } ); -} )( window.wp ); -``` - -Update the `plugin-sidebar.js` with this new code. Notice that it uses a new utility called `wp.components` from the `@wordpress/components` package. Go ahead and add it as `wp-components` in the PHP dependencies array. - -It introduces a few changes from the previous section: - -- Added the CSS class `plugin-sidebar-content` to the `div` element to be able to add some styles. -- Substituted the raw _Meta field_ text with a `TextControl` component wrapped within the `div` element. - -With the new CSS class available you can now give the sidebar a bit of breath. Create a new file in your plugin directory called `plugin-sidebar.css` with the following contents: - -```css -.plugin-sidebar-content { - padding: 16px; -} -``` - -For WordPress to load this stylesheet in the editor and front-end, you need to tell it to enqueue it by using the [enqueue_block_editor_assets](https://developer.wordpress.org/reference/hooks/enqueue_block_editor_assets/) action hook. - -After those changes, the PHP code should look like this: - -```php -<?php - -/* -Plugin Name: Sidebar example -*/ - -function sidebar_plugin_register() { - wp_register_script( - 'plugin-sidebar-js', - plugins_url( 'plugin-sidebar.js', __FILE__ ), - array( - 'wp-plugins', - 'wp-edit-post', - 'wp-element', - 'wp-components' - ) - ); - wp_register_style( - 'plugin-sidebar-css', - plugins_url( 'plugin-sidebar.css', __FILE__ ) - ); -} -add_action( 'init', 'sidebar_plugin_register' ); - -function sidebar_plugin_script_enqueue() { - wp_enqueue_script( 'plugin-sidebar-js' ); -} -add_action( 'enqueue_block_editor_assets', 'sidebar_plugin_script_enqueue' ); - -function sidebar_plugin_style_enqueue() { - wp_enqueue_style( 'plugin-sidebar-css' ); -} -add_action( 'enqueue_block_assets', 'sidebar_plugin_style_enqueue' ); -``` - -Reload the editor and open the sidebar: - -![Sidebar with style and controls](https://raw.githubusercontent.com/WordPress/gutenberg/HEAD/docs/assets/sidebar-style-and-controls.png) - -With the input control and the styling the sidebar looks nicer. This code doesn't let users to store or retrieve data just yet, so the next steps will focus on how to connect it to the meta block field. diff --git a/docs/how-to-guides/sidebar-tutorial/plugin-sidebar-3-register-meta.md b/docs/how-to-guides/sidebar-tutorial/plugin-sidebar-3-register-meta.md deleted file mode 100644 index fc1e15024a85a..0000000000000 --- a/docs/how-to-guides/sidebar-tutorial/plugin-sidebar-3-register-meta.md +++ /dev/null @@ -1,23 +0,0 @@ -# Register the Meta Field - -To work with fields in the `post_meta` table, WordPress has a function called [register_post_meta](https://developer.wordpress.org/reference/functions/register_post_meta/). You're going to use it to register a new field called `sidebar_plugin_meta_block_field`, which will be a single string. Note that this field needs to be available through the [REST API](https://developer.wordpress.org/rest-api/) because that's how the block editor access data. - -Add this to the PHP code, within the `init` callback function: - -```php -register_post_meta( 'post', 'sidebar_plugin_meta_block_field', array( - 'show_in_rest' => true, - 'single' => true, - 'type' => 'string', -) ); -``` - -To make sure the field has been loaded, query the block editor [internal data structures](/docs/reference-guides/data/), also known as _stores_. Open your browser's console, and execute this piece of code: - -```js -wp.data.select( 'core/editor' ).getCurrentPost().meta; -``` - -Before adding the `register_post_meta` function to the plugin, this code returns a void array, because WordPress hasn't been told to load any meta field yet. After registering the field, the same code will return an object containing the registered meta field you registered. - -If the code returns `undefined` make sure your post type supports `custom-fields`. Either when [registering the post](https://developer.wordpress.org/reference/functions/register_post_type/#supports) or with [add_post_type_support function](https://developer.wordpress.org/reference/functions/add_post_type_support/). diff --git a/docs/how-to-guides/sidebar-tutorial/plugin-sidebar-4-initialize-input.md b/docs/how-to-guides/sidebar-tutorial/plugin-sidebar-4-initialize-input.md deleted file mode 100644 index 106bd31925e44..0000000000000 --- a/docs/how-to-guides/sidebar-tutorial/plugin-sidebar-4-initialize-input.md +++ /dev/null @@ -1,122 +0,0 @@ -# Initialize the Input Control - -Now that the field is available in the editor store, it can be surfaced to the UI. The first step will be to extract the input control to a separate function so you can expand its functionality while the code stays clear. - -```js -( function ( wp ) { - var registerPlugin = wp.plugins.registerPlugin; - var PluginSidebar = wp.editPost.PluginSidebar; - var el = wp.element.createElement; - var Text = wp.components.TextControl; - - var MetaBlockField = function () { - return el( Text, { - label: 'Meta Block Field', - value: 'Initial value', - onChange: function ( content ) { - console.log( 'content changed to ', content ); - }, - } ); - }; - - registerPlugin( 'my-plugin-sidebar', { - render: function () { - return el( - PluginSidebar, - { - name: 'my-plugin-sidebar', - icon: 'admin-post', - title: 'My plugin sidebar', - }, - el( - 'div', - { className: 'plugin-sidebar-content' }, - el( MetaBlockField ) - ) - ); - }, - } ); -} )( window.wp ); -``` - -Now you can focus solely on the `MetaBlockField` component. The goal is to initialize it with the value of `sidebar_plugin_meta_block_field`, but also to keep it updated when that value changes. - -WordPress has [some utilities to work with data](/packages/data/README.md) from the stores. The first you're going to use is [withSelect](/packages/data/README.md#withselect-mapselecttoprops-function-function), whose signature is: - -```js -withSelect()(); -// a function that takes `select` as input -// and returns an object containing data -// a function that takes the previous data as input -// and returns a component -``` - -`withSelect` is used to pass data to other components, and update them when the original data changes. Let's update the code to use it: - -```js -( function ( wp ) { - var registerPlugin = wp.plugins.registerPlugin; - var PluginSidebar = wp.editPost.PluginSidebar; - var el = wp.element.createElement; - var Text = wp.components.TextControl; - var withSelect = wp.data.withSelect; - - var mapSelectToProps = function ( select ) { - return { - metaFieldValue: select( 'core/editor' ).getEditedPostAttribute( - 'meta' - )[ 'sidebar_plugin_meta_block_field' ], - }; - }; - - var MetaBlockField = function ( props ) { - return el( Text, { - label: 'Meta Block Field', - value: props.metaFieldValue, - onChange: function ( content ) { - console.log( 'content has changed to ', content ); - }, - } ); - }; - - var MetaBlockFieldWithData = withSelect( mapSelectToProps )( - MetaBlockField - ); - - registerPlugin( 'my-plugin-sidebar', { - render: function () { - return el( - PluginSidebar, - { - name: 'my-plugin-sidebar', - icon: 'admin-post', - title: 'My plugin sidebar', - }, - el( - 'div', - { className: 'plugin-sidebar-content' }, - el( MetaBlockFieldWithData ) - ) - ); - }, - } ); -} )( window.wp ); -``` - -Copy this code to the JavaScript file. Note that it now uses the `wp.data.withSelect` utility to be found in the `@wordpress/data` package. Go ahead and add `wp-data` as a dependency in the PHP script. - -This is how the code changes from the previous section: - -- The `MetaBlockField` function has now a `props` argument as input. It contains the data object returned by the `mapSelectToProps` function, which it uses to initialize its value property. -- The component rendered within the `div` element was also updated, the plugin now uses `MetaBlockFieldWithData`. This will be updated every time the original data changes. -- [getEditedPostAttribute](/docs/reference-guides/data/data-core-editor.md#geteditedpostattribute) is used to retrieve data instead of [getCurrentPost](/docs/reference-guides/data/data-core-editor.md#getcurrentpost) because it returns the most recent values of the post, including user editions that haven't been yet saved. - -Update the code and open the sidebar. The input's content is no longer `Initial value` but a void string. Users can't type values yet, but let's check that the component is updated if the value in the store changes. Open the browser's console, execute - -```js -wp.data - .dispatch( 'core/editor' ) - .editPost( { meta: { sidebar_plugin_meta_block_field: 'hello world!' } } ); -``` - -and observe how the contents of the input component change! diff --git a/docs/how-to-guides/sidebar-tutorial/plugin-sidebar-5-update-meta.md b/docs/how-to-guides/sidebar-tutorial/plugin-sidebar-5-update-meta.md deleted file mode 100644 index 4fadd285f6942..0000000000000 --- a/docs/how-to-guides/sidebar-tutorial/plugin-sidebar-5-update-meta.md +++ /dev/null @@ -1,100 +0,0 @@ -# Update the Meta Field When the Input's Content Changes - -The last step in the journey is to update the meta field when the input content changes. To do that, you'll use another utility from the `@wordpress/data` package, [withDispatch](/packages/data/README.md#withdispatch-mapdispatchtoprops-function-function). - -`withDispatch` works similarly to `withSelect`. It takes two functions, the first returns an object with data, and the second takes that data object as input and returns a new UI component. Let's see how to use it: - -```js -( function ( wp ) { - var registerPlugin = wp.plugins.registerPlugin; - var PluginSidebar = wp.editPost.PluginSidebar; - var el = wp.element.createElement; - var Text = wp.components.TextControl; - var withSelect = wp.data.withSelect; - var withDispatch = wp.data.withDispatch; - - var mapSelectToProps = function ( select ) { - return { - metaFieldValue: select( 'core/editor' ).getEditedPostAttribute( - 'meta' - )[ 'sidebar_plugin_meta_block_field' ], - }; - }; - - var mapDispatchToProps = function ( dispatch ) { - return { - setMetaFieldValue: function ( value ) { - dispatch( 'core/editor' ).editPost( { - meta: { sidebar_plugin_meta_block_field: value }, - } ); - }, - }; - }; - - var MetaBlockField = function ( props ) { - return el( Text, { - label: 'Meta Block Field', - value: props.metaFieldValue, - onChange: function ( content ) { - props.setMetaFieldValue( content ); - }, - } ); - }; - - var MetaBlockFieldWithData = withSelect( mapSelectToProps )( - MetaBlockField - ); - var MetaBlockFieldWithDataAndActions = withDispatch( mapDispatchToProps )( - MetaBlockFieldWithData - ); - - registerPlugin( 'my-plugin-sidebar', { - render: function () { - return el( - PluginSidebar, - { - name: 'my-plugin-sidebar', - icon: 'admin-post', - title: 'My plugin sidebar', - }, - el( - 'div', - { className: 'plugin-sidebar-content' }, - el( MetaBlockFieldWithDataAndActions ) - ) - ); - }, - } ); -} )( window.wp ); -``` - -Here's how it changed from the previous section: - -- Added a new `mapDispatchToProps` function that will be passed to `withDispatch`. It takes `dispatch` as input and returns an object containing functions to update the internal data structures of the editor. These functions are also known as _actions_. -- By calling `setMetaFieldValue` every time the user types something within the input control, we're effectively updating the editor store on each key stroke. -- The `props` argument to the `MetaBlockField` component contains now the data passed by `mapSelectToProps` and the actions passed by `mapDispatchToProps`. - -Copy this new code to the JavaScript file, load the sidebar and see how the input value gets updated as you type. You may want to check that the internal data structures are updated as well. Type something in the input control, and execute the following instruction in your browser's console: - -```js -wp.data.select( 'core/editor' ).getEditedPostAttribute( 'meta' )[ - 'sidebar_plugin_meta_block_field' -]; -``` - -The message displayed should be what you typed in the input. - -Now, after doing some changes, hit the "Save draft" button or publish the post. Then, reload the editor page. The browser has now new content, fresh from the database. You want to confirm that what you typed was stored properly in the database, and has been reloaded in the current post data structure. Open the sidebar and make sure the input control is initialized with the last value you typed. - -One last check. At this point, because you haven't edited the input yet, the current post and the edited attributes should be the same. Confirm that by executing this code in your browser's console: - -```js -wp.data.select( 'core/editor' ).getCurrentPost()[ 'meta' ][ - 'sidebar_plugin_meta_block_field' -]; -wp.data.select( 'core/editor' ).getEditedPostAttribute( 'meta' )[ - 'sidebar_plugin_meta_block_field' -]; -``` - -This is it! You now have a custom sidebar that updates `post_meta` contents. diff --git a/docs/how-to-guides/sidebar-tutorial/plugin-sidebar-6-finishing-touches.md b/docs/how-to-guides/sidebar-tutorial/plugin-sidebar-6-finishing-touches.md deleted file mode 100644 index cd2d2f2d45c01..0000000000000 --- a/docs/how-to-guides/sidebar-tutorial/plugin-sidebar-6-finishing-touches.md +++ /dev/null @@ -1,199 +0,0 @@ -# Finishing Touches - -Your JavaScript code now works as expected, here are a few ways to simplify and make it easier to change in the future. - -The first step is to convert the functions `mapSelectToProps` and `mapDispatchToProps` to anonymous functions that get passed directly to `withSelect` and `withData`, respectively: - -```js -( function ( wp ) { - var registerPlugin = wp.plugins.registerPlugin; - var PluginSidebar = wp.editPost.PluginSidebar; - var el = wp.element.createElement; - var Text = wp.components.TextControl; - var withSelect = wp.data.withSelect; - var withDispatch = wp.data.withDispatch; - - var MetaBlockField = function ( props ) { - return el( Text, { - label: 'Meta Block Field', - value: props.metaFieldValue, - onChange: function ( content ) { - props.setMetaFieldValue( content ); - }, - } ); - }; - - var MetaBlockFieldWithData = withSelect( function ( select ) { - return { - metaFieldValue: select( 'core/editor' ).getEditedPostAttribute( - 'meta' - )[ 'sidebar_plugin_meta_block_field' ], - }; - } )( MetaBlockField ); - - var MetaBlockFieldWithDataAndActions = withDispatch( function ( dispatch ) { - return { - setMetaFieldValue: function ( value ) { - dispatch( 'core/editor' ).editPost( { - meta: { sidebar_plugin_meta_block_field: value }, - } ); - }, - }; - } )( MetaBlockFieldWithData ); - - registerPlugin( 'my-plugin-sidebar', { - render: function () { - return el( - PluginSidebar, - { - name: 'my-plugin-sidebar', - icon: 'admin-post', - title: 'My plugin sidebar', - }, - el( - 'div', - { className: 'plugin-sidebar-content' }, - el( MetaBlockFieldWithDataAndActions ) - ) - ); - }, - } ); -} )( window.wp ); -``` - -Next, merge `MetaBlockField`, `MetaBlockFieldWithData`, and `MetaBlockFieldWithDataAndActions` into one function called `MetaBlockField` that gets passed to the `div` element. The `@wordpress/compose` package offers an utility to concatenate functions called `compose`. Don't forget adding `wp-compose` to the dependencies array in the PHP script. - -```js -( function ( wp ) { - var registerPlugin = wp.plugins.registerPlugin; - var PluginSidebar = wp.editPost.PluginSidebar; - var el = wp.element.createElement; - var Text = wp.components.TextControl; - var withSelect = wp.data.withSelect; - var withDispatch = wp.data.withDispatch; - var compose = wp.compose.compose; - - var MetaBlockField = compose( - withDispatch( function ( dispatch ) { - return { - setMetaFieldValue: function ( value ) { - dispatch( 'core/editor' ).editPost( { - meta: { sidebar_plugin_meta_block_field: value }, - } ); - }, - }; - } ), - withSelect( function ( select ) { - return { - metaFieldValue: select( 'core/editor' ).getEditedPostAttribute( - 'meta' - )[ 'sidebar_plugin_meta_block_field' ], - }; - } ) - )( function ( props ) { - return el( Text, { - label: 'Meta Block Field', - value: props.metaFieldValue, - onChange: function ( content ) { - props.setMetaFieldValue( content ); - }, - } ); - } ); - - registerPlugin( 'my-plugin-sidebar', { - render: function () { - return el( - PluginSidebar, - { - name: 'my-plugin-sidebar', - icon: 'admin-post', - title: 'My plugin sidebar', - }, - el( - 'div', - { className: 'plugin-sidebar-content' }, - el( MetaBlockField ) - ) - ); - }, - } ); -} )( window.wp ); -``` - -Finally, extract the meta field name (`sidebar_plugin_meta_block_field`) from the `withSelect` and `withDispatch` functions to a single place, so it's easier to change in the future. You can leverage the fact that `withSelect` and `withDispatch` first functions can take the props of the UI component they wrap as a second argument. For example: - -```js -// ... -var MetaBlockFieldWithData = withSelect( function ( select, props ) { - console.log( props.metaFieldName ); -} )( MetaBlockField ); - -// ... -el( MetaBlockFieldWithData, { - metaFieldName: 'sidebar_plugin_meta_block_field', -} ); -// ... -``` - -Notice how the `metaFieldName` can be accessed within `withSelect`. Let's change the code to take advantage of that: - -```js -( function ( wp ) { - var registerPlugin = wp.plugins.registerPlugin; - var PluginSidebar = wp.editPost.PluginSidebar; - var el = wp.element.createElement; - var Text = wp.components.TextControl; - var withSelect = wp.data.withSelect; - var withDispatch = wp.data.withDispatch; - var compose = wp.compose.compose; - - var MetaBlockField = compose( - withDispatch( function ( dispatch, props ) { - return { - setMetaFieldValue: function ( value ) { - dispatch( 'core/editor' ).editPost( { - meta: { [ props.fieldName ]: value }, - } ); - }, - }; - } ), - withSelect( function ( select, props ) { - return { - metaFieldValue: select( 'core/editor' ).getEditedPostAttribute( - 'meta' - )[ props.fieldName ], - }; - } ) - )( function ( props ) { - return el( Text, { - label: 'Meta Block Field', - value: props.metaFieldValue, - onChange: function ( content ) { - props.setMetaFieldValue( content ); - }, - } ); - } ); - - registerPlugin( 'my-plugin-sidebar', { - render: function () { - return el( - PluginSidebar, - { - name: 'my-plugin-sidebar', - icon: 'admin-post', - title: 'My plugin sidebar', - }, - el( - 'div', - { className: 'plugin-sidebar-content' }, - el( MetaBlockField, { - fieldName: 'sidebar_plugin_meta_block_field', - } ) - ) - ); - }, - } ); -} )( window.wp ); -``` - -That's it. You have now a compact version of the original code. Go ahead and add more functionality to your plugin, review other tutorials, or create your next gig! diff --git a/docs/how-to-guides/themes/README.md b/docs/how-to-guides/themes/README.md index b92293a5f00a1..2b2137ce49ce4 100644 --- a/docs/how-to-guides/themes/README.md +++ b/docs/how-to-guides/themes/README.md @@ -1,10 +1,23 @@ # Themes -The block editor provides a number of options for theme designers and developers, including theme-defined color settings, font size control, and much more. +The block editor provides a number of options for theme designers and developers, to interact with it, including theme-defined color settings, font size control, and much more. + +## Types of themes + +### Classic theme + +In terms of block editor terminology this is any theme that defines its templates in the traditional `.php` file format, and that doesn't have an `index.html` format template in the `/block-templates` or `/templates` folders. A `Classic` theme has the ability to provide configuration and styling options to the block editor, and block content, via [Theme Supports](/docs/how-to-guides/themes/theme-support.md), or by including a [theme.json](/docs/how-to-guides/themes/theme-json.md) file. A theme does not have to be a `Block` theme in order to take advantage of some of the flexibility provided by the use of a `theme.json` file. + +### Block theme + +This is any theme that has, at a minimum, an `index.html` format template in the `/block-templates` or `/templates` folders, and with templates provided in form of block content markup. While many `Block` themes will make use of a `theme.json` file to provide configuration and styling settings, a `theme.json` is not a requirement of `Block` themes. The advantage of `Block` themes is that the block editor can be used to edit all areas of the site: headers, footers, sidebars, etc. + +### Full site editing (FSE) + +There isn't an FSE specific theme type. In WordPress > 5.9 FSE is enabled for any `Block` theme, ie. any theme that has an `index.html` format template in the `/block-templates` or `/templates` folders. **Contents** - [Block Theme Overview](/docs/how-to-guides/themes/block-theme-overview.md) -- [Create a Block Theme](/docs/how-to-guides/themes/create-block-theme.md) - [Global Settings (theme.json)](/docs/how-to-guides/themes/theme-json.md) - [Theme Support](/docs/how-to-guides/themes/theme-support.md) diff --git a/docs/how-to-guides/themes/block-theme-overview.md b/docs/how-to-guides/themes/block-theme-overview.md index 1ab1c39432e85..48a3621aa0fd0 100644 --- a/docs/how-to-guides/themes/block-theme-overview.md +++ b/docs/how-to-guides/themes/block-theme-overview.md @@ -1,140 +1,42 @@ # Block Theme -<div class="callout callout-alert"> -These features are still experimental in the plugin. “Experimental” means this is just an early implementation that is subject to potential drastic and breaking changes in iterations based on feedback from users, contributors and theme authors. +These features are experimental and part of the Gutenberg plugin. +For block theme features supported by WordPress 5.9 see the [Theme Developer Handbook](https://developer.wordpress.org/themes/block-themes/). -Documentation is shared early to surface what’s being worked on and invite feedback from those experimenting with the APIs. You can provide feedback in the weekly #core-editor chats, or #fse-outreach-experiment channels, or async via Github issues. -</div> +You can provide feedback in the weekly #core-editor chats, or #fse-outreach-experiment channels, or async using GitHub issues. ## What is a block theme? A block theme is a WordPress theme with templates entirely composed of blocks so that in addition to the post content of the different post types (pages, posts, ...), the block editor can also be used to edit all areas of the site: headers, footers, sidebars, etc. -## What is the structure of a block theme? +## Global styles presets -A very simple block theme is structured like so: +In addition to the default theme.json file, Block Themes can define multiple global styles presets for users to pick from. For example, a theme author might provide multiple theme color variations for the theme. -``` -theme -|__ style.css -|__ theme.json -|__ functions.php -|__ block-templates - |__ index.html - |__ single.html - |__ archive.html - |__ ... -|__ block-template-parts - |__ header.html - |__ footer.html - |__ sidebar.html - |__ ... -``` - -The difference with existing WordPress themes is that the different templates in the template hierarchy, and template parts, are block templates instead of php files. In addition, this example includes a [`theme.json`](/docs/how-to-guides/themes/theme-json.md) file for some styles. - -## What is a block template? - -A block template is made up of a list of blocks. Any WordPress block can be used in a template. Templates can also reuse parts of their content using "Template Parts". For example, all the block templates can have the same header included from a separate `header.html` template part. +To provide a global styles preset, themes can add multiple JSON files inside their `/styles` folder. Each one of these JSON file is a mini theme.json file containing `styles` and/or `settings` that overrides any of the default `theme.json` file settings or styles. -Here's an example of a block template: +**Example** -```html -<!-- wp:site-title /--> - -<!-- wp:image {"sizeSlug":"large"} --> -<figure class="wp-block-image size-large"> - <img src="https://cldup.com/0BNcqkoMdq.jpg" alt="" /> -</figure> -<!-- /wp:image --> - -<!-- wp:group --> -<div class="wp-block-group"> - <!-- wp:post-title /--> - <!-- wp:post-content /--> -</div> -<!-- /wp:group --> - -<!-- wp:group --> -<div class="wp-block-group"> - <!-- wp:heading --> - <h2>Footer</h2> - <!-- /wp:heading --> -</div> -<!-- /wp:group --> +```json +// styles/red.json +{ + styles: { + colors: { + text: 'red', + background: 'white' + } + } +} ``` -## How to write and edit these templates? - -Ultimately, any WordPress user with the correct capabilities (example: `administrator` WordPress role) will be able to access these templates in the WordPress admin, edit them in dedicated views and potentially export them as a theme. - -As of Gutenberg 8.5, there are two ways to create and edit templates within Gutenberg. - -### Edit templates within The "Appearance" section of WP-Admin - -You can navigate to the temporary "Templates" admin menu under "Appearance" `wp-admin/edit.php?post_type=wp_template` and use this as a playground to edit your templates. Add blocks here and switch to the code editor mode to grab the HTML of the template when you are done. Afterwards, you can paste that markup into a file in your theme directory. - -Please note that the "Templates" admin menu under "Appearance" will _not_ list templates that are bundled with your theme. It only lists new templates created by the specific WordPress site you're working on. - -### Edit Templates within the Full-site Editor - -To begin, create a blank template file within your theme. For example: `mytheme/block-templates/index.html`. Afterwards, open the Full-site editor. Your new template should appear as the active template, and should be blank. Add blocks as you normally would using Gutenberg. You can add and create template parts directly using the "Template Parts" block. - -Repeat for any additional templates you'd like to bundle with your theme. - -When you're done, click the "Export Theme" option in the "Tools" (ellipsis) menu of the site editor. This will provide you with a ZIP download of all the templates and template parts you've created in the site editor. These new HTML files can be placed directly into your theme. - -Note that when you export template parts this way, the template part block markup will include a `postID` attribute that can be safely removed when distributing your theme. - -## Templates CPT - -If you save the templates directly from the temporary Templates admin menu, you'll be able to override your theme's templates. - -Example: By using **single** as the title for your template and saving it, this saved template will take precedence over your theme's `single.html` file. - -Note that it won't take precedence over any of your theme's templates with higher specificity in the template hierarchy. Resolution goes from most to least specific, looking first for a CPT post and then for a theme template, at each level. - -## Theme Blocks - -Some blocks have been made specifically for block themes. For example, you'll most likely use the **Site Title** block in your site's header while your **single** block template will most likely include a **Post Title** and a **Post Content** block. - -As we're still early in the process, the number of blocks specifically dedicated to these block templates is relatively small but more will be added as we move forward with the project. As of Gutenberg 8.5, the following blocks are currently available: - -- Site Title -- Template Part -- Query -- Query Loop -- Query Pagination -- Post Title -- Post Content -- Post Author -- Post Comment -- Post Comment Author -- Post Comment Date -- Post Comments -- Post Comments Count -- Post Comments Form -- Post Date -- Post Excerpt -- Post Featured Image -- Post Hierarchical Terms -- Post Tags - -## Styling - -One of the most important aspects of themes (if not the most important) is the styling. While initially you'll be able to provide styles and enqueue them using the same hooks themes have always used, the [Global Styles](/docs/how-to-guides/themes/theme-json.md) effort will provide a scaffolding for adding many theme styles in the future. - -## Classic Themes - -Users of classic themes can also build custom block templates and use theme in their Pages and Custom Post Types that supports Page Templates. - -Theme authors can opt-out of this feature by removing the `block-templates` theme support in their `functions.php` file. - -```php -remove_theme_support( 'block-templates' ); +```json +// styles/dark.json +{ + styles: { + colors: { + text: 'white', + background: 'black' + } + } +} ``` - -## Resources - -- [Full Site Editing](https://github.com/WordPress/gutenberg/labels/%5BFeature%5D%20Full%20Site%20Editing) label. -- [Theme Experiments](https://github.com/WordPress/theme-experiments) repository, full of block theme examples created by the WordPress community. diff --git a/docs/how-to-guides/themes/create-block-theme.md b/docs/how-to-guides/themes/create-block-theme.md index 72fea1cb8ec97..356be104bbf79 100644 --- a/docs/how-to-guides/themes/create-block-theme.md +++ b/docs/how-to-guides/themes/create-block-theme.md @@ -1,855 +1,4 @@ -# Create a block theme -The purpose of this tutorial is to show how to create a block theme and help theme developers transition to full site editing. -It is recommended that you first read the [block theme overview](/docs/how-to-guides/themes/block-theme-overview.md). +##This content has moved -You will learn about the required files, how to combine templates and template parts, how to add presets for global styles, and how to add blocks and export the templates in the site editor. - -Full site editing is an experimental feature, and the workflow in this tutorial is likely to change. - -This tutorial is up to date with Gutenberg version 11.0.0. - -## Table of Contents - -1. [What is needed to create a block-theme?](#what-is-needed-to-create-a-block-theme) -2. [Theme setup](#theme-setup) -3. [Creating the templates and template parts](#creating-the-templates-and-template-parts) -4. [Theme.json - Global styles](#themejson---global-styles) -5. [Custom templates](#custom-templates) -6. [Example themes](#example-themes) - -## What is needed to create a block theme? - -To use a block theme, you first need to activate the Gutenberg plugin. - -### Required files and file structure - -There are two files that are required to activate any theme: `index.php` and `style.css`. -For the plugin to recognize that a block theme is active, the theme must also include an `index.html` template -inside a folder called `block-templates`. - -The theme may optionally include a `functions.php` file and a [theme.json file](/docs/how-to-guides/themes/theme-json.md) to manage global styles. -Template parts are optional. If they are included they must be placed inside a `block-template-parts` folder. - -File structure: -``` -theme -|__ style.css -|__ functions.php -|__ index.php -|__ theme.json -|__ block-templates - |__ index.html - |__ ... -|__ block-template-parts - |__ header.html - |__ footer.html - |__ ... -``` - -## Theme setup - -Create a new folder for your theme in `/wp-content/themes/`. -In this example, the folder name is `fse-tutorial`. - -Inside the theme folder, create the `block-templates` and `block-template-parts` folders. - -Create a `style.css` file. The file header in the `style.css` file has [the same items you would use in a classic theme](https://developer.wordpress.org/themes/basics/main-stylesheet-style-css/#explanations). - -```CSS -/* -Theme Name: FSE Tutorial -Theme URI: -Author: The WordPress team -Author URI: https://wordpress.org/ -Description: -Tags: full-site-editing, blog -Version: 1.0.0 -Requires at least: 5.0 -Tested up to: 5.7 -Requires PHP: 7.0 -License: GNU General Public License v2 or later -License URI: http://www.gnu.org/licenses/gpl-2.0.html -Text Domain: fse-tutorial - -This theme, like WordPress, is licensed under the GPL. -Use it to make something cool, have fun, and share what you've learned with others. -*/ -``` - -Create a blank `index.php` file. This file is used as a fallback if the theme is activated without Gutenberg. - -Inside the `block-templates` folder, create a blank `index.html` file. - -Optionally, create a `functions.php` file. -In this file, you can enqueue `style.css`, include additional files, enable an editor stylesheet and add theme support. - -<div class="callout callout-tip"> -You will add most of the theme support in the `theme.json` file. The title tag is already enabled for all block themes, and it is no longer necessarry to enqueue the comment reply script because it is included with the comments block. -</div> - -```php -<?php -if ( ! function_exists( 'fse_tutorial_theme_setup' ) ) : - /** - * Sets up theme defaults and registers support for various WordPress features. - * - * Note that this function is hooked into the after_setup_theme hook, which runs - * before the init hook. The init hook is too late for some features, such as indicating - * support for post thumbnails. - */ - function fse_tutorial_theme_setup() { - /** - * Add default posts and comments RSS feed links to <head>. - */ - add_theme_support( 'automatic-feed-links' ); - - /** - * Enable support for post thumbnails and featured images. - */ - add_theme_support( 'post-thumbnails' ); - - add_theme_support( 'editor-styles' ); - - add_theme_support( 'wp-block-styles' ); - } -endif; -add_action( 'after_setup_theme', 'fse_tutorial_theme_setup' ); - -/** - * Enqueue theme scripts and styles. - */ -function fse_tutorial_theme_scripts() { - wp_enqueue_style( 'fse-tutorial-style', get_stylesheet_uri() ); -} -add_action( 'wp_enqueue_scripts', 'fse_tutorial_theme_scripts' ); -``` - -Your theme should now include the following files and folders: - -``` -theme - |__ style.css - |__ functions.php (optional) - |__ index.php - |__ block-templates - |__ index.html - |__ block-template-parts - |__ (empty folder) -``` - -## Creating the templates and template parts -Before continuing, install and activate your theme. - -There are several ways to create templates and template parts: - -- Manually, by creating HTML files containing block markup. -- Using the site editor. -- Using the template editing mode in the block editor. - -The fourth way is temporary and involves going to the Appearance menu > Templates, and is not recommended because of its limitations. - -### Manual template creation - -Create two template part files called `header.html` and `footer.html` and place them inside the `block-template-parts` folder. - -When you add blocks manually to your HTML files, start with an HTML comment that includes the block name prefixed with `wp:`. -There are both self-closing and multi-line blocks as shown in the example below. - -Add the site title block to `header.html`: - -```html -<!-- wp:site-title /--> -``` - -Add a credit text to `footer.html`: - -```html -<!-- wp:paragraph --> -<p>Proudly powered by <a href="https://wordpress.org/">WordPress</a>.</p> -<!-- /wp:paragraph --> -``` - -Blocks are self-containing; the opening tag and the closing tag must be in the same template. -You would not be able to place an opening tag for a group block in a header template and close it in a footer template. - -Open `index.html` and include the template parts by adding two HTML comments. -The HTML comments start with `wp:template-part`, which is the name of the template part block. -Each template part is identified by the slug, the name of the file without the file extension. - -Inside the HTML comment, add two curly brackets and the key, `slug`, together with the name of the template part: - -```html -<!-- wp:template-part {"slug":"header"} /--> - -<!-- wp:template-part {"slug":"footer"} /--> -``` - -Template parts use a `<div>` tag by default. Add the `tagName` attribute to change the HTML element to `<header>` and `<footer>`: - -```html -<!-- wp:template-part {"slug":"header","tagName":"header"} /--> - -<!-- wp:template-part {"slug":"footer","tagName":"footer"} /--> -``` - -All block attributes are placed inside these curly brackets. If you wanted the paragraph in `footer.html` to be centered, you would use the `align` attribute: - -```html -<!-- wp:paragraph {"align":"center"} --> -<p class="has-text-align-center">Proudly powered by <a href="https://wordpress.org/">WordPress</a>.</p> -<!-- /wp:paragraph --> -``` - -The HTML element that wraps the block content also uses the corresponding CSS class: `has-text-align-center`. - -<div class="callout callout-tip"> -If you are not sure what the correct block markup is, you can add the block in the block editor -and copy the block markup from the code editor mode to your theme files. -</div> - -### Template creation in the site editor - -Open the Site Editor from the WordPress admin menu. The default view is the blank index template. - -Insert a new template part block. The block will have the default name "Untitled Template Part". -Open the **Advanced** section of the block settings sidebar and make the following changes: -Change the title and area to Header, and the HTML element to `<header>`. - -Repeat the process for the site footer: Change the title and area to Footer, and the HTML element to `<footer>`. - -Add a site title block to the header template part, and a paragraph to the footer. -Save the changes. You will be asked if you want to save the two template parts, the index template, or all three. -Confirm that the checkboxes are correct and save all three. - -### Template editing mode - -The template editing mode is a way to edit the website without the complexity of the site editor interface. -It is more limited than the site editor because you can not select or navigate between templates in this view. - -You access the template editing mode via the block editor. -Create a new post or page. Next, open the document settings sidebar and locate the **Template** panel below **Status & visibility**. -Here you will find information about the current template and a list of existing templates to choose from. -Create a new template by selecting the **New** link. -Edit and save the template in the same way as in the site editor. - -### Exporting - -Templates and template parts that have been created or edited in the site editor or template editing mode -are saved to the database as custom post types. To export them as theme files, follow these steps: - -- In the site editor, open the **More tools and options** menu. -- Select the **Export** option to download a zip file containing the files. Unpack the files. -- Copy the updated `index.html` file from `theme/block-templates/` to your theme's `block-templates` folder. -- Copy template part one and two from `theme/block-template-parts/` to your theme's `block-template-parts` folder. -- Rename the template parts to `header.html` and `footer.html`, respectively. -- Open `index.html` and update the template part slugs in the block markup. - -Saved templates have precedence over theme files. To use the updated theme files, go to **Appearance > Templates** and -**Appearance > Template parts** and delete the saved templates. - -### Additional templates - -#### Blog - -Now the theme has a basic site header and footer, but it does not display any content. -To create a list of posts, you will use the query loop and post template blocks. - -Whether you are using the site editor or editing theme files directly, open the index template. - -First, add a group block that will work as a container for the posts. -Next, enable the width options for the blocks inside this group using `"layout":{"inherit":true}`. - -```html -<!-- wp:template-part {"slug":"header","tagName":"header"} /--> -<!-- wp:group {"layout":{"inherit":true}} --> -<div class="wp-block-group"></div> -<!-- /wp:group --> -<!-- wp:template-part {"slug":"footer","tagName":"footer"} /--> -``` - -Change the `<div>` in the group block to a `<main>` element using the `tagName` attribute: - -```html -<!-- wp:template-part {"slug":"header","tagName":"header"} /--> -<!-- wp:group {"layout":{"inherit":true},"tagName":"main"} --> -<main class="wp-block-group"></main> -<!-- /wp:group --> -<!-- wp:template-part {"slug":"footer","tagName":"footer"} /--> -``` - -If you are using one of the editors, change the element from `<div>` to `<main>` under **Advanced** in the block setting sidebar. - -Add a query loop block inside the group. -When you place a query loop block in the editor, the post template is used as an inner block and you have the option to start with an empty loop or include selected post blocks like a post title and featured image. - -Example markup: - -```html -<!-- wp:query --> -<div class="wp-block-query"><!-- wp:post-template --> -<!-- wp:post-title /--> -<!-- wp:post-date /--> -<!-- wp:post-excerpt /--> -<!-- /wp:post-template --></div> -<!-- /wp:query --> -``` - -The query pagination block can only be used inside the query loop. Place it inside the query, but outside the post template: - -```html -<!-- wp:query --> -<div class="wp-block-query"><!-- wp:post-template --> -<!-- wp:post-title /--> -<!-- wp:post-date /--> -<!-- wp:post-excerpt /--> -<!-- /wp:post-template --> - -<!-- wp:query-pagination --> -<div class="wp-block-query-pagination"> -<!-- wp:query-pagination-previous /--> -<!-- wp:query-pagination-numbers /--> -<!-- wp:query-pagination-next /--></div> -<!-- /wp:query-pagination --> - -</div> -<!-- /wp:query --> -``` - -#### Posts and pages - -Next, create a new template for displaying single posts. -If you are editing theme files directly, create a file called `single.html` inside the block-templates folder. - -Add the site header and site footer template parts: - -```html -<!-- wp:template-part {"slug":"header","tagName":"header"} /--> - -<!-- wp:template-part {"slug":"footer","tagName":"footer"} /--> -``` - -Add a group block that will work as a container for your post: - -```html -<!-- wp:template-part {"slug":"header","tagName":"header"} /--> -<!-- wp:group {"tagName":"main"} --> -<main class="wp-block-group"></main> -<!-- /wp:group --> -<!-- wp:template-part {"slug":"footer","tagName":"footer"} /--> -``` - -Add your preferred blocks inside the group block. Some new blocks that are available are: - -- Post content: `<!-- wp:post-content /-->` -- Post title: `<!-- wp:post-title /-->` -- Post author: `<!-- wp:post-author /-->` -- Post date: `<!-- wp:post-date /-->` -- Post featured image: `<!-- wp:post-featured-image /-->` -- Post tags: `<!-- wp:post-terms {"term":"post_tag"} /-->` -- Post categories: `<!-- wp:post-terms {"term":"category"} /-->` -- Next and previous post: `<!-- wp:post-navigation-link /--><!-- wp:post-navigation-link {"type":"previous"} /-->` - -Save the HTML file, or save and export the post template if you are working in the site editor. - -Copy all the blocks and create a template for displaying pages. -Optionally, save a copy of `single.html` as `page.html` inside the block-templates folder. -Adjust the blocks for the page template, and save. - -#### Archives - -If a theme does not have an archive or search result template, the index template will be used as a fallback. -To make sure that the query block shows the correct results, it has an attribute called `inherit`. -Inherit is enabled by default and filters the query depending on the page that you are viewing. - -If you like you can continue creating an archive or category template by copying the index file and -adding a title using the archive title block. This is a variation of the query title block: -`<!-- wp:query-title {"type":"archive"} /-->` - -## Theme.json - Global styles - -`theme.json` is a configuration file used to enable or disable features and set default styles for both the website and blocks. - -Style settings are converted to CSS custom properties and enqueued for the editor and the front, -reducing the need for the theme to enqueue block styles. - -To make the most out of this tutorial, read the [documentation for global styles](/docs/how-to-guides/themes/theme-json.md). - -[Learn more about the JSON format (external link)](https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Objects/JSON) - -Create a file called `theme.json` and save it inside the main theme folder. - -Start by adding two curly brackets to the file: - -```json -{ - -} -``` - -Add the version number for the theme.json format. For Gutenberg 10.6, the version number is 1: - -```json -{ - "version": 1, -} -``` - -Next, add three main sections: - -- Settings -Where you will enable features and create presets for styles. -- Styles -Where you apply styles to the website, elements, and blocks. -- templateParts -For assigning template part files to template areas. - -```json -{ - "version": 1, - "settings": { - }, - "styles": { - }, - "templateParts": [ - ] -} -``` - -Remember to separate the objects with a comma. - -### Enabling and disabling features - -For a list of features that can be enabled or disabled, see the [documentation for theme.json](https://developer.wordpress.org/block-editor/how-to-guides/themes/theme-json/#settings). - -There are two different ways that a block can support a feature: - -- By displaying a control in the block settings sidebar. -- By allowing defaults to be set using `theme.json`. - -<div class="callout callout-tip"> -It is not possible to add controls to a block that does not support them by using theme.json. -</div> - -Example: -A block that does not have support for border controls, can have a default border set inside the `theme.json` file, -as long as the border feature is enabled. - -To enable border styles, add a `border` object under `settings` with the following attributes and values: - -```json -{ - "version": 1, - "settings": { - "border": { - "customColor": true, - "customRadius": true, - "customStyle": true, - "customWidth": true - } - } -} -``` - -To enable link colors, add a `color` setting and set `link` to true: - -```json -{ - "version": 1, - "settings": { - "border": { - "customColor": true, - "customRadius": true, - "customStyle": true, - "customWidth": true - }, - "color": { - "link": true, - } - } -} -``` - -To enable padding, margin and custom spacing units, include a setting for spacing: - -```json -{ - "version": 1, - "settings": { - "border": { - "customColor": true, - "customRadius": true, - "customStyle": true, - "customWidth": true - }, - "color": { - "link": true - }, - "spacing": { - "customPadding": true, - "customMargin": true, - "units": [ "px", "em", "rem", "vh", "vw" ] - } - } -} -``` - -#### Disabling features - -If you want to disable gradients, which are enabled by default, set `gradient` to false: - -```json -{ - "version": 1, - "settings": { - "border": { - "customColor": true, - "customRadius": true, - "customStyle": true, - "customWidth": true - }, - "color": { - "link": true, - "gradient": false - } - ... - } -} -``` - - - -### Content width and theme support for wide and full-width blocks - -The `layout` setting enables width settings for group blocks and template parts -and replaces `add_theme_support( 'align-wide' );`. - -The benefit of enabling the layout setting in `theme.json` is that you no longer need to add extra CSS for -block alignments or widths. You can also set more precise widths to blocks inside containers. - -The keys used by `layout` are: - -- `contentSize` Default width for the blocks. -- `wideSize` Wide width. - -The example uses pixels, but you can use any valid CSS value and unit. -(The code example is truncated to illustrate where to add the option.) - -```json -{ - "version": 1, - "settings": { - ... - "layout": { - "contentSize": "840px", - "wideSize": "1100px" - } - } -} -``` - -### Color palette - -This is the equivalent of `add_theme_support( 'editor-color-palette' )`. -You can add multiple color palettes: a default palette for all blocks, and color palettes specific to a block type. - -The keys used by `palette` are: - -- `slug` A unique identifier for the color. -- `color` The hex color value. -- `name` The visible name in the editor. Optional. - -Multiple colors are added as an array using square brackets: `[]`. -Add a default color palette inside `settings`, under `color`: - -```json -{ - "version": 1, - "settings": { - ... - "color": { - "palette": [ - { - "slug": "white", - "color": "#fff", - "name": "White" - }, - { - "slug": "blue", - "color": "#0073AA", - "name": "WordPress blue" - }, - { - "slug": "dark-grey", - "color": "#23282D", - "name": "Dark grey" - } - ] - } - } -} -``` - -Next, add a trailing comma after `color`, and add a new palette for the heading block. -This palette will override the default theme palette. - -```json -"blocks": { - "core/heading": { - "color": { - "palette": [ - { - "slug": "white", - "color": "#fff", - "name": "White" - }, - { - "slug": "medium-blue", - "color": "#00A0D2", - "name": "Medium blue" - } - ] - } - } -} -``` - -Presets are created under `settings` and applied under `styles`. -Apply the white color to the body background by adding `color` followed by the `background` key and value: - -```json -"styles": { - "color": { - "background": "var(--wp--preset--color--white)" - } -} -``` - -### Typography - -To add custom font sizes, create a new section called `typography` under `settings`. -`fontSizes` is the equivalent of `add_theme_support( 'editor-font-sizes' )`. - -```json -"typograhy": { - "fontSizes": [ - ] -} -``` - -The keys used by `fontSizes` are: - -- `slug` A unique identifier for the size. -- `size` The size value. This can be unitless or use any valid CSS value. -- `name` The visible name in the editor. - -```json -"typograhy": { - "fontSizes": [ - { - "slug": "normal", - "size": "20px", - "name": "normal" - }, - { - "slug": "extra-small", - "size": "16px", - "name": "Extra small" - }, - { - "slug": "large", - "size": "24px", - "name": "Large" - } - ] -} -``` - -To apply a size to a block, follow these steps: -Create a new section called `blocks` under `styles` - -```json -"blocks": { - -} -``` - -Add the names of the blocks that you want to set defaults for - -```json -"blocks": { - "core/paragraph": { - }, - "core/post-terms": { - }, - "core/post-title": { - } -} -``` - -Add the `typography` setting, and set the `fontSize` value to the preset that you created - -```json -"blocks": { - "core/paragraph": { - "typography": { - "fontSize": "var(--wp--preset--font-size--normal)" - } - }, - "core/post-terms": { - "typography": { - "fontSize": "var(--wp--preset--font-size--extra-small)" - } - }, - "core/post-title": { - "typography": { - "fontSize": "var(--wp--preset--font-size--large)" - } - } -} -``` - -### Elements - -With the `elements` setting, you can set defaults for links and headings on the website and inside blocks. - -#### Elements on the website - -Set a font color to all `<H2>` headings, regardless of if the heading is a site title, post title, or heading block: - -```json -"styles": { - "elements": { - "h2": { - "color": { - "text": "var(--wp--preset--color--medium-blue)" - } - } - } -} -``` - -Add a default link text color: - -```json -"styles": { - "elements": { - "h2": { - "color": { - "text": "var(--wp--preset--color--medium-blue)" - } - }, - "link": { - "color": { - "text": "var(--wp--preset--color--dark-grey)" - } - } - } -} -``` - -#### Elements inside blocks - -Some blocks have more than one element, or have different elements depending on settings. - -Example: If you set a background color to a post excerpt block, that background affects the entire block. -You can set a background to the optional "read more" link in the post excerpt block using elements: -`Styles > blocks > the name of the block > elements > element > attribute` - -Since the theme has custom padding enabled, you can add `padding` within the `spacing` attribute to make the background color more visible: - -```JSON -"styles": { - "blocks": { - "core/post-excerpt": { - "elements": { - "link": { - "color": { - "text": "var(--wp--preset--color--white)", - "background": "var(--wp--preset--color--blue)" - }, - "spacing": { - "padding": { - "top": "1em", - "right": "1em", - "bottom": "1em", - "left": "1em" - } - } - } - } - } - } -} -``` - -### Template parts - -In the templeParts section, assign the two template parts that you created to their template areas. -Add two keys: --`name`, the file name of the template part file without the file extension, --`area`, the name of the template area. - -There are three template areas to choose from: Header, footer, and general. - -```json -"templateParts": [ - { - "name": "header", - "area": "header" - }, - { - "name": "footer", - "area": "footer" - } -] -``` - -## Custom templates - -Custom templates for posts, pages, and custom post types are created by adding additional HTML files inside the -`block-templates` folder. -In a classic theme, templates are identified with a file header. In a block theme, you list templates in the `theme.json` file. - -All templates that are listed in the `customTemplates` section of `theme.json` are selectable in the site editor. - -For templates to be editable in the template editing mode, the template's file name needs to be prefixed with either `post-` or `page-`. - -First, create a section called `customTemplates` at the root level of `theme.json`. -This section has two required keys: -`Name`, which is the name of the template file without the file ending. -`title`, which is the visible title of the template in the editors. - -```json -"customTemplates": [ - { - "name": "page-home", - "title": "Page without title" - } -] -``` - -There is also an optional setting where you decide which post types that can use the template. -The key is `postTypes`, followed by the name of the post type: - -```json -"customTemplates": [ - { - "name": "page-home", - "title": "Page without title" - }, - { - "name": "page-contact", - "title": "Contact", - "postTypes": [ - "page" - ] - } -] -``` - -## Example themes - -You can find a basic starter theme called "emptytheme" and other example themes -on the [Experimental themes GitHub repository](https://github.com/WordPress/theme-experiments). -When using a theme as reference, take note of which Gutenberg version the theme is built for, -because the experimental features are updated frequently. - -The theme directory lists block themes under the tag [full site editing](https://wordpress.org/themes/tags/full-site-editing/). +You can find documentation about how to create a block theme in the [Theme Developer Handbook](https://developer.wordpress.org/themes/block-themes/). diff --git a/docs/how-to-guides/themes/theme-json.md b/docs/how-to-guides/themes/theme-json.md index f3ac8cfddd03b..61058523e8e6d 100644 --- a/docs/how-to-guides/themes/theme-json.md +++ b/docs/how-to-guides/themes/theme-json.md @@ -1,6 +1,6 @@ # Global Settings & Styles (theme.json) -WordPress 5.8 comes with [a new mechanism](https://make.wordpress.org/core/2021/06/25/introducing-theme-json-in-wordpress-5-8/) to configure the editor that enables a finer-grained control and introduces the first step in managing styles for future WordPress releases: the `theme.json` file. This page documents its format. +WordPress 5.8 comes with [a new mechanism](https://make.wordpress.org/core/2021/06/25/introducing-theme-json-in-wordpress-5-8/) to configure the editor that enables a finer-grained control and introduces the first step in managing styles for future WordPress releases: the `theme.json` file. Then `theme.json` [evolved to a v2](https://make.wordpress.org/core/2022/01/08/updates-for-settings-styles-and-theme-json/) with WordPress 5.9 release. This page documents its format. - Rationale - Settings for the block editor @@ -20,6 +20,7 @@ WordPress 5.8 comes with [a new mechanism](https://make.wordpress.org/core/2021/ - Elements - customTemplates - templateParts + - patterns - FAQ - The naming schema of CSS Custom Properties - Why using -- as a separator? @@ -71,7 +72,7 @@ To address this need, we've started to experiment with CSS Custom Properties, ak ```json { - "version": 1, + "version": 2, "settings": { "color": { "palette": [ @@ -109,7 +110,7 @@ body { ```json { - "version": 1, + "version": 2, "settings": { "custom": { "line-height": { @@ -134,11 +135,11 @@ body { ## Specification -This specification is the same for the three different origins that use this format: core, themes, and users. Themes can override core's defaults by creating a file called `theme.json`. Users, via the site editor, will also be also to override theme's or core's preferences via an user interface that is being worked on. +This specification is the same for the three different origins that use this format: core, themes, and users. Themes can override core's defaults by creating a file called `theme.json`. Users, via the site editor, will also be able to override theme's or core's preferences via an user interface that is being worked on. ```json { - "version": 1, + "version": 2, "settings": {}, "styles": {}, "customTemplates": {}, @@ -147,10 +148,10 @@ This specification is the same for the three different origins that use this for ``` ### Version +This field describes the format of the `theme.json` file. The current version is [v2](https://developer.wordpress.org/block-editor/reference-guides/theme-json-reference/theme-json-living/), [introduced in WordPress 5.9](https://make.wordpress.org/core/2022/01/08/updates-for-settings-styles-and-theme-json/). It also works with the current Gutenberg plugin. -This field describes the format of the `theme.json` file. The current and only version is 1. +If you have used [v1](https://developer.wordpress.org/block-editor/reference-guides/theme-json-reference/theme-json-v1/) previously, you don’t need to update the version in the v1 file to v2, as it’ll be [migrated](https://developer.wordpress.org/block-editor/reference-guides/theme-json-reference/theme-json-migrations/) into v2 at runtime for you. -WordPress 5.8 will ignore the contents of any `theme.json` whose version is not equals to the current. Should the Gutenberg plugin need it, it'll update the version and will add the corresponding migration mechanisms from older versions. ### Settings @@ -167,8 +168,14 @@ The settings section has the following structure: ```json { - "version": 1, + "version": 2, "settings": { + "border": { + "radius": false, + "color": false, + "style": false, + "width": false + }, "color": { "custom": true, "customDuotone": true, @@ -176,7 +183,11 @@ The settings section has the following structure: "duotone": [], "gradients": [], "link": false, - "palette": [] + "palette": [], + "text": true, + "background": true, + "defaultGradients": true, + "defaultPalette": true }, "custom": {}, "layout": { @@ -184,15 +195,22 @@ The settings section has the following structure: "wideSize": "1000px" }, "spacing": { - "customMargin": false, - "customPadding": false, + "margin": false, + "padding": false, + "blockGap": null, "units": [ "px", "em", "rem", "vh", "vw" ] }, "typography": { "customFontSize": true, - "customLineHeight": false, + "lineHeight": false, "dropCap": true, - "fontSizes": [] + "fontStyle": true, + "fontWeight": true, + "letterSpacing": true, + "textDecoration": true, + "textTransform": true, + "fontSizes": [], + "fontFamilies": [] }, "blocks": { "core/paragraph": { @@ -213,22 +231,27 @@ The settings section has the following structure: ```json { - "version": 1, + "version": 2, "settings": { + "appearanceTools": false, "border": { - "customColor": false, - "customRadius": false, - "customStyle": false, - "customWidth": false + "color": false, + "radius": false, + "style": false, + "width": false }, "color": { + "background": true, "custom": true, "customDuotone": true, "customGradient": true, + "defaultGradients": true, + "defaultPalette": true, "duotone": [], "gradients": [], "link": false, - "palette": [] + "palette": [], + "text": true }, "custom": {}, "layout": { @@ -236,20 +259,22 @@ The settings section has the following structure: "wideSize": "1000px" }, "spacing": { - "customMargin": false, - "customPadding": false, + "blockGap": null, + "margin": false, + "padding": false, "units": [ "px", "em", "rem", "vh", "vw" ] }, "typography": { "customFontSize": true, - "customFontStyle": true, - "customFontWeight": true, - "customLineHeight": false, - "customTextDecorations": true, - "customTextTransforms": true, "dropCap": true, "fontFamilies": [], - "fontSizes": [] + "fontSizes": [], + "fontStyle": true, + "fontWeight": true, + "letterSpacing": true, + "lineHeight": false, + "textDecoration": true, + "textTransform": true }, "blocks": { "core/paragraph": { @@ -273,14 +298,23 @@ Each block can configure any of these settings separately, providing a more fine Note, however, that not all settings are relevant for all blocks. The settings section provides an opt-in/opt-out mechanism for themes, but it's the block's responsibility to add support for the features that are relevant to it. For example, if a block doesn't implement the `dropCap` feature, a theme can't enable it for such a block through `theme.json`. +### Opt-in into UI controls + +There's one special setting property, `appearanceTools`, which is a boolean and its default value is false. Themes can use this setting to enable the following ones: + +- border: color, radius, style, width +- color: link +- spacing: blockGap, margin, padding +- typography: lineHeight + #### Backward compatibility with add_theme_support To retain backward compatibility, the existing `add_theme_support` declarations that configure the block editor are retrofit in the proper categories for the top-level section. For example, if a theme uses `add_theme_support('disable-custom-colors')`, it'll be the same as setting `settings.color.custom` to `false`. If the `theme.json` contains any settings, these will take precedence over the values declared via `add_theme_support`. This is the complete list of equivalences: | add_theme_support | theme.json setting | | --------------------------- | --------------------------------------------------------- | -| `custom-line-height` | Set `typography.customLineHeight` to `false`. | -| `custom-spacing` | Set `spacing.customPadding` to `true`. | +| `custom-line-height` | Set `typography.lineHeight` to `true`. | +| `custom-spacing` | Set `spacing.padding` to `true`. | | `custom-units` | Provide the list of units via `spacing.units`. | | `disable-custom-colors` | Set `color.custom` to `false`. | | `disable-custom-font-sizes` | Set `typography.customFontSize` to `false`. | @@ -288,7 +322,7 @@ To retain backward compatibility, the existing `add_theme_support` declarations | `editor-color-palette` | Provide the list of colors via `color.palette`. | | `editor-font-sizes` | Provide the list of font size via `typography.fontSizes`. | | `editor-gradient-presets` | Provide the list of gradients via `color.gradients`. | -| `experimental-link-color` | Set `color.link` to `true`. | +| `experimental-link-color` | Set `color.link` to `true`. `experimental-link-color` will be removed when the plugin requires WordPress 5.9 as the minimum version. | #### Presets @@ -314,7 +348,7 @@ The naming schema for the classes and the custom properties is as follows: ```json { - "version": 1, + "version": 2, "settings": { "color": { "duotone": [ @@ -363,16 +397,16 @@ The naming schema for the classes and the custom properties is as follows: } ], "fontSizes": [ - { - "slug": "normal", - "size": 16, - "name": "Normal" - }, { "slug": "big", "size": 32, "name": "Big" - } + }, + { + "slug": "x-large", + "size": 46, + "name": "Large" + }, ] }, "blocks": { @@ -388,7 +422,7 @@ The naming schema for the classes and the custom properties is as follows: "slug": "white", "color": "#ffffff", "name": "White" - }, + } ] } } @@ -406,8 +440,8 @@ body { --wp--preset--color--very-dark-grey: #444; --wp--preset--gradient--blush-bordeaux: linear-gradient( 135deg, rgb( 254, 205, 165 ) 0%, rgb( 254, 45, 45 ) 50%, rgb( 107, 0, 62 ) 100% ); --wp--preset--gradient--blush-light-purple: linear-gradient( 135deg, rgb( 255, 206, 236 ) 0%, rgb( 152, 150, 240 ) 100% ); + --wp--preset--font-size--x-large: 46; --wp--preset--font-size--big: 32; - --wp--preset--font-size--normal: 16; --wp--preset--font-family--helvetica-arial: Helvetica Neue, Helvetica, Arial, sans-serif; --wp--preset--font-family--system: -apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,Oxygen-Sans,Ubuntu,Cantarell, \"Helvetica Neue\",sans-serif; } @@ -456,7 +490,7 @@ For example: ```json { - "version": 1, + "version": 2, "settings": { "custom": { "baseFont": 16, @@ -501,7 +535,7 @@ Note that the name of the variable is created by adding `--` in between each nes ```json { - "version": 1, + "version": 2, "settings": { "color": { "custom": false @@ -517,15 +551,17 @@ Note that the name of the variable is created by adding `--` in between each nes } ``` -- Disable border radius for the button block (borders only work in the plugin so far): +- Disable border radius for the button block: ```json { - "version": 1, + "version": 2, "settings": { - "core/button": { - "border": { - "customRadius": false + "blocks": { + "core/button": { + "border": { + "radius": false + } } } } @@ -536,7 +572,7 @@ Note that the name of the variable is created by adding `--` in between each nes ```json { - "version": 1, + "version": 2, "settings": { "color": { "palette": [ @@ -567,20 +603,22 @@ Note that the name of the variable is created by adding `--` in between each nes } ] }, - "core/group": { - "color": { - "palette": [ - { - "slug": "black", - "color": "#000000", - "name": "Black" - }, - { - "slug": "white", - "color": "#FFF", - "name": "White" - } - ] + "blocks": { + "core/group": { + "color": { + "palette": [ + { + "slug": "black", + "color": "#000000", + "name": "Black" + }, + { + "slug": "white", + "color": "#FFF", + "name": "White" + } + ] + } } } } @@ -595,7 +633,7 @@ The Gutenberg plugin extends the styles available from WordPress 5.8, so they ca The tabs below show WordPress 5.8 supported styles and the ones supported by the Gutenberg plugin. </div> -Each block declares which style properties it exposes via the [block supports mechanism](../block-api/block-supports.md). The support declarations are used to automatically generate the UI controls for the block in the editor. Themes can use any style property via the `theme.json` for any block ― it's the theme's responsibility to verify that it works properly according to the block markup, etc. +Each block declares which style properties it exposes via the [block supports mechanism](/docs/reference-guides/block-api/block-supports.md). The support declarations are used to automatically generate the UI controls for the block in the editor. Themes can use any style property via the `theme.json` for any block ― it's the theme's responsibility to verify that it works properly according to the block markup, etc. {% codetabs %} @@ -603,19 +641,29 @@ Each block declares which style properties it exposes via the [block supports me ```json { - "version": 1, + "version": 2, "styles": { + "border": { + "radius": "value", + "color": "value", + "style": "value", + "width": "value" + }, + "filter": { + "duotone": "value" + }, "color": { "background": "value", "gradient": "value", "text": "value" }, "spacing": { + "blockGap": "value", "margin": { "top": "value", "right": "value", "bottom": "value", - "left": "value" + "left": "value", }, "padding": { "top": "value", @@ -626,10 +674,16 @@ Each block declares which style properties it exposes via the [block supports me }, "typography": { "fontSize": "value", - "lineHeight": "value" + "fontStyle": "value", + "fontWeight": "value", + "letterSpacing": "value", + "lineHeight": "value", + "textDecoration": "value", + "textTransform": "value" }, "elements": { "link": { + "border": {}, "color": {}, "spacing": {}, "typography": {} @@ -643,6 +697,7 @@ Each block declares which style properties it exposes via the [block supports me }, "blocks": { "core/group": { + "border": {}, "color": {}, "spacing": {}, "typography": {}, @@ -666,7 +721,7 @@ Each block declares which style properties it exposes via the [block supports me ```json { - "version": 1, + "version": 2, "styles": { "border": { "color": "value", @@ -679,7 +734,11 @@ Each block declares which style properties it exposes via the [block supports me "gradient": "value", "text": "value" }, + "filter": { + "duotone": "value" + }, "spacing": { + "blockGap": "value", "margin": { "top": "value", "right": "value", @@ -698,6 +757,7 @@ Each block declares which style properties it exposes via the [block supports me "fontSize": "value", "fontStyle": "value", "fontWeight": "value", + "letterSpacing": "value", "lineHeight": "value", "textDecoration": "value", "textTransform": "value" @@ -772,7 +832,7 @@ body { Styles found within a block will be enqueued using the block selector. -By default, the block selector is generated based on its name such as `.wp-block-<blockname-without-namespace>`. For example, `.wp-block-group` for the `core/group` block. There are some blocks that want to opt-out from this default behavior. They can do so by explicitely telling the system which selector to use for them via the `__experimentalSelector` key within the `supports` section of its `block.json` file. +By default, the block selector is generated based on its name such as `.wp-block-<blockname-without-namespace>`. For example, `.wp-block-group` for the `core/group` block. There are some blocks that want to opt-out from this default behavior. They can do so by explicitly telling the system which selector to use for them via the `__experimentalSelector` key within the `supports` section of its `block.json` file. Note that the block needs to be registered server-side for the `__experimentalSelector` field to be available to the style engine. {% codetabs %} {% Input %} @@ -908,7 +968,7 @@ h3 { This field is only allowed when the Gutenberg plugin is active. In WordPress 5.8 will be ignored. </div> -Within this field themes can list the custom templates present in the `block-templates` folder. For example, for a custom template named `my-custom-template.html`, the `theme.json` can declare what post types can use it and what's the title to show the user: +Within this field themes can list the custom templates present in the `templates` folder. For example, for a custom template named `my-custom-template.html`, the `theme.json` can declare what post types can use it and what's the title to show the user: - name: mandatory. - title: mandatory, translatable. @@ -916,7 +976,7 @@ Within this field themes can list the custom templates present in the `block-tem ```json { - "version": 1, + "version": 2, "customTemplates": [ { "name": "my-custom-template", @@ -937,25 +997,51 @@ Within this field themes can list the custom templates present in the `block-tem This field is only allowed when the Gutenberg plugin is active. In WordPress 5.8 will be ignored. </div> -Within this field themes can list the template parts present in the `block-template-parts` folder. For example, for a template part named `my-template-part.html`, the `theme.json` can declare the area term for the template part entity which is responsible for rendering the corresponding block variation (Header block, Footer block, etc.) in the editor. Defining this area term in the json will allow the setting to persist across all uses of that template part entity, as opposed to a block attribute that would only affect one block. Defining area as a block attribute is not recommended as this is only used 'behind the scenes' to aid in bridging the gap between placeholder flows and entity creation. +Within this field themes can list the template parts present in the `parts` folder. For example, for a template part named `my-template-part.html`, the `theme.json` can declare the area term for the template part entity which is responsible for rendering the corresponding block variation (Header block, Footer block, etc.) in the editor. Defining this area term in the json will allow the setting to persist across all uses of that template part entity, as opposed to a block attribute that would only affect one block. Defining area as a block attribute is not recommended as this is only used 'behind the scenes' to aid in bridging the gap between placeholder flows and entity creation. Currently block variations exist for "header" and "footer" values of the area term, any other values and template parts not defined in the json will default to the general template part block. Variations will be denoted by specific icons within the editor's interface, will default to the corresponding semantic HTML element for the wrapper (this can also be overridden by the `tagName` attribute set on the template part block), and will contextualize the template part allowing more custom flows in future editor improvements. - name: mandatory. +- title: optional, translatable. - area: optional, will be set to `uncategorized` by default and trigger no block variation. ```json { - "version": 1, + "version": 2, "templateParts": [ { "name": "my-template-part", + "title": "Header", "area": "header" } ] } ``` +### patterns + +<div class="callout callout-alert"> +This field requires the Gutenberg plugin active and using the [version 2](https://developer.wordpress.org/block-editor/reference-guides/theme-json-reference/theme-json-living/) of `theme.json`. +</div> + +Within this field themes can list patterns to register from [Pattern Directory](https://wordpress.org/patterns/). The `patterns` field is an array of pattern `slugs` from the Pattern Directory. Pattern slugs can be extracted by the `url` in single pattern view at the Pattern Directory. For example in this url `https://wordpress.org/patterns/pattern/partner-logos` the slug is `partner-logos`. + +```json +{ + "version": 2, + "patterns": [ "short-text-surrounded-by-round-images", "partner-logos" ] +} +``` + +## Developing with theme.json + +It can be difficult to remember the theme.json settings and properties while you develop, so a JSON scheme was created to help. The schema is available at https://schemas.wp.org/trunk/theme.json + +Code editors can pick up the schema and can provide help like tooltips, autocomplete, or schema validation in the editor. To use the schema in Visual Studio Code, add `"$schema": "https://schemas.wp.org/trunk/theme.json"` to the beginning of your theme.json file. + +![Example using validation with schema](https://developer.wordpress.org/files/2021/11/theme-json-schema-updated.gif) + + ## Frequently Asked Questions ### The naming schema of CSS Custom Properties @@ -977,8 +1063,8 @@ One thing you may have noticed is the naming schema used for the CSS Custom Prop The `--` as a separator has two functions: -- Readibility, for human understanding. It can be thought as similar to the BEM naming schema, it separates "categories". -- Parseability, for machine understanding. Using a defined structure allows machines to understand the meaning of the property `--wp--preset--color--black`: it's a value bounded to the color preset whose slug is "black", which then gives us room to do more things with them. +- Readability, for human understanding. It can be thought as similar to the BEM naming schema, it separates "categories". +- Parsability, for machine understanding. Using a defined structure allows machines to understand the meaning of the property `--wp--preset--color--black`: it's a value bounded to the color preset whose slug is "black", which then gives us room to do more things with them. ### Why using `--` as a separator? @@ -1001,7 +1087,7 @@ For example: ```json { - "version": 1, + "version": 2, "settings": { "custom": { "lineHeight": { @@ -1032,7 +1118,7 @@ A few notes about this process: ```json { - "version": 1, + "version": 2, "settings": { "custom": { "line--height": { // DO NOT DO THIS @@ -1042,3 +1128,75 @@ A few notes about this process: } } ``` + +### Global Stylesheet + +In WordPress 5.8, the CSS for some of the presets defined by WordPress (font sizes, colors, and gradients) was loaded twice for most themes: in the block-library stylesheet plus in the global stylesheet. Additionally, there were slight differences in the CSS in both places. + +In WordPress 5.9 release, CSS of presets are consolidated into the global stylesheet, that is now loaded for all themes. Each preset value generates a single CSS Custom Property and a class, as in: + +```css +/* CSS Custom Properties for the preset values */ +body { + --wp--preset--<PRESET_TYPE>--<PRESET_SLUG>: <DEFAULT_VALUE>; + --wp--preset--color--pale-pink: #f78da7; + --wp--preset--font-size--large: 36px; + /* etc. */ +} + +/* CSS classes for the preset values */ +.has-<PRESET_SLUG>-<PRESET_TYPE> { ... } +.has-pale-pink-color { color: var(--wp--preset--color--pale-pink) !important; } +.has-large-font-size { font-size: var(--wp--preset--font-size--large) !important; } +``` + +For themes to override the default values they can use the `theme.json` and provide the same slug. Themes that do not use a `theme.json` can still override the default values by enqueuing some CSS that sets the corresponding CSS Custom Property. + +`Example` (sets a new value for the default large font size): + +```css +body { + --wp--preset--font-size--large: <NEW_VALUE>; +} +``` + +### Specificity for link colors provided by the user + +In v1, when a user selected a link color for a specific block we attached a class to that block in the form of `.wp-element-<ID>` and then enqueued the following style: + +```css +.wp-element-<ID> a { color: <USER_COLOR_VALUE> !important; } +``` + +While this preserved user preferences at all times, the specificity was too strong and conflicted with some blocks with legit uses of an HTML element that shouldn’t be considered links. To [address this issue](https://github.com/WordPress/gutenberg/pull/34689), in WordPress 5.9 release, the `!important` was removed and updated the corresponding blocks to style the a elements with a specificity higher than the user link color, which now is: + +```css +.wp-element-<ID> a { color: <USER_COLOR_VALUE>; } +``` + +As a result of this change, it’s now the block author and theme author’s responsibility to make sure the user choices are respected at all times and that the link color provided by the user (specificity 011) is not overridden. + +### What is blockGap and how can I use it? + +blockGap adjusts the vertical margin, or gap, between blocks. +It is also used for margins between inner blocks in columns, buttons, and social icons. +In the editor, the control for the blockGap is called Block spacing, located in the Dimensions panel. + +The value you define for the blockGap style uses a CSS property, a preset, named `--wp--style--block-gap`. +The default value is 2em. + +```json +{ + "version": 2, + "settings": { + "spacing": { + "blockGap": true, + } + }, + "styles": { + "spacing": { + "blockGap": "1.5rem" + } + } +} +``` \ No newline at end of file diff --git a/docs/how-to-guides/themes/theme-support.md b/docs/how-to-guides/themes/theme-support.md index 5ebfe2cc0daa9..9236e3a0eaec8 100644 --- a/docs/how-to-guides/themes/theme-support.md +++ b/docs/how-to-guides/themes/theme-support.md @@ -21,23 +21,23 @@ To opt-in for one of these features, call `add_theme_support` in the `functions. function mytheme_setup_theme_supported_features() { add_theme_support( 'editor-color-palette', array( array( - 'name' => esc_attr__( 'strong magenta', 'themeLangDomain' ), - 'slug' => 'strong-magenta', + 'name' => esc_attr__( 'strong magenta', 'themeLangDomain' ), + 'slug' => 'strong-magenta', 'color' => '#a156b4', ), array( - 'name' => esc_attr__( 'light grayish magenta', 'themeLangDomain' ), - 'slug' => 'light-grayish-magenta', + 'name' => esc_attr__( 'light grayish magenta', 'themeLangDomain' ), + 'slug' => 'light-grayish-magenta', 'color' => '#d0a5db', ), array( - 'name' => esc_attr__( 'very light gray', 'themeLangDomain' ), - 'slug' => 'very-light-gray', + 'name' => esc_attr__( 'very light gray', 'themeLangDomain' ), + 'slug' => 'very-light-gray', 'color' => '#eee', ), array( - 'name' => esc_attr__( 'very dark gray', 'themeLangDomain' ), - 'slug' => 'very-dark-gray', + 'name' => esc_attr__( 'very dark gray', 'themeLangDomain' ), + 'slug' => 'very-dark-gray', 'color' => '#444', ), ) ); @@ -105,23 +105,23 @@ Different blocks have the possibility of customizing colors. The block editor pr ```php add_theme_support( 'editor-color-palette', array( array( - 'name' => esc_attr__( 'strong magenta', 'themeLangDomain' ), - 'slug' => 'strong-magenta', + 'name' => esc_attr__( 'strong magenta', 'themeLangDomain' ), + 'slug' => 'strong-magenta', 'color' => '#a156b4', ), array( - 'name' => esc_attr__( 'light grayish magenta', 'themeLangDomain' ), - 'slug' => 'light-grayish-magenta', + 'name' => esc_attr__( 'light grayish magenta', 'themeLangDomain' ), + 'slug' => 'light-grayish-magenta', 'color' => '#d0a5db', ), array( - 'name' => esc_attr__( 'very light gray', 'themeLangDomain' ), - 'slug' => 'very-light-gray', + 'name' => esc_attr__( 'very light gray', 'themeLangDomain' ), + 'slug' => 'very-light-gray', 'color' => '#eee', ), array( - 'name' => esc_attr__( 'very dark gray', 'themeLangDomain' ), - 'slug' => 'very-dark-gray', + 'name' => esc_attr__( 'very dark gray', 'themeLangDomain' ), + 'slug' => 'very-dark-gray', 'color' => '#444', ), ) ); @@ -133,19 +133,30 @@ Some colors change dynamically — such as "Primary" and "Secondary" color — s The colors will be shown in order on the palette, and there's no limit to how many can be specified. -Themes are responsible for creating the classes that apply the colors in different contexts. Core blocks use "color" and "background-color" contexts. So to correctly apply "strong magenta" to all contexts of core blocks a theme should implement the following classes: +Themes are responsible for creating the classes that apply the colors in different contexts. Core blocks use "color", "background-color", and "border-color" contexts. So to correctly apply "strong magenta" to all contexts of core blocks a theme should implement the classes itself. The class name is built appending 'has-', followed by the class name _using_ kebab case and ending with the context name. ```css .has-strong-magenta-background-color { - background-color: #313131; + background-color: #a156b4; } .has-strong-magenta-color { - color: #f78da7; + color: #a156b4; +} + +.has-strong-magenta-border-color { + color: #a156b4; } ``` -The class name is built appending 'has-', followed by the class name _using_ kebab case and ending with the context name. +Starting in WordPress 5.9, to override color values defined by core, themes without a `theme.json` have to set their values via CSS Custom Properties instead of providing the classes. The CSS Custom Properties use the following naming `--wp--preset--color--<slug>`. See more info in [this devnote](https://make.wordpress.org/core/2022/01/08/updates-for-settings-styles-and-theme-json/). For example: + +```css +:root { + --wp--preset--color--cyan-bluish-gray: <new_value>; + --wp--preset--color--pale-pink: <new_value>; +} +``` ### Block Gradient Presets @@ -198,7 +209,16 @@ Themes are responsible for creating the classes that apply the gradients. So to } ``` -### Block Font Sizes: +Starting in WordPress 5.9, to override gradient values defined by core, themes without a `theme.json` have to set their values via CSS Custom Properties instead of providing the classes. The CSS Custom Properties use the following naming `--wp--preset--gradient--<slug>`. See more info in [this devnote](https://make.wordpress.org/core/2022/01/08/updates-for-settings-styles-and-theme-json/). For example: + +```css +:root { + --wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: <new_value>; + --wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: <new_value>; +} +``` + +### Block Font Sizes Blocks may allow the user to configure the font sizes they use, e.g., the paragraph block. The block provides a default set of font sizes, but a theme can overwrite it and provide its own: @@ -244,6 +264,15 @@ As an example for the regular font size, a theme may provide the following class <strong>Note:</strong> The slugs `default` and `custom` are reserved and cannot be used by themes. </div> +Starting in WordPress 5.9, to override font size values defined by core, themes without a `theme.json` have to set their values via CSS Custom Properties instead of providing the classes. The CSS Custom Properties use the following naming `--wp--preset--font-size--<slug>`. See more info in [this devnote](https://make.wordpress.org/core/2022/01/08/updates-for-settings-styles-and-theme-json/). For example: + +```css +:root { + --wp--preset--font-size--small: <new_value>; + --wp--preset--font-size--large: <new_value>; +} +``` + ### Disabling custom font sizes Themes can disable the ability to set custom font sizes with the following code: @@ -388,7 +417,7 @@ add_theme_support( 'responsive-embeds' ); Some blocks can have padding controls. This is off by default, and requires the theme to opt in by declaring support: ```php -add_theme_support('custom-spacing'); +add_theme_support( 'custom-spacing' ); ``` ## Link color control @@ -406,7 +435,7 @@ Link support has been made stable as part of WordPress 5.8. It's `false` by defa } ``` -> Alternatively, with the Gutenberg plugin active, the old legacy support `add_theme_support('experimental-link-color')` would also work. This fallback would be removed when the Gutenberg plugin requires WordPress 5.8 as the minimum version. +> Alternatively, with the Gutenberg plugin active, the old legacy support `add_theme_support( 'experimental-link-color' )` would also work. This fallback would be removed when the Gutenberg plugin requires WordPress 5.9 as the minimum version. When the user sets the link color of a block, a new style will be added in the form of: diff --git a/docs/how-to-guides/thunks.md b/docs/how-to-guides/thunks.md new file mode 100644 index 0000000000000..e403f72a59815 --- /dev/null +++ b/docs/how-to-guides/thunks.md @@ -0,0 +1,227 @@ +# Thunks in Core-Data + +[Gutenberg 11.6](https://github.com/WordPress/gutenberg/pull/27276) added support for _thunks_. You can think of thunks as functions that can be dispatched: + +```js +// actions.js +export const myThunkAction = () => ( { select, dispatch } ) => { + return "I'm a thunk! I can be dispatched, use selectors, and even dispatch other actions."; +}; +``` + +## Why are thunks useful? + +Thunks [expand the meaning of what a Redux action is](https://jsnajdr.wordpress.com/2021/10/04/motivation-for-thunks/). Before thunks, actions were purely functional and could only return and yield data. Common use cases such as interacting with the store or requesting API data from an action required using a separate [control](https://developer.wordpress.org/block-editor/reference-guides/packages/packages-data/#controls). You would often see code like: + +```js +export function* saveRecordAction( id ) { + const record = yield controls.select( 'current-store', 'getRecord', id ); + yield { type: 'BEFORE_SAVE', id, record }; + const results = yield controls.fetch({ url: 'https://...', method: 'POST', data: record }); + yield { type: 'AFTER_SAVE', id, results }; + return results; +} + +const controls = { + select: // ..., + fetch: // ..., +}; +``` + +Side effects like store operations and fetch functions would be implemented outside of the action. Thunks provide an alternative to this approach. They allow you to use side effects inline, like this: + +```js +export const saveRecordAction = ( id ) => async ({ select, dispatch }) => { + const record = select( 'current-store', 'getRecord', id ); + dispatch({ type: 'BEFORE_SAVE', id, record }); + const response = await fetch({ url: 'https://...', method: 'POST', data: record }); + const results = await response.json(); + dispatch({ type: 'AFTER_SAVE', id, results }); + return results; +} +``` + +This removes the need to implement separate controls. + +### Thunks have access to the store helpers + +Let's take a look at an example from Gutenberg core. Prior to thunks, the `toggleFeature` action from the `@wordpress/interface` package was implemented like this: + +```js +export function* toggleFeature( scope, featureName ) { + const currentValue = yield controls.select( + interfaceStoreName, + 'isFeatureActive', + scope, + featureName + ); + + yield controls.dispatch( + interfaceStoreName, + 'setFeatureValue', + scope, + featureName, + ! currentValue + ); +} +``` + +Controls were the only way to `dispatch` actions and `select` data from the store. + +With thunks, there is a cleaner way. This is how `toggleFeature` is implemented now: + +```js +export function toggleFeature( scope, featureName ) { + return function ( { select, dispatch } ) { + const currentValue = select.isFeatureActive( scope, featureName ); + dispatch.setFeatureValue( scope, featureName, ! currentValue ); + }; +} +``` + +Thanks to the `select` and `dispatch` arguments, thunks may use the store directly without the need for generators and controls. + +### Thunks can be async + +Imagine a simple React app that allows you to set the temperature on a thermostat. It only has one input and one button. Clicking the button dispatches a `saveTemperatureToAPI` action with the value from the input. + +If we used controls to save the temperature, the store definition would look like below: + +```js +const store = wp.data.createReduxStore( 'my-store', { + actions: { + saveTemperatureToAPI: function*( temperature ) { + const result = yield { type: 'FETCH_JSON', url: 'https://...', method: 'POST', data: { temperature } }; + return result; + } + }, + controls: { + async FETCH_JSON( action ) { + const response = await window.fetch( action.url, { + method: action.method, + body: JSON.stringify( action.data ), + } ); + return response.json(); + } + }, + // reducers, selectors, ... +} ); +``` + +While the code is reasonably straightforward, there is a level of indirection. The `saveTemperatureToAPI` action does not talk directly to the API, but has to go through the `FETCH_JSON` control. + +Let's see how this indirection can be removed with thunks: + +```js +const store = wp.data.createReduxStore( 'my-store', { + actions: { + saveTemperatureToAPI: ( temperature ) => async () => { + const response = await window.fetch( 'https://...', { + method: 'POST', + body: JSON.stringify( { temperature } ), + } ); + return await response.json(); + } + }, + // reducers, selectors, ... +} ); +``` + +That's pretty cool! What's even better is that resolvers are supported as well: + +```js +const store = wp.data.createReduxStore( 'my-store', { + // ... + selectors: { + getTemperature: ( state ) => state.temperature + }, + resolvers: { + getTemperature: () => async ( { dispatch } ) => { + const response = await window.fetch( 'https://...' ); + const result = await response.json(); + dispatch.receiveCurrentTemperature( result.temperature ); + } + }, + // ... +} ); +``` + +Support for thunks is included by default in every data store, just like the (now legacy) support for +generators and controls. + +## Thunks API + +A thunk receives a single object argument with the following keys: + +### select + +An object containing the store’s selectors pre-bound to state, which means you don't need to provide the state, only the additional arguments. `select` triggers the related resolvers, if any, but does not wait for them to finish. It just returns the current value even if it's null. + + +If a selector is part of the public API, it's available as a method on the select object: + +```js +const thunk = () => ( { select } ) => { + // select is an object of the store’s selectors, pre-bound to current state: + const temperature = select.getTemperature(); +} +``` + +Since not all selectors are exposed on the store, `select` doubles as a function that supports passing a selector as an argument: + +```js +const thunk = () => ( { select } ) => { + // select supports private selectors: + const doubleTemperature = select( ( temperature ) => temperature * 2 ); +} +``` + +### resolveSelect + +`resolveSelect` is the same as `select`, except it returns a promise that resolves with the value provided by the related resolver. + +```js +const thunk = () => ( { resolveSelect } ) => { + const temperature = await resolveSelect.getTemperature(); +} +``` + +### dispatch + +An object containing the store’s actions + +If an action is part of the public API, it's available as a method on the `dispatch` object: + +```js +const thunk = () => ( { dispatch } ) => { + // dispatch is an object of the store’s actions: + const temperature = await dispatch.retrieveTemperature(); +} +``` + +Since not all actions are exposed on the store, `dispatch` doubles as a function that supports passing a Redux action as an argument: + +```js +const thunk = () => async ( { dispatch } ) => { + // dispatch is also a function accepting inline actions: + dispatch({ type: 'SET_TEMPERATURE', temperature: result.value }); + + // thunks are interchangeable with actions + dispatch( updateTemperature( 100 ) ); + + // Thunks may be async, too. When they are, dispatch returns a promise + await dispatch( ( ) => window.fetch( /* ... */ ) ); +} +``` + +### registry + +A registry provides access to other stores through its `dispatch`, `select`, and `resolveSelect` methods. +These are very similar to the ones described above, with a slight twist. Calling `registry.select( storeName )` returns a function returning an object of selectors from `storeName`. This comes handy when you need to interact with another store. For example: + +```js +const thunk = () => ( { registry } ) => { + const error = registry.select( 'core' ).getLastEntitySaveError( 'root', 'menu', menuId ); + /* ... */ +} +``` diff --git a/docs/how-to-guides/widgets/legacy-widget-block.md b/docs/how-to-guides/widgets/legacy-widget-block.md index 7e629d482688c..e349829acb25c 100644 --- a/docs/how-to-guides/widgets/legacy-widget-block.md +++ b/docs/how-to-guides/widgets/legacy-widget-block.md @@ -33,7 +33,7 @@ Note that all of the widget's event handlers are added in the `widget-added` cal The Legacy Widget block will display a preview of the widget when the Legacy Widget block is not selected. -A "No preview available." message is automatically shown by the Legacy Widget block when the widget's `widget()` function does not render anytihng or only renders empty HTML elements. +A "No preview available." message is automatically shown by the Legacy Widget block when the widget's `widget()` function does not render anything or only renders empty HTML elements. Widgets may take advantage of this by returning early from `widget()` when a preview should not be displayed. diff --git a/docs/how-to-guides/widgets/overview.md b/docs/how-to-guides/widgets/overview.md index bd1734cf3c20c..0703e70cb2edc 100644 --- a/docs/how-to-guides/widgets/overview.md +++ b/docs/how-to-guides/widgets/overview.md @@ -14,7 +14,7 @@ The new Widgets Editor also replaces the Widgets section in the Customizer with You can access the Customizer Widgets Block Editor by navigating to Appearance → Customize, selecting Widgets, and then selecting a Widget Area. -Using the new Widgets Editor through the Customizer goes beyond inserting blocks and widgets into a selected Widget Area, makeing use of the live preview of the changes, to the right of the editor, and of all the other Customizer specific features such as scheduling and sharing changes. +Using the new Widgets Editor through the Customizer goes beyond inserting blocks and widgets into a selected Widget Area, making use of the live preview of the changes, to the right of the editor, and of all the other Customizer specific features such as scheduling and sharing changes. ## Compatibility @@ -24,7 +24,7 @@ The Legacy Widget block is the compatibility mechanism which allows us to edit a Any third party widgets registered by plugins can still be inserted in widget areas by adding and setting them up through a Legacy Widget block. -The Widgets Editor stores blocks using an underlying "Block" widget that is invisible to the user. This means that plugins and themes will contibue to work normally, and that the Widgets Block Editor can be disabled without any data loss. +The Widgets Editor stores blocks using an underlying "Block" widget that is invisible to the user. This means that plugins and themes will continue to work normally, and that the Widgets Block Editor can be disabled without any data loss. Themes may disable the Widgets Block Editor using `remove_theme_support( 'widgets-block-editor' )`. diff --git a/docs/manifest.json b/docs/manifest.json index 35117c66d264a..e2b2e6e1b877b 100644 --- a/docs/manifest.json +++ b/docs/manifest.json @@ -1,105 +1,87 @@ [ { - "title": "Getting started", + "title": "Block Editor Handbook", "slug": "handbook", "markdown_source": "../docs/README.md", "parent": null }, { - "title": "Tutorials", - "slug": "tutorials", - "markdown_source": "../docs/getting-started/tutorials/README.md", - "parent": "handbook" + "title": "Getting Started", + "slug": "getting-started", + "markdown_source": "../docs/getting-started/README.md", + "parent": null }, { "title": "Development Environment", "slug": "devenv", - "markdown_source": "../docs/getting-started/tutorials/devenv/README.md", - "parent": "tutorials" + "markdown_source": "../docs/getting-started/devenv/README.md", + "parent": "getting-started" }, { "title": "How to setup local WordPress environment on Ubuntu", "slug": "docker-ubuntu", - "markdown_source": "../docs/getting-started/tutorials/devenv/docker-ubuntu.md", + "markdown_source": "../docs/getting-started/devenv/docker-ubuntu.md", "parent": "devenv" }, { "title": "Create a Block Tutorial", "slug": "create-block", - "markdown_source": "../docs/getting-started/tutorials/create-block/README.md", - "parent": "tutorials" + "markdown_source": "../docs/getting-started/create-block/README.md", + "parent": "getting-started" }, { "title": "WordPress Plugin", "slug": "wp-plugin", - "markdown_source": "../docs/getting-started/tutorials/create-block/wp-plugin.md", + "markdown_source": "../docs/getting-started/create-block/wp-plugin.md", "parent": "create-block" }, { "title": "Anatomy of a Block", "slug": "block-anatomy", - "markdown_source": "../docs/getting-started/tutorials/create-block/block-anatomy.md", + "markdown_source": "../docs/getting-started/create-block/block-anatomy.md", "parent": "create-block" }, { "title": "Block Attributes", "slug": "attributes", - "markdown_source": "../docs/getting-started/tutorials/create-block/attributes.md", + "markdown_source": "../docs/getting-started/create-block/attributes.md", "parent": "create-block" }, { "title": "Code Implementation", "slug": "block-code", - "markdown_source": "../docs/getting-started/tutorials/create-block/block-code.md", + "markdown_source": "../docs/getting-started/create-block/block-code.md", "parent": "create-block" }, { "title": "Authoring Experience", "slug": "author-experience", - "markdown_source": "../docs/getting-started/tutorials/create-block/author-experience.md", + "markdown_source": "../docs/getting-started/create-block/author-experience.md", "parent": "create-block" }, { "title": "Finishing Touches", "slug": "finishing", - "markdown_source": "../docs/getting-started/tutorials/create-block/finishing.md", + "markdown_source": "../docs/getting-started/create-block/finishing.md", "parent": "create-block" }, { "title": "Share your Block with the World", "slug": "submitting-to-block-directory", - "markdown_source": "../docs/getting-started/tutorials/create-block/submitting-to-block-directory.md", + "markdown_source": "../docs/getting-started/create-block/submitting-to-block-directory.md", "parent": "create-block" }, { "title": "Full Site Editing", "slug": "full-site-editing", "markdown_source": "../docs/getting-started/full-site-editing.md", - "parent": "handbook" - }, - { - "title": "Glossary", - "slug": "glossary", - "markdown_source": "../docs/getting-started/glossary.md", - "parent": "handbook" - }, - { - "title": "Frequently Asked Questions", - "slug": "faq", - "markdown_source": "../docs/getting-started/faq.md", - "parent": "handbook" - }, - { - "title": "History", - "slug": "history", - "markdown_source": "../docs/getting-started/history.md", - "parent": "handbook" + "parent": "getting-started" }, { "title": "Outreach", "slug": "outreach", "markdown_source": "../docs/getting-started/outreach.md", - "parent": "handbook" + "parent": "getting-started" }, { "title": "How-to Guides", @@ -108,143 +90,11 @@ "parent": null }, { - "title": "Getting Started with JavaScript", - "slug": "javascript", - "markdown_source": "../docs/how-to-guides/javascript/README.md", - "parent": "how-to-guides" - }, - { - "title": "Plugins Background", - "slug": "plugins-background", - "markdown_source": "../docs/how-to-guides/javascript/plugins-background.md", - "parent": "javascript" - }, - { - "title": "Loading JavaScript", - "slug": "loading-javascript", - "markdown_source": "../docs/how-to-guides/javascript/loading-javascript.md", - "parent": "javascript" - }, - { - "title": "Extending the Block Editor", - "slug": "extending-the-block-editor", - "markdown_source": "../docs/how-to-guides/javascript/extending-the-block-editor.md", - "parent": "javascript" - }, - { - "title": "Troubleshooting", - "slug": "troubleshooting", - "markdown_source": "../docs/how-to-guides/javascript/troubleshooting.md", - "parent": "javascript" - }, - { - "title": "JavaScript Versions and Build Step", - "slug": "versions-and-building", - "markdown_source": "../docs/how-to-guides/javascript/versions-and-building.md", - "parent": "javascript" - }, - { - "title": "Scope Your Code", - "slug": "scope-your-code", - "markdown_source": "../docs/how-to-guides/javascript/scope-your-code.md", - "parent": "javascript" - }, - { - "title": "JavaScript Build Setup", - "slug": "js-build-setup", - "markdown_source": "../docs/how-to-guides/javascript/js-build-setup.md", - "parent": "javascript" - }, - { - "title": "ESNext Syntax", - "slug": "esnext-js", - "markdown_source": "../docs/how-to-guides/javascript/esnext-js.md", - "parent": "javascript" - }, - { - "title": "Meta Boxes", - "slug": "metabox", - "markdown_source": "../docs/how-to-guides/metabox/README.md", - "parent": "how-to-guides" - }, - { - "title": "Store Post Meta with a Block", - "slug": "meta-block-1-intro", - "markdown_source": "../docs/how-to-guides/metabox/meta-block-1-intro.md", - "parent": "metabox" - }, - { - "title": "Register Meta Field", - "slug": "meta-block-2-register-meta", - "markdown_source": "../docs/how-to-guides/metabox/meta-block-2-register-meta.md", - "parent": "metabox" - }, - { - "title": "Create Meta Block", - "slug": "meta-block-3-add", - "markdown_source": "../docs/how-to-guides/metabox/meta-block-3-add.md", - "parent": "metabox" - }, - { - "title": "Use Post Meta Data", - "slug": "meta-block-4-use-data", - "markdown_source": "../docs/how-to-guides/metabox/meta-block-4-use-data.md", - "parent": "metabox" - }, - { - "title": "Finishing Touches", - "slug": "meta-block-5-finishing", - "markdown_source": "../docs/how-to-guides/metabox/meta-block-5-finishing.md", - "parent": "metabox" - }, - { - "title": "Displaying Notices from Your Plugin or Theme", - "slug": "notices", - "markdown_source": "../docs/how-to-guides/notices/README.md", - "parent": "how-to-guides" - }, - { - "title": "Creating a Sidebar for Your Plugin", - "slug": "plugin-sidebar-0", - "markdown_source": "../docs/how-to-guides/sidebar-tutorial/plugin-sidebar-0.md", + "title": "Accessibility", + "slug": "accessibility", + "markdown_source": "../docs/how-to-guides/accessibility.md", "parent": "how-to-guides" }, - { - "title": "Get a Sidebar up and Running", - "slug": "plugin-sidebar-1-up-and-running", - "markdown_source": "../docs/how-to-guides/sidebar-tutorial/plugin-sidebar-1-up-and-running.md", - "parent": "plugin-sidebar-0" - }, - { - "title": "Tweak the sidebar style and add controls", - "slug": "plugin-sidebar-2-styles-and-controls", - "markdown_source": "../docs/how-to-guides/sidebar-tutorial/plugin-sidebar-2-styles-and-controls.md", - "parent": "plugin-sidebar-0" - }, - { - "title": "Register the Meta Field", - "slug": "plugin-sidebar-3-register-meta", - "markdown_source": "../docs/how-to-guides/sidebar-tutorial/plugin-sidebar-3-register-meta.md", - "parent": "plugin-sidebar-0" - }, - { - "title": "Initialize the Input Control", - "slug": "plugin-sidebar-4-initialize-input", - "markdown_source": "../docs/how-to-guides/sidebar-tutorial/plugin-sidebar-4-initialize-input.md", - "parent": "plugin-sidebar-0" - }, - { - "title": "Update the Meta Field When the Input's Content Changes", - "slug": "plugin-sidebar-5-update-meta", - "markdown_source": "../docs/how-to-guides/sidebar-tutorial/plugin-sidebar-5-update-meta.md", - "parent": "plugin-sidebar-0" - }, - { - "title": "Finishing Touches", - "slug": "plugin-sidebar-6-finishing-touches", - "markdown_source": "../docs/how-to-guides/sidebar-tutorial/plugin-sidebar-6-finishing-touches.md", - "parent": "plugin-sidebar-0" - }, { "title": "Blocks", "slug": "block-tutorial", @@ -252,13 +102,13 @@ "parent": "how-to-guides" }, { - "title": "Writing Your First Block Type", + "title": "Create a basic block", "slug": "writing-your-first-block-type", "markdown_source": "../docs/how-to-guides/block-tutorial/writing-your-first-block-type.md", "parent": "block-tutorial" }, { - "title": "Applying Styles From a Stylesheet", + "title": "Use styles and stylesheets", "slug": "applying-styles-with-stylesheets", "markdown_source": "../docs/how-to-guides/block-tutorial/applying-styles-with-stylesheets.md", "parent": "block-tutorial" @@ -275,12 +125,24 @@ "markdown_source": "../docs/how-to-guides/block-tutorial/block-controls-toolbar-and-sidebar.md", "parent": "block-tutorial" }, + { + "title": "Block Supports", + "slug": "block-supports-in-static-blocks", + "markdown_source": "../docs/how-to-guides/block-tutorial/block-supports-in-static-blocks.md", + "parent": "block-tutorial" + }, { "title": "Creating dynamic blocks", "slug": "creating-dynamic-blocks", "markdown_source": "../docs/how-to-guides/block-tutorial/creating-dynamic-blocks.md", "parent": "block-tutorial" }, + { + "title": "Block Supports in dynamic blocks", + "slug": "block-supports-in-dynamic-blocks", + "markdown_source": "../docs/how-to-guides/block-tutorial/block-supports-in-dynamic-blocks.md", + "parent": "block-tutorial" + }, { "title": "Generate Blocks with WP-CLI", "slug": "generate-blocks-with-wp-cli", @@ -294,34 +156,52 @@ "parent": "block-tutorial" }, { - "title": "Themes", - "slug": "themes", - "markdown_source": "../docs/how-to-guides/themes/README.md", + "title": "Development Platform", + "slug": "platform", + "markdown_source": "../docs/how-to-guides/platform/README.md", "parent": "how-to-guides" }, { - "title": "Block Theme", - "slug": "block-theme-overview", - "markdown_source": "../docs/how-to-guides/themes/block-theme-overview.md", - "parent": "themes" + "title": "Building a custom block editor", + "slug": "custom-block-editor", + "markdown_source": "../docs/how-to-guides/platform/custom-block-editor/README.md", + "parent": "platform" }, { - "title": "Create a block theme", - "slug": "create-block-theme", - "markdown_source": "../docs/how-to-guides/themes/create-block-theme.md", - "parent": "themes" + "title": "Tutorial: building a custom block editor", + "slug": "tutorial", + "markdown_source": "../docs/how-to-guides/platform/custom-block-editor/tutorial.md", + "parent": "custom-block-editor" }, { - "title": "Global Settings & Styles (theme.json)", - "slug": "theme-json", - "markdown_source": "../docs/how-to-guides/themes/theme-json.md", - "parent": "themes" + "title": "Create your First App with Gutenberg Data", + "slug": "data-basics", + "markdown_source": "../docs/how-to-guides/data-basics/README.md", + "parent": "how-to-guides" }, { - "title": "Theme Support", - "slug": "theme-support", - "markdown_source": "../docs/how-to-guides/themes/theme-support.md", - "parent": "themes" + "title": "Setup", + "slug": "1-data-basics-setup", + "markdown_source": "../docs/how-to-guides/data-basics/1-data-basics-setup.md", + "parent": "data-basics" + }, + { + "title": "Building a list of pages", + "slug": "2-building-a-list-of-pages", + "markdown_source": "../docs/how-to-guides/data-basics/2-building-a-list-of-pages.md", + "parent": "data-basics" + }, + { + "title": "Building an edit form", + "slug": "3-building-an-edit-form", + "markdown_source": "../docs/how-to-guides/data-basics/3-building-an-edit-form.md", + "parent": "data-basics" + }, + { + "title": "Part 4: Building a _Create page_ form", + "slug": "4-building-a-create-page-form", + "markdown_source": "../docs/how-to-guides/data-basics/4-building-a-create-page-form.md", + "parent": "data-basics" }, { "title": "Feature Flags", @@ -330,105 +210,117 @@ "parent": "how-to-guides" }, { - "title": "Backward Compatibility", - "slug": "backward-compatibility", - "markdown_source": "../docs/how-to-guides/backward-compatibility/README.md", + "title": "Formatting Toolbar API", + "slug": "format-api", + "markdown_source": "../docs/how-to-guides/format-api.md", "parent": "how-to-guides" }, { - "title": "Deprecations", - "slug": "deprecations", - "markdown_source": "../docs/how-to-guides/backward-compatibility/deprecations.md", - "parent": "backward-compatibility" + "title": "Getting Started with JavaScript", + "slug": "javascript", + "markdown_source": "../docs/how-to-guides/javascript/README.md", + "parent": "how-to-guides" }, { - "title": "Meta Boxes", - "slug": "meta-box", - "markdown_source": "../docs/how-to-guides/backward-compatibility/meta-box.md", - "parent": "backward-compatibility" + "title": "Plugins Background", + "slug": "plugins-background", + "markdown_source": "../docs/how-to-guides/javascript/plugins-background.md", + "parent": "javascript" }, { - "title": "Introduction to the Format API", - "slug": "format-api", - "markdown_source": "../docs/how-to-guides/format-api/README.md", - "parent": "how-to-guides" + "title": "Loading JavaScript", + "slug": "loading-javascript", + "markdown_source": "../docs/how-to-guides/javascript/loading-javascript.md", + "parent": "javascript" }, { - "title": "Register a New Format", - "slug": "1-register-format", - "markdown_source": "../docs/how-to-guides/format-api/1-register-format.md", - "parent": "format-api" + "title": "Extending the Block Editor", + "slug": "extending-the-block-editor", + "markdown_source": "../docs/how-to-guides/javascript/extending-the-block-editor.md", + "parent": "javascript" }, { - "title": "Add a Button to the Toolbar", - "slug": "2-toolbar-button", - "markdown_source": "../docs/how-to-guides/format-api/2-toolbar-button.md", - "parent": "format-api" + "title": "Troubleshooting", + "slug": "troubleshooting", + "markdown_source": "../docs/how-to-guides/javascript/troubleshooting.md", + "parent": "javascript" }, { - "title": "Apply the Format When the Button Is Clicked", - "slug": "3-apply-format", - "markdown_source": "../docs/how-to-guides/format-api/3-apply-format.md", - "parent": "format-api" + "title": "JavaScript Versions and Build Step", + "slug": "versions-and-building", + "markdown_source": "../docs/how-to-guides/javascript/versions-and-building.md", + "parent": "javascript" }, { - "title": "Gutenberg as a Development Platform", - "slug": "platform", - "markdown_source": "../docs/how-to-guides/platform/README.md", - "parent": "how-to-guides" + "title": "Scope Your Code", + "slug": "scope-your-code", + "markdown_source": "../docs/how-to-guides/javascript/scope-your-code.md", + "parent": "javascript" }, { - "title": "Building a custom block editor", - "slug": "custom-block-editor", - "markdown_source": "../docs/how-to-guides/platform/custom-block-editor/README.md", - "parent": "platform" + "title": "JavaScript Build Setup", + "slug": "js-build-setup", + "markdown_source": "../docs/how-to-guides/javascript/js-build-setup.md", + "parent": "javascript" }, { - "title": "Tutorial: building a custom block editor", - "slug": "tutorial", - "markdown_source": "../docs/how-to-guides/platform/custom-block-editor/tutorial.md", - "parent": "custom-block-editor" + "title": "ESNext Syntax", + "slug": "esnext-js", + "markdown_source": "../docs/how-to-guides/javascript/esnext-js.md", + "parent": "javascript" }, { - "title": "Designer Documentation", - "slug": "designers", - "markdown_source": "../docs/how-to-guides/designers/README.md", + "title": "Internationalization", + "slug": "internationalization", + "markdown_source": "../docs/how-to-guides/internationalization.md", "parent": "how-to-guides" }, { - "title": "Block Design", - "slug": "block-design", - "markdown_source": "../docs/how-to-guides/designers/block-design.md", - "parent": "designers" + "title": "Meta Boxes", + "slug": "metabox", + "markdown_source": "../docs/how-to-guides/metabox.md", + "parent": "how-to-guides" }, { - "title": "User Interface", - "slug": "user-interface", - "markdown_source": "../docs/how-to-guides/designers/user-interface.md", - "parent": "designers" + "title": "Notices", + "slug": "notices", + "markdown_source": "../docs/how-to-guides/notices/README.md", + "parent": "how-to-guides" }, { - "title": "Resources", - "slug": "design-resources", - "markdown_source": "../docs/how-to-guides/designers/design-resources.md", - "parent": "designers" + "title": "Plugin Sidebar", + "slug": "plugin-sidebar-0", + "markdown_source": "../docs/how-to-guides/plugin-sidebar-0.md", + "parent": "how-to-guides" }, { - "title": "Animation", - "slug": "animation", - "markdown_source": "../docs/how-to-guides/designers/animation.md", - "parent": "designers" + "title": "Themes", + "slug": "themes", + "markdown_source": "../docs/how-to-guides/themes/README.md", + "parent": "how-to-guides" }, { - "title": "Accessibility", - "slug": "accessibility", - "markdown_source": "../docs/how-to-guides/accessibility.md", - "parent": "how-to-guides" + "title": "Block Theme", + "slug": "block-theme-overview", + "markdown_source": "../docs/how-to-guides/themes/block-theme-overview.md", + "parent": "themes" }, { - "title": "Internationalization", - "slug": "internationalization", - "markdown_source": "../docs/how-to-guides/internationalization.md", + "title": "Global Settings & Styles (theme.json)", + "slug": "theme-json", + "markdown_source": "../docs/how-to-guides/themes/theme-json.md", + "parent": "themes" + }, + { + "title": "Theme Support", + "slug": "theme-support", + "markdown_source": "../docs/how-to-guides/themes/theme-support.md", + "parent": "themes" + }, + { + "title": "Thunks in Core-Data", + "slug": "thunks", + "markdown_source": "../docs/how-to-guides/thunks.md", "parent": "how-to-guides" }, { @@ -504,7 +396,7 @@ "parent": "block-api" }, { - "title": "Metadata", + "title": "Metadata in block.json", "slug": "block-metadata", "markdown_source": "../docs/reference-guides/block-api/block-metadata.md", "parent": "block-api" @@ -551,6 +443,12 @@ "markdown_source": "../docs/reference-guides/block-api/block-variations.md", "parent": "block-api" }, + { + "title": "Core Blocks Reference", + "slug": "core-blocks", + "markdown_source": "../docs/reference-guides/core-blocks.md", + "parent": "reference-guides" + }, { "title": "Filter Reference", "slug": "filters", @@ -653,6 +551,30 @@ "markdown_source": "../docs/reference-guides/richtext.md", "parent": "reference-guides" }, + { + "title": "Theme.json Reference", + "slug": "theme-json-reference", + "markdown_source": "../docs/reference-guides/theme-json-reference/README.md", + "parent": "reference-guides" + }, + { + "title": "Version 2 (living reference)", + "slug": "theme-json-living", + "markdown_source": "../docs/reference-guides/theme-json-reference/theme-json-living.md", + "parent": "theme-json-reference" + }, + { + "title": "Version 1 Reference", + "slug": "theme-json-v1", + "markdown_source": "../docs/reference-guides/theme-json-reference/theme-json-v1.md", + "parent": "theme-json-reference" + }, + { + "title": "Migrating to Newer Versions", + "slug": "theme-json-migrations", + "markdown_source": "../docs/reference-guides/theme-json-reference/theme-json-migrations.md", + "parent": "theme-json-reference" + }, { "title": "Component Reference", "slug": "components", @@ -695,6 +617,18 @@ "markdown_source": "../packages/components/src/base-field/README.md", "parent": "components" }, + { + "title": "BorderBoxControl", + "slug": "border-box-control", + "markdown_source": "../packages/components/src/border-box-control/border-box-control/README.md", + "parent": "components" + }, + { + "title": "BorderControl", + "slug": "border-control", + "markdown_source": "../packages/components/src/border-control/border-control/README.md", + "parent": "components" + }, { "title": "BoxControl", "slug": "box-control", @@ -785,6 +719,12 @@ "markdown_source": "../packages/components/src/combobox-control/README.md", "parent": "components" }, + { + "title": "ConfirmDialog", + "slug": "confirm-dialog", + "markdown_source": "../packages/components/src/confirm-dialog/README.md", + "parent": "components" + }, { "title": "CustomSelectControl", "slug": "custom-select-control", @@ -881,12 +821,6 @@ "markdown_source": "../packages/components/src/flex/flex/README.md", "parent": "components" }, - { - "title": "Flyout", - "slug": "flyout", - "markdown_source": "../packages/components/src/flyout/flyout/README.md", - "parent": "components" - }, { "title": "FocalPointPicker", "slug": "focal-point-picker", @@ -923,6 +857,12 @@ "markdown_source": "../packages/components/src/form-token-field/README.md", "parent": "components" }, + { + "title": "GradientPicker", + "slug": "gradient-picker", + "markdown_source": "../packages/components/src/gradient-picker/README.md", + "parent": "components" + }, { "title": "Grid", "slug": "grid", @@ -1073,6 +1013,30 @@ "markdown_source": "../packages/components/src/navigation/README.md", "parent": "components" }, + { + "title": "NavigatorBackButton", + "slug": "navigator-back-button", + "markdown_source": "../packages/components/src/navigator/navigator-back-button/README.md", + "parent": "components" + }, + { + "title": "NavigatorButton", + "slug": "navigator-button", + "markdown_source": "../packages/components/src/navigator/navigator-button/README.md", + "parent": "components" + }, + { + "title": "NavigatorProvider", + "slug": "navigator-provider", + "markdown_source": "../packages/components/src/navigator/navigator-provider/README.md", + "parent": "components" + }, + { + "title": "NavigatorScreen", + "slug": "navigator-screen", + "markdown_source": "../packages/components/src/navigator/navigator-screen/README.md", + "parent": "components" + }, { "title": "Notice", "slug": "notice", @@ -1169,12 +1133,6 @@ "markdown_source": "../packages/components/src/search-control/README.md", "parent": "components" }, - { - "title": "SegmentedControl", - "slug": "segmented-control", - "markdown_source": "../packages/components/src/segmented-control/README.md", - "parent": "components" - }, { "title": "SelectControl", "slug": "select-control", @@ -1247,6 +1205,30 @@ "markdown_source": "../packages/components/src/toggle-control/README.md", "parent": "components" }, + { + "title": "ToggleGroupControlOptionBase", + "slug": "toggle-group-control-option-base", + "markdown_source": "../packages/components/src/toggle-group-control/toggle-group-control-option-base/README.md", + "parent": "components" + }, + { + "title": "ToggleGroupControlOptionIcon", + "slug": "toggle-group-control-option-icon", + "markdown_source": "../packages/components/src/toggle-group-control/toggle-group-control-option-icon/README.md", + "parent": "components" + }, + { + "title": "ToggleGroupControlOption", + "slug": "toggle-group-control-option", + "markdown_source": "../packages/components/src/toggle-group-control/toggle-group-control-option/README.md", + "parent": "components" + }, + { + "title": "ToggleGroupControl", + "slug": "toggle-group-control", + "markdown_source": "../packages/components/src/toggle-group-control/toggle-group-control/README.md", + "parent": "components" + }, { "title": "ToolbarButton", "slug": "toolbar-button", @@ -1277,6 +1259,24 @@ "markdown_source": "../packages/components/src/toolbar/README.md", "parent": "components" }, + { + "title": "ToolsPanelHeader", + "slug": "tools-panel-header", + "markdown_source": "../packages/components/src/tools-panel/tools-panel-header/README.md", + "parent": "components" + }, + { + "title": "ToolsPanelItem", + "slug": "tools-panel-item", + "markdown_source": "../packages/components/src/tools-panel/tools-panel-item/README.md", + "parent": "components" + }, + { + "title": "ToolsPanel", + "slug": "tools-panel", + "markdown_source": "../packages/components/src/tools-panel/tools-panel/README.md", + "parent": "components" + }, { "title": "Tooltip", "slug": "tooltip", @@ -1709,6 +1709,18 @@ "markdown_source": "../packages/postcss-themes/README.md", "parent": "packages" }, + { + "title": "@wordpress/preferences-persistence", + "slug": "packages-preferences-persistence", + "markdown_source": "../packages/preferences-persistence/README.md", + "parent": "packages" + }, + { + "title": "@wordpress/preferences", + "slug": "packages-preferences", + "markdown_source": "../packages/preferences/README.md", + "parent": "packages" + }, { "title": "@wordpress/prettier-config", "slug": "packages-prettier-config", @@ -1781,6 +1793,12 @@ "markdown_source": "../packages/shortcode/README.md", "parent": "packages" }, + { + "title": "@wordpress/style-engine", + "slug": "packages-style-engine", + "markdown_source": "../packages/style-engine/README.md", + "parent": "packages" + }, { "title": "@wordpress/stylelint-config", "slug": "packages-stylelint-config", @@ -1931,6 +1949,54 @@ "markdown_source": "../docs/explanations/architecture/full-site-editing-templates.md", "parent": "architecture" }, + { + "title": "Styles", + "slug": "styles", + "markdown_source": "../docs/explanations/architecture/styles.md", + "parent": "architecture" + }, + { + "title": "User Interface", + "slug": "user-interface", + "markdown_source": "../docs/explanations/user-interface/README.md", + "parent": "explanations" + }, + { + "title": "Block Design", + "slug": "block-design", + "markdown_source": "../docs/explanations/user-interface/block-design.md", + "parent": "user-interface" + }, + { + "title": "Animation", + "slug": "animation", + "markdown_source": "../docs/explanations/user-interface/animation.md", + "parent": "user-interface" + }, + { + "title": "Resources", + "slug": "design-resources", + "markdown_source": "../docs/explanations/user-interface/design-resources.md", + "parent": "user-interface" + }, + { + "title": "Frequently Asked Questions", + "slug": "faq", + "markdown_source": "../docs/explanations/faq.md", + "parent": "explanations" + }, + { + "title": "Glossary", + "slug": "glossary", + "markdown_source": "../docs/explanations/glossary.md", + "parent": "explanations" + }, + { + "title": "History", + "slug": "history", + "markdown_source": "../docs/explanations/history.md", + "parent": "explanations" + }, { "title": "Contributor Guide", "slug": "contributors", @@ -1992,15 +2058,51 @@ "parent": "code" }, { - "title": "React Native based mobile Gutenberg", - "slug": "native-mobile", - "markdown_source": "../docs/contributors/code/native-mobile.md", + "title": "React Native mobile editor", + "slug": "react-native", + "markdown_source": "../docs/contributors/code/react-native/README.md", "parent": "code" }, { "title": "Getting Started for the React Native based Mobile Gutenberg", - "slug": "getting-started-native-mobile", - "markdown_source": "../docs/contributors/code/getting-started-native-mobile.md", + "slug": "getting-started-react-native", + "markdown_source": "../docs/contributors/code/react-native/getting-started-react-native.md", + "parent": "react-native" + }, + { + "title": "Setup guide for React Native development (macOS)", + "slug": "osx-setup-guide", + "markdown_source": "../docs/contributors/code/react-native/osx-setup-guide.md", + "parent": "react-native" + }, + { + "title": "React Native Integration Test Guide", + "slug": "integration-test-guide", + "markdown_source": "../docs/contributors/code/react-native/integration-test-guide.md", + "parent": "react-native" + }, + { + "title": "React Native Internationalization Guide", + "slug": "internationalization-guide", + "markdown_source": "../docs/contributors/code/react-native/internationalization-guide.md", + "parent": "react-native" + }, + { + "title": "Backward Compatibility", + "slug": "backward-compatibility", + "markdown_source": "../docs/contributors/code/backward-compatibility.md", + "parent": "code" + }, + { + "title": "Deprecations", + "slug": "deprecations", + "markdown_source": "../docs/contributors/code/deprecations.md", + "parent": "code" + }, + { + "title": "How To Get Your Pull Request Reviewed?", + "slug": "how-to-get-your-pull-request-reviewed", + "markdown_source": "../docs/contributors/code/how-to-get-your-pull-request-reviewed.md", "parent": "code" }, { diff --git a/docs/reference-guides/README.md b/docs/reference-guides/README.md index 787e6144098fa..a13978610518c 100644 --- a/docs/reference-guides/README.md +++ b/docs/reference-guides/README.md @@ -35,6 +35,12 @@ - [PluginSidebar](/docs/reference-guides/slotfills/plugin-sidebar.md) - [PluginSidebarMoreMenuItem](/docs/reference-guides/slotfills/plugin-sidebar-more-menu-item.md) +## [Theme.json Reference](/docs/reference-guides/theme-json-reference/README.md) + +- [Version 2 (living reference)](/docs/reference-guides/theme-json-reference/theme-json-living.md) +- [Version 1](/docs/reference-guides/theme-json-reference/theme-json-v1.md) +- [Migrating to Newer Versions](/docs/reference-guides/theme-json-reference/theme-json-migrations.md) + ## [RichText Reference](/docs/reference-guides/richtext.md) ## [Component Reference](/packages/components/README.md) diff --git a/docs/reference-guides/block-api/block-attributes.md b/docs/reference-guides/block-api/block-attributes.md index 1ace0ffac58a6..e3eb3c9903bc4 100644 --- a/docs/reference-guides/block-api/block-attributes.md +++ b/docs/reference-guides/block-api/block-attributes.md @@ -1,41 +1,143 @@ # Attributes +Block attributes provide information about the data stored by a block. For example, rich content, a list of image URLs, a background colour, or a button title. + +A block can contain any number of attributes, and these are specified by the `attributes` field - an object where each key is the name of the attribute, and the value is the attribute definition. + +The attribute definition will contain, at a minimum, either a `type` or an `enum`. There may be additional fields. + +_Example_: Attributes object defining three attributes - `url`, `title`, and `size`. + +```js +{ + url: { + type: 'string', + source: 'attribute', + selector: 'img', + attribute: 'src', + }, + title: { + type: 'string', + }, + size: { + enum: [ 'large', 'small' ], + }, +} +``` + +When a block is parsed this definition will be used to extract data from the block content. Anything that matches will be available to your block through the `attributes` prop. + +This parsing process can be summarized as: + +1. Extract value from the `source`. +1. Check value matches the `type`, or is one of the `enum` values. + +_Example_: Attributes available in the `edit` and function, using the above attributes definition. + +```js +function YourBlockEdit( { attributes } ) { + return ( + <p>URL is { attributes.url }, title is { attributes.title }, and size is { attributes.size }.</p> + ) +} +``` + +The block is responsible for using the `save` function to ensure that all attributes with a `source` field are saved according to the attributes definition. This is not automatic. + +Attributes without a `source` will be automatically saved in the block [comment delimiter](/docs/explanations/architecture/key-concepts.md#data-attributes). + +For example, using the above attributes definition you would need to ensure that your `save` function has a corresponding img tag for the `url` attribute. The `title` and `size` attributes will be saved in the comment delimiter. + +_Example_: Example `save` function that contains the `url` attribute + +```js +function YourBlockSave( { attributes } ) { + return ( + <img src={ attributes.url } /> + ) +} +``` + +The saved HTML will contain the `title` and `size` in the comment delimiter, and the `url` in the `img` node. + +```html +<!-- block:your-block {"title":"hello world","size":"large"} --> +<img src="/image.jpg" /> +<!-- /block:your-block --> +``` + +If an attributes change over time then a [block deprecation](/docs/reference-guides/block-api/block-deprecation.md) can help migrate from an older attribute, or remove it entirely. + ## Type Validation -The only required field for an attribute is the `type` field. It indicates the type of data that is stored within the attribute. +The `type` indicates the type of data that is stored by the attribute. It does not indicate where the data is stored, which is defined by the `source` field. -Accepted values in the `type` field MUST be one of the following: +A `type` is required, unless an `enum` is provided. A `type` can be used with an `enum`. -- null -- boolean -- object -- array -- number -- string -- integer +The `type` field MUST be one of the following: -See [WordPress's REST API documentation](https://developer.wordpress.org/rest-api/extending-the-rest-api/schema/) for additional details. +- `null` +- `boolean` +- `object` +- `array` +- `string` +- `integer` +- `number` (same as `integer`) -## Common Sources +Note that the validity of an `object` is determined by your `source`. For an example, see the `query` details below. -Attribute sources are used to define how the block attribute values are extracted from saved post content. They provide a mechanism to map from the saved markup to a JavaScript representation of a block. +## Enum Validation -If no attribute source is specified, the attribute will be saved to (and read from) the block's [comment delimiter](/docs/getting-started/architecture/key-concepts.md#delimiters-and-parsing-expression-grammar). +An attribute can be defined as one of a fixed set of values. This is specified by an `enum`, which contains an array of allowed values: + +_Example_: Example `enum`. + +```js +{ + size: { + enum: [ 'large', 'small', 'tiny' ] + } +} +``` -The keys specified in the attributes source object are named as you see fit. The result of the attribute source definition is assigned as a value to each key. +## Value Source -If no selector argument is specified, the source definition runs against the block's root node. If a selector argument is specified, it will run against the specified element(s) contained within the block. +Attribute sources are used to define how the attribute values are extracted from saved post content. They provide a mechanism to map from the saved markup to a JavaScript representation of a block. -The selector specified can be an HTML tag, or anything queryable such as a class or id attribute, see examples below. +The available `source` values are: +- `(no value)` - when no `source` is specified then data is stored in the block's [comment delimiter](/docs/explanations/architecture/key-concepts.md#data-attributes). +- `attribute` - data is stored in an HTML element attribute. +- `text` - data is stored in HTML text. +- `html` - data is stored in HTML. This is typically used by `RichText`. +- `query` - data is stored as an array of objects. +- `meta` - data is stored in post meta (deprecated). + +The `source` field is usually combined with a `selector` field. If no selector argument is specified, the source definition runs against the block's root node. If a selector argument is specified, it will run against the matching element(s) within the block. + +The `selector` can be an HTML tag, or anything queryable with [querySelector](https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelector), such as a class or id attribute. Examples are given below. + +For example, a `selector` of `img` will match an `img` element, and `img.class` will match an `img` element that has a class of `class`. Under the hood, attribute sources are a superset of the functionality provided by [hpq](https://github.com/aduth/hpq), a small library used to parse and query HTML markup into an object shape. -### `attribute` +To summarize, the `source` determines where data is stored in your content, and the `type` determines what that data is. To reduce the amount of data stored it is usually better to store as much data as possible within HTML rather than as attributes within the comment delimiter. + +### `attribute` source -Use `attribute` to extract the value of an attribute from markup. +Use an `attribute` source to extract the value from an attribute in the markup. The attribute is specified by the `attribute` field, which must be supplied. _Example_: Extract the `src` attribute from an image found in the block's markup. +Saved content: +```html +<div> + Block Content + + <img src="https://lorempixel.com/1200/800/" /> +</div> +``` + +Attribute definition: ```js { url: { @@ -45,7 +147,11 @@ _Example_: Extract the `src` attribute from an image found in the block's markup attribute: 'src', } } -// { "url": "https://lorempixel.com/1200/800/" } +``` + +Attribute available in the block: +```js +{ "url": "https://lorempixel.com/1200/800/" } ``` Most attributes from markup will be of type `string`. Numeric attributes in HTML are still stored as strings, and are not converted automatically. @@ -59,7 +165,10 @@ Most attributes from markup will be of type `string`. Numeric attributes in HTML attribute: 'width', } } -// { "width": "50" } +``` + +```js +{ "width": "50" } ``` The only exception is when checking for the existence of an attribute (for example, the `disabled` attribute on a `button`). In that case type `boolean` can be used and the stored value will be a boolean. @@ -73,13 +182,26 @@ The only exception is when checking for the existence of an attribute (for examp attribute: 'disabled', } } -// { "disabled": true } ``` -### `text` +```js +{ "disabled": true } +``` + +### `text` source + +Use `text` to extract the inner text from markup. Note that HTML is returned according to the rules of [`textContent`](https://developer.mozilla.org/en-US/docs/Web/API/Node/textContent). -Use `text` to extract the inner text from markup. +Saved content: +```html +<figure> + <img src="/image.jpg" /> + <figcaption>The inner text of the figcaption element</figcaption> +</figure> +``` + +Attribute definition: ```js { content: { @@ -88,35 +210,67 @@ Use `text` to extract the inner text from markup. selector: 'figcaption', } } -// { "content": "The inner text of the figcaption element" } +``` + +Attribute available in the block: +```js +{ "content": "The inner text of the figcaption element" } ``` Another example, using `text` as the source, and using `.my-content` class as the selector to extract text: +Saved content: +```html +<div> + <img src="/image.jpg" /> + + <p class="my-content">The inner text of .my-content class</p> +</div> +``` + +Attribute definition: ```js -{ +attributes: { content: { type: 'string', source: 'text', selector: '.my-content', } } -// { "content": "The inner text of .my-content class" } +``` + +Attribute available in the block: +```js +{ "content": "The inner text of .my-content class" } ``` ### `html` -Use `html` to extract the inner HTML from markup. +Use `html` to extract the inner HTML from markup. Note that text is returned according to the rules of [`innerHTML`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/innerHTML). + +Saved content: +```html +<figure> + <img src="/image.jpg" /> + <figcaption>The inner text of the <strong>figcaption</strong> element</figcaption> +</figure> +``` + +Attribute definition: ```js -{ +attributes { content: { type: 'string', source: 'html', selector: 'figcaption', } } -// { "content": "The inner text of the <strong>figcaption</strong> element" } +``` + +Attribute available in the block: +```js +{ "content": "The inner text of the <strong>figcaption</strong> element" } ``` Use the `multiline` property to extract the inner HTML of matching tag names for the use in `RichText` with the `multiline` prop. @@ -130,15 +284,30 @@ Use the `multiline` property to extract the inner HTML of matching tag names for selector: 'blockquote', } } -// { "content": "<p>First line</p><p>Second line</p>" } +``` + +Attribute available in the block: +```js +{ "content": "<p>First line</p><p>Second line</p>" } ``` ### `query` -Use `query` to extract an array of values from markup. Entries of the array are determined by the selector argument, where each matched element within the block will have an entry structured corresponding to the second argument, an object of attribute sources. +Use `query` to extract an array of values from markup. Entries of the array are determined by the `selector` argument, where each matched element within the block will have an entry structured corresponding to the second argument, an object of attribute sources. + +The `query` field is effectively a nested block attributes definition. It is possible (although not necessarily recommended) to nest further. _Example_: Extract `src` and `alt` from each image element in the block's markup. +Saved content: +```html +<div> + <img src="https://lorempixel.com/1200/800/" alt="large image" /> + <img src="https://lorempixel.com/50/50/" alt="small image" /> +</div> +``` + +Attribute definition: ```js { images: { @@ -159,24 +328,28 @@ _Example_: Extract `src` and `alt` from each image element in the block's markup } } } -// { -// "images": [ -// { "url": "https://lorempixel.com/1200/800/", "alt": "large image" }, -// { "url": "https://lorempixel.com/50/50/", "alt": "small image" } -// ] -// } +``` + +Attribute available in the block: +```js +{ + "images": [ + { "url": "https://lorempixel.com/1200/800/", "alt": "large image" }, + { "url": "https://lorempixel.com/50/50/", "alt": "small image" } + ] +} ``` ## Meta (deprecated) <div class="callout callout-alert"> -Although attributes may be obtained from a post's meta, meta attribute sources are considered deprecated; <a href="https://github.com/WordPress/gutenberg/blob/c367c4e2765f9e6b890d1565db770147efca5d66/packages/core-data/src/entity-provider.js">EntityProvider and related hook APIs</a> should be used instead, as shown in the <a href="/block-editor/how-to-guides/metabox/meta-block-3-add/">Create Meta Block how-to</a>. +Although attributes may be obtained from a post's meta, meta attribute sources are considered deprecated; <a href="https://github.com/WordPress/gutenberg/blob/c367c4e2765f9e6b890d1565db770147efca5d66/packages/core-data/src/entity-provider.js">EntityProvider and related hook APIs</a> should be used instead, as shown in the <a href="/block-editor/how-to-guides/metabox/#step-2-add-meta-block">Create Meta Block how-to</a>. </div> Attributes may be obtained from a post's meta rather than from the block's representation in saved post content. For this, an attribute is required to specify its corresponding meta key under the `meta` key: ```js -attributes: { +{ author: { type: 'string', source: 'meta', @@ -188,7 +361,7 @@ attributes: { From here, meta attributes can be read and written by a block using the same interface as any attribute: {% codetabs %} -{% ESNext %} +{% JSX %} ```js edit( { attributes, setAttributes } ) { @@ -200,7 +373,7 @@ edit( { attributes, setAttributes } ) { }, ``` -{% ES5 %} +{% Plain %} ```js edit: function( props ) { @@ -257,3 +430,38 @@ function onChange( event ) { props.setAttributes( { authorCount: Number( event.target.value ) } ); } ``` + +## Default Value + +A block attribute can contain a default value, which will be used if the `type` and `source` do not match anything within the block content. + +The value is provided by the `default` field, and the value should match the expected format of the attribute. + +_Example_: Example `default` values. + +```js +{ + type: 'string', + default: 'hello world' +} +``` + +```js +{ + type: 'array', + default: [ + { "url": "https://lorempixel.com/1200/800/", "alt": "large image" }, + { "url": "https://lorempixel.com/50/50/", "alt": "small image" } + ] +} +``` + +```js +{ + type: 'object', + default: { + width: 100, + title: 'title' + } +} +``` diff --git a/docs/reference-guides/block-api/block-deprecation.md b/docs/reference-guides/block-api/block-deprecation.md index 663f38a227a0a..e636eb048d6a1 100644 --- a/docs/reference-guides/block-api/block-deprecation.md +++ b/docs/reference-guides/block-api/block-deprecation.md @@ -7,17 +7,22 @@ When updating static blocks markup and attributes, block authors need to conside A block can have several deprecated versions. A deprecation will be tried if the current state of a parsed block is invalid, or if the deprecation defines an `isEligible` function that returns true. -It is important to note that if a deprecation's `save` method does not produce a valid block then it is skipped, including its `migrate` method, even if `isEligible` would return true for the given attributes. This means that if you have several deprecations for a block and want to perform a new migration, like moving content to `InnerBlocks`, you may need to include the `migrate` method in multiple deprecations for it to be applied to all previous versions of the block. +Deprecations do not operate as a chain of updates in the way other software data updates, like database migrations, do. At first glance, it is easy to think that each deprecation is going to make the required changes to the data and then hand this new form of the block onto the next deprecation to make its changes. What happens instead is: -Deprecations do not operate as a chain of updates in the way other software data updates, like database migrations, do. At first glance, it is easy to think that each deprecation is going to make the required changes to the data and then hand this new form of the block onto the next deprecation to make its changes. What happens instead, is that each deprecation is passed the original saved content, and if its `save` method produces valid content the deprecation is used to parse the block attributes. If it has a `migrate` method it will also be run using the attributes parsed by the deprecation. The current block is updated with the migrated attributes and inner blocks before the current block's `save` function is run to generate new valid content for the block. At this point the current block should now be in a valid state. +1. If the current `save` method does not produce a valid block the first deprecation in the deprecations array is passed the original saved content. +2. If its `save` method produces valid content this deprecation is used to parse the block attributes. If it has a `migrate` method it will also be run using the attributes parsed by the deprecation. +3. If the first deprecation's `save` method does not produce a valid block the subsequent deprecations in the array are tried until one producing a valid block is encountered. +4. The attributes, and any innerBlocks, from the first deprecation to generate a valid block are then passed back to the current `save` method to generate new valid content for the block. +5. At this point the current block should now be in a valid state and the deprecations workflow stops. + +It is important to note that if a deprecation's `save` method does not produce a valid block then it is skipped completely, including its `migrate` method, even if `isEligible` would return true for the given attributes. This means that if you have several deprecations for a block and want to perform a new migration, like moving content to `InnerBlocks`, you may need to update the `migrate` methods in multiple deprecations in order for the required changes to be applied to all previous versions of the block. + +It is also important to note that if a deprecation's `save` method imports additional functions from other files, changes to those files may accidentally change the behavior of the deprecation. You may want to add a snapshot copy of these functions to the deprecations file instead of importing them in order to avoid inadvertently breaking the deprecations. For blocks with multiple deprecations, it may be easier to save each deprecation to a constant with the version of the block it applies to, and then add each of these to the block's `deprecated` array. The deprecations in the array should be in reverse chronological order. This allows the block editor to attempt to apply the most recent and likely deprecations first, avoiding unnecessary and expensive processing. ### Example: -{% codetabs %} -{% ESNext %} - ```js const v1 = {}; const v2 = {}; @@ -25,18 +30,7 @@ const v3 = {}; const deprecated = [ v3, v2, v1 ]; ``` -{% ES5 %} - -```js -var v1 = {}; -var v2 = {}; -var v3 = {}; -var deprecated = [ v3, v2, v1 ]; -``` - -{% end %} - -It is also recommended to keep [fixtures](https://github.com/WordPress/gutenberg/blob/HEAD/packages/e2e-tests/fixtures/blocks/README.md) which contain the different versions of the block content to allow you to easily test that new deprecations and migrations are working across all previous versions of the block. +It is also recommended to keep [fixtures](https://github.com/WordPress/gutenberg/blob/HEAD/test/integration/fixtures/blocks/README.md) which contain the different versions of the block content to allow you to easily test that new deprecations and migrations are working across all previous versions of the block. Deprecations are defined on a block type as its `deprecated` property, an array of deprecation objects where each object takes the form: @@ -44,14 +38,14 @@ Deprecations are defined on a block type as its `deprecated` property, an array - `supports` (Object): The [supports definition](/docs/reference-guides/block-api/block-registration.md) of the deprecated form of the block. - `save` (Function): The [save implementation](/docs/reference-guides/block-api/block-edit-save.md) of the deprecated form of the block. - `migrate` (Function, Optional): A function which, given the old attributes and inner blocks is expected to return either the new attributes or a tuple array of `[ attributes, innerBlocks ]` compatible with the block. As mentioned above, a deprecation's `migrate` will not be run if its `save` function does not return a valid block so you will need to make sure your migrations are available in all the deprecations where they are relevant. -- `isEligible` (Function, Optional): A function which, given the attributes and inner blocks of the parsed block, returns true if the deprecation can handle the block migration even if the block is valid. This is particularly useful in cases where a block is technically valid even once deprecated, and requires updates to its attributes or inner blocks. This function is not called when the results of all previous deprecations' `save` functions were invalid. +- `isEligible` (Function, Optional): A function which, given the attributes and inner blocks of the parsed block, returns true if the deprecation can handle the block migration even if the block is valid. This is particularly useful in cases where a block is technically valid even once deprecated, but still requires updates to its attributes or inner blocks. This function is not called when the results of all previous deprecations' `save` functions were invalid. It's important to note that `attributes`, `supports`, and `save` are not automatically inherited from the current version, since they can impact parsing and serialization of a block, so they must be defined on the deprecated object in order to be processed during a migration. ### Example: {% codetabs %} -{% ESNext %} +{% JSX %} ```js const { registerBlockType } = wp.blocks; @@ -83,7 +77,7 @@ registerBlockType( 'gutenberg/block-with-deprecated-version', { } ); ``` -{% ES5 %} +{% Plain %} ```js var el = wp.element.createElement, @@ -127,7 +121,7 @@ Sometimes, you need to update the attributes set to rename or modify old attribu ### Example: {% codetabs %} -{% ESNext %} +{% JSX %} ```js const { registerBlockType } = wp.blocks; @@ -169,7 +163,7 @@ registerBlockType( 'gutenberg/block-with-deprecated-version', { } ); ``` -{% ES5 %} +{% Plain %} ```js var el = wp.element.createElement, @@ -224,7 +218,7 @@ E.g: a block wants to migrate a title attribute to a paragraph innerBlock. ### Example: {% codetabs %} -{% ESNext %} +{% JSX %} ```js const { registerBlockType } = wp.blocks; @@ -268,7 +262,7 @@ registerBlockType( 'gutenberg/block-with-deprecated-version', { } ); ``` -{% ES5 %} +{% Plain %} ```js var el = wp.element.createElement, diff --git a/docs/reference-guides/block-api/block-edit-save.md b/docs/reference-guides/block-api/block-edit-save.md index 90f94f85a36a6..5d660992f6abb 100644 --- a/docs/reference-guides/block-api/block-edit-save.md +++ b/docs/reference-guides/block-api/block-edit-save.md @@ -7,7 +7,7 @@ When registering a block, the `edit` and `save` functions provide the interface The `edit` function describes the structure of your block in the context of the editor. This represents what the editor will render when the block is used. {% codetabs %} -{% ESNext %} +{% JSX %} ```jsx import { useBlockProps } from '@wordpress/block-editor'; @@ -26,7 +26,7 @@ const blockSettings = { }; ``` -{% ES5 %} +{% Plain %} ```js var blockSettings = { @@ -51,7 +51,7 @@ The first thing to notice here is the use of the `useBlockProps` React hook on t If the element wrapper needs any extra custom HTML attributes, these need to be passed as an argument to the `useBlockProps` hook. For example to add a `my-random-classname` className to the wrapper, you can use the following code: {% codetabs %} -{% ESNext %} +{% JSX %} ```jsx import { useBlockProps } from '@wordpress/block-editor'; @@ -72,7 +72,7 @@ const blockSettings = { }; ``` -{% ES5 %} +{% Plain %} ```js var blockSettings = { @@ -101,7 +101,7 @@ The `attributes` property surfaces all the available attributes and their corres In this case, assuming we had defined an attribute of `content` during block registration, we would receive and use that value in our edit function: {% codetabs %} -{% ESNext %} +{% JSX %} ```js edit: ( { attributes } ) => { @@ -111,7 +111,7 @@ edit: ( { attributes } ) => { }; ``` -{% ES5 %} +{% Plain %} ```js edit: function( props ) { @@ -131,10 +131,10 @@ The value of `attributes.content` will be displayed inside the `div` when insert ### isSelected -The isSelected property is an object that communicates whether the block is currently selected. +The isSelected property is an boolean that communicates whether the block is currently selected. {% codetabs %} -{% ESNext %} +{% JSX %} ```jsx edit: ( { attributes, isSelected } ) => { @@ -151,7 +151,7 @@ edit: ( { attributes, isSelected } ) => { }; ``` -{% ES5 %} +{% Plain %} ```js edit: function( props ) { @@ -179,7 +179,7 @@ edit: function( props ) { This function allows the block to update individual attributes based on user interactions. {% codetabs %} -{% ESNext %} +{% JSX %} ```jsx edit: ( { attributes, setAttributes, isSelected } ) => { @@ -201,7 +201,7 @@ edit: ( { attributes, setAttributes, isSelected } ) => { }; ``` -{% ES5 %} +{% Plain %} ```js edit: function( props ) { @@ -233,7 +233,7 @@ edit: function( props ) { When using attributes that are objects or arrays it's a good idea to copy or clone the attribute prior to updating it: {% codetabs %} -{% ESNext %} +{% JSX %} ```js // Good - a new array is created from the old list attribute and a new list item: @@ -249,7 +249,7 @@ const addListItem = ( newListItem ) => { }; ``` -{% ES5 %} +{% Plain %} ```js // Good - cloning the old list @@ -276,7 +276,7 @@ Why do this? In JavaScript, arrays and objects are passed by reference, so this The `save` function defines the way in which the different attributes should be combined into the final markup, which is then serialized into `post_content`. {% codetabs %} -{% ESNext %} +{% JSX %} ```jsx save: () => { @@ -286,7 +286,7 @@ save: () => { }; ``` -{% ES5 %} +{% Plain %} ```js save: function() { @@ -327,7 +327,7 @@ Like the `edit` function, when rendering static blocks, it's important to add th As with `edit`, the `save` function also receives an object argument including attributes which can be inserted into the markup. {% codetabs %} -{% ESNext %} +{% JSX %} ```jsx save: ( { attributes } ) => { @@ -337,7 +337,7 @@ save: ( { attributes } ) => { }; ``` -{% ES5 %} +{% Plain %} ```js save: function( props ) { @@ -362,7 +362,7 @@ Here are a couple examples of using attributes, edit, and save all together. For ### Saving Attributes to Child Elements {% codetabs %} -{% ESNext %} +{% JSX %} ```jsx attributes: { @@ -396,7 +396,7 @@ save: ( { attributes } ) => { }, ``` -{% ES5 %} +{% Plain %} ```js attributes: { @@ -444,7 +444,7 @@ Ideally, the attributes saved should be included in the markup. However, there a This example could be for a dynamic block, such as the [Latest Posts block](https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-library/src/latest-posts/index.js), which renders the markup server-side. The save function is still required, however in this case it simply returns null since the block is not saving content from the editor. {% codetabs %} -{% ESNext %} +{% JSX %} ```jsx attributes: { @@ -474,7 +474,7 @@ save: () => { } ``` -{% ES5 %} +{% Plain %} ```js attributes: { diff --git a/docs/reference-guides/block-api/block-metadata.md b/docs/reference-guides/block-api/block-metadata.md index 542b8672d7f93..4998e3dad0781 100644 --- a/docs/reference-guides/block-api/block-metadata.md +++ b/docs/reference-guides/block-api/block-metadata.md @@ -1,4 +1,4 @@ -# Metadata +# Metadata in block.json Starting in WordPress 5.8 release, we encourage using the `block.json` metadata file as the canonical way to register block types. Here is an example `block.json` file that would define the metadata for a plugin create a notice block. @@ -6,6 +6,7 @@ Starting in WordPress 5.8 release, we encourage using the `block.json` metadata ```json { + "$schema": "https://schemas.wp.org/trunk/block.json", "apiVersion": 2, "name": "my-plugin/notice", "title": "Notice", @@ -41,6 +42,7 @@ Starting in WordPress 5.8 release, we encourage using the `block.json` metadata }, "editorScript": "file:./build/index.js", "script": "file:./build/script.js", + "viewScript": "file:./build/view.js", "editorStyle": "file:./build/index.css", "style": "file:./build/style.css" } @@ -54,7 +56,13 @@ From a performance perspective, when themes support lazy loading assets, blocks Furthermore, because the [Block Type REST API Endpoint](https://developer.wordpress.org/rest-api/reference/block-types/) can only list blocks registered on the server, registering blocks server-side is recommended; using the `block.json` file simplifies this registration. -Last, but not least, the [WordPress Plugins Directory](https://wordpress.org/plugins/) can detect `block.json` files, highlight blocks included in plugins, and extract their metadata. If you wish to [submit your block(s) to the Block Directory](/docs/getting-started/tutorials/create-block/submitting-to-block-directory.md), all blocks contained in your plugin must have a `block.json` file for the Block Directory to recognize them. +The [WordPress Plugins Directory](https://wordpress.org/plugins/) can detect `block.json` files, highlight blocks included in plugins, and extract their metadata. If you wish to [submit your block(s) to the Block Directory](/docs/getting-started/create-block/submitting-to-block-directory.md), all blocks contained in your plugin must have a `block.json` file for the Block Directory to recognize them. + +Development is improved by using a defined schema definition file. Supported editors can provide help like tooltips, autocomplete, and schema validation. To use the schema, add the following to the top of the `block.json`. + +```json +"$schema": "https://schemas.wp.org/trunk/block.json" +``` ## Block registration @@ -164,12 +172,14 @@ The name for a block is a unique string that identifies a block. Names have to b { "title": "Heading" } ``` -This is the display title for your block, which can be translated with our translation functions. The block inserter will show this name. +This is the display title for your block, which can be translated with our translation functions. The title will display in the Inserter and in other areas of the editor. + +**Note:** To keep your block titles readable and accessible in the UI, try to avoid very long titles. ### Category - Type: `string` -- Required +- Optional - Localized: No - Property: `category` @@ -205,6 +215,20 @@ An implementation should expect and tolerate unknown categories, providing some Setting `parent` lets a block require that it is only available when nested within the specified blocks. For example, you might want to allow an 'Add to Cart' block to only be available within a 'Product' block. +### Ancestor + +- Type: `string[]` +- Optional +- Localized: No +- Property: `ancestor` +- Since: `WordPress 6.0.0` + +```json +{ "ancestor": [ "my-block/product" ] } +``` + +The `ancestor` property makes a block available inside the specified block types at any position of the ancestor block subtree. That allows, for example, to place a ‘Comment Content’ block inside a ‘Column’ block, as long as ‘Column’ is somewhere within a ‘Comment Template’ block. In comparrison to the `parent` property blocks that specify their `ancestor` can be placed anywhere in the subtree whilst blocks with a specified `parent` need to be direct children. + ### Icon - Type: `string` @@ -255,7 +279,7 @@ Sometimes a block could have aliases that help users discover it while searching - Optional - Localized: No - Property: `version` -- Since: `5.8.0` +- Since: `WordPress 5.8.0` ```json { "version": "1.0.3" } @@ -269,6 +293,7 @@ The current version number of the block, such as 1.0 or 1.0.3. It's similar to h - Optional - Localized: No - Property: `textdomain` +- Since: `WordPress 5.7.0` ```json { "textdomain": "my-plugin" } @@ -398,7 +423,7 @@ See the [the example documentation](/docs/reference-guides/block-api/block-regis ### Editor Script -- Type: `string` ([WPDefinedAsset](#WPDefinedAsset)) +- Type: `WPDefinedAsset` ([learn more](#wpdefinedasset)) - Optional - Localized: No - Property: `editorScript` @@ -411,7 +436,7 @@ Block type editor script definition. It will only be enqueued in the context of ### Script -- Type: `string` ([WPDefinedAsset](#WPDefinedAsset)) +- Type: `WPDefinedAsset` ([learn more](#wpdefinedasset)) - Optional - Localized: No - Property: `script` @@ -420,11 +445,27 @@ Block type editor script definition. It will only be enqueued in the context of { "script": "file:./build/script.js" } ``` -Block type frontend script definition. It will be enqueued both in the editor and when viewing the content on the front of the site. +Block type frontend and editor script definition. It will be enqueued both in the editor and when viewing the content on the front of the site. + +### View Script + +- Type: `WPDefinedAsset`|`WPDefinedAsset[]` ([learn more](#wpdefinedasset)) +- Optional +- Localized: No +- Property: `viewScript` +- Since: `WordPress 5.9.0` + +```json +{ "viewScript": "file:./build/view.js" } +``` + +Block type frontend script definition. It will be enqueued only when viewing the content on the front of the site. + +_Note: An option to pass also an array of view scripts exists since WordPress `6.1.0`._ ### Editor Style -- Type: `string` ([WPDefinedAsset](#WPDefinedAsset)) +- Type: `WPDefinedAsset`|`WPDefinedAsset[]` ([learn more](#wpdefinedasset)) - Optional - Localized: No - Property: `editorStyle` @@ -435,9 +476,11 @@ Block type frontend script definition. It will be enqueued both in the editor an Block type editor style definition. It will only be enqueued in the context of the editor. +_Note: An option to pass also an array of editor styles exists since WordPress `5.9.0`._ + ### Style -- Type: `string` ([WPDefinedAsset](#WPDefinedAsset)) +- Type: `WPDefinedAsset`|`WPDefinedAsset[]` ([learn more](#wpdefinedasset)) - Optional - Localized: No - Property: `style` @@ -446,7 +489,9 @@ Block type editor style definition. It will only be enqueued in the context of t { "style": "file:./build/style.css" } ``` -Block type frontend style definition. It will be enqueued both in the editor and when viewing the content on the front of the site. +Block type frontend and editor style definition. It will be enqueued both in the editor and when viewing the content on the front of the site. + +_Note: An option to pass also an array of styles exists since WordPress `5.9.0`._ ## Assets @@ -454,7 +499,7 @@ Block type frontend style definition. It will be enqueued both in the editor and The `WPDefinedAsset` type is a subtype of string, where the value represents a path to a JavaScript or CSS file relative to where `block.json` file is located. The path provided must be prefixed with `file:`. This approach is based on how npm handles [local paths](https://docs.npmjs.com/files/package.json#local-paths) for packages. -An alternative would be a script or style handle name referencing a registered asset using WordPress helpers. +An alternative would be a script or style handle name referencing an already registered asset using WordPress helpers. **Example:** @@ -462,8 +507,11 @@ In `block.json`: ```json { - "editorScript": "file:./build/index.js", - "editorStyle": "my-editor-style-handle" + "editorScript": "file:./index.js", + "script": "my-script-handle", + "viewScript": "file:./view.js", + "editorStyle": "my-editor-style-handle", + "style": [ "file:./style.css", "my-style-handle" ] } ``` @@ -482,6 +530,7 @@ The definition is stored inside separate PHP file which ends with `.asset.php` a **Example:** ``` +block.json build/ ├─ index.js └─ index.asset.php @@ -507,6 +556,14 @@ return array( ); ``` +### Frontend Enqueueing + +Starting in the WordPress 5.8 release, it is possible to instruct WordPress to enqueue scripts and styles for a block type only when rendered on the frontend. It applies to the following asset fields in the `block.json` file: + +- `script` +- `viewScript` (when the block defines `render_callback` during registration in PHP, then the block author is responsible for enqueuing the script) +- `style` + ## Internationalization WordPress string discovery system can automatically translate fields marked in this document as translatable. First, you need to set the `textdomain` property in the `block.json` file that provides block metadata. diff --git a/docs/reference-guides/block-api/block-patterns.md b/docs/reference-guides/block-api/block-patterns.md index 52b30fcb9b20a..f5aebbdef3a6a 100644 --- a/docs/reference-guides/block-api/block-patterns.md +++ b/docs/reference-guides/block-api/block-patterns.md @@ -14,7 +14,7 @@ In this Document: The editor comes with several core block patterns. Theme and plugin authors can register additional custom block patterns using the `register_block_pattern` helper function. -The `register_block_pattern` helper function receives two arguments. +The `register_block_pattern` helper function receives two arguments. - `title`: A machine-readable title with a naming convention of `namespace/title`. - `properties`: An array describing properties of the pattern. @@ -26,6 +26,8 @@ The properties available for block patterns are: - `categories` (optional): An array of registered pattern categories used to group block patterns. Block patterns can be shown on multiple categories. A category must be registered separately in order to be used here. - `keywords` (optional): An array of aliases or keywords that help users discover the pattern while searching. - `viewportWidth` (optional): An integer specifying the intended width of the pattern to allow for a scaled preview of the pattern in the inserter. +- `blockTypes` (optional): An array of block types that the pattern is intended to be used with. Each value needs to be the declared block's `name`. +- `inserter` (optional): By default, all patterns will appear in the inserter. To hide a pattern so that it can only be inserted programmatically, set the `inserter` to `false`. The following code sample registers a block pattern named 'my-plugin/my-awesome-pattern': @@ -37,10 +39,10 @@ register_block_pattern( 'description' => _x( 'Two horizontal buttons, the left button is filled in, and the right button is outlined.', 'Block pattern description', 'my-plugin' ), 'content' => "<!-- wp:buttons {\"align\":\"center\"} -->\n<div class=\"wp-block-buttons aligncenter\"><!-- wp:button {\"backgroundColor\":\"very-dark-gray\",\"borderRadius\":0} -->\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link has-background has-very-dark-gray-background-color no-border-radius\">" . esc_html__( 'Button One', 'my-plugin' ) . "</a></div>\n<!-- /wp:button -->\n\n<!-- wp:button {\"textColor\":\"very-dark-gray\",\"borderRadius\":0,\"className\":\"is-style-outline\"} -->\n<div class=\"wp-block-button is-style-outline\"><a class=\"wp-block-button__link has-text-color has-very-dark-gray-color no-border-radius\">" . esc_html__( 'Button Two', 'my-plugin' ) . "</a></div>\n<!-- /wp:button --></div>\n<!-- /wp:buttons -->", ) -); +); ``` -_Note:_ +_Note:_ `register_block_pattern()` should be called from a handler attached to the init hook. @@ -48,7 +50,7 @@ _Note:_ function my_plugin_register_my_patterns() { register_block_pattern( ... ); } - + add_action( 'init', 'my_plugin_register_my_patterns' ); ``` @@ -56,7 +58,7 @@ add_action( 'init', 'my_plugin_register_my_patterns' ); ### unregister_block_pattern -The `unregister_block_pattern` helper function allows for a previously registered block pattern to be unregistered from a theme or plugin and receives one argument. +The `unregister_block_pattern` helper function allows for a previously registered block pattern to be unregistered from a theme or plugin and receives one argument. - `title`: The name of the block pattern to be unregistered. The following code sample unregisters the block pattern named 'my-plugin/my-awesome-pattern': @@ -65,7 +67,7 @@ The following code sample unregisters the block pattern named 'my-plugin/my-awes unregister_block_pattern( 'my-plugin/my-awesome-pattern' ); ``` -_Note:_ +_Note:_ `unregister_block_pattern()` should be called from a handler attached to the init hook. @@ -73,7 +75,7 @@ _Note:_ function my_plugin_unregister_my_patterns() { unregister_block_pattern( ... ); } - + add_action( 'init', 'my_plugin_unregister_my_patterns' ); ``` @@ -83,7 +85,7 @@ Block patterns can be grouped using categories. The block editor comes with bund ### register_block_pattern_category -The `register_block_pattern_category` helper function receives two arguments. +The `register_block_pattern_category` helper function receives two arguments. - `title`: A machine-readable title for the block pattern category. - `properties`: An array describing properties of the pattern category. @@ -100,7 +102,7 @@ register_block_pattern_category( ); ``` -_Note:_ +_Note:_ `register_block_pattern_category()` should be called from a handler attached to the init hook. @@ -108,7 +110,7 @@ _Note:_ function my_plugin_register_my_pattern_categories() { register_block_pattern_category( ... ); } - + add_action( 'init', 'my_plugin_register_my_pattern_categories' ); ``` @@ -116,7 +118,7 @@ add_action( 'init', 'my_plugin_register_my_pattern_categories' ); `unregister_block_pattern_category` allows unregistering a pattern category. -The `unregister_block_pattern_category` helper function allows for a previously registered block pattern category to be unregistered from a theme or plugin and receives one argument. +The `unregister_block_pattern_category` helper function allows for a previously registered block pattern category to be unregistered from a theme or plugin and receives one argument. - `title`: The name of the block pattern category to be unregistered. The following code sample unregisters the category named 'hero': @@ -125,7 +127,7 @@ The following code sample unregisters the category named 'hero': unregister_block_pattern_category( 'hero' ); ``` -_Note:_ +_Note:_ `unregister_block_pattern_category()` should be called from a handler attached to the init hook. @@ -133,6 +135,74 @@ _Note:_ function my_plugin_unregister_my_pattern_categories() { unregister_block_pattern_category( ... ); } - + add_action( 'init', 'my_plugin_unregister_my_pattern_categories' ); -``` \ No newline at end of file +``` + +## Block patterns contextual to block types and pattern transformations + +It is possible to attach a block pattern to one or more block types. This adds the block pattern as an available transform for that block type. + +Currently these transformations are available only to simple blocks (blocks without inner blocks). In order for a pattern to be suggested, **every selected block must be present in the block pattern**. + +For instance: + +```php +register_block_pattern( + 'my-plugin/powered-by-wordpress', + array( + 'title' => __( 'Powered by WordPress', 'my-plugin' ), + 'blockTypes' => array( 'core/paragraph' ), + 'content' => '<!-- wp:paragraph {"backgroundColor":"black","textColor":"white"} --> + <p class="has-white-color has-black-background-color has-text-color has-background">Powered by WordPress</p> + <!-- /wp:paragraph -->', + ) +); +``` + +The above code registers a block pattern named 'my-plugin/powered-by-wordpress' and also shows the pattern in the "transform menu" of paragraph blocks. The transformation result will be keeping the paragraph's existing content and also apply the other attributes - in this case the background and text color. + +As mentioned above pattern transformations for simple blocks can also work if we have selected multiple blocks and there are matching contextual patterns to these blocks. Let's see an example of a pattern where two block types are attached. + +```php +register_block_pattern( + 'my-plugin/powered-by-wordpress', + array( + 'title' => __( 'Powered by WordPress', 'my-plugin' ), + 'blockTypes' => array( 'core/paragraph', 'core/heading' ), + 'content' => '<!-- wp:group --> + <div class="wp-block-group"> + <!-- wp:heading {"fontSize":"large"} --> + <h2 class="has-large-font-size"><span style="color:#ba0c49" class="has-inline-color">Hi everyone</span></h2> + <!-- /wp:heading --> + <!-- wp:paragraph {"backgroundColor":"black","textColor":"white"} --> + <p class="has-white-color has-black-background-color has-text-color has-background">Powered by WordPress</p> + <!-- /wp:paragraph --> + </div><!-- /wp:group -->', + ) +); +``` + +In the above example if we select **one of the two** block types, either a paragraph or a heading block, this pattern will be suggested by transforming the selected block using its content and will also add the remaing blocks from the pattern. If on the other hand we multi select one paragraph and one heading block, both blocks will be transformed. + +Blocks can also use these contextual block patterns in other places. For instance, when inserting a new Query Loop block, the user is provided with a list of all patterns attached to the block. + +## Semantic block patterns + +In block themes, you can also mark block patterns as "header" or "footer" patterns (template part areas). We call these "semantic block patterns". These patterns are shown to the user when inserting or replacing header or footer template parts. + +Example: + +```php +<?php +register_block_pattern( + 'my-plugin/my-header', + array( + 'title' => __( 'My Header', 'my-plugin' ), + 'categories' => array( 'header' ), + // Assigning the pattern the "header" area. + 'blockTypes' => array( 'core/template-part/header' ), + 'content' => 'Content of my block pattern', + ) +); +``` diff --git a/docs/reference-guides/block-api/block-registration.md b/docs/reference-guides/block-api/block-registration.md index a290d4b7d4873..5c38bf7f79c36 100644 --- a/docs/reference-guides/block-api/block-registration.md +++ b/docs/reference-guides/block-api/block-registration.md @@ -35,13 +35,15 @@ A block requires a few properties to be specified before it can be registered su - **Type:** `String` -This is the display title for your block, which can be translated with our translation functions. The block inserter will show this name. +This is the display title for your block, which can be translated with our translation functions. The title will display in the Inserter and in other areas of the editor. ```js // Our data object title: __( 'Book' ); ``` +_Note:_ To keep your block titles readable and accessible in the UI, try to avoid very long titles. + #### description (optional) - **Type:** `String` @@ -54,7 +56,7 @@ description: __( 'Block showing a Book card.' ); #### category -- **Type:** `String` [ common | formatting | layout | widgets | embed ] +- **Type:** `String` [ text | media | design | widgets | theme | embed ] Blocks are grouped into categories to help users browse and discover them. diff --git a/docs/reference-guides/block-api/block-styles.md b/docs/reference-guides/block-api/block-styles.md index cdeb887e65b49..90b6c06d18f59 100644 --- a/docs/reference-guides/block-api/block-styles.md +++ b/docs/reference-guides/block-api/block-styles.md @@ -84,7 +84,7 @@ register_block_style( ); ``` -Alternatively, if a stylesheet was already registered which contains the CSS for the block style, it is possible to just pass the stylesheet's handle so `register_block_style` function will make sure it is enqueue. +Alternatively, if a stylesheet was already registered which contains the CSS for the block style, it is possible to just pass the stylesheet's handle so `register_block_style` function will make sure it is enqueued. The following code sample provides an example of this use case: diff --git a/docs/reference-guides/block-api/block-supports.md b/docs/reference-guides/block-api/block-supports.md index 1be449255d2da..5ca033cff021f 100644 --- a/docs/reference-guides/block-api/block-supports.md +++ b/docs/reference-guides/block-api/block-supports.md @@ -1,20 +1,59 @@ # Supports -Block Supports is the API that allows a block to declare features used in the editor. +Block Supports is the API that allows a block to declare support for certain features. -Some block supports — for example, `anchor` or `className` — apply their attributes by adding additional props on the element returned by `save`. This will work automatically for default HTML tag elements (`div`, etc). However, if the return value of your `save` is a custom component element, you will need to ensure that your custom component handles these props in order for the attributes to be persisted. +Opting into any of these features will register additional attributes on the block and provide the UI to manipulate that attribute. + +In order for the attribute to get applied to the block the generated properties get added to the wrapping element of the block. They get added to the object you get returned from the `useBlockProps` hook. + +`BlockEdit` function: +```js +function BlockEdit() { + const blockProps = useBlockProps(); + + return ( + <div {...blockProps}>Hello World!</div> + ); +} +``` + +`save` function: +```js +function BlockEdit() { + const blockProps = useBlockProps.save(); + + return ( + <div {...blockProps}>Hello World!</div> + ); +} +``` + +For dynamic blocks that get rendered via a `render_callback` in PHP you can use the `get_block_wrapper_attributes()` function. It returns a string containing all the generated properties and needs to get output in the opening tag of the wrapping block element. + +`render_callback` function: +```php +function render_block() { + $wrapper_attributes = get_block_wrapper_attributes(); + + return sprintf( + '<div %1$s>%2$s</div>', + $wrapper_attributes, + 'Hello World!' + ); +} +``` ## anchor - Type: `boolean` - Default value: `false` -Anchors let you link directly to a specific block on a page. This property adds a field to define an id for the block and a button to copy the direct link. +Anchors let you link directly to a specific block on a page. This property adds a field to define an id for the block and a button to copy the direct link. _Important: It doesn't work with dynamic blocks yet._ ```js // Declare support for anchor links. supports: { - anchor: true; + anchor: true } ``` @@ -23,21 +62,21 @@ supports: { - Type: `boolean` or `array` - Default value: `false` -This property adds block controls which allow to change block's alignment. _Important: It doesn't work with dynamic blocks yet._ +This property adds block controls which allow to change block's alignment. ```js supports: { // Declare support for block's alignment. // This adds support for all the options: // left, center, right, wide, and full. - align: true; + align: true } ``` ```js supports: { // Declare support for specific alignment options. - align: [ 'left', 'right', 'full' ]; + align: [ 'left', 'right', 'full' ] } ``` @@ -62,7 +101,7 @@ This property allows to enable [wide alignment](/docs/how-to-guides/themes/theme ```js supports: { // Remove the support for wide alignment. - alignWide: false; + alignWide: false } ``` @@ -76,7 +115,7 @@ By default, the class `.wp-block-your-block-name` is added to the root element o ```js supports: { // Remove the support for the generated className. - className: false; + className: false } ``` @@ -99,7 +138,7 @@ Note that the `background` and `text` keys have a default value of `true`, so if supports: { color: { // This also enables text and background UI controls. - gradients: true; // Enable gradients UI control. + gradients: true // Enable gradients UI control. } } ``` @@ -406,7 +445,7 @@ This property adds a field to define a custom className for the block's wrapper. ```js supports: { // Remove the support for the custom className. - customClassName: false; + customClassName: false } ``` @@ -415,56 +454,12 @@ supports: { - Type: `boolean` - Default value: `true` -When the style picker is shown, a dropdown is displayed so the user can select a default style for this block type. If you prefer not to show the dropdown, set this property to `false`. +When the style picker is shown, the user can set a default style for a block type based on the block's currently active style. If you prefer not to make this option available, set this property to `false`. ```js supports: { // Remove the Default Style picker. - defaultStylePicker: false; -} -``` - -## fontSize - -- Type: `boolean` -- Default value: `false` - -This value signals that a block supports the font-size CSS style property. When it does, the block editor will show an UI control for the user to set its value. - -The values shown in this control are the ones declared by the theme via the `editor-font-sizes` [theme support](/docs/how-to-guides/themes/theme-support.md#block-font-sizes), or the default ones if none is provided. - -```js -supports: { - // Enable UI control for font-size. - fontSize: true, -} -``` - -When the block declares support for `fontSize`, the attributes definition is extended to include two new attributes: `fontSize` and `style`: - -- `fontSize`: attribute of `string` type with no default assigned. It stores the preset values set by the user. The block can apply a default fontSize by specifying its own `fontSize` attribute with a default e.g.: - -```js -attributes: { - fontSize: { - type: 'string', - default: 'some-value', - } -} -``` - -- `style`: attribute of `object` type with no default assigned. It stores the custom values set by the user. The block can apply a default style by specifying its own `style` attribute with a default e.g.: - -```js -attributes: { - style: { - type: 'object', - default: { - typography: { - fontSize: 'value' - } - } - } + defaultStylePicker: false } ``` @@ -478,7 +473,7 @@ By default, a block's markup can be edited individually. To disable this behavio ```js supports: { // Remove support for an HTML mode. - html: false; + html: false } ``` @@ -492,64 +487,49 @@ By default, all blocks will appear in the inserter. To hide a block so that it c ```js supports: { // Hide this block from the inserter. - inserter: false; + inserter: false } ``` -## lineHeight +## multiple - Type: `boolean` -- Default value: `false` +- Default value: `true` -This value signals that a block supports the line-height CSS style property. When it does, the block editor will show an UI control for the user to set its value if [the theme declares support](/docs/how-to-guides/themes/theme-support.md#supporting-custom-line-heights). +A non-multiple block can be inserted into each post, one time only. For example, the built-in 'More' block cannot be inserted again if it already exists in the post being edited. A non-multiple block's icon is automatically dimmed (unclickable) to prevent multiple instances. ```js supports: { - // Enable UI control for line-height. - lineHeight: true, -} -``` - -When the block declares support for `lineHeight`, the attributes definition is extended to include a new attribute `style` of `object` type with no default assigned. It stores the custom value set by the user. The block can apply a default style by specifying its own `style` attribute with a default e.g.: - -```js -attributes: { - style: { - type: 'object', - default: { - typography: { - lineHeight: 'value' - } - } - } + // Use the block just once per post + multiple: false } ``` -## multiple +## reusable - Type: `boolean` - Default value: `true` -A non-multiple block can be inserted into each post, one time only. For example, the built-in 'More' block cannot be inserted again if it already exists in the post being edited. A non-multiple block's icon is automatically dimmed (unclickable) to prevent multiple instances. +A block may want to disable the ability of being converted into a reusable block. By default all blocks can be converted to a reusable block. If supports reusable is set to false, the option to convert the block into a reusable block will not appear. ```js supports: { - // Use the block just once per post - multiple: false; + // Don't allow the block to be converted into a reusable block. + reusable: false, } ``` -## reusable +## lock - Type: `boolean` - Default value: `true` -A block may want to disable the ability of being converted into a reusable block. By default all blocks can be converted to a reusable block. If supports reusable is set to false, the option to convert the block into a reusable block will not appear. +A block may want to disable the ability to toggle the lock state. It can be locked/unlocked by a user from the block "Options" dropdown by default. To disable this behavior, set `lock` to `false`. ```js supports: { - // Don't allow the block to be converted into a reusable block. - reusable: false; + // Remove support for locking UI. + lock: false } ``` @@ -585,4 +565,102 @@ supports: { } ``` -A spacing property may define an array of allowable sides that can be configured. When arbitrary sides are defined only UI controls for those sides are displayed. +A spacing property may define an array of allowable sides that can be configured. When arbitrary sides are defined only UI controls for those sides are displayed. Axial sides are defined with the `vertical` and `horizontal` terms, and display a single UI control for each axial pair (for example, `vertical` controls both the top and bottom sides). A spacing property may support arbitrary individual sides **or** axial sides, but not a mix of both. + + +## typography + +- Type: `Object` +- Default value: `null` +- Subproperties: + - `fontSize`: type `boolean`, default value `false` + - `lineHeight`: type `boolean`, default value `false` + +The presence of this object signals that a block supports some typography related properties. When it does, the block editor will show a typography UI allowing the user to control their values. + +```js +supports: { + typography: { + // Enable support and UI control for font-size. + fontSize: true, + // Enable support and UI control for line-height. + lineHeight: true, + }, +} +``` + +### typography.fontSize +- Type: `boolean` +- Default value: `false` + +This value signals that a block supports the font-size CSS style property. When it does, the block editor will show an UI control for the user to set its value. + +The values shown in this control are the ones declared by the theme via the `editor-font-sizes` [theme support](/docs/how-to-guides/themes/theme-support.md#block-font-sizes), or the default ones if none are provided. + +```js +supports: { + typography: { + // Enable support and UI control for font-size. + fontSize: true, + }, +} +``` + +When the block declares support for `fontSize`, the attributes definition is extended to include two new attributes: `fontSize` and `style`: + +- `fontSize`: attribute of `string` type with no default assigned. It stores any preset value selected by the user. The block can apply a default fontSize by specifying its own `fontSize` attribute with a default e.g.: + +```js +attributes: { + fontSize: { + type: 'string', + default: 'some-value', + } +} +``` + +- `style`: attribute of `object` type with no default assigned. It stores the custom values set by the user and is shared with other block supports such as color. The block can apply a default style by specifying its own `style` attribute with a default e.g.: + +```js +attributes: { + style: { + type: 'object', + default: { + typography: { + fontSize: 'value' + } + } + } +} +``` + +### typography.lineHeight + +- Type: `boolean` +- Default value: `false` + +This value signals that a block supports the line-height CSS style property. When it does, the block editor will show an UI control for the user to set its value if [the theme declares support](/docs/how-to-guides/themes/theme-support.md#supporting-custom-line-heights). + +```js +supports: { + typography: { + // Enable support and UI control for line-height. + lineHeight: true, + }, +} +``` + +When the block declares support for `lineHeight`, the attributes definition is extended to include a new attribute `style` of `object` type with no default assigned. It stores the custom value set by the user. The block can apply a default style by specifying its own `style` attribute with a default e.g.: + +```js +attributes: { + style: { + type: 'object', + default: { + typography: { + lineHeight: 'value' + } + } + } +} +``` diff --git a/docs/reference-guides/block-api/block-templates.md b/docs/reference-guides/block-api/block-templates.md index d76c072aa3e20..1390ab13a6ad1 100644 --- a/docs/reference-guides/block-api/block-templates.md +++ b/docs/reference-guides/block-api/block-templates.md @@ -59,7 +59,7 @@ registerBlockType( 'myplugin/template', { } ); ``` -See the [Meta Block Tutorial](/docs/how-to-guides/metabox/meta-block-5-finishing.md) for a full example of a template in use. +See the [Meta Block Tutorial](/docs/how-to-guides/metabox.md#step-4-finishing-touches) for a full example of a template in use. ## Block Attributes @@ -96,7 +96,7 @@ function myplugin_register_book_post_type() { add_action( 'init', 'myplugin_register_book_post_type' ); ``` -### Locking +## Locking Sometimes the intention might be to lock the template on the UI so that the blocks presented cannot be manipulated. This is achieved with a `template_lock` property. @@ -120,6 +120,44 @@ _Options:_ Lock settings can be inherited by InnerBlocks. If `templateLock` is not set in an InnerBlocks area, the locking of the parent InnerBlocks area is used. If the block is a top level block, the locking configuration of the current post type is used. +## Individual block locking + +Alongside template level locking, you can lock individual blocks; you can do this using a `lock` attribute on the attributes level. Block-level lock takes priority over the `templateLock` feature. Currently, you can lock moving and removing blocks. + +```js +attributes: { + // Prevent a block from being moved or removed. + lock: { + remove: true, + move: true, + } +} +``` +_Options:_ +- `remove` — Locks the ability of a block from being removed. +- `move` — Locks the ability of a block from being moved. + +You can use this with `templateLock` to lock all blocks except a single block by using `false` in `remove` or `move`. + +```php +$template = array( + array( 'core/image', array( + 'align' => 'left', + ) ), + array( 'core/heading', array( + 'placeholder' => 'Add Author...', + ) ), + // Allow a Paragraph block to be moved or removed. + array( 'core/paragraph', array( + 'placeholder' => 'Add Description...', + 'lock' => array( + 'move' => false, + 'remove' => false, + ), + ) ), +); +``` + ## Nested Templates Container blocks like the columns blocks also support templates. This is achieved by assigning a nested template to the block. diff --git a/docs/reference-guides/block-api/block-transforms.md b/docs/reference-guides/block-api/block-transforms.md index 1078608345e52..4ed4e907e67c0 100644 --- a/docs/reference-guides/block-api/block-transforms.md +++ b/docs/reference-guides/block-api/block-transforms.md @@ -42,7 +42,7 @@ A transformation of type `block` is an object that takes the following parameter - **type** _(string)_: the value `block`. - **blocks** _(array)_: a list of known block types. It also accepts the wildcard value (`"*"`), meaning that the transform is available to _all_ block types (eg: all blocks can transform into `core/group`). - **transform** _(function)_: a callback that receives the attributes and inner blocks of the block being processed. It should return a block object or an array of block objects. -- **isMatch** _(function, optional)_: a callback that receives the block attributes and should return a boolean. Returning `false` from this function will prevent the transform from being available and displayed as an option to the user. +- **isMatch** _(function, optional)_: a callback that receives the block attributes as the first argument and the block object as the second argument and should return a boolean. Returning `false` from this function will prevent the transform from being available and displayed as an option to the user. - **isMultiBlock** _(boolean, optional)_: whether the transformation can be applied when multiple blocks are selected. If true, the `transform` function's first parameter will be an array containing each selected block's attributes, and the second an array of each selected block's inner blocks. False by default. - **priority** _(number, optional)_: controls the priority with which a transformation is applied, where a lower value will take precedence over higher values. This behaves much like a [WordPress hook](https://codex.wordpress.org/Plugin_API#Hook_to_WordPress). Like hooks, the default priority is `10` when not otherwise set. @@ -50,9 +50,6 @@ A transformation of type `block` is an object that takes the following parameter To declare this transformation we add the following code into the heading block configuration, which uses the `createBlock` function from the [`wp-blocks` package](/packages/blocks/README.md#createBlock). -{% codetabs %} -{% ESNext %} - ```js transforms: { from: [ @@ -69,33 +66,10 @@ transforms: { }, ``` -{% ES5 %} - -```js -transforms: { - from: [ - { - type: 'block', - blocks: [ 'core/paragraph' ], - transform: function ( attributes ) { - return createBlock( 'core/heading', { - content: attributes.content, - } ); - }, - }, - ] -}, -``` - -{% end %} - **Example: blocks that have InnerBlocks** A block with InnerBlocks can also be transformed from and to another block with InnerBlocks. -{% codetabs %} -{% ESNext %} - ```js transforms: { to: [ @@ -114,28 +88,6 @@ transforms: { }, ``` -{% ES5 %} - -```js -transforms: { - to: [ - { - type: 'block', - blocks: [ 'some/block-with-innerblocks' ], - transform: function( attributes, innerBlocks ) { - return createBlock( - 'some/other-block-with-innerblocks', - attributes, - innerBlocks - ); - }, - }, - ], -}, -``` - -{% end %} - ### Enter This type of transformations support the _from_ direction, allowing blocks to be created from some content introduced by the user. They're applied in a new block line after the user has introduced some content and hit the ENTER key. @@ -151,9 +103,6 @@ A transformation of type `enter` is an object that takes the following parameter To create a separator block when the user types the hypen three times and then hits the ENTER key we can use the following code: -{% codetabs %} -{% ESNext %} - ```js transforms = { from: [ @@ -166,24 +115,6 @@ transforms = { }; ``` -{% ES5 %} - -```js -transforms = { - from: [ - { - type: 'enter', - regExp: /^-{3,}$/, - transform: function ( value ) { - return createBlock( 'core/separator' ); - }, - }, - ], -}; -``` - -{% end %} - ### Files This type of transformations support the _from_ direction, allowing blocks to be created from files dropped into the editor. @@ -199,9 +130,6 @@ A transformation of type `files` is an object that takes the following parameter To create a File block when the user drops a file into the editor we can use the following code: -{% codetabs %} -{% ESNext %} - ```js transforms: { from: [ @@ -227,44 +155,13 @@ transforms: { } ``` -{% ES5 %} - -```js -transforms: { - from: [ - { - type: 'files', - isMatch: function ( files ) { - return files.length === 1; - }, - // By defining a lower priority than the default of 10, - // we make that the File block to be created as a fallback, - // if no other transform is found. - priority: 15, - transform: function ( files ) { - var file = files[ 0 ]; - var blobURL = createBlobURL( file ); - // File will be uploaded in componentDidMount() - return createBlock( 'core/file', { - href: blobURL, - fileName: file.name, - textLinkHref: blobURL, - } ); - }, - }, - ]; -} -``` - -{% end %} - ### Prefix This type of transformations support the _from_ direction, allowing blocks to be created from some text typed by the user. They're applied when, in a new block line, the user types some text and then adds a trailing space. A transformation of type `prefix` is an object that takes the following parameters: -- **type** _(string)_: the value `files`. +- **type** _(string)_: the value `prefix`. - **prefix** _(string)_: the character or sequence of characters that match this transfrom. - **transform** _(function)_: a callback that receives the content introduced. It should return a block object or an array of block objects. - **priority** _(number, optional)_: controls the priority with which a transform is applied, where a lower value will take precedence over higher values. This behaves much like a [WordPress hook](https://codex.wordpress.org/Plugin_API#Hook_to_WordPress). Like hooks, the default priority is `10` when not otherwise set. @@ -273,9 +170,6 @@ A transformation of type `prefix` is an object that takes the following paramete If we want to create a custom block when the user types the question mark, we could use this code: -{% codetabs %} -{% ESNext %} - ```js transforms: { from: [ @@ -292,26 +186,6 @@ transforms: { } ``` -{% ES5 %} - -```js -transforms: { - from: [ - { - type: 'prefix', - prefix: '?', - transform: function ( content ) { - return createBlock( 'my-plugin/question', { - content, - } ); - }, - }, - ]; -} -``` - -{% end %} - ### Raw This type of transformations support the _from_ direction, allowing blocks to be created from raw HTML nodes. They're applied when the user executes the "Convert to Blocks" action from within the block setting UI menu, as well as when some content is pasted or dropped into the editor. @@ -320,7 +194,7 @@ A transformation of type `raw` is an object that takes the following parameters: - **type** _(string)_: the value `raw`. - **transform** _(function, optional)_: a callback that receives the node being processed. It should return a block object or an array of block objects. -- **schema** _(object|function, optional)_: it defines the attributes and children of the node that will be preserved on paste, according to its [HTML content model](https://html.spec.whatwg.org/multipage/dom.html#content-models). Take a look at [pasteHandler](/packages/blocks/README.md#pasteHandler) for more info. +- **schema** _(object|function, optional)_: defines an [HTML content model](https://html.spec.whatwg.org/multipage/dom.html#content-models) used to detect and process pasted contents. See [below](#schemas-and-content-models). - **selector** _(string, optional)_: a CSS selector string to determine whether the element matches according to the [element.matches](https://developer.mozilla.org/en-US/docs/Web/API/Element/matches) method. The transform won't be executed if the element doesn't match. This is a shorthand and alternative to using `isMatch`, which, if present, will take precedence. - **isMatch** _(function, optional)_: a callback that receives the node being processed and should return a boolean. Returning `false` from this function will prevent the transform from being applied. - **priority** _(number, optional)_: controls the priority with which a transform is applied, where a lower value will take precedence over higher values. This behaves much like a [WordPress hook](https://codex.wordpress.org/Plugin_API#Hook_to_WordPress). Like hooks, the default priority is `10` when not otherwise set. @@ -329,9 +203,6 @@ A transformation of type `raw` is an object that takes the following parameters: If we want to create an Embed block when the user pastes some URL in the editor, we could use this code: -{% codetabs %} -{% ESNext %} - ```js transforms: { from: [ @@ -350,28 +221,63 @@ transforms: { } ``` -{% ES5 %} +<h4 id="schemas-and-content-models">Schemas and Content Models</h4> + +When pasting content it's possible to define +a [content model](https://html.spec.whatwg.org/multipage/dom.html#content-models) that will be used to validate and +process pasted content. It's often the case that HTML pasted into the editor will contain a mixture of elements that _ +should_ transfer as well as elements that _shouldn't_. For example, consider +pasting `<span class="time">12:04 pm</span>` into the editor. We want to copy `12:04 pm` and omit the `<span>` and +its `class` attribute because those won't carry the same meaning or structure as they originally did from where they +were copied. + +When writing `raw` transforms you can control this by supplying a `schema` which describes allowable content and which +will be applied to clean up the pasted content before attempting to match with your block. The schemas are passed +into [`cleanNodeList` from `@wordpress/dom`](https://github.com/wordpress/gutenberg/blob/trunk/packages/dom/src/dom/clean-node-list.js); check there for +a [complete description of the schema](https://github.com/wordpress/gutenberg/blob/trunk/packages/dom/src/phrasing-content.js). ```js -transforms: { - from: [ - { - type: 'raw', - isMatch: function( node ) { - return node.nodeName === 'P' && - /^\s*(https?:\/\/\S+)\s*$/i.test( node.textContent ); - }, - transform: function( node ) { - return createBlock( 'core/embed', { - url: node.textContent.trim(), - } ); - }, - }, - ], -} +schema = { span: { children: { '#text': {} } } } ``` -{% end %} +**Example: a custom content model** + +Suppose we want to match the following HTML snippet and turn it into some kind of custom post preview block. + + ```html + <div data-post-id="13"> + <h2>The Post Title</h2> + <p>Some <em>great</em> content.</p> + </div> + ``` + +We want to tell the editor to allow the inner `h2` and `p` elements. We do this by supplying the following schema. In +this example we're using the function form, which accepts an argument supplying `phrasingContentSchema` (as well as a +boolean `isPaste` indicating if the transformation operation started with pasting text). The `phrasingContentSchema` is +pre-defined to match HTML phrasing elements, such as `<strong>` and `<sup>` and `<kbd>`. Anywhere we expect +a `<RichText />` component is a good place to allow phrasing content otherwise we'll lose all text formatting on +conversion. + + ```js + schema = ({ phrasingContentSchema }) => { + div: { + required: true, + attributes: [ 'data-post-id' ], + children: { + h2: { children: phrasingContentSchema }, + p: { children: phrasingContentSchema } + } + } + } + ``` + +When we successfully match this content every HTML attribute will be stripped away except for `data-post-id` and if we +have other arrangements of HTML inside of a given `div` then it won't match our transformer. Likewise we'd fail to match +if we found an `<h3>` in there instead of an `<h2>`. + +Schemas are most-important when wanting to match HTML snippets containing non-phrasing content, such as `<details>` with +a `<summary>`. Without declaring the custom schema the editor will skip over these other contructions before attempting +to run them through any block transforms. ### Shortcode @@ -389,9 +295,6 @@ A transformation of type `shortcode` is an object that takes the following param An existing shortcode can be transformed into its block counterpart. -{% codetabs %} -{% ESNext %} - ```js transforms: { from: [ @@ -425,42 +328,3 @@ transforms: { ] }, ``` - -{% ES5 %} - -```js -transforms: { - from: [ - { - type: 'shortcode', - tag: 'caption', - attributes: { - url: { - type: 'string', - source: 'attribute', - attribute: 'src', - selector: 'img', - }, - align: { - type: 'string', - // The shortcode function will extract - // the shortcode atts into a value - // to be sourced in the block's comment. - shortcode: function( attributes ) { - var align = attributes.named.align ? attributes.named.align : 'alignnone'; - return align.replace( 'align', '' ); - }, - }, - }, - // Prevent the shortcode to be converted - // into this block when it doesn't - // have the proper ID. - isMatch: function( attributes ) { - return attributes.named.id === 'my-id'; - }, - }, - ] -}, -``` - -{% end %} diff --git a/docs/reference-guides/block-api/block-variations.md b/docs/reference-guides/block-api/block-variations.md index 2c9e6b3bc6520..5547dab17007b 100644 --- a/docs/reference-guides/block-api/block-variations.md +++ b/docs/reference-guides/block-api/block-variations.md @@ -8,7 +8,7 @@ By default, all variations will show up in the Inserter in addition to the regul ```js variations: [ - { + { name: 'wordpress', isDefault: true, title: __( 'WordPress' ), @@ -45,7 +45,7 @@ An object describing a variation defined for the block type can contain the foll - `example` (optional, type `Object`) – Example provides structured data for the block preview. You can set to `undefined` to disable the preview shown for the block type. - `scope` (optional, type `WPBlockVariationScope[]`) - the list of scopes where the variation is applicable. When not provided, it defaults to `block` and `inserter`. Available options: - `inserter` - Block Variation is shown on the inserter. - - `block` - Used by blocks to filter specific block variations. Mostly used in Placeholder patterns like `Columns` block. + - `block` - Used by blocks to filter specific block variations. `Columns` and `Query Loop` blocks have such variations and are passed to the [experimental BlockVariationPicker](https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/block-variation-picker/README.md) component, which is handling the displaying of variations and the ability to select one from them. - `transform` - Block Variation will be shown in the component for Block Variations transformations. - `keywords` (optional, type `string[]`) - An array of terms (which can be translated) that help users discover the variation while searching. - `isActive` (optional, type `Function|string[]`) - This can be a function or an array of block attributes. Function that accepts a block's attributes and the variation's attributes and determines if a variation is active. This function doesn't try to find a match dynamically based on all block's attributes, as in many cases some attributes are irrelevant. An example would be for `embed` block where we only care about `providerNameSlug` attribute's value. We can also use a `string[]` to tell which attributes should be compared as a shorthand. Each attributes will be matched and the variation will be active if all of them are matching. diff --git a/docs/reference-guides/core-blocks.md b/docs/reference-guides/core-blocks.md new file mode 100644 index 0000000000000..6aa6ec62d7e09 --- /dev/null +++ b/docs/reference-guides/core-blocks.md @@ -0,0 +1,857 @@ +# Core Blocks Reference + +This page lists the core blocks included in the block-library package. + +<div class="callout callout-info"> +Items marked with a strikeout (~~strikeout~~) are explicitly disabled. +</div> + +<!-- START TOKEN Autogenerated - DO NOT EDIT --> + +## Archives + +Display a date archive of your posts. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/archives)) + +- **Name:** core/archives +- **Category:** widgets +- **Supports:** align, ~~html~~ +- **Attributes:** displayAsDropdown, showPostCounts, type + +## Audio + +Embed a simple audio player. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/audio)) + +- **Name:** core/audio +- **Category:** media +- **Supports:** align, anchor +- **Attributes:** autoplay, caption, id, loop, preload, src + +## Avatar + +Add a user's avatar. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/avatar)) + +- **Name:** core/avatar +- **Category:** theme +- **Supports:** align, color (~~background~~, ~~text~~), spacing (margin), ~~alignWide~~, ~~html~~ +- **Attributes:** isLink, linkTarget, size, userId + +## Reusable block + +Create and save content to reuse across your site. Update the block, and the changes apply everywhere it’s used. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/block)) + +- **Name:** core/block +- **Category:** reusable +- **Supports:** ~~customClassName~~, ~~html~~, ~~inserter~~ +- **Attributes:** ref + +## Button + +Prompt visitors to take action with a button-style link. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/button)) + +- **Name:** core/button +- **Category:** design +- **Supports:** align, anchor, color (background, gradients, text), spacing (padding), typography (fontSize), ~~alignWide~~, ~~reusable~~ +- **Attributes:** backgroundColor, gradient, linkTarget, placeholder, rel, text, textColor, title, url, width + +## Buttons + +Prompt visitors to take action with a group of button-style links. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/buttons)) + +- **Name:** core/buttons +- **Category:** design +- **Supports:** align (full, wide), anchor, spacing (blockGap, margin) +- **Attributes:** + +## Calendar + +A calendar of your site’s posts. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/calendar)) + +- **Name:** core/calendar +- **Category:** widgets +- **Supports:** align +- **Attributes:** month, year + +## Categories List + +Display a list of all categories. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/categories)) + +- **Name:** core/categories +- **Category:** widgets +- **Supports:** align, ~~html~~ +- **Attributes:** displayAsDropdown, showEmpty, showHierarchy, showOnlyTopLevel, showPostCounts + +## Code + +Display code snippets that respect your spacing and tabs. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/code)) + +- **Name:** core/code +- **Category:** text +- **Supports:** anchor, color (background, gradients, text), spacing (margin, padding), typography (fontSize, lineHeight) +- **Attributes:** content + +## Column + +A single column within a columns block. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/column)) + +- **Name:** core/column +- **Category:** text +- **Supports:** anchor, color (background, gradients, link, text), spacing (blockGap, padding), ~~html~~, ~~reusable~~ +- **Attributes:** allowedBlocks, templateLock, verticalAlignment, width + +## Columns + +Display content in multiple columns, with blocks added to each column. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/columns)) + +- **Name:** core/columns +- **Category:** design +- **Supports:** align (full, wide), anchor, color (background, gradients, link, text), spacing (blockGap, margin, padding), ~~html~~ +- **Attributes:** isStackedOnMobile, verticalAlignment + +## Comment Author Avatar (deprecated) + +This block is deprecated. Please use the Avatar block instead. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/comment-author-avatar)) + +- **Name:** core/comment-author-avatar +- **Category:** theme +- **Supports:** color (background, ~~text~~), spacing (margin, padding), ~~html~~, ~~inserter~~ +- **Attributes:** height, width + +## Comment Author Name + +Displays the name of the author of the comment. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/comment-author-name)) + +- **Name:** core/comment-author-name +- **Category:** theme +- **Supports:** color (background, gradients, link, text), spacing (margin, padding), typography (fontSize, lineHeight), ~~html~~ +- **Attributes:** fontSize, isLink, linkTarget, textAlign + +## Comment Content + +Displays the contents of a comment. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/comment-content)) + +- **Name:** core/comment-content +- **Category:** theme +- **Supports:** color (background, gradients, link, text), spacing (padding), typography (fontSize, lineHeight), ~~html~~ +- **Attributes:** textAlign + +## Comment Date + +Displays the date on which the comment was posted. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/comment-date)) + +- **Name:** core/comment-date +- **Category:** theme +- **Supports:** color (background, gradients, link, text), typography (fontSize, lineHeight), ~~html~~ +- **Attributes:** fontSize, format, isLink + +## Comment Edit Link + +Displays a link to edit the comment in the WordPress Dashboard. This link is only visible to users with the edit comment capability. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/comment-edit-link)) + +- **Name:** core/comment-edit-link +- **Category:** theme +- **Supports:** color (background, gradients, link, ~~text~~), typography (fontSize, lineHeight), ~~html~~ +- **Attributes:** fontSize, linkTarget, textAlign + +## Comment Reply Link + +Displays a link to reply to a comment. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/comment-reply-link)) + +- **Name:** core/comment-reply-link +- **Category:** theme +- **Supports:** color (background, gradients, link, ~~text~~), typography (fontSize, lineHeight), ~~html~~ +- **Attributes:** fontSize, textAlign + +## Comment Template + +Contains the block elements used to display a comment, like the title, date, author, avatar and more. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/comment-template)) + +- **Name:** core/comment-template +- **Category:** design +- **Supports:** align, ~~html~~, ~~reusable~~ +- **Attributes:** + +## Comments + +An advanced block that allows displaying post comments using different visual configurations. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/comments)) + +- **Name:** core/comments-query-loop +- **Category:** theme +- **Supports:** align (full, wide), color (background, gradients, link, text), ~~html~~ +- **Attributes:** tagName + +## Comments Pagination + +Displays a paginated navigation to next/previous set of comments, when applicable. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/comments-pagination)) + +- **Name:** core/comments-pagination +- **Category:** theme +- **Supports:** align, color (background, gradients, link, text), ~~html~~, ~~reusable~~ +- **Attributes:** paginationArrow + +## Next Page + +Displays the next comment's page link. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/comments-pagination-next)) + +- **Name:** core/comments-pagination-next +- **Category:** theme +- **Supports:** color (background, gradients, ~~text~~), typography (fontSize, lineHeight), ~~html~~, ~~reusable~~ +- **Attributes:** label + +## Page Numbers + +Displays a list of page numbers for comments pagination. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/comments-pagination-numbers)) + +- **Name:** core/comments-pagination-numbers +- **Category:** theme +- **Supports:** ~~html~~, ~~reusable~~ +- **Attributes:** + +## Previous Page + +Displays the previous comment's page link. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/comments-pagination-previous)) + +- **Name:** core/comments-pagination-previous +- **Category:** theme +- **Supports:** color (background, gradients, ~~text~~), typography (fontSize, lineHeight), ~~html~~, ~~reusable~~ +- **Attributes:** label + +## Comments Title + +Displays a title with the number of comments ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/comments-title)) + +- **Name:** core/comments-title +- **Category:** theme +- **Supports:** align, color (background, gradients, text), spacing (margin, padding), typography (fontSize, lineHeight), ~~anchor~~, ~~html~~ +- **Attributes:** level, showCommentsCount, showPostTitle, textAlign + +## Cover + +Add an image or video with a text overlay — great for headers. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/cover)) + +- **Name:** core/cover +- **Category:** media +- **Supports:** align, anchor, color (~~background~~, ~~text~~), spacing (padding), ~~html~~ +- **Attributes:** allowedBlocks, alt, backgroundType, contentPosition, customGradient, customOverlayColor, dimRatio, focalPoint, gradient, hasParallax, id, isDark, isRepeated, minHeight, minHeightUnit, overlayColor, templateLock, url, useFeaturedImage + +## Embed + +Add a block that displays content pulled from other sites, like Twitter or YouTube. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/embed)) + +- **Name:** core/embed +- **Category:** embed +- **Supports:** align +- **Attributes:** allowResponsive, caption, previewable, providerNameSlug, responsive, type, url + +## File + +Add a link to a downloadable file. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/file)) + +- **Name:** core/file +- **Category:** media +- **Supports:** align, anchor +- **Attributes:** displayPreview, downloadButtonText, fileId, fileName, href, id, previewHeight, showDownloadButton, textLinkHref, textLinkTarget + +## Classic + +Use the classic WordPress editor. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/freeform)) + +- **Name:** core/freeform +- **Category:** text +- **Supports:** ~~className~~, ~~customClassName~~, ~~reusable~~ +- **Attributes:** content + +## Gallery + +Display multiple images in a rich gallery. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/gallery)) + +- **Name:** core/gallery +- **Category:** media +- **Supports:** align, anchor, spacing (blockGap), units (em, px, rem, vh, vw), ~~html~~ +- **Attributes:** allowResize, caption, columns, fixedHeight, ids, imageCrop, images, linkTarget, linkTo, shortCodeTransforms, sizeSlug + +## Group + +Gather blocks in a layout container. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/group)) + +- **Name:** core/group +- **Category:** design +- **Supports:** align (full, wide), anchor, color (background, gradients, link, text), spacing (blockGap, margin, padding), typography (fontSize, lineHeight), ~~html~~ +- **Attributes:** tagName, templateLock + +## Heading + +Introduce new sections and organize content to help visitors (and search engines) understand the structure of your content. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/heading)) + +- **Name:** core/heading +- **Category:** text +- **Supports:** __unstablePasteTextInline, align (full, wide), anchor, color (background, link, text), spacing (margin), typography (fontSize, lineHeight), ~~className~~ +- **Attributes:** content, level, placeholder, textAlign + +## Home Link + +Create a link that always points to the homepage of the site. Usually not necessary if there is already a site title link present in the header. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/home-link)) + +- **Name:** core/home-link +- **Category:** design +- **Supports:** ~~html~~, ~~reusable~~ +- **Attributes:** label + +## Custom HTML + +Add custom HTML code and preview it as you edit. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/html)) + +- **Name:** core/html +- **Category:** widgets +- **Supports:** ~~className~~, ~~customClassName~~, ~~html~~ +- **Attributes:** content + +## Image + +Insert an image to make a visual statement. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/image)) + +- **Name:** core/image +- **Category:** media +- **Supports:** anchor, color (~~background~~, ~~text~~) +- **Attributes:** align, alt, caption, height, href, id, linkClass, linkDestination, linkTarget, rel, sizeSlug, title, url, width + +## Latest Comments + +Display a list of your most recent comments. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/latest-comments)) + +- **Name:** core/latest-comments +- **Category:** widgets +- **Supports:** align, ~~html~~ +- **Attributes:** commentsToShow, displayAvatar, displayDate, displayExcerpt + +## Latest Posts + +Display a list of your most recent posts. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/latest-posts)) + +- **Name:** core/latest-posts +- **Category:** widgets +- **Supports:** align, ~~html~~ +- **Attributes:** addLinkToFeaturedImage, categories, columns, displayAuthor, displayFeaturedImage, displayPostContent, displayPostContentRadio, displayPostDate, excerptLength, featuredImageAlign, featuredImageSizeHeight, featuredImageSizeSlug, featuredImageSizeWidth, order, orderBy, postLayout, postsToShow, selectedAuthor + +## List + +Create a bulleted or numbered list. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/list)) + +- **Name:** core/list +- **Category:** text +- **Supports:** __unstablePasteTextInline, anchor, color (background, gradients, link, text), typography (fontSize, lineHeight), ~~className~~ +- **Attributes:** ordered, placeholder, reversed, start, type, values + +## List item + +Create a list item. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/list-item)) + +- **Name:** core/list-item +- **Category:** text +- **Supports:** ~~className~~ +- **Attributes:** content, placeholder + +## Login/out + +Show login & logout links. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/loginout)) + +- **Name:** core/loginout +- **Category:** theme +- **Supports:** className, typography (~~fontSize~~) +- **Attributes:** displayLoginAsForm, redirectToCurrent + +## Media & Text + +Set media and words side-by-side for a richer layout. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/media-text)) + +- **Name:** core/media-text +- **Category:** media +- **Supports:** align (full, wide), anchor, color (background, gradients, link, text), ~~html~~ +- **Attributes:** align, focalPoint, href, imageFill, isStackedOnMobile, linkClass, linkDestination, linkTarget, mediaAlt, mediaId, mediaLink, mediaPosition, mediaSizeSlug, mediaType, mediaUrl, mediaWidth, rel, verticalAlignment + +## Unsupported + +Your site doesn’t include support for this block. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/missing)) + +- **Name:** core/missing +- **Category:** text +- **Supports:** ~~className~~, ~~customClassName~~, ~~html~~, ~~inserter~~, ~~reusable~~ +- **Attributes:** originalContent, originalName, originalUndelimitedContent + +## More + +Content before this block will be shown in the excerpt on your archives page. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/more)) + +- **Name:** core/more +- **Category:** design +- **Supports:** ~~className~~, ~~customClassName~~, ~~html~~, ~~multiple~~ +- **Attributes:** customText, noTeaser + +## Navigation + +A collection of blocks that allow visitors to get around your site. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/navigation)) + +- **Name:** core/navigation +- **Category:** theme +- **Supports:** align (full, wide), anchor, inserter, spacing (blockGap, units), typography (fontSize, lineHeight), ~~html~~ +- **Attributes:** __unstableLocation, backgroundColor, customBackgroundColor, customOverlayBackgroundColor, customOverlayTextColor, customTextColor, hasIcon, maxNestingLevel, openSubmenusOnClick, overlayBackgroundColor, overlayMenu, overlayTextColor, ref, rgbBackgroundColor, rgbTextColor, showSubmenuIcon, textColor + +## Custom Link + +Add a page, link, or another item to your navigation. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/navigation-link)) + +- **Name:** core/navigation-link +- **Category:** design +- **Supports:** ~~html~~, ~~reusable~~ +- **Attributes:** description, id, isTopLevelLink, kind, label, opensInNewTab, rel, title, type, url + +## Submenu + +Add a submenu to your navigation. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/navigation-submenu)) + +- **Name:** core/navigation-submenu +- **Category:** design +- **Supports:** ~~html~~, ~~reusable~~ +- **Attributes:** description, id, isTopLevelItem, kind, label, opensInNewTab, rel, title, type, url + +## Page Break + +Separate your content into a multi-page experience. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/nextpage)) + +- **Name:** core/nextpage +- **Category:** design +- **Supports:** ~~className~~, ~~customClassName~~, ~~html~~ +- **Attributes:** + +## Page List + +Display a list of all pages. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/page-list)) + +- **Name:** core/page-list +- **Category:** widgets +- **Supports:** ~~html~~, ~~reusable~~ +- **Attributes:** __unstableMaxPages + +## Paragraph + +Start with the basic building block of all narrative. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/paragraph)) + +- **Name:** core/paragraph +- **Category:** text +- **Supports:** __unstablePasteTextInline, anchor, color (background, link, text), typography (fontSize, lineHeight), ~~className~~ +- **Attributes:** align, content, direction, dropCap, placeholder + +## Pattern + +Show a block pattern. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/pattern)) + +- **Name:** core/pattern +- **Category:** theme +- **Supports:** ~~html~~, ~~inserter~~ +- **Attributes:** slug + +## Post Author + +Display post author details such as name, avatar, and bio. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/post-author)) + +- **Name:** core/post-author +- **Category:** theme +- **Supports:** color (background, gradients, link, text), spacing (margin, padding), typography (fontSize, lineHeight), ~~html~~ +- **Attributes:** avatarSize, byline, showAvatar, showBio, textAlign + +## Post Author Biography + +The author biography. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/post-author-biography)) + +- **Name:** core/post-author-biography +- **Category:** theme +- **Supports:** color (background, gradients, link, text), spacing (margin, padding), typography (fontSize, lineHeight) +- **Attributes:** textAlign + +## Post Author Name + +The author name. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/post-author-name)) + +- **Name:** core/post-author-name +- **Category:** theme +- **Supports:** color (background, gradients, link, text), spacing (margin, padding), typography (fontSize, lineHeight), ~~html~~ +- **Attributes:** isLink, linkTarget, textAlign + +## Post Comment (deprecated) + +This block is deprecated. Please use the Comments block instead. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/post-comment)) + +- **Name:** core/post-comment +- **Category:** theme +- **Supports:** ~~html~~, ~~inserter~~ +- **Attributes:** commentId + +## Post Comments (deprecated) + +This block is deprecated. Please use the Comments block instead. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/post-comments)) + +- **Name:** core/post-comments +- **Category:** theme +- **Supports:** align (full, wide), color (background, gradients, link, text), typography (fontSize, lineHeight), ~~html~~, ~~inserter~~ +- **Attributes:** textAlign + +## Post Comments Count + +Display a post's comments count. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/post-comments-count)) + +- **Name:** core/post-comments-count +- **Category:** theme +- **Supports:** color (background, gradients, text), typography (fontSize, lineHeight), ~~html~~ +- **Attributes:** textAlign + +## Post Comments Form + +Display a post's comments form. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/post-comments-form)) + +- **Name:** core/post-comments-form +- **Category:** theme +- **Supports:** color (background, gradients, link, text), typography (fontSize, lineHeight), ~~html~~ +- **Attributes:** textAlign + +## Post Comments Link + +Displays the link to the current post comments. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/post-comments-link)) + +- **Name:** core/post-comments-link +- **Category:** theme +- **Supports:** color (background, link, ~~text~~), typography (fontSize, lineHeight), ~~html~~ +- **Attributes:** textAlign + +## Post Content + +Displays the contents of a post or page. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/post-content)) + +- **Name:** core/post-content +- **Category:** theme +- **Supports:** align (full, wide), ~~html~~ +- **Attributes:** + +## Post Date + +Add the date of this post. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/post-date)) + +- **Name:** core/post-date +- **Category:** theme +- **Supports:** color (background, gradients, link, text), typography (fontSize, lineHeight), ~~html~~ +- **Attributes:** format, isLink, textAlign + +## Post Excerpt + +Display a post's excerpt. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/post-excerpt)) + +- **Name:** core/post-excerpt +- **Category:** theme +- **Supports:** color (background, gradients, link, text), spacing (margin, padding), typography (fontSize, lineHeight), ~~html~~ +- **Attributes:** moreText, showMoreOnNewLine, textAlign + +## Post Featured Image + +Display a post's featured image. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/post-featured-image)) + +- **Name:** core/post-featured-image +- **Category:** theme +- **Supports:** align (center, full, left, right, wide), color (~~background~~, ~~text~~), spacing (margin, padding), ~~html~~ +- **Attributes:** height, isLink, scale, sizeSlug, width + +## Post Navigation Link + +Displays the next or previous post link that is adjacent to the current post. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/post-navigation-link)) + +- **Name:** core/post-navigation-link +- **Category:** theme +- **Supports:** typography (fontSize, lineHeight), ~~html~~, ~~reusable~~ +- **Attributes:** label, linkLabel, showTitle, textAlign, type + +## Post Template + +Contains the block elements used to render a post, like the title, date, featured image, content or excerpt, and more. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/post-template)) + +- **Name:** core/post-template +- **Category:** theme +- **Supports:** align, ~~html~~, ~~reusable~~ +- **Attributes:** + +## Post Terms + +Post terms. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/post-terms)) + +- **Name:** core/post-terms +- **Category:** theme +- **Supports:** color (background, gradients, link, text), typography (fontSize, lineHeight), ~~html~~ +- **Attributes:** prefix, separator, suffix, term, textAlign + +## Post Title + +Displays the title of a post, page, or any other content-type. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/post-title)) + +- **Name:** core/post-title +- **Category:** theme +- **Supports:** align (full, wide), color (background, gradients, link, text), spacing (margin), typography (fontSize, lineHeight), ~~html~~ +- **Attributes:** isLink, level, linkTarget, rel, textAlign + +## Preformatted + +Add text that respects your spacing and tabs, and also allows styling. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/preformatted)) + +- **Name:** core/preformatted +- **Category:** text +- **Supports:** anchor, color (background, gradients, text), typography (fontSize, lineHeight) +- **Attributes:** content + +## Pullquote + +Give special visual emphasis to a quote from your text. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/pullquote)) + +- **Name:** core/pullquote +- **Category:** text +- **Supports:** align (full, left, right, wide), anchor, color (background, gradients, link, text), typography (fontSize, lineHeight) +- **Attributes:** citation, textAlign, value + +## Query Loop + +An advanced block that allows displaying post types based on different query parameters and visual configurations. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/query)) + +- **Name:** core/query +- **Category:** theme +- **Supports:** align (full, wide), color (background, gradients, link, text), ~~html~~ +- **Attributes:** displayLayout, query, queryId, tagName + +## No results + +Contains the block elements used to render content when no query results are found. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/query-no-results)) + +- **Name:** core/query-no-results +- **Category:** theme +- **Supports:** align, color (background, gradients, link, text), ~~html~~, ~~reusable~~ +- **Attributes:** + +## Pagination + +Displays a paginated navigation to next/previous set of posts, when applicable. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/query-pagination)) + +- **Name:** core/query-pagination +- **Category:** theme +- **Supports:** align, color (background, gradients, link, text), ~~html~~, ~~reusable~~ +- **Attributes:** paginationArrow + +## Next Page + +Displays the next posts page link. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/query-pagination-next)) + +- **Name:** core/query-pagination-next +- **Category:** theme +- **Supports:** color (background, gradients, ~~text~~), typography (fontSize, lineHeight), ~~html~~, ~~reusable~~ +- **Attributes:** label + +## Page Numbers + +Displays a list of page numbers for pagination ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/query-pagination-numbers)) + +- **Name:** core/query-pagination-numbers +- **Category:** theme +- **Supports:** color (background, gradients, ~~text~~), typography (fontSize, lineHeight), ~~html~~, ~~reusable~~ +- **Attributes:** + +## Previous Page + +Displays the previous posts page link. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/query-pagination-previous)) + +- **Name:** core/query-pagination-previous +- **Category:** theme +- **Supports:** color (background, gradients, ~~text~~), typography (fontSize, lineHeight), ~~html~~, ~~reusable~~ +- **Attributes:** label + +## Query Title + +Display the query title. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/query-title)) + +- **Name:** core/query-title +- **Category:** theme +- **Supports:** align (full, wide), color (background, gradients, text), spacing (margin), typography (fontSize, lineHeight), ~~html~~ +- **Attributes:** level, textAlign, type + +## Quote + +Give quoted text visual emphasis. "In quoting others, we cite ourselves." — Julio Cortázar ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/quote)) + +- **Name:** core/quote +- **Category:** text +- **Supports:** anchor, color (background, gradients, link, text), typography (fontSize, lineHeight) +- **Attributes:** align, citation, value + +## Read More + +Displays the link of a post, page, or any other content-type. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/read-more)) + +- **Name:** core/read-more +- **Category:** theme +- **Supports:** color (background, gradients, text), spacing (margin, padding), typography (fontSize, lineHeight), ~~html~~ +- **Attributes:** content, linkTarget + +## RSS + +Display entries from any RSS or Atom feed. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/rss)) + +- **Name:** core/rss +- **Category:** widgets +- **Supports:** align, ~~html~~ +- **Attributes:** blockLayout, columns, displayAuthor, displayDate, displayExcerpt, excerptLength, feedURL, itemsToShow + +## Search + +Help visitors find your content. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/search)) + +- **Name:** core/search +- **Category:** widgets +- **Supports:** align (center, left, right), color (background, gradients, text), ~~html~~ +- **Attributes:** buttonPosition, buttonText, buttonUseIcon, label, placeholder, query, showLabel, width, widthUnit + +## Separator + +Create a break between ideas or sections with a horizontal separator. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/separator)) + +- **Name:** core/separator +- **Category:** design +- **Supports:** align (center, full, wide), anchor, color (background, gradients, ~~text~~), spacing (margin) +- **Attributes:** opacity + +## Shortcode + +Insert additional custom elements with a WordPress shortcode. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/shortcode)) + +- **Name:** core/shortcode +- **Category:** widgets +- **Supports:** ~~className~~, ~~customClassName~~, ~~html~~ +- **Attributes:** text + +## Site Logo + +Display a graphic to represent this site. Update the block, and the changes apply everywhere it’s used. This is different than the site icon, which is the smaller image visible in your dashboard, browser tabs, etc used to help others recognize this site. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/site-logo)) + +- **Name:** core/site-logo +- **Category:** theme +- **Supports:** align, color (~~background~~, ~~text~~), ~~alignWide~~, ~~html~~ +- **Attributes:** isLink, linkTarget, shouldSyncIcon, width + +## Site Tagline + +Describe in a few words what the site is about. The tagline can be used in search results or when sharing on social networks even if it's not displayed in the theme design. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/site-tagline)) + +- **Name:** core/site-tagline +- **Category:** theme +- **Supports:** align (full, wide), color (background, gradients, text), spacing (margin, padding), typography (fontSize, lineHeight), ~~html~~ +- **Attributes:** textAlign + +## Site Title + +Displays the name of this site. Update the block, and the changes apply everywhere it’s used. This will also appear in the browser title bar and in search results. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/site-title)) + +- **Name:** core/site-title +- **Category:** theme +- **Supports:** align (full, wide), color (background, gradients, link, text), spacing (margin, padding), typography (fontSize, lineHeight), ~~html~~ +- **Attributes:** isLink, level, linkTarget, textAlign + +## Social Icon + +Display an icon linking to a social media profile or site. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/social-link)) + +- **Name:** core/social-link +- **Category:** widgets +- **Supports:** ~~html~~, ~~reusable~~ +- **Attributes:** label, service, url + +## Social Icons + +Display icons linking to your social media profiles or sites. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/social-links)) + +- **Name:** core/social-links +- **Category:** widgets +- **Supports:** align (center, left, right), anchor, spacing (blockGap, margin, units) +- **Attributes:** customIconBackgroundColor, customIconColor, iconBackgroundColor, iconBackgroundColorValue, iconColor, iconColorValue, openInNewTab, showLabels, size + +## Spacer + +Add white space between blocks and customize its height. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/spacer)) + +- **Name:** core/spacer +- **Category:** design +- **Supports:** anchor +- **Attributes:** height, width + +## Table + +Create structured content in rows and columns to display information. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/table)) + +- **Name:** core/table +- **Category:** text +- **Supports:** align, anchor, color (background, gradients, text), typography (fontSize, lineHeight) +- **Attributes:** body, caption, foot, hasFixedLayout, head + +## Table of Contents + +Summarize your post with a list of headings. Add HTML anchors to Heading blocks to link them here. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/table-of-contents)) + +- **Name:** core/table-of-contents +- **Category:** layout +- **Supports:** ~~html~~ +- **Attributes:** headings, onlyIncludeCurrentPage + +## Tag Cloud + +A cloud of your most used tags. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/tag-cloud)) + +- **Name:** core/tag-cloud +- **Category:** widgets +- **Supports:** align, ~~html~~ +- **Attributes:** largestFontSize, numberOfTags, showTagCounts, smallestFontSize, taxonomy + +## Template Part + +Edit the different global regions of your site, like the header, footer, sidebar, or create your own. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/template-part)) + +- **Name:** core/template-part +- **Category:** theme +- **Supports:** align, ~~html~~, ~~reusable~~ +- **Attributes:** area, slug, tagName, theme + +## Term Description + +Display the description of categories, tags and custom taxonomies when viewing an archive. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/term-description)) + +- **Name:** core/term-description +- **Category:** theme +- **Supports:** align (full, wide), color (background, link, text), typography (fontSize, lineHeight), ~~html~~ +- **Attributes:** textAlign + +## Text Columns (deprecated) + +This block is deprecated. Please use the Columns block instead. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/text-columns)) + +- **Name:** core/text-columns +- **Category:** design +- **Supports:** ~~inserter~~ +- **Attributes:** columns, content, width + +## Verse + +Insert poetry. Use special spacing formats. Or quote song lyrics. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/verse)) + +- **Name:** core/verse +- **Category:** text +- **Supports:** anchor, color (background, gradients, link, text), spacing (padding), typography (fontSize, lineHeight) +- **Attributes:** content, textAlign + +## Video + +Embed a video from your media library or upload a new one. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/video)) + +- **Name:** core/video +- **Category:** media +- **Supports:** align, anchor +- **Attributes:** autoplay, caption, controls, id, loop, muted, playsInline, poster, preload, src, tracks + +<!-- END TOKEN Autogenerated - DO NOT EDIT --> diff --git a/docs/reference-guides/data/data-core-block-editor.md b/docs/reference-guides/data/data-core-block-editor.md index 3cc75b5048168..4c16e90441c4a 100644 --- a/docs/reference-guides/data/data-core-block-editor.md +++ b/docs/reference-guides/data/data-core-block-editor.md @@ -19,6 +19,19 @@ _Returns_ - `boolean`: True if the block has controlled inner blocks. +### canEditBlock + +Determines if the given block is allowed to be edited. + +_Parameters_ + +- _state_ `Object`: Editor state. +- _clientId_ `string`: The block client Id. + +_Returns_ + +- `boolean`: Whether the given block is allowed to be edited. + ### canInsertBlocks Determines if the given blocks are allowed to be inserted into the block @@ -48,6 +61,75 @@ _Returns_ - `boolean`: Whether the given block type is allowed to be inserted. +### canLockBlockType + +Determines if the given block type can be locked/unlocked by a user. + +_Parameters_ + +- _state_ `Object`: Editor state. +- _nameOrType_ `(string|Object)`: Block name or type object. + +_Returns_ + +- `boolean`: Whether a given block type can be locked/unlocked. + +### canMoveBlock + +Determines if the given block is allowed to be moved. + +_Parameters_ + +- _state_ `Object`: Editor state. +- _clientId_ `string`: The block client Id. +- _rootClientId_ `?string`: Optional root client ID of block list. + +_Returns_ + +- `boolean`: Whether the given block is allowed to be moved. + +### canMoveBlocks + +Determines if the given blocks are allowed to be moved. + +_Parameters_ + +- _state_ `Object`: Editor state. +- _clientIds_ `string`: The block client IDs to be moved. +- _rootClientId_ `?string`: Optional root client ID of block list. + +_Returns_ + +- `boolean`: Whether the given blocks are allowed to be moved. + +### canRemoveBlock + +Determines if the given block is allowed to be deleted. + +_Parameters_ + +- _state_ `Object`: Editor state. +- _clientId_ `string`: The block client Id. +- _rootClientId_ `?string`: Optional root client ID of block list. + +_Returns_ + +- `boolean`: Whether the given block is allowed to be removed. + +### canRemoveBlocks + +Determines if the given blocks are allowed to be removed. + +_Parameters_ + +- _state_ `Object`: Editor state. +- _clientIds_ `string`: The block client IDs to be removed. +- _rootClientId_ `?string`: Optional root client ID of block list. + +_Returns_ + +- `boolean`: Whether the given blocks are allowed to be removed. + ### didAutomaticChange Returns true if the last change was an automatic change, false otherwise. @@ -152,7 +234,6 @@ _Parameters_ - _state_ `Object`: Editor state. - _clientId_ `string`: Block client ID. -- _rootClientId_ `?string`: Optional root client ID of block list. _Returns_ @@ -281,12 +362,6 @@ Returns all block objects for the current post being edited as an array in the order they appear in the post. Note that this will exclude child blocks of nested inner block controllers. -Note: It's important to memoize this selector to avoid return a new instance -on each call. We use the block cache state for each top-level block of the -given clientID. This way, the selector only refreshes on changes to blocks -associated with the given entity, and does not refresh when changes are made -to blocks which are part of different inner block controllers. - _Parameters_ - _state_ `Object`: Editor state. @@ -353,6 +428,7 @@ Items are returned ordered descendingly by their 'frecency'. _Parameters_ - _state_ `Object`: Editor state. +- _blocks_ `Object|Object[]`: Block object or array objects. - _rootClientId_ `?string`: Optional root client ID of block list. _Returns_ @@ -374,8 +450,9 @@ _Properties_ ### getClientIdsOfDescendants -Returns an array containing the clientIds of all descendants -of the blocks given. +Returns an array containing the clientIds of all descendants of the blocks +given. Returned ids are ordered first by the order of the ids given, then +by the order that they appear in the editor. _Parameters_ @@ -388,8 +465,9 @@ _Returns_ ### getClientIdsWithDescendants -Returns an array containing the clientIds of the top-level blocks -and their descendants of any depth (for nested blocks). +Returns an array containing the clientIds of the top-level blocks and +their descendants of any depth (for nested blocks). Ids are returned +in the same order that they appear in the editor. _Parameters_ @@ -898,6 +976,19 @@ _Returns_ - `boolean`: Is Valid. +### isBlockVisible + +Tells if the block is visible on the canvas or not. + +_Parameters_ + +- _state_ `Object`: Global application state. +- _clientId_ `Object`: Client Id of the block. + +_Returns_ + +- `boolean`: True if the block is visible. + ### isBlockWithinSelection Returns true if the block corresponding to the specified client ID is @@ -916,11 +1007,9 @@ _Returns_ ### isCaretWithinFormattedText -Returns true if the caret is within formatted text, or false otherwise. - -_Parameters_ +> **Deprecated** -- _state_ `Object`: Global application state. +Returns true if the caret is within formatted text, or false otherwise. _Returns_ @@ -1055,7 +1144,7 @@ _Returns_ ### clearSelectedBlock -Returns an action object used in signalling that the block selection is cleared. +Action that clears the block selection. _Returns_ @@ -1063,7 +1152,7 @@ _Returns_ ### duplicateBlocks -Generator that triggers an action used to duplicate a list of blocks. +Action that duplicates a list of blocks. _Parameters_ @@ -1072,6 +1161,8 @@ _Parameters_ ### enterFormattedText +> **Deprecated** + Returns an action object used in signalling that the caret has entered formatted text. _Returns_ @@ -1080,6 +1171,8 @@ _Returns_ ### exitFormattedText +> **Deprecated** + Returns an action object used in signalling that the user caret has exited formatted text. _Returns_ @@ -1088,8 +1181,7 @@ _Returns_ ### flashBlock -Yields action objects used in signalling that the block corresponding to the -given clientId should appear to "flash" by rhythmically highlighting it. +Action that "flashes" the block with a given `clientId` by rhythmically highlighting it. _Parameters_ @@ -1097,7 +1189,7 @@ _Parameters_ ### hideInsertionPoint -Returns an action object hiding the insertion point. +Action that hides the insertion point. _Returns_ @@ -1105,7 +1197,7 @@ _Returns_ ### insertAfterBlock -Generator used to insert an empty block before a given block. +Action that inserts an empty block after a given block. _Parameters_ @@ -1113,7 +1205,7 @@ _Parameters_ ### insertBeforeBlock -Generator used to insert an empty block after a given block. +Action that inserts an empty block before a given block. _Parameters_ @@ -1121,8 +1213,7 @@ _Parameters_ ### insertBlock -Returns an action object used in signalling that a single block should be -inserted, optionally at a specific index respective a root block list. +Action that inserts a single block, optionally at a specific index respective a root block list. _Parameters_ @@ -1138,8 +1229,7 @@ _Returns_ ### insertBlocks -Returns an action object used in signalling that an array of blocks should -be inserted, optionally at a specific index respective a root block list. +Action that inserts an array of blocks, optionally at a specific index respective a root block list. _Parameters_ @@ -1156,22 +1246,17 @@ _Returns_ ### insertDefaultBlock -Returns an action object used in signalling that a new block of the default -type should be added to the block list. +Action that adds a new block of the default type to the block list. _Parameters_ - _attributes_ `?Object`: Optional attributes of the block to assign. - _rootClientId_ `?string`: Optional root client ID of block list on which to append. -- _index_ `?number`: Optional index where to insert the default block - -_Returns_ - -- `Object`: Action object +- _index_ `?number`: Optional index where to insert the default block. ### mergeBlocks -Returns an action object used in signalling that two blocks should be merged +Action that merges two blocks. _Parameters_ @@ -1184,8 +1269,7 @@ Undocumented declaration. ### moveBlocksToPosition -Returns an action object signalling that the given blocks should be moved to -a new position. +Action that moves given blocks to a new position. _Parameters_ @@ -1200,8 +1284,7 @@ Undocumented declaration. ### moveBlockToPosition -Returns an action object signalling that the given block should be moved to a -new position. +Action that moves given block to a new position. _Parameters_ @@ -1212,15 +1295,18 @@ _Parameters_ ### multiSelect -Returns an action object used in signalling that block multi-selection changed. +Action that changes block multi-selection. _Parameters_ - _start_ `string`: First block of the multi selection. - _end_ `string`: Last block of the multiselection. +- _\_\_experimentalInitialPosition_ `number|null`: Optional initial position. Pass as null to skip focus within editor canvas. ### receiveBlocks +> **Deprecated** + Returns an action object used in signalling that blocks have been received. Unlike resetBlocks, these should be appended to the existing known set, not replacing. @@ -1259,8 +1345,7 @@ _Parameters_ ### replaceBlock -Returns an action object signalling that a single block should be replaced -with one or more replacement blocks. +Action that replaces a single block with one or more replacement blocks. _Parameters_ @@ -1273,8 +1358,7 @@ _Returns_ ### replaceBlocks -Returns an action object signalling that a blocks should be replaced with -one or more replacement blocks. +Action that replaces given blocks with one or more replacement blocks. _Parameters_ @@ -1284,6 +1368,10 @@ _Parameters_ - _initialPosition_ `0|-1|null`: Index of caret after in the selected block after the operation. - _meta_ `?Object`: Optional Meta values to be passed to the action object. +_Returns_ + +- `Object`: Action object. + ### replaceInnerBlocks Returns an action object used in signalling that the inner blocks with the @@ -1302,9 +1390,8 @@ _Returns_ ### resetBlocks -Returns an action object used in signalling that blocks state should be -reset to the specified array of blocks, taking precedence over any other -content reflected as an edit in state. +Action that resets blocks state to the specified array of blocks, taking precedence +over any other content reflected as an edit in state. _Parameters_ @@ -1343,12 +1430,11 @@ _Returns_ ### selectionChange -Returns an action object used in signalling that the user caret has changed -position. +Action that changes the position of the user caret. _Parameters_ -- _clientId_ `string`: The selected block client ID. +- _clientId_ `string|WPSelection`: The selected block client ID. - _attributeKey_ `string`: The selected block attribute key. - _startOffset_ `number`: The start offset. - _endOffset_ `number`: The end offset. @@ -1377,15 +1463,23 @@ _Parameters_ ### setBlockMovingClientId -Generator that triggers an action used to enable or disable the block moving mode. +Action that enables or disables the block moving mode. _Parameters_ - _hasBlockMovingClientId_ `string|null`: Enable/Disable block moving mode. +### setBlockVisibility + +Action that sets whether given blocks are visible on the canvas. + +_Parameters_ + +- _updates_ `Record<string,boolean>`: For each block's clientId, its new visibility setting. + ### setHasControlledInnerBlocks -Returns an action object that sets whether the block has controlled innerblocks. +Action that sets whether a block has controlled inner blocks. _Parameters_ @@ -1394,7 +1488,7 @@ _Parameters_ ### setNavigationMode -Generators that triggers an action used to enable or disable the navigation mode. +Action that enables or disables the navigation mode. _Parameters_ @@ -1402,7 +1496,7 @@ _Parameters_ ### setTemplateValidity -Returns an action object resetting the template validity. +Action that resets the template validity. _Parameters_ @@ -1414,14 +1508,13 @@ _Returns_ ### showInsertionPoint -Returns an action object used in signalling that the insertion point should -be shown. +Action that shows the insertion point. _Parameters_ - _rootClientId_ `?string`: Optional root client ID of block list on which to insert. - _index_ `?number`: Index at which block should be inserted. -- _\_\_unstableOptions_ `Object`: Wether or not to show an inserter button. +- _\_\_unstableOptions_ `Object`: Whether or not to show an inserter button. _Returns_ @@ -1441,7 +1534,7 @@ _Returns_ ### startMultiSelect -Returns an action object used in signalling that a block multi-selection has started. +Action that starts block multi-selection. _Returns_ @@ -1465,7 +1558,7 @@ _Returns_ ### stopMultiSelect -Returns an action object used in signalling that block multi-selection stopped. +Action that stops block multi-selection. _Returns_ @@ -1481,7 +1574,7 @@ _Returns_ ### synchronizeTemplate -Returns an action object synchronize the template with the list of blocks +Action that synchronizes the template with the list of blocks. _Returns_ @@ -1489,7 +1582,7 @@ _Returns_ ### toggleBlockHighlight -Returns an action object that toggles the highlighted block state. +Action that toggles the highlighted block state. _Parameters_ @@ -1511,7 +1604,7 @@ _Returns_ ### toggleSelection -Returns an action object that enables or disables block selection. +Action that enables or disables block selection. _Parameters_ @@ -1523,8 +1616,7 @@ _Returns_ ### updateBlock -Returns an action object used in signalling that the block with the -specified client ID has been updated. +Action that updates the block with the specified client ID. _Parameters_ @@ -1537,8 +1629,7 @@ _Returns_ ### updateBlockAttributes -Returns an action object used in signalling that the multiple blocks' -attributes with the specified client IDs have been updated. +Action that updates attributes of multiple blocks with the specified client IDs. _Parameters_ @@ -1552,7 +1643,7 @@ _Returns_ ### updateBlockListSettings -Returns an action object that changes the nested settings of a given block. +Action that changes the nested settings of a given block. _Parameters_ @@ -1565,7 +1656,7 @@ _Returns_ ### updateSettings -Returns an action object used in signalling that the block editor settings have been updated. +Action that updates the block editor settings. _Parameters_ diff --git a/docs/reference-guides/data/data-core-edit-post.md b/docs/reference-guides/data/data-core-edit-post.md index 040bd80cc49d1..26337e973bd34 100644 --- a/docs/reference-guides/data/data-core-edit-post.md +++ b/docs/reference-guides/data/data-core-edit-post.md @@ -6,6 +6,18 @@ Namespace: `core/edit-post`. <!-- START TOKEN(Autogenerated selectors|../../../packages/edit-post/src/store/selectors.js) --> +### areMetaBoxesInitialized + +Returns true if meta boxes are initialized. + +_Parameters_ + +- _state_ `Object`: Global application state. + +_Returns_ + +- `boolean`: Whether meta boxes are initialized. + ### getActiveGeneralSidebarName Returns the current active general sidebar name, or null if there is no @@ -69,6 +81,14 @@ _Returns_ - `string`: Editing mode. +### getHiddenBlockTypes + +Returns an array of blocks that are hidden. + +_Returns_ + +- `Array`: A list of the hidden block types + ### getMetaBoxesPerLocation Returns the list of all the available meta boxes for a given location. @@ -340,16 +360,15 @@ _Returns_ ### hideBlockTypes -Returns an action object used in signalling that block types by the given -name(s) should be hidden. +Update the provided block types to be hidden. _Parameters_ - _blockNames_ `string[]`: Names of block types to hide. -_Returns_ +### initializeMetaBoxes -- `Object`: Action object. +Initializes WordPress `postboxes` script and the logic for saving meta boxes. ### metaBoxUpdatesFailure @@ -410,7 +429,7 @@ _Returns_ ### requestMetaBoxUpdates -Returns an action object used to request meta box update. +Update a metabox. ### setAvailableMetaBoxesPerLocation @@ -461,20 +480,19 @@ _Returns_ ### showBlockTypes -Returns an action object used in signalling that block types by the given -name(s) should be shown. +Update the provided block types to be visible. _Parameters_ - _blockNames_ `string[]`: Names of block types to show. -_Returns_ +### switchEditorMode -- `Object`: Action object. +Triggers an action used to switch editor mode. -### switchEditorMode +_Parameters_ -Undocumented declaration. +- _mode_ `string`: The editor mode. ### toggleEditorPanelEnabled @@ -490,40 +508,28 @@ _Returns_ ### toggleEditorPanelOpened -Returns an action object used to open or close a panel in the editor. +Opens a closed panel and closes an open panel. _Parameters_ - _panelName_ `string`: A string that identifies the panel to open or close. -_Returns_ - -- `Object`: Action object. - ### toggleFeature -Returns an action object used to toggle a feature flag. +Triggers an action used to toggle a feature flag. _Parameters_ - _feature_ `string`: Feature name. -_Returns_ - -- `Object`: Action object. - ### togglePinnedPluginItem -Returns an action object used to toggle a plugin name flag. +Triggers an action object used to toggle a plugin name flag. _Parameters_ - _pluginName_ `string`: Plugin name. -_Returns_ - -- `Object`: Action object. - ### togglePublishSidebar Returns an action object used in signalling that the user toggles the publish sidebar. @@ -541,8 +547,4 @@ _Parameters_ - _blockName_ `string`: Name of the block. - _blockStyle_ `?string`: Name of the style that should be auto applied. If undefined, the "auto apply" setting of the block is removed. -_Returns_ - -- `Object`: Action object. - <!-- END TOKEN(Autogenerated actions|../../../packages/edit-post/src/store/actions.js) --> diff --git a/docs/reference-guides/data/data-core-editor.md b/docs/reference-guides/data/data-core-editor.md index 504abe51294cd..b1d767284611f 100644 --- a/docs/reference-guides/data/data-core-editor.md +++ b/docs/reference-guides/data/data-core-editor.md @@ -68,22 +68,6 @@ _Related_ - getAdjacentBlockClientId in core/block-editor store. -### getAutosave - -> **Deprecated** since 5.6. Callers should use the `getAutosave( postType, postId, userId )` selector from the '@wordpress/core-data' package. - -Returns the current autosave, or null if one is not set (i.e. if the post -has yet to be autosaved, or has been saved or published since the last -autosave). - -_Parameters_ - -- _state_ `Object`: Editor state. - -_Returns_ - -- `?Object`: Current autosave, if exists. - ### getAutosaveAttribute > **Deprecated** since 5.6. Callers should use the `getAutosave( postType, postId, userId )` selector from the '@wordpress/core-data' package and access properties on the returned autosave object using getPostRawValue. @@ -190,21 +174,6 @@ _Related_ - getBlockSelectionStart in core/block-editor store. -### getBlocksForSerialization - -> **Deprecated** since Gutenberg 6.2.0. - -Returns a set of blocks which are to be used in consideration of the post's -generated save content. - -_Parameters_ - -- _state_ `Object`: Editor state. - -_Returns_ - -- `WPBlock[]`: Filtered set of blocks for save. - ### getClientIdsOfDescendants _Related_ @@ -547,29 +516,6 @@ _Related_ - getPreviousBlockClientId in core/block-editor store. -### getReferenceByDistinctEdits - -> **Deprecated** since Gutenberg 6.5.0. - -Returns a new reference when edited values have changed. This is useful in -inferring where an edit has been made between states by comparison of the -return values using strict equality. - -_Usage_ - - const hasEditOccurred = ( - getReferenceByDistinctEdits( beforeState ) !== - getReferenceByDistinctEdits( afterState ) - ); - -_Parameters_ - -- _state_ `Object`: Editor state. - -_Returns_ - -- `*`: A value whose reference will change only when an edit occurs. - ### getSelectedBlock _Related_ @@ -627,20 +573,6 @@ _Related_ - getTemplateLock in core/block-editor store. -### hasAutosave - -> **Deprecated** since 5.6. Callers should use the `getAutosave( postType, postId, userId )` selector from the '@wordpress/core-data' package and check for a truthy value. - -Returns the true if there is an existing autosave, otherwise false. - -_Parameters_ - -- _state_ `Object`: Global application state. - -_Returns_ - -- `boolean`: Whether there is an existing autosave. - ### hasChangedContent Returns true if content includes unsaved changes, or false otherwise. @@ -1036,10 +968,6 @@ _Returns_ Returns whether the pre-publish panel should be shown or skipped when the user clicks the "publish" button. -_Parameters_ - -- _state_ `Object`: Global application state. - _Returns_ - `boolean`: Whether the pre-publish panel should be shown or not. @@ -1094,7 +1022,7 @@ _Related_ ### autosave -Action generator used in signalling that the post should autosave. This +Action that autosaves the current post. This includes server-side autosaving (default) and client-side (a.k.a. local) autosaving (e.g. on the Web, the post might be committed to Session Storage). @@ -1111,21 +1039,13 @@ _Related_ ### createUndoLevel -Returns an action object used in signalling that undo history record should -be created. - -_Returns_ +> **Deprecated** Since WordPress 6.0 -- `Object`: Action object. +Action that creates an undo history record. ### disablePublishSidebar -Returns an action object used in signalling that the user has disabled the -publish sidebar. - -_Returns_ - -- `Object`: Action object +Disables the publish sidebar. ### editPost @@ -1139,12 +1059,7 @@ _Parameters_ ### enablePublishSidebar -Returns an action object used in signalling that the user has enabled the -publish sidebar. - -_Returns_ - -- `Object`: Action object +Enable the publish sidebar. ### enterFormattedText @@ -1184,7 +1099,7 @@ _Related_ ### lockPostAutosaving -Returns an action object used to signal that post autosaving is locked. +Action that locks post autosaving. _Usage_ @@ -1201,7 +1116,7 @@ _Returns_ ### lockPostSaving -Returns an action object used to signal that post saving is locked. +Action that locks post saving. _Usage_ @@ -1284,12 +1199,13 @@ _Related_ ### redo -Returns an action object used in signalling that undo history should -restore last popped state. +Action that restores last popped state in undo history. ### refreshPost -Action generator for handling refreshing the current post. +> **Deprecated** Since WordPress 6.0. + +Action for refreshing the current post. ### removeBlock @@ -1315,21 +1231,6 @@ _Related_ - replaceBlocks in core/block-editor store. -### resetAutosave - -> **Deprecated** since 5.6. Callers should use the `receiveAutosaves( postId, autosave )` selector from the '@wordpress/core-data' package. - -Returns an action object used in signalling that the latest autosave of the -post has been received, by initialization or autosave. - -_Parameters_ - -- _newAutosave_ `Object`: Autosave post object. - -_Returns_ - -- `Object`: Action object. - ### resetBlocks _Related_ @@ -1347,20 +1248,14 @@ _Parameters_ ### resetPost +> **Deprecated** Since WordPress 6.0. + Returns an action object used in signalling that the latest version of the post has been received, either by initialization or save. -_Parameters_ - -- _post_ `Object`: Post object. - -_Returns_ - -- `Object`: Action object. - ### savePost -Action generator for saving the current post in the editor. +Action for saving the current post in the editor. _Parameters_ @@ -1452,15 +1347,15 @@ _Related_ ### trashPost -Action generator for trashing the current post in the editor. +Action for trashing the current post in the editor. ### undo -Returns an action object used in signalling that undo history should pop. +Action that pops a record from undo history and undoes the edit. ### unlockPostAutosaving -Returns an action object used to signal that post autosaving is unlocked. +Action that unlocks post autosaving. _Usage_ @@ -1477,7 +1372,7 @@ _Returns_ ### unlockPostSaving -Returns an action object used to signal that post saving is unlocked. +Action that unlocks post saving. _Usage_ @@ -1527,7 +1422,7 @@ _Returns_ ### updatePostLock -Returns an action object used to lock the editor. +Action that locks the editor. _Parameters_ diff --git a/docs/reference-guides/data/data-core.md b/docs/reference-guides/data/data-core.md index 7ad08fa7f9ff2..455808c6fda65 100644 --- a/docs/reference-guides/data/data-core.md +++ b/docs/reference-guides/data/data-core.md @@ -4,7 +4,7 @@ Namespace: `core`. ## Selectors -<!-- START TOKEN(Autogenerated selectors|../../../packages/core-data/src/selectors.js) --> +<!-- START TOKEN(Autogenerated selectors|../../../packages/core-data/src/selectors.ts) --> ### canUser @@ -18,14 +18,14 @@ Calling this may trigger an OPTIONS request to the REST API via the _Parameters_ -- _state_ `Object`: Data state. +- _state_ `State`: Data state. - _action_ `string`: Action to check. One of: 'create', 'read', 'update', 'delete'. - _resource_ `string`: REST resource to check, e.g. 'media' or 'posts'. -- _id_ `string=`: Optional ID of the rest resource to check. +- _id_ `RecordKey`: Optional ID of the rest resource to check. _Returns_ -- `boolean|undefined`: Whether or not the user can perform the action, or `undefined` if the OPTIONS request is still being made. +- `boolean | undefined`: Whether or not the user can perform the action, or `undefined` if the OPTIONS request is still being made. ### canUserEditEntityRecord @@ -38,14 +38,14 @@ Calling this may trigger an OPTIONS request to the REST API via the _Parameters_ -- _state_ `Object`: Data state. +- _state_ `State`: Data state. - _kind_ `string`: Entity kind. - _name_ `string`: Entity name. -- _recordId_ `string`: Record's id. +- _recordId_ `RecordKey`: Record's id. _Returns_ -- `boolean|undefined`: Whether or not the user can edit, or `undefined` if the OPTIONS request is still being made. +- `boolean | undefined`: Whether or not the user can edit, or `undefined` if the OPTIONS request is still being made. ### getAuthors @@ -55,12 +55,12 @@ Returns all available authors. _Parameters_ -- _state_ `Object`: Data state. -- _query_ `Object|undefined`: Optional object of query parameters to include with request. +- _state_ `State`: Data state. +- _query_ `EntityQuery< any >`: Optional object of query parameters to include with request. _Returns_ -- `Array`: Authors list. +- `User< 'edit' >[]`: Authors list. ### getAutosave @@ -68,14 +68,14 @@ Returns the autosave for the post and author. _Parameters_ -- _state_ `Object`: State tree. +- _state_ `State`: State tree. - _postType_ `string`: The type of the parent post. -- _postId_ `number`: The id of the parent post. -- _authorId_ `number`: The id of the author. +- _postId_ `RecordKey`: The id of the parent post. +- _authorId_ `RecordKey`: The id of the author. _Returns_ -- `?Object`: The autosave for the post and author. +- `EntityRecord | undefined`: The autosave for the post and author. ### getAutosaves @@ -86,13 +86,37 @@ author for each post. _Parameters_ -- _state_ `Object`: State tree. +- _state_ `State`: State tree. - _postType_ `string`: The type of the parent post. -- _postId_ `number`: The id of the parent post. +- _postId_ `RecordKey`: The id of the parent post. _Returns_ -- `?Array`: An array of autosaves for the post, or undefined if there is none. +- `Array< any > | undefined`: An array of autosaves for the post, or undefined if there is none. + +### getBlockPatternCategories + +Retrieve the list of registered block pattern categories. + +_Parameters_ + +- _state_ `State`: Data state. + +_Returns_ + +- `Array< any >`: Block pattern category list. + +### getBlockPatterns + +Retrieve the list of registered block patterns. + +_Parameters_ + +- _state_ `State`: Data state. + +_Returns_ + +- `Array< any >`: Block pattern list. ### getCurrentTheme @@ -100,11 +124,11 @@ Return the current theme. _Parameters_ -- _state_ `Object`: Data state. +- _state_ `State`: Data state. _Returns_ -- `Object`: The current theme. +- `any`: The current theme. ### getCurrentUser @@ -112,11 +136,11 @@ Returns the current user. _Parameters_ -- _state_ `Object`: Data state. +- _state_ `State`: Data state. _Returns_ -- `Object`: Current user object. +- `User< 'edit' >`: Current user object. ### getEditedEntityRecord @@ -124,14 +148,14 @@ Returns the specified entity record, merged with its edits. _Parameters_ -- _state_ `Object`: State tree. +- _state_ `State`: State tree. - _kind_ `string`: Entity kind. - _name_ `string`: Entity name. -- _recordId_ `number`: Record ID. +- _recordId_ `RecordKey`: Record ID. _Returns_ -- `Object?`: The entity record, merged with its edits. +- `EntityRecord | undefined`: The entity record, merged with its edits. ### getEmbedPreview @@ -139,39 +163,70 @@ Returns the embed preview for the given URL. _Parameters_ -- _state_ `Object`: Data state. +- _state_ `State`: Data state. - _url_ `string`: Embedded URL. _Returns_ -- `*`: Undefined if the preview has not been fetched, otherwise, the preview fetched from the embed preview API. +- `any`: Undefined if the preview has not been fetched, otherwise, the preview fetched from the embed preview API. ### getEntitiesByKind -Returns whether the entities for the give kind are loaded. +> **Deprecated** since WordPress 6.0. Use getEntitiesConfig instead + +Returns the loaded entities for the given kind. + +_Parameters_ + +- _state_ `State`: Data state. +- _kind_ `string`: Entity kind. + +_Returns_ + +- `Array< any >`: Array of entities with config matching kind. + +### getEntitiesConfig + +Returns the loaded entities for the given kind. _Parameters_ -- _state_ `Object`: Data state. +- _state_ `State`: Data state. - _kind_ `string`: Entity kind. _Returns_ -- `Array<Object>`: Array of entities with config matching kind. +- `Array< any >`: Array of entities with config matching kind. ### getEntity -Returns the entity object given its kind and name. +> **Deprecated** since WordPress 6.0. Use getEntityConfig instead + +Returns the entity config given its kind and name. + +_Parameters_ + +- _state_ `State`: Data state. +- _kind_ `string`: Entity kind. +- _name_ `string`: Entity name. + +_Returns_ + +- `any`: Entity config + +### getEntityConfig + +Returns the entity config given its kind and name. _Parameters_ -- _state_ `Object`: Data state. +- _state_ `State`: Data state. - _kind_ `string`: Entity kind. - _name_ `string`: Entity name. _Returns_ -- `Object`: Entity +- `any`: Entity config ### getEntityRecord @@ -181,15 +236,15 @@ entity object if it exists and is received. _Parameters_ -- _state_ `Object`: State tree +- _state_ `State`: State tree - _kind_ `string`: Entity kind. - _name_ `string`: Entity name. -- _key_ `number`: Record's key -- _query_ `?Object`: Optional query. +- _key_ `RecordKey`: Record's key +- _query_ `EntityQuery< any >`: Optional query. _Returns_ -- `Object?`: Record. +- `EntityRecord | undefined`: Record. ### getEntityRecordEdits @@ -197,14 +252,14 @@ Returns the specified entity record's edits. _Parameters_ -- _state_ `Object`: State tree. +- _state_ `State`: State tree. - _kind_ `string`: Entity kind. - _name_ `string`: Entity name. -- _recordId_ `number`: Record ID. +- _recordId_ `RecordKey`: Record ID. _Returns_ -- `Object?`: The entity record's edits. +- `Optional< any >`: The entity record's edits. ### getEntityRecordNonTransientEdits @@ -216,14 +271,14 @@ They are defined in the entity's config. _Parameters_ -- _state_ `Object`: State tree. +- _state_ `State`: State tree. - _kind_ `string`: Entity kind. - _name_ `string`: Entity name. -- _recordId_ `number`: Record ID. +- _recordId_ `RecordKey`: Record ID. _Returns_ -- `Object?`: The entity record's non transient edits. +- `Optional< any >`: The entity record's non transient edits. ### getEntityRecords @@ -231,14 +286,14 @@ Returns the Entity's records. _Parameters_ -- _state_ `Object`: State tree +- _state_ `State`: State tree - _kind_ `string`: Entity kind. - _name_ `string`: Entity name. -- _query_ `?Object`: Optional terms query. +- _query_ `EntityQuery< any >`: Optional terms query. _Returns_ -- `?Array`: Records. +- `Array< EntityRecord > | undefined`: Records. ### getLastEntityDeleteError @@ -246,14 +301,14 @@ Returns the specified entity record's last delete error. _Parameters_ -- _state_ `Object`: State tree. +- _state_ `State`: State tree. - _kind_ `string`: Entity kind. - _name_ `string`: Entity name. -- _recordId_ `number`: Record ID. +- _recordId_ `RecordKey`: Record ID. _Returns_ -- `Object?`: The entity record's save error. +- `any`: The entity record's save error. ### getLastEntitySaveError @@ -261,14 +316,14 @@ Returns the specified entity record's last save error. _Parameters_ -- _state_ `Object`: State tree. +- _state_ `State`: State tree. - _kind_ `string`: Entity kind. - _name_ `string`: Entity name. -- _recordId_ `number`: Record ID. +- _recordId_ `RecordKey`: Record ID. _Returns_ -- `Object?`: The entity record's save error. +- `any`: The entity record's save error. ### getRawEntityRecord @@ -277,14 +332,14 @@ with its attributes mapped to their raw values. _Parameters_ -- _state_ `Object`: State tree. +- _state_ `State`: State tree. - _kind_ `string`: Entity kind. - _name_ `string`: Entity name. -- _key_ `number`: Record's key. +- _key_ `RecordKey`: Record's key. _Returns_ -- `Object?`: Object with the entity's raw attributes. +- `EntityRecord | undefined`: Object with the entity's raw attributes. ### getRedoEdit @@ -293,11 +348,11 @@ for the entity records edits history, if any. _Parameters_ -- _state_ `Object`: State tree. +- _state_ `State`: State tree. _Returns_ -- `Object?`: The edit. +- `Optional< any >`: The edit. ### getReferenceByDistinctEdits @@ -314,11 +369,11 @@ _Usage_ _Parameters_ -- _state_ `Object`: Editor state. +- _state_ `State`: Editor state. _Returns_ -- `*`: A value whose reference will change only when an edit occurs. +- A value whose reference will change only when an edit occurs. ### getThemeSupports @@ -326,11 +381,11 @@ Return theme supports data in the index. _Parameters_ -- _state_ `Object`: Data state. +- _state_ `State`: Data state. _Returns_ -- `*`: Index data. +- `any`: Index data. ### getUndoEdit @@ -339,11 +394,11 @@ for the entity records edits history, if any. _Parameters_ -- _state_ `Object`: State tree. +- _state_ `State`: State tree. _Returns_ -- `Object?`: The edit. +- `Optional< any >`: The edit. ### getUserQueryResults @@ -351,12 +406,12 @@ Returns all the users returned by a query ID. _Parameters_ -- _state_ `Object`: Data state. +- _state_ `State`: Data state. - _queryID_ `string`: Query ID. _Returns_ -- `Array`: Users list. +- `User< 'edit' >[]`: Users list. ### hasEditsForEntityRecord @@ -365,10 +420,10 @@ and false otherwise. _Parameters_ -- _state_ `Object`: State tree. +- _state_ `State`: State tree. - _kind_ `string`: Entity kind. - _name_ `string`: Entity name. -- _recordId_ `number`: Record ID. +- _recordId_ `RecordKey`: Record ID. _Returns_ @@ -381,10 +436,10 @@ or false otherwise. _Parameters_ -- _state_ `Object`: State tree +- _state_ `State`: State tree - _kind_ `string`: Entity kind. - _name_ `string`: Entity name. -- _query_ `?Object`: Optional terms query. +- _query_ `EntityQuery< any >`: Optional terms query. _Returns_ @@ -396,9 +451,9 @@ Returns true if the REST request for autosaves has completed. _Parameters_ -- _state_ `Object`: State tree. +- _state_ `State`: State tree. - _postType_ `string`: The type of the parent post. -- _postId_ `number`: The id of the parent post. +- _postId_ `RecordKey`: The id of the parent post. _Returns_ @@ -411,7 +466,7 @@ for the entity records edits history, and false otherwise. _Parameters_ -- _state_ `Object`: State tree. +- _state_ `State`: State tree. _Returns_ @@ -424,7 +479,7 @@ for the entity records edits history, and false otherwise. _Parameters_ -- _state_ `Object`: State tree. +- _state_ `State`: State tree. _Returns_ @@ -436,10 +491,10 @@ Returns true if the specified entity record is autosaving, and false otherwise. _Parameters_ -- _state_ `Object`: State tree. +- _state_ `State`: State tree. - _kind_ `string`: Entity kind. - _name_ `string`: Entity name. -- _recordId_ `number`: Record ID. +- _recordId_ `RecordKey`: Record ID. _Returns_ @@ -451,10 +506,10 @@ Returns true if the specified entity record is deleting, and false otherwise. _Parameters_ -- _state_ `Object`: State tree. +- _state_ `State`: State tree. - _kind_ `string`: Entity kind. - _name_ `string`: Entity name. -- _recordId_ `number`: Record ID. +- _recordId_ `RecordKey`: Record ID. _Returns_ @@ -470,7 +525,7 @@ get back from the oEmbed preview API. _Parameters_ -- _state_ `Object`: Data state. +- _state_ `State`: Data state. - _url_ `string`: Embedded URL. _Returns_ @@ -484,7 +539,7 @@ otherwise. _Parameters_ -- _state_ `Object`: Data state. +- _state_ `State`: Data state. - _url_ `string`: URL the preview would be for. _Returns_ @@ -497,16 +552,16 @@ Returns true if the specified entity record is saving, and false otherwise. _Parameters_ -- _state_ `Object`: State tree. +- _state_ `State`: State tree. - _kind_ `string`: Entity kind. - _name_ `string`: Entity name. -- _recordId_ `number`: Record ID. +- _recordId_ `RecordKey`: Record ID. _Returns_ - `boolean`: Whether the entity record is saving or not. -<!-- END TOKEN(Autogenerated selectors|../../../packages/core-data/src/selectors.js) --> +<!-- END TOKEN(Autogenerated selectors|../../../packages/core-data/src/selectors.ts) --> ## Actions @@ -535,7 +590,8 @@ _Parameters_ - _recordId_ `string`: Record ID of the deleted entity. - _query_ `?Object`: Special query parameters for the DELETE API call. - _options_ `[Object]`: Delete options. -- _options.\_\_unstableFetch_ `[Function]`: Internal use only. Function to call instead of `apiFetch()`. Must return a control descriptor. +- _options.\_\_unstableFetch_ `[Function]`: Internal use only. Function to call instead of `apiFetch()`. Must return a promise. +- _options.throwOnError_ `[boolean]`: If false, this action suppresses all the exceptions. Defaults to false. ### editEntityRecord @@ -549,7 +605,7 @@ _Parameters_ - _recordId_ `number`: Record ID of the edited entity record. - _edits_ `Object`: The edits. - _options_ `Object`: Options for the edit. -- _options.undoIgnore_ `boolean`: Whether to ignore the edit in undo history or not. +- _options.undoIgnore_ `[boolean]`: Whether to ignore the edit in undo history or not. _Returns_ @@ -613,8 +669,8 @@ Returns an action object used in signalling that entity records have been receiv _Parameters_ -- _kind_ `string`: Kind of the received entity. -- _name_ `string`: Name of the received entity. +- _kind_ `string`: Kind of the received entity record. +- _name_ `string`: Name of the received entity record. - _records_ `Array|Object`: Records received. - _query_ `?Object`: Query Object. - _invalidateCache_ `?boolean`: Should invalidate query caches. @@ -626,11 +682,9 @@ _Returns_ ### receiveThemeSupports -Returns an action object used in signalling that the index has been received. - -_Parameters_ +> **Deprecated** since WP 5.9, this is not useful anymore, use the selector direclty. -- _themeSupports_ `Object`: Theme support for the current theme. +Returns an action object used in signalling that the index has been received. _Returns_ @@ -638,6 +692,8 @@ _Returns_ ### receiveUploadPermissions +> **Deprecated** since WP 5.9, use receiveUserPermission instead. + Returns an action object used in signalling that Upload permissions have been received. _Parameters_ @@ -702,7 +758,8 @@ _Parameters_ - _record_ `Object`: Record to be saved. - _options_ `Object`: Saving options. - _options.isAutosave_ `[boolean]`: Whether this is an autosave. -- _options.\_\_unstableFetch_ `[Function]`: Internal use only. Function to call instead of `apiFetch()`. Must return a control descriptor. +- _options.\_\_unstableFetch_ `[Function]`: Internal use only. Function to call instead of `apiFetch()`. Must return a promise. +- _options.throwOnError_ `[boolean]`: If false, this action suppresses all the exceptions. Defaults to false. ### undo diff --git a/docs/reference-guides/filters/autocomplete-filters.md b/docs/reference-guides/filters/autocomplete-filters.md index e832335d365d8..1b00710b7b0ba 100644 --- a/docs/reference-guides/filters/autocomplete-filters.md +++ b/docs/reference-guides/filters/autocomplete-filters.md @@ -9,7 +9,7 @@ The `Autocomplete` component found in `@wordpress/block-editor` applies this fil Here is an example of using the `editor.Autocomplete.completers` filter to add an acronym completer. You can find full documentation for the autocompleter interface with the `Autocomplete` component in the `@wordpress/components` package. {% codetabs %} -{% ESNext %} +{% JSX %} ```jsx // Our completer @@ -46,7 +46,7 @@ wp.hooks.addFilter( ); ``` -{% ES5 %} +{% Plain %} ```js // Our completer diff --git a/docs/reference-guides/filters/block-filters.md b/docs/reference-guides/filters/block-filters.md index 57e227c4a6a8a..fb967e2e1a23e 100644 --- a/docs/reference-guides/filters/block-filters.md +++ b/docs/reference-guides/filters/block-filters.md @@ -23,7 +23,7 @@ function filter_metadata_registration( $metadata ) { $metadata['apiVersion'] = 1; return $metadata; }; -add_filter( 'block_type_metadata', 'filter_metadata_registration', 10, 2 ); +add_filter( 'block_type_metadata', 'filter_metadata_registration' ); register_block_type( __DIR__ ); ``` @@ -85,7 +85,38 @@ The following filters are available to change the behavior of blocks while editi A filter that applies to the result of a block's `save` function. This filter is used to replace or extend the element, for example using `wp.element.cloneElement` to modify the element's props or replace its children, or returning an entirely new element. -The filter's callback receives an element, a block type and the block attributes as arguments. It should return an element. +The filter's callback receives an element, a block type definition object and the block attributes as arguments. It should return an element. + +_Example:_ + +Wraps a cover block into an outer container. + +```js +function wrapCoverBlockInContainer(element, blockType, attributes) { + // skip if element is undefined + if (!element) { + return; + } + + // only apply to cover blocks + if ( (blockType.name !== 'core/cover') ) { + return element; + } + + // return the element wrapped in a div + return ( + <div className="cover-block-wrapper"> + { element } + </div> + ); +} + +wp.hooks.addFilter( + 'blocks.getSaveElement', + 'my-plugin/wrap-cover-block-in-container', + wrapCoverBlockInContainer +); +``` #### `blocks.getSaveContent.extraProps` @@ -148,7 +179,7 @@ Used to modify the block's `edit` component. It receives the original block `Blo _Example:_ {% codetabs %} -{% ESNext %} +{% JSX %} ```js const { createHigherOrderComponent } = wp.compose; @@ -176,7 +207,7 @@ wp.hooks.addFilter( ); ``` -{% ES5 %} +{% Plain %} ```js var el = wp.element.createElement; @@ -215,7 +246,7 @@ Used to modify the block's wrapper component containing the block's `edit` compo _Example:_ {% codetabs %} -{% ESNext %} +{% JSX %} ```js const { createHigherOrderComponent } = wp.compose; @@ -241,7 +272,7 @@ wp.hooks.addFilter( ); ``` -{% ES5 %} +{% Plain %} ```js var el = wp.element.createElement; @@ -268,6 +299,58 @@ wp.hooks.addFilter( {% end %} +Adding new properties to the block's wrapper component can be achieved by adding them to the `wrapperProps` property of the returned component. + +_Example:_ + +{% codetabs %} +{% JSX %} + +```js +const { createHigherOrderComponent } = wp.compose; +const withMyWrapperProp = createHigherOrderComponent( ( BlockListBlock ) => { + return ( props ) => { + const wrapperProps = { + ...props.wrapperProps, + 'data-my-property': 'the-value', + }; + return <BlockListBlock { ...props } wrapperProps={ wrapperProps } />; + }; +}, 'withMyWrapperProp' ); +wp.hooks.addFilter( + 'editor.BlockListBlock', + 'my-plugin/with-my-wrapper-prop', + withMyWrapperProp +); +``` + +{% Plain %} + +```js +var el = wp.element.createElement; +var hoc = wp.compose.createHigherOrderComponent; + +var withMyWrapperProp = hoc( function ( BlockListBlock ) { + return function ( props ) { + var newProps = { + ...props, + wrapperProps: { + ...props.wrapperProps, + 'data-my-property': 'the-value', + }, + }; + return el( BlockListBlock, newProps ); + }; +}, 'withMyWrapperProp' ); +wp.hooks.addFilter( + 'editor.BlockListBlock', + 'my-plugin/with-my-wrapper-prop', + withMyWrapperProp +); +``` + +{% end %} + ## Removing Blocks ### Using a deny list @@ -275,7 +358,7 @@ wp.hooks.addFilter( Adding blocks is easy enough, removing them is as easy. Plugin or theme authors have the possibility to "unregister" blocks. {% codetabs %} -{% ESNext %} +{% JSX %} ```js // my-plugin.js @@ -287,7 +370,7 @@ domReady( function () { } ); ``` -{% ES5 %} +{% Plain %} ```js // my-plugin.js diff --git a/docs/reference-guides/filters/editor-filters.md b/docs/reference-guides/filters/editor-filters.md index a445abe95e177..28d03bd4ab56d 100644 --- a/docs/reference-guides/filters/editor-filters.md +++ b/docs/reference-guides/filters/editor-filters.md @@ -134,3 +134,15 @@ The Block Directory enables installing new block plugins from [WordPress.org.](h remove_action( 'enqueue_block_editor_assets', 'wp_enqueue_editor_block_directory_assets' ); ``` + +### Block Patterns + +#### `should_load_remote_block_patterns` + +Default `true`. The filter is checked when registering remote block patterns, set to false to disable. + +For example, to disable use: + +``` +add_filter( 'should_load_remote_block_patterns', '__return_false' ); +``` diff --git a/docs/reference-guides/richtext.md b/docs/reference-guides/richtext.md index d4cd616303c23..e0b73826308f1 100644 --- a/docs/reference-guides/richtext.md +++ b/docs/reference-guides/richtext.md @@ -12,7 +12,7 @@ Unlike other components that exist in the [Component Reference](/packages/compon ## Property Reference -For a list of the possible properties to pass your RichText component, [check out the component documentation on Github](https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/rich-text/README.md). +For a list of the possible properties to pass your RichText component, [check out the component documentation on GitHub](https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/rich-text/README.md). ## Core Blocks Using the RichText Component @@ -26,9 +26,9 @@ There are a number of core blocks using the RichText component. The JavaScript e ## Example {% codetabs %} -{% ESNext %} +{% JSX %} -```js +```jsx import { registerBlockType } from '@wordpress/blocks'; import { useBlockProps, RichText } from '@wordpress/block-editor'; @@ -66,7 +66,7 @@ registerBlockType( /* ... */, { } ); ``` -{% ES5 %} +{% Plain %} ```js wp.blocks.registerBlockType( /* ... */, { @@ -112,7 +112,7 @@ While using the RichText component a number of common issues tend to appear. ### HTML Formatting Tags Display in the Content -If the HTML tags from text formatting such as `<strong>` or `<em>` are being escaped and displayed on the frontend of the site, this is likely due to an issue in your save function. Make sure your code looks something like `<RichText.Content tagName="h2" value={ heading } />` (ESNext) within your save function instead of simply outputting the value with `<h2>{ heading }</h2>`. +If the HTML tags from text formatting such as `<strong>` or `<em>` are being escaped and displayed on the frontend of the site, this is likely due to an issue in your save function. Make sure your code looks something like `<RichText.Content tagName="h2" value={ heading } />` (JSX) within your save function instead of simply outputting the value with `<h2>{ heading }</h2>`. ### Unwanted Formatting Options Still Display @@ -130,4 +130,4 @@ The RichText component uses formats to display inline elements, for example imag wp.richText.unregisterFormatType( 'core/image' ); ``` -To apply, you would need to enqueue the above script in your plugin or theme. See the JavaScript tutorial for [how to load JavaScript in WordPress](https://developer.wordpress.org/block-editor/tutorials/javascript/loading-javascript/). +To apply, you would need to enqueue the above script in your plugin or theme. See the JavaScript tutorial for [how to load JavaScript in WordPress](https://developer.wordpress.org/block-editor/how-to-guides/javascript/loading-javascript/). diff --git a/docs/reference-guides/slotfills/README.md b/docs/reference-guides/slotfills/README.md index 5c7af9a39e3b1..5be4de892073d 100644 --- a/docs/reference-guides/slotfills/README.md +++ b/docs/reference-guides/slotfills/README.md @@ -1,9 +1,9 @@ # SlotFills Reference Slot and Fill are components that have been exposed to allow developers to inject items into some predefined places in the Gutenberg admin experience. -Please see the [SlotFill component docs](https://wordpress.org/gutenberg/handbook/reference-guides/components/slot-fill/) for more details. +Please see the [SlotFill component docs](/packages/components/src/slot-fill/README.md) for more details. -In order to use them, we must leverage the [@wordpress/plugins](https://wordpress.org/gutenberg/handbook/reference-guides/packages/packages-plugins/) api to register a plugin that will inject our items. +In order to use them, we must leverage the [@wordpress/plugins](/packages/plugins/README.md) api to register a plugin that will inject our items. ## Usage overview diff --git a/docs/reference-guides/theme-json-reference/README.md b/docs/reference-guides/theme-json-reference/README.md new file mode 100644 index 0000000000000..819e7d561cda0 --- /dev/null +++ b/docs/reference-guides/theme-json-reference/README.md @@ -0,0 +1,10 @@ +# Theme.json Reference + +This reference guide lists the settings and style properties defined in the theme.json schema. See the [theme.json how to guide](/docs/how-to-guides/themes/theme-json.md) for examples and guide on how to use the theme.json file in your theme. + +- [Version 2 (living reference)](/docs/reference-guides/theme-json-reference/theme-json-living.md) + +## Older Versions + +- [Migrating to Newer Theme.json Versions](/docs/reference-guides/theme-json-reference/theme-json-migrations.md) +- [Version 1](/docs/reference-guides/theme-json-reference/theme-json-v1.md) diff --git a/docs/reference-guides/theme-json-reference/theme-json-living.md b/docs/reference-guides/theme-json-reference/theme-json-living.md new file mode 100644 index 0000000000000..6d0c02e8d27ed --- /dev/null +++ b/docs/reference-guides/theme-json-reference/theme-json-living.md @@ -0,0 +1,175 @@ +# Version 2 (living reference) + +> This is the living specification for the **version 2** of theme.json. This version works with WordPress 5.9 or later, and the latest Gutenberg plugin. +> +> There're related documents you may be interested in: the [theme.json v1](/docs/reference-guides/theme-json-reference/theme-json-v1.md) specification and the [reference to migrate from theme.json v1 to v2](/docs/reference-guides/theme-json-reference/theme-json-migrations.md). + +This reference guide lists the settings and style properties defined in the theme.json schema. See the [theme.json how to guide](/docs/how-to-guides/themes/theme-json.md) for examples and guide on how to use the theme.json file in your theme. + +## Schema + +It can be difficult to remember the theme.json settings and properties while you develop, so a JSON scheme was created to help. The schema is available at https://schemas.wp.org/trunk/theme.json + +Code editors can pick up the schema and can provide help like tooltips, autocomplete, or schema validation in the editor. To use the schema in Visual Studio Code, add "$schema": "https://schemas.wp.org/trunk/theme.json" to the beginning of your theme.json file. + +<!-- START TOKEN Autogenerated - DO NOT EDIT --> +## Settings + + +### appearanceTools + +Setting that enables the following UI tools: + +- border: color, radius, style, width +- color: link +- spacing: blockGap, margin, padding +- typography: lineHeight + + +--- + +### border + +Settings related to borders. + +| Property | Type | Default | Props | +| --- | --- | --- |--- | +| color | boolean | false | | +| radius | boolean | false | | +| style | boolean | false | | +| width | boolean | false | | + +--- + +### color + +Settings related to colors. + +| Property | Type | Default | Props | +| --- | --- | --- |--- | +| background | boolean | true | | +| custom | boolean | true | | +| customDuotone | boolean | true | | +| customGradient | boolean | true | | +| defaultDuotone | boolean | true | | +| defaultGradients | boolean | true | | +| defaultPalette | boolean | true | | +| duotone | array | | colors, name, slug | +| gradients | array | | gradient, name, slug | +| link | boolean | false | | +| palette | array | | color, name, slug | +| text | boolean | true | | + +--- + +### layout + +Settings related to layout. + +| Property | Type | Default | Props | +| --- | --- | --- |--- | +| contentSize | string | | | +| wideSize | string | | | + +--- + +### spacing + +Settings related to spacing. + +| Property | Type | Default | Props | +| --- | --- | --- |--- | +| blockGap | undefined | null | | +| margin | boolean | false | | +| padding | boolean | false | | +| units | array | px,em,rem,vh,vw,% | | + +--- + +### typography + +Settings related to typography. + +| Property | Type | Default | Props | +| --- | --- | --- |--- | +| customFontSize | boolean | true | | +| fontStyle | boolean | true | | +| fontWeight | boolean | true | | +| letterSpacing | boolean | true | | +| lineHeight | boolean | false | | +| textDecoration | boolean | true | | +| textTransform | boolean | true | | +| dropCap | boolean | true | | +| fontSizes | array | | name, size, slug | +| fontFamilies | array | | fontFamily, name, slug | + +--- + +### custom + +Generate custom CSS custom properties of the form `--wp--custom--{key}--{nested-key}: {value};`. `camelCased` keys are transformed to `kebab-case` as to follow the CSS property naming schema. Keys at different depth levels are separated by `--`, so keys should not include `--` in the name. + + +--- +## Styles + + +### border + +Border styles. + +| Property | Type | Props | +| --- | --- |--- | +| color | string | | +| radius | undefined | | +| style | string | | +| width | string | | +| top | undefined | | +| right | undefined | | +| bottom | undefined | | +| left | undefined | | + +--- + +### color + +Color styles. + +| Property | Type | Props | +| --- | --- |--- | +| background | string | | +| gradient | string | | +| text | string | | + +--- + +### spacing + +Spacing styles. + +| Property | Type | Props | +| --- | --- |--- | +| blockGap | string | | +| margin | object | bottom, left, right, top | +| padding | object | bottom, left, right, top | + +--- + +### typography + +Typography styles. + +| Property | Type | Props | +| --- | --- |--- | +| fontFamily | string | | +| fontSize | string | | +| fontStyle | string | | +| fontWeight | string | | +| letterSpacing | string | | +| lineHeight | string | | +| textDecoration | string | | +| textTransform | string | | + +--- + +<!-- END TOKEN Autogenerated - DO NOT EDIT --> diff --git a/docs/reference-guides/theme-json-reference/theme-json-migrations.md b/docs/reference-guides/theme-json-reference/theme-json-migrations.md new file mode 100644 index 0000000000000..cac253f64ffbe --- /dev/null +++ b/docs/reference-guides/theme-json-reference/theme-json-migrations.md @@ -0,0 +1,63 @@ +# Migrating to Newer Versions + +This guide documents the changes between different `theme.json` versions and how to upgrade. Using older versions will continue to be supported. Upgrading is recommended because new development will continue in the newer versions. + +## Migrating from v1 to v2 + +Upgrading to v2 enables some new features and adjusts the naming of some old features to be more consistent with one another. + +How to migrate from v1 to v2: + +1. Update `version` to `2`. +2. Rename the properties that were updated (see below) if you're using them. + +Refer to the [dev note for the release](https://make.wordpress.org/core/2022/01/08/updates-for-settings-styles-and-theme-json/) and the [reference documents](/docs/reference-guides/theme-json-reference/README.md) for the respective v1 and v2 versions. + +### Renamed properties + +| v1 | v2 | +| ------------------------------------------ | ------------------------------------ | +| `settings.border.customRadius` | `settings.border.radius` | +| `settings.spacing.customMargin` | `settings.spacing.margin` | +| `settings.spacing.customPadding` | `settings.spacing.padding` | +| `settings.typography.customLineHeight` | `settings.typography.lineHeight` | + +### New properties + +New top-level properties: `customTemplates`, `templateParts`. + +Additions to settings: + +- `settings.appearanceTools` +- `settings.border.color` +- `settings.border.style` +- `settings.border.width` +- `settings.color.background` +- `settings.color.defaultGradients` +- `settings.color.defaultPalette` +- `settings.color.text` +- `settings.spacing.blockGap` +- `settings.typography.fontFamilies` +- `settings.typography.fontStyle` +- `settings.typography.fontWeight` +- `settings.typography.letterSpacing` +- `settings.typography.textDecoration` +- `settings.typography.textTransform` + +Additions to styles: + +- `styles.border.color` +- `styles.border.style` +- `styles.border.width` +- `styles.filter.duotone` +- `styles.spacing.blockGap` +- `styles.typography.fontFamily` +- `styles.typography.fontStyle` +- `styles.typography.fontWeight` +- `styles.typography.letterSpacing` +- `styles.typography.textDecoration` +- `styles.typography.textTransform` + +### Changes to property values + +The default font sizes provided by core (`settings.typography.fontSizes`) have been updated. The Normal and Huge sizes (with `normal` and `huge` slugs) have been removed from the list, and Extra Large (`x-large` slug) has been added. When the UI controls show the default values provided by core, Normal and Huge will no longer be present. However, their CSS classes and CSS Custom Properties are still enqueued to make sure existing content that uses them still works as expected. diff --git a/docs/reference-guides/theme-json-reference/theme-json-v1.md b/docs/reference-guides/theme-json-reference/theme-json-v1.md new file mode 100644 index 0000000000000..d0ed8a70a3110 --- /dev/null +++ b/docs/reference-guides/theme-json-reference/theme-json-v1.md @@ -0,0 +1,117 @@ +# Version 1 Reference + +Theme.json version 2 has been released, see the [theme.json migration guide](/docs/reference-guides/theme-json-reference/theme-json-migrations.md#migrating-from-v1-to-v2) for updating to the latest version. + +## Settings + +### border + +Settings related to borders. + +| Property | Type | Default | Props | +| ------------ | ------- | ------- | ----- | +| customRadius | boolean | false | | + +--- + +### color + +Settings related to colors. + +| Property | Type | Default | Props | +| -------------- | ------- | ------- | -------------------- | +| custom | boolean | true | | +| customDuotone | boolean | true | | +| customGradient | boolean | true | | +| duotone | array | | colors, name, slug | +| gradients | array | | gradient, name, slug | +| link | boolean | false | | +| palette | array | | color, name, slug | + +--- + +### layout + +Settings related to layout. + +| Property | Type | Default | Props | +| ----------- | ------ | ------- | ----- | +| contentSize | string | | | +| wideSize | string | | | + +--- + +### spacing + +Settings related to spacing. + +| Property | Type | Default | Props | +| ------------- | ------- | ----------------- | ----- | +| customMargin | boolean | false | | +| customPadding | boolean | false | | +| units | array | px,em,rem,vh,vw,% | | + +--- + +### typography + +Settings related to typography. + +| Property | Type | Default | Props | +| ---------------- | ------- | ------- | ---------------- | +| customFontSize | boolean | true | | +| customLineHeight | boolean | false | | +| dropCap | boolean | true | | +| fontSizes | array | | name, size, slug | + +--- + +### custom + +Generate custom CSS custom properties of the form `--wp--custom--{key}--{nested-key}: {value};`. `camelCased` keys are transformed to `kebab-case` as to follow the CSS property naming schema. Keys at different depth levels are separated by `--`, so keys should not include `--` in the name. + +--- + +## Styles + +### border + +Border styles. + +| Property | Type | Props | +| -------- | ------ | ----- | +| radius | string | | + +--- + +### color + +Color styles. + +| Property | Type | Props | +| ---------- | ------ | ----- | +| background | string | | +| gradient | string | | +| text | string | | + +--- + +### spacing + +Spacing styles. + +| Property | Type | Props | +| -------- | ------ | ------------------------ | +| margin | object | bottom, left, right, top | +| padding | object | bottom, left, right, top | + +--- + +### typography + +Typography styles. + +| Property | Type | Props | +| ---------- | ------ | ----- | +| fontSize | string | | +| lineHeight | string | | diff --git a/docs/toc.json b/docs/toc.json index c8ce6140ef94f..5b913f16b3258 100644 --- a/docs/toc.json +++ b/docs/toc.json @@ -1,109 +1,48 @@ [ { - "docs/README.md": [ - { - "docs/getting-started/tutorials/README.md": [ - { - "docs/getting-started/tutorials/devenv/README.md": [ - { - "docs/getting-started/tutorials/devenv/docker-ubuntu.md": [] - } - ] - }, - { - "docs/getting-started/tutorials/create-block/README.md": [ - { - "docs/getting-started/tutorials/create-block/wp-plugin.md": [] - }, - { - "docs/getting-started/tutorials/create-block/block-anatomy.md": [] - }, - { - "docs/getting-started/tutorials/create-block/attributes.md": [] - }, - { - "docs/getting-started/tutorials/create-block/block-code.md": [] - }, - { - "docs/getting-started/tutorials/create-block/author-experience.md": [] - }, - { - "docs/getting-started/tutorials/create-block/finishing.md": [] - }, - { - "docs/getting-started/tutorials/create-block/submitting-to-block-directory.md": [] - } - ] - } - ] - }, - { "docs/getting-started/full-site-editing.md": [] }, - { "docs/getting-started/glossary.md": [] }, - { "docs/getting-started/faq.md": [] }, - { "docs/getting-started/history.md": [] }, - { "docs/getting-started/outreach.md": [] } - ] + "docs/README.md": [] }, { - "docs/how-to-guides/README.md": [ + "docs/getting-started/README.md": [ { - "docs/how-to-guides/javascript/README.md": [ - { - "docs/how-to-guides/javascript/plugins-background.md": [] - }, + "docs/getting-started/devenv/README.md": [ { - "docs/how-to-guides/javascript/loading-javascript.md": [] - }, - { - "docs/how-to-guides/javascript/extending-the-block-editor.md": [] - }, - { "docs/how-to-guides/javascript/troubleshooting.md": [] }, - { - "docs/how-to-guides/javascript/versions-and-building.md": [] - }, - { "docs/how-to-guides/javascript/scope-your-code.md": [] }, - { "docs/how-to-guides/javascript/js-build-setup.md": [] }, - { "docs/how-to-guides/javascript/esnext-js.md": [] } + "docs/getting-started/devenv/docker-ubuntu.md": [] + } ] }, { - "docs/how-to-guides/metabox/README.md": [ - { "docs/how-to-guides/metabox/meta-block-1-intro.md": [] }, + "docs/getting-started/create-block/README.md": [ { - "docs/how-to-guides/metabox/meta-block-2-register-meta.md": [] + "docs/getting-started/create-block/wp-plugin.md": [] }, - { "docs/how-to-guides/metabox/meta-block-3-add.md": [] }, { - "docs/how-to-guides/metabox/meta-block-4-use-data.md": [] + "docs/getting-started/create-block/block-anatomy.md": [] }, { - "docs/how-to-guides/metabox/meta-block-5-finishing.md": [] - } - ] - }, - { "docs/how-to-guides/notices/README.md": [] }, - { - "docs/how-to-guides/sidebar-tutorial/plugin-sidebar-0.md": [ - { - "docs/how-to-guides/sidebar-tutorial/plugin-sidebar-1-up-and-running.md": [] - }, - { - "docs/how-to-guides/sidebar-tutorial/plugin-sidebar-2-styles-and-controls.md": [] + "docs/getting-started/create-block/attributes.md": [] }, { - "docs/how-to-guides/sidebar-tutorial/plugin-sidebar-3-register-meta.md": [] + "docs/getting-started/create-block/block-code.md": [] }, { - "docs/how-to-guides/sidebar-tutorial/plugin-sidebar-4-initialize-input.md": [] + "docs/getting-started/create-block/author-experience.md": [] }, { - "docs/how-to-guides/sidebar-tutorial/plugin-sidebar-5-update-meta.md": [] + "docs/getting-started/create-block/finishing.md": [] }, { - "docs/how-to-guides/sidebar-tutorial/plugin-sidebar-6-finishing-touches.md": [] + "docs/getting-started/create-block/submitting-to-block-directory.md": [] } ] }, + { "docs/getting-started/full-site-editing.md": [] }, + { "docs/getting-started/outreach.md": [] } + ] + }, + { + "docs/how-to-guides/README.md": [ + { "docs/how-to-guides/accessibility.md": [] }, { "docs/how-to-guides/block-tutorial/README.md": [ { @@ -118,9 +57,15 @@ { "docs/how-to-guides/block-tutorial/block-controls-toolbar-and-sidebar.md": [] }, + { + "docs/how-to-guides/block-tutorial/block-supports-in-static-blocks.md": [] + }, { "docs/how-to-guides/block-tutorial/creating-dynamic-blocks.md": [] }, + { + "docs/how-to-guides/block-tutorial/block-supports-in-dynamic-blocks.md": [] + }, { "docs/how-to-guides/block-tutorial/generate-blocks-with-wp-cli.md": [] }, @@ -130,59 +75,75 @@ ] }, { - "docs/how-to-guides/themes/README.md": [ - { "docs/how-to-guides/themes/block-theme-overview.md": [] }, - { "docs/how-to-guides/themes/create-block-theme.md": [] }, - { "docs/how-to-guides/themes/theme-json.md": [] }, - { "docs/how-to-guides/themes/theme-support.md": [] } + "docs/how-to-guides/platform/README.md": [ + { + "docs/how-to-guides/platform/custom-block-editor/README.md": [ + { + "docs/how-to-guides/platform/custom-block-editor/tutorial.md": [] + } + ] + } ] }, - { "docs/how-to-guides/feature-flags.md": [] }, { - "docs/how-to-guides/backward-compatibility/README.md": [ + "docs/how-to-guides/data-basics/README.md": [ + { + "docs/how-to-guides/data-basics/1-data-basics-setup.md": [] + }, + { + "docs/how-to-guides/data-basics/2-building-a-list-of-pages.md": [] + }, { - "docs/how-to-guides/backward-compatibility/deprecations.md": [] + "docs/how-to-guides/data-basics/3-building-an-edit-form.md": [] }, { - "docs/how-to-guides/backward-compatibility/meta-box.md": [] + "docs/how-to-guides/data-basics/4-building-a-create-page-form.md": [] } ] }, + { "docs/how-to-guides/feature-flags.md": [] }, + { "docs/how-to-guides/format-api.md": [] }, { - "docs/how-to-guides/format-api/README.md": [ + "docs/how-to-guides/javascript/README.md": [ + { + "docs/how-to-guides/javascript/plugins-background.md": [] + }, + { + "docs/how-to-guides/javascript/loading-javascript.md": [] + }, + { + "docs/how-to-guides/javascript/extending-the-block-editor.md": [] + }, + { "docs/how-to-guides/javascript/troubleshooting.md": [] }, { - "docs/how-to-guides/format-api/1-register-format.md": [] + "docs/how-to-guides/javascript/versions-and-building.md": [] }, - { "docs/how-to-guides/format-api/2-toolbar-button.md": [] }, - { "docs/how-to-guides/format-api/3-apply-format.md": [] } + { "docs/how-to-guides/javascript/scope-your-code.md": [] }, + { "docs/how-to-guides/javascript/js-build-setup.md": [] }, + { "docs/how-to-guides/javascript/esnext-js.md": [] } ] }, + { "docs/how-to-guides/internationalization.md": [] }, { - "docs/how-to-guides/platform/README.md": [ - { - "docs/how-to-guides/platform/custom-block-editor/README.md": [ - { - "docs/how-to-guides/platform/custom-block-editor/tutorial.md": [] - } - ] - } - ] + "docs/how-to-guides/metabox.md": [] }, + { "docs/how-to-guides/notices/README.md": [] }, + { "docs/how-to-guides/plugin-sidebar-0.md": [] }, { - "docs/how-to-guides/designers/README.md": [ - { "docs/how-to-guides/designers/block-design.md": [] }, - { "docs/how-to-guides/designers/user-interface.md": [] }, - { "docs/how-to-guides/designers/design-resources.md": [] }, - { "docs/how-to-guides/designers/animation.md": [] } + "docs/how-to-guides/themes/README.md": [ + { "docs/how-to-guides/themes/block-theme-overview.md": [] }, + { "docs/how-to-guides/themes/theme-json.md": [] }, + { "docs/how-to-guides/themes/theme-support.md": [] } ] }, - { "docs/how-to-guides/accessibility.md": [] }, - { "docs/how-to-guides/internationalization.md": [] }, - { "docs/how-to-guides/widgets/README.md": [ - { "docs/how-to-guides/widgets/overview.md": [] }, - { "docs/how-to-guides/widgets/opting-out.md": [] }, - { "docs/how-to-guides/widgets/legacy-widget-block.md": [] } - ] } + { "docs/how-to-guides/thunks.md": [] }, + { + "docs/how-to-guides/widgets/README.md": [ + { "docs/how-to-guides/widgets/overview.md": [] }, + { "docs/how-to-guides/widgets/opting-out.md": [] }, + { "docs/how-to-guides/widgets/legacy-widget-block.md": [] } + ] + } ] }, { @@ -223,6 +184,7 @@ } ] }, + { "docs/reference-guides/core-blocks.md": [] }, { "docs/reference-guides/filters/README.md": [ { "docs/reference-guides/filters/block-filters.md": [] }, @@ -264,6 +226,19 @@ ] }, { "docs/reference-guides/richtext.md": [] }, + { + "docs/reference-guides/theme-json-reference/README.md": [ + { + "docs/reference-guides/theme-json-reference/theme-json-living.md": [] + }, + { + "docs/reference-guides/theme-json-reference/theme-json-v1.md": [] + }, + { + "docs/reference-guides/theme-json-reference/theme-json-migrations.md": [] + } + ] + }, { "packages/components/README.md": "{{components}}" }, { "docs/reference-guides/packages.md": "{{packages}}" }, { @@ -298,9 +273,22 @@ }, { "docs/explanations/architecture/full-site-editing-templates.md": [] + }, + { "docs/explanations/architecture/styles.md": [] } + ] + }, + { + "docs/explanations/user-interface/README.md": [ + { "docs/explanations/user-interface/block-design.md": [] }, + { "docs/explanations/user-interface/animation.md": [] }, + { + "docs/explanations/user-interface/design-resources.md": [] } ] - } + }, + { "docs/explanations/faq.md": [] }, + { "docs/explanations/glossary.md": [] }, + { "docs/explanations/history.md": [] } ] }, { @@ -317,9 +305,26 @@ { "docs/contributors/code/scripts.md": [] }, { "docs/contributors/code/managing-packages.md": [] }, { "docs/contributors/code/release.md": [] }, - { "docs/contributors/code/native-mobile.md": [] }, { - "docs/contributors/code/getting-started-native-mobile.md": [] + "docs/contributors/code/react-native/README.md": [ + { + "docs/contributors/code/react-native/getting-started-react-native.md": [] + }, + { + "docs/contributors/code/react-native/osx-setup-guide.md": [] + }, + { + "docs/contributors/code/react-native/integration-test-guide.md": [] + }, + { + "docs/contributors/code/react-native/internationalization-guide.md": [] + } + ] + }, + { "docs/contributors/code/backward-compatibility.md": [] }, + { "docs/contributors/code/deprecations.md": [] }, + { + "docs/contributors/code/how-to-get-your-pull-request-reviewed.md": [] } ] }, diff --git a/docs/tool/index.js b/docs/tool/index.js index aea46c38c9e47..7f28c110d4141 100644 --- a/docs/tool/index.js +++ b/docs/tool/index.js @@ -12,7 +12,7 @@ const { getRootManifest } = require( './manifest' ); const tocFileInput = path.resolve( __dirname, '../toc.json' ); const manifestOutput = path.resolve( __dirname, '../manifest.json' ); -// Process TOC file and generate manifest handbook +// Process TOC file and generate manifest handbook. fs.writeFileSync( manifestOutput, JSON.stringify( getRootManifest( tocFileInput ), undefined, '\t' ).concat( diff --git a/gutenberg.php b/gutenberg.php index 28e4820701414..048471eeaad19 100644 --- a/gutenberg.php +++ b/gutenberg.php @@ -3,9 +3,9 @@ * Plugin Name: Gutenberg * Plugin URI: https://github.com/WordPress/gutenberg * Description: Printing since 1440. This is the development plugin for the new block editor in core. - * Requires at least: 5.6 + * Requires at least: 5.8 * Requires PHP: 5.6 - * Version: 11.2.0-rc.1 + * Version: 13.3.0-rc.1 * Author: Gutenberg Team * Text Domain: gutenberg * @@ -26,7 +26,7 @@ function gutenberg_wordpress_version_notice() { echo '<div class="error"><p>'; /* translators: %s: Minimum required version */ - printf( __( 'Gutenberg requires WordPress %s or later to function properly. Please upgrade WordPress before activating Gutenberg.', 'gutenberg' ), '5.6' ); + printf( __( 'Gutenberg requires WordPress %s or later to function properly. Please upgrade WordPress before activating Gutenberg.', 'gutenberg' ), '5.8' ); echo '</p></div>'; deactivate_plugins( array( 'gutenberg/gutenberg.php' ) ); @@ -64,7 +64,7 @@ function gutenberg_pre_init() { // Compare against major release versions (X.Y) rather than minor (X.Y.Z) // unless a minor release is the actual minimum requirement. WordPress reports // X.Y for its major releases. - if ( version_compare( $version, '5.6', '<' ) ) { + if ( version_compare( $version, '5.8', '<' ) ) { add_action( 'admin_notices', 'gutenberg_wordpress_version_notice' ); return; } diff --git a/lib/README.md b/lib/README.md new file mode 100644 index 0000000000000..5636d17b286a8 --- /dev/null +++ b/lib/README.md @@ -0,0 +1,144 @@ +# Gutenberg PHP + +## File structure + +Gutenberg adds features to WordPress Core using PHP hooks and filters. Some +features, once considered stable and useful, are merged into Core during a Core +release. Some features remain in the plugin forever or are removed. + +To make it easier for contributors to know which features need to be merged to +Core and which features can be deleted, Gutenberg uses the following file +structure for its PHP code: + +- `lib/experimental` - Experimental features that exist only in the plugin. They + are not ready to be merged to Core. +- `lib/stable` - Stable features that exist only in the plugin. They could one + day be merged to Core, but not yet. +- `lib/compat/wordpress-X.Y` - Stable features that are intended to be merged to + Core in the future X.Y release, or that were previously merged to Core in the + X.Y release and remain in the plugin for backwards compatibility when running + the plugin on older versions of WordPress. + +## Best practices + +### Prefer the `wp` prefix + +For features that may be merged to Core, it's best to use a `wp_` prefix for functions or a `WP_` prefix for classes. + +This applies to both experimental and stable features. + +Using the `wp_` prefix avoids us having to rename functions and classes from `gutenberg_` to `wp_` if the feature is merged to Core. + +Functions that are intended solely for the plugin, e.g., plugin infrastructure, should use the `gutenberg_` prefix. + +#### Feature that might be merged to Core + +```php +function wp_get_navigation( $slug ) { ... } +``` + +#### Plugin infrastructure that will never be merged to Core + +```php +function gutenberg_get_navigation( $slug ) { ... } +``` + +### Group PHP code by _feature_ + +Developers should organize PHP into files or folders by _feature_, not by _component_. + +When defining a function that will be hooked, developers should call `add_action` and `add_filter` immediately after the function declaration. + +These two practices make it easier for PHP code to start in one folder (e.g., `lib/experimental`) and eventually move to another using a simple `git mv`. + +#### Good + +```php +// lib/experimental/navigation.php + +function wp_get_navigation( $slug ) { ... } + +function wp_register_navigation_cpt() { ... } + +add_action( 'init', 'wp_register_navigation_cpt' ); +``` + +#### Not so good + +```php +// lib/experimental/functions.php + +function wp_get_navigation( $slug ) { ... } + +// lib/experimental/post-types.php + +function wp_register_navigation_cpt() { ... } + +// lib/experimental/init.php +add_action( 'init', 'wp_register_navigation_cpt' ); +``` + +### Wrap functions and classes with `! function_exists` and `! class_exists` + +Developers should take care to not define functions and classes that are already defined. + +When writing new functions and classes, it's good practice to use `! function_exists` and `! class_exists`. + +If Core has defined a symbol once and then Gutenberg defines it a second time, fatal errors will occur. + +Wrapping functions and classes avoids such errors if the feature is merged to Core. + +#### Good + +```php +// lib/experimental/navigation/navigation.php + +if ( ! function_exists( 'wp_get_navigation' ) ) { + function wp_get_navigation( $slug ) { ... } +} + +// lib/experimental/navigation/class-wp-navigation.php + +if ( class_exists( 'WP_Navigation' ) ) { + return; +} + +class WP_Navigation { ... } +``` + +#### Not so good + +```php +// lib/experimental/navigation/navigation.php + +function wp_get_navigation( $slug ) { ... } + +// lib/experimental/navigation/class-gutenberg-navigation.php + +class WP_Navigation { ... } +``` + +Furthermore, a quick codebase search will also help you know if your new method is unique. + +### Note how your feature should look when merged to Core + +Developers should write a brief note about how their feature should be merged to Core, for example, which Core file or function should be patched. + +Notes can be included in the doc comment. + +This helps future developers know what to do when merging Gutenberg features into Core. + +#### Good + +```php +/** + * Returns a navigation object for the given slug. + * + * Should live in `wp-includes/navigation.php` when merged to Core. + * + * @param string $slug + * + * @return WP_Navigation + */ +function wp_get_navigation( $slug ) { ... } +``` diff --git a/lib/block-patterns.php b/lib/block-patterns.php deleted file mode 100644 index a7b7554694e56..0000000000000 --- a/lib/block-patterns.php +++ /dev/null @@ -1,263 +0,0 @@ -<?php -/** - * Block patterns registration. - * - * @package gutenberg - */ - -/** - * Register Gutenberg bundled patterns. - */ -function register_gutenberg_patterns() { - // Register categories used for block patterns. - if ( ! WP_Block_Pattern_Categories_Registry::get_instance()->is_registered( 'query' ) ) { - register_block_pattern_category( 'query', array( 'label' => __( 'Query', 'gutenberg' ) ) ); - } - - $patterns = array( - 'query-standard-posts' => array( - 'title' => __( 'Standard', 'gutenberg' ), - 'blockTypes' => array( 'core/query' ), - 'categories' => array( 'query' ), - 'content' => '<!-- wp:query {"query":{"perPage":1,"pages":0,"offset":0,"postType":"post","categoryIds":[],"tagIds":[],"order":"desc","orderBy":"date","author":"","search":"","exclude":[],"sticky":"","inherit":false}} --> - <div class="wp-block-query"> - <!-- wp:post-template --> - <!-- wp:post-title {"isLink":true} /--> - <!-- wp:post-featured-image {"isLink":true,"align":"wide"} /--> - <!-- wp:post-excerpt /--> - <!-- wp:separator --> - <hr class="wp-block-separator"/> - <!-- /wp:separator --> - <!-- wp:post-date /--> - <!-- /wp:post-template --> - </div> - <!-- /wp:query -->', - ), - 'query-medium-posts' => array( - 'title' => __( 'Image at left', 'gutenberg' ), - 'blockTypes' => array( 'core/query' ), - 'categories' => array( 'query' ), - 'content' => '<!-- wp:query {"query":{"perPage":1,"pages":0,"offset":0,"postType":"post","categoryIds":[],"tagIds":[],"order":"desc","orderBy":"date","author":"","search":"","exclude":[],"sticky":"","inherit":false}} --> - <div class="wp-block-query"> - <!-- wp:post-template --> - <!-- wp:columns {"align":"wide"} --> - <div class="wp-block-columns alignwide"><!-- wp:column {"width":"66.66%"} --> - <div class="wp-block-column" style="flex-basis:66.66%"><!-- wp:post-featured-image {"isLink":true} /--></div> - <!-- /wp:column --> - <!-- wp:column {"width":"33.33%"} --> - <div class="wp-block-column" style="flex-basis:33.33%"><!-- wp:post-title {"isLink":true} /--> - <!-- wp:post-excerpt /--></div> - <!-- /wp:column --></div> - <!-- /wp:columns --> - <!-- /wp:post-template --> - </div> - <!-- /wp:query -->', - ), - 'query-small-posts' => array( - 'title' => __( 'Small image and title', 'gutenberg' ), - 'blockTypes' => array( 'core/query' ), - 'categories' => array( 'query' ), - 'content' => '<!-- wp:query {"query":{"perPage":1,"pages":0,"offset":0,"postType":"post","categoryIds":[],"tagIds":[],"order":"desc","orderBy":"date","author":"","search":"","exclude":[],"sticky":"","inherit":false}} --> - <div class="wp-block-query"> - <!-- wp:post-template --> - <!-- wp:columns {"verticalAlignment":"center"} --> - <div class="wp-block-columns are-vertically-aligned-center"><!-- wp:column {"verticalAlignment":"center","width":"25%"} --> - <div class="wp-block-column is-vertically-aligned-center" style="flex-basis:25%"><!-- wp:post-featured-image {"isLink":true} /--></div> - <!-- /wp:column --> - <!-- wp:column {"verticalAlignment":"center","width":"75%"} --> - <div class="wp-block-column is-vertically-aligned-center" style="flex-basis:75%"><!-- wp:post-title {"isLink":true} /--></div> - <!-- /wp:column --></div> - <!-- /wp:columns --> - <!-- /wp:post-template --> - </div> - <!-- /wp:query -->', - ), - 'query-grid-posts' => array( - 'title' => __( 'Grid', 'gutenberg' ), - 'blockTypes' => array( 'core/query' ), - 'categories' => array( 'query' ), - 'content' => '<!-- wp:query {"query":{"perPage":6,"pages":0,"offset":0,"postType":"post","categoryIds":[],"tagIds":[],"order":"desc","orderBy":"date","author":"","search":"","exclude":[],"sticky":"exclude","inherit":false},"displayLayout":{"type":"flex","columns":3}} --> - <div class="wp-block-query"> - <!-- wp:post-template --> - <!-- wp:group {"style":{"spacing":{"padding":{"top":"30px","right":"30px","bottom":"30px","left":"30px"}}},"layout":{"inherit":false}} --> - <div class="wp-block-group" style="padding-top:30px;padding-right:30px;padding-bottom:30px;padding-left:30px"><!-- wp:post-title {"isLink":true} /--> - <!-- wp:post-excerpt /--> - <!-- wp:post-date /--></div> - <!-- /wp:group --> - <!-- /wp:post-template --> - </div> - <!-- /wp:query -->', - ), - 'query-large-title-posts' => array( - 'title' => __( 'Large title', 'gutenberg' ), - 'blockTypes' => array( 'core/query' ), - 'categories' => array( 'query' ), - 'content' => '<!-- wp:group {"align":"full","style":{"spacing":{"padding":{"top":"100px","right":"100px","bottom":"100px","left":"100px"}},"color":{"text":"#ffffff","background":"#000000"}}} --> - <div class="wp-block-group alignfull has-text-color has-background" style="background-color:#000000;color:#ffffff;padding-top:100px;padding-right:100px;padding-bottom:100px;padding-left:100px"><!-- wp:query {"query":{"perPage":3,"pages":0,"offset":0,"postType":"post","categoryIds":[],"tagIds":[],"order":"desc","orderBy":"date","author":"","search":"","exclude":[],"sticky":"","inherit":false}} --> - <div class="wp-block-query"><!-- wp:post-template --> - <!-- wp:separator {"customColor":"#ffffff","align":"wide","className":"is-style-wide"} --> - <hr class="wp-block-separator alignwide has-text-color has-background is-style-wide" style="background-color:#ffffff;color:#ffffff"/> - <!-- /wp:separator --> - - <!-- wp:columns {"verticalAlignment":"center","align":"wide"} --> - <div class="wp-block-columns alignwide are-vertically-aligned-center"><!-- wp:column {"verticalAlignment":"center","width":"20%"} --> - <div class="wp-block-column is-vertically-aligned-center" style="flex-basis:20%"><!-- wp:post-date {"style":{"color":{"text":"#ffffff"}},"fontSize":"extra-small"} /--></div> - <!-- /wp:column --> - - <!-- wp:column {"verticalAlignment":"center","width":"80%"} --> - <div class="wp-block-column is-vertically-aligned-center" style="flex-basis:80%"><!-- wp:post-title {"isLink":true,"style":{"typography":{"fontSize":"72px","lineHeight":"1.1"},"color":{"text":"#ffffff","link":"#ffffff"}}} /--></div> - <!-- /wp:column --></div> - <!-- /wp:columns --> - <!-- /wp:post-template --></div> - <!-- /wp:query --></div> - <!-- /wp:group -->', - ), - 'query-offset-posts' => array( - 'title' => __( 'Offset', 'gutenberg' ), - 'blockTypes' => array( 'core/query' ), - 'categories' => array( 'query' ), - 'content' => '<!-- wp:group {"style":{"spacing":{"padding":{"top":"30px","right":"30px","bottom":"30px","left":"30px"}}},"layout":{"inherit":false}} --> - <div class="wp-block-group" style="padding-top:30px;padding-right:30px;padding-bottom:30px;padding-left:30px"><!-- wp:columns --> - <div class="wp-block-columns"><!-- wp:column {"width":"50%"} --> - <div class="wp-block-column" style="flex-basis:50%"><!-- wp:query {"query":{"perPage":2,"pages":0,"offset":0,"postType":"post","categoryIds":[],"tagIds":[],"order":"desc","orderBy":"date","author":"","search":"","exclude":[],"sticky":"exclude","inherit":false},"displayLayout":{"type":"list"}} --> - <div class="wp-block-query"><!-- wp:post-template --> - <!-- wp:post-featured-image /--> - <!-- wp:post-title /--> - <!-- wp:post-date /--> - <!-- wp:spacer {"height":200} --> - <div style="height:200px" aria-hidden="true" class="wp-block-spacer"></div> - <!-- /wp:spacer --> - <!-- /wp:post-template --></div> - <!-- /wp:query --></div> - <!-- /wp:column --> - <!-- wp:column {"width":"50%"} --> - <div class="wp-block-column" style="flex-basis:50%"><!-- wp:query {"query":{"perPage":2,"pages":0,"offset":2,"postType":"post","categoryIds":[],"tagIds":[],"order":"desc","orderBy":"date","author":"","search":"","exclude":[],"sticky":"exclude","inherit":false},"displayLayout":{"type":"list"}} --> - <div class="wp-block-query"><!-- wp:post-template --> - <!-- wp:spacer {"height":200} --> - <div style="height:200px" aria-hidden="true" class="wp-block-spacer"></div> - <!-- /wp:spacer --> - <!-- wp:post-featured-image /--> - <!-- wp:post-title /--> - <!-- wp:post-date /--> - <!-- /wp:post-template --></div> - <!-- /wp:query --></div> - <!-- /wp:column --></div> - <!-- /wp:columns --></div> - <!-- /wp:group -->', - ), - // Initial block pattern to be used with block transformations with patterns. - 'social-links-shared-background-color' => array( - 'title' => __( 'Social links with a shared background color', 'gutenberg' ), - 'categories' => array( 'buttons' ), - 'blockTypes' => array( 'core/social-links' ), - 'viewportWidth' => 500, - 'content' => '<!-- wp:social-links {"customIconColor":"#ffffff","iconColorValue":"#ffffff","customIconBackgroundColor":"#3962e3","iconBackgroundColorValue":"#3962e3","className":"has-icon-color"} --> - <ul class="wp-block-social-links has-icon-color has-icon-background-color"><!-- wp:social-link {"url":"https://wordpress.org","service":"wordpress"} /--> - <!-- wp:social-link {"url":"#","service":"chain"} /--> - <!-- wp:social-link {"url":"#","service":"mail"} /--></ul> - <!-- /wp:social-links -->', - ), - ); - - foreach ( $patterns as $name => $pattern ) { - $pattern_name = 'core/' . $name; - if ( ! WP_Block_Patterns_Registry::get_instance()->is_registered( $pattern_name ) ) { - register_block_pattern( $pattern_name, $pattern ); - } - } -} - -/** - * Deactivate the legacy patterns bundled with WordPress. - */ -function remove_core_patterns() { - $core_block_patterns = array( - 'text-two-columns', - 'two-buttons', - 'two-images', - 'text-two-columns-with-images', - 'text-three-columns-buttons', - 'large-header', - 'large-header-button', - 'three-buttons', - 'heading-paragraph', - 'quote', - 'query-standard-posts', - 'query-medium-posts', - 'query-small-posts', - 'query-grid-posts', - 'query-large-title-posts', - 'query-offset-posts', - 'social-links-shared-background-color', - ); - - foreach ( $core_block_patterns as $core_block_pattern ) { - $name = 'core/' . $core_block_pattern; - if ( WP_Block_Patterns_Registry::get_instance()->is_registered( $name ) ) { - unregister_block_pattern( $name ); - } - } -} - -/** - * Register Core's official patterns from wordpress.org/patterns. - * - * @since 5.8.0 - */ -function load_remote_patterns() { - // This is the core function that provides the same feature. - if ( function_exists( '_load_remote_block_patterns' ) ) { - return; - } - - /** - * Filter to disable remote block patterns. - * - * @since 5.8.0 - * - * @param bool $should_load_remote - */ - $should_load_remote = apply_filters( 'should_load_remote_block_patterns', true ); - - if ( $should_load_remote ) { - $request = new WP_REST_Request( 'GET', '/wp/v2/pattern-directory/patterns' ); - $core_keyword_id = 11; // 11 is the ID for "core". - $request->set_param( 'keyword', $core_keyword_id ); - $response = rest_do_request( $request ); - if ( $response->is_error() ) { - return; - } - $patterns = $response->get_data(); - - foreach ( $patterns as $settings ) { - $pattern_name = 'core/' . sanitize_title( $settings['title'] ); - register_block_pattern( $pattern_name, (array) $settings ); - } - } -} - - -add_action( - 'init', - function() { - if ( ! get_theme_support( 'core-block-patterns' ) || ! function_exists( 'unregister_block_pattern' ) ) { - return; - } - remove_core_patterns(); - register_gutenberg_patterns(); - } -); - -add_action( - 'current_screen', - function( $current_screen ) { - if ( ! get_theme_support( 'core-block-patterns' ) ) { - return; - } - - $is_site_editor = ( function_exists( 'gutenberg_is_edit_site_page' ) && gutenberg_is_edit_site_page( $current_screen->id ) ); - if ( $current_screen->is_block_editor || $is_site_editor ) { - load_remote_patterns(); - } - } -); diff --git a/lib/block-supports/align.php b/lib/block-supports/align.php deleted file mode 100644 index a33a7700a5d0b..0000000000000 --- a/lib/block-supports/align.php +++ /dev/null @@ -1,59 +0,0 @@ -<?php -/** - * Align block support flag. - * - * @package gutenberg - */ - -/** - * Registers the align block attribute for block types that support it. - * - * @param WP_Block_Type $block_type Block Type. - */ -function gutenberg_register_alignment_support( $block_type ) { - $has_align_support = gutenberg_block_has_support( $block_type, array( 'align' ), false ); - if ( $has_align_support ) { - if ( ! $block_type->attributes ) { - $block_type->attributes = array(); - } - - if ( ! array_key_exists( 'align', $block_type->attributes ) ) { - $block_type->attributes['align'] = array( - 'type' => 'string', - 'enum' => array( 'left', 'center', 'right', 'wide', 'full', '' ), - ); - } - } -} - -/** - * Add CSS classes for block alignment to the incoming attributes array. - * This will be applied to the block markup in the front-end. - * - * @param WP_Block_Type $block_type Block Type. - * @param array $block_attributes Block attributes. - * - * @return array Block alignment CSS classes and inline styles. - */ -function gutenberg_apply_alignment_support( $block_type, $block_attributes ) { - $attributes = array(); - $has_align_support = gutenberg_block_has_support( $block_type, array( 'align' ), false ); - if ( $has_align_support ) { - $has_block_alignment = array_key_exists( 'align', $block_attributes ); - - if ( $has_block_alignment ) { - $attributes['class'] = sprintf( 'align%s', $block_attributes['align'] ); - } - } - - return $attributes; -} - -// Register the block support. -WP_Block_Supports::get_instance()->register( - 'align', - array( - 'register_attribute' => 'gutenberg_register_alignment_support', - 'apply' => 'gutenberg_apply_alignment_support', - ) -); diff --git a/lib/block-supports/border.php b/lib/block-supports/border.php index c29bfd666efdc..d4d18fd6cb687 100644 --- a/lib/block-supports/border.php +++ b/lib/block-supports/border.php @@ -13,7 +13,7 @@ */ function gutenberg_register_border_support( $block_type ) { // Determine if any border related features are supported. - $has_border_support = gutenberg_block_has_support( $block_type, array( '__experimentalBorder' ) ); + $has_border_support = block_has_support( $block_type, array( '__experimentalBorder' ) ); $has_border_color_support = gutenberg_has_border_feature_support( $block_type, 'color' ); // Setup attributes and styles within that if needed. @@ -38,23 +38,28 @@ function gutenberg_register_border_support( $block_type ) { * Adds CSS classes and inline styles for border styles to the incoming * attributes array. This will be applied to the block markup in the front-end. * - * @param WP_Block_type $block_type Block type. + * @param WP_Block_Type $block_type Block type. * @param array $block_attributes Block attributes. * * @return array Border CSS classes and inline styles. */ function gutenberg_apply_border_support( $block_type, $block_attributes ) { - if ( gutenberg_skip_border_serialization( $block_type ) ) { + if ( gutenberg_should_skip_block_supports_serialization( $block_type, 'border' ) ) { return array(); } $classes = array(); $styles = array(); + $sides = array( 'top', 'right', 'bottom', 'left' ); + + $has_border_color_support = gutenberg_has_border_feature_support( $block_type, 'color' ); + $has_border_width_support = gutenberg_has_border_feature_support( $block_type, 'width' ); // Border radius. if ( gutenberg_has_border_feature_support( $block_type, 'radius' ) && - isset( $block_attributes['style']['border']['radius'] ) + isset( $block_attributes['style']['border']['radius'] ) && + ! gutenberg_should_skip_block_supports_serialization( $block_type, '__experimentalBorder', 'radius' ) ) { $border_radius = $block_attributes['style']['border']['radius']; @@ -78,7 +83,8 @@ function gutenberg_apply_border_support( $block_type, $block_attributes ) { // Border style. if ( gutenberg_has_border_feature_support( $block_type, 'style' ) && - isset( $block_attributes['style']['border']['style'] ) + isset( $block_attributes['style']['border']['style'] ) && + ! gutenberg_should_skip_block_supports_serialization( $block_type, '__experimentalBorder', 'style' ) ) { $border_style = $block_attributes['style']['border']['style']; $styles[] = sprintf( 'border-style: %s;', $border_style ); @@ -86,8 +92,9 @@ function gutenberg_apply_border_support( $block_type, $block_attributes ) { // Border width. if ( - gutenberg_has_border_feature_support( $block_type, 'width' ) && - isset( $block_attributes['style']['border']['width'] ) + $has_border_width_support && + isset( $block_attributes['style']['border']['width'] ) && + ! gutenberg_should_skip_block_supports_serialization( $block_type, '__experimentalBorder', 'width' ) ) { $border_width = $block_attributes['style']['border']['width']; @@ -100,7 +107,10 @@ function gutenberg_apply_border_support( $block_type, $block_attributes ) { } // Border color. - if ( gutenberg_has_border_feature_support( $block_type, 'color' ) ) { + if ( + $has_border_color_support && + ! gutenberg_should_skip_block_supports_serialization( $block_type, '__experimentalBorder', 'color' ) + ) { $has_named_border_color = array_key_exists( 'borderColor', $block_attributes ); $has_custom_border_color = isset( $block_attributes['style']['border']['color'] ); @@ -116,6 +126,18 @@ function gutenberg_apply_border_support( $block_type, $block_attributes ) { } } + // Generate styles for individual border sides. + if ( $has_border_color_support || $has_border_width_support ) { + foreach ( $sides as $side ) { + $border = _wp_array_get( $block_attributes, array( 'style', 'border', $side ), false ); + + if ( is_array( $border ) && ! empty( $border ) ) { + $split_border_styles = gutenberg_generate_individual_border_classes_and_styles( $side, $border, $block_type ); + $styles = array_merge( $styles, $split_border_styles ); + } + } + } + // Collect classes and styles. $attributes = array(); @@ -131,19 +153,53 @@ function gutenberg_apply_border_support( $block_type, $block_attributes ) { } /** - * Checks whether serialization of the current block's border properties should - * occur. + * Generates longhand CSS styles for an individual side border. + * + * If some values are omitted from the border configuration, using shorthand + * styles would lead to `initial` values being used instead of the more + * desirable inherited values. This could also lead to browser inconsistencies. * - * @param WP_Block_type $block_type Block type. + * @param string $side The side the styles are being generated for. + * @param array $border Array containing border color, style, and width values. + * @param WP_Block_Type $block_type Block type. * - * @return boolean + * @return array Longhand CSS border styles for a single side. */ -function gutenberg_skip_border_serialization( $block_type ) { - $border_support = _wp_array_get( $block_type->supports, array( '__experimentalBorder' ), false ); +function gutenberg_generate_individual_border_classes_and_styles( $side, $border, $block_type ) { + $styles = array(); + + if ( + isset( $border['width'] ) && + null !== $border['width'] && + ! gutenberg_should_skip_block_supports_serialization( $block_type, '__experimentalBorder', 'width' ) + ) { + $styles[] = sprintf( 'border-%s-width: %s;', $side, $border['width'] ); + } + + if ( + isset( $border['style'] ) && + null !== $border['style'] && + ! gutenberg_should_skip_block_supports_serialization( $block_type, '__experimentalBorder', 'style' ) + ) { + $styles[] = sprintf( 'border-%s-style: %s;', $side, $border['style'] ); + } + + $border_color = _wp_array_get( $border, array( 'color' ), null ); + + if ( + $border_color && + ! gutenberg_should_skip_block_supports_serialization( $block_type, '__experimentalBorder', 'color' ) + ) { + $has_color_preset = strpos( $border_color, 'var:preset|color|' ) !== false; + if ( $has_color_preset ) { + $named_color_slug = substr( $border_color, strrpos( $border_color, '|' ) + 1 ); + $styles [] = sprintf( 'border-%s-color: var(--wp--preset--color--%s);', $side, $named_color_slug ); + } else { + $styles [] = sprintf( 'border-%s-color: %s;', $side, $border['color'] ); + } + } - return is_array( $border_support ) && - array_key_exists( '__experimentalSkipSerialization', $border_support ) && - $border_support['__experimentalSkipSerialization']; + return $styles; } /** @@ -171,7 +227,7 @@ function gutenberg_has_border_feature_support( $block_type, $feature, $default = // Check if the specific feature has been opted into individually // via nested flag under `__experimentalBorder`. - return gutenberg_block_has_support( $block_type, array( '__experimentalBorder', $feature ), $default ); + return block_has_support( $block_type, array( '__experimentalBorder', $feature ), $default ); } // Register the block support. diff --git a/lib/block-supports/colors.php b/lib/block-supports/colors.php index 72e3e45ffcb3d..fe51ffede8d49 100644 --- a/lib/block-supports/colors.php +++ b/lib/block-supports/colors.php @@ -68,8 +68,7 @@ function gutenberg_apply_colors_support( $block_type, $block_attributes ) { if ( is_array( $color_support ) && - array_key_exists( '__experimentalSkipSerialization', $color_support ) && - $color_support['__experimentalSkipSerialization'] + gutenberg_should_skip_block_supports_serialization( $block_type, 'color' ) ) { return array(); } @@ -77,66 +76,40 @@ function gutenberg_apply_colors_support( $block_type, $block_attributes ) { $has_text_colors_support = true === $color_support || ( is_array( $color_support ) && _wp_array_get( $color_support, array( 'text' ), true ) ); $has_background_colors_support = true === $color_support || ( is_array( $color_support ) && _wp_array_get( $color_support, array( 'background' ), true ) ); $has_gradients_support = _wp_array_get( $color_support, array( 'gradients' ), false ); - $classes = array(); - $styles = array(); + $color_block_styles = array(); // Text colors. // Check support for text colors. - if ( $has_text_colors_support ) { - $has_named_text_color = array_key_exists( 'textColor', $block_attributes ); - $has_custom_text_color = isset( $block_attributes['style']['color']['text'] ); - - // Apply required generic class. - if ( $has_custom_text_color || $has_named_text_color ) { - $classes[] = 'has-text-color'; - } - // Apply color class or inline style. - if ( $has_named_text_color ) { - $classes[] = sprintf( 'has-%s-color', $block_attributes['textColor'] ); - } elseif ( $has_custom_text_color ) { - $styles[] = sprintf( 'color: %s;', $block_attributes['style']['color']['text'] ); - } + if ( $has_text_colors_support && ! gutenberg_should_skip_block_supports_serialization( $block_type, 'color', 'text' ) ) { + $preset_text_color = array_key_exists( 'textColor', $block_attributes ) ? "var:preset|color|{$block_attributes['textColor']}" : null; + $custom_text_color = _wp_array_get( $block_attributes, array( 'style', 'color', 'text' ), null ); + $color_block_styles['text'] = $preset_text_color ? $preset_text_color : $custom_text_color; } // Background colors. - if ( $has_background_colors_support ) { - $has_named_background_color = array_key_exists( 'backgroundColor', $block_attributes ); - $has_custom_background_color = isset( $block_attributes['style']['color']['background'] ); - - // Apply required background class. - if ( $has_custom_background_color || $has_named_background_color ) { - $classes[] = 'has-background'; - } - // Apply background color classes or styles. - if ( $has_named_background_color ) { - $classes[] = sprintf( 'has-%s-background-color', $block_attributes['backgroundColor'] ); - } elseif ( $has_custom_background_color ) { - $styles[] = sprintf( 'background-color: %s;', $block_attributes['style']['color']['background'] ); - } + if ( $has_background_colors_support && ! gutenberg_should_skip_block_supports_serialization( $block_type, 'color', 'background' ) ) { + $preset_background_color = array_key_exists( 'backgroundColor', $block_attributes ) ? "var:preset|color|{$block_attributes['backgroundColor']}" : null; + $custom_background_color = _wp_array_get( $block_attributes, array( 'style', 'color', 'background' ), null ); + $color_block_styles['background'] = $preset_background_color ? $preset_background_color : $custom_background_color; } // Gradients. - if ( $has_gradients_support ) { - $has_named_gradient = array_key_exists( 'gradient', $block_attributes ); - $has_custom_gradient = isset( $block_attributes['style']['color']['gradient'] ); - - if ( $has_named_gradient || $has_custom_gradient ) { - $classes[] = 'has-background'; - } - // Apply required background class. - if ( $has_named_gradient ) { - $classes[] = sprintf( 'has-%s-gradient-background', $block_attributes['gradient'] ); - } elseif ( $has_custom_gradient ) { - $styles[] = sprintf( 'background: %s;', $block_attributes['style']['color']['gradient'] ); - } + + if ( $has_gradients_support && ! gutenberg_should_skip_block_supports_serialization( $block_type, 'color', 'gradients' ) ) { + $preset_gradient_color = array_key_exists( 'gradient', $block_attributes ) ? "var:preset|gradient|{$block_attributes['gradient']}" : null; + $custom_gradient_color = _wp_array_get( $block_attributes, array( 'style', 'color', 'gradient' ), null ); + $color_block_styles['gradient'] = $preset_gradient_color ? $preset_gradient_color : $custom_gradient_color; } $attributes = array(); - if ( ! empty( $classes ) ) { - $attributes['class'] = implode( ' ', $classes ); + $styles = gutenberg_style_engine_generate( array( 'color' => $color_block_styles ) ); + + if ( ! empty( $styles['classnames'] ) ) { + $attributes['class'] = $styles['classnames']; } - if ( ! empty( $styles ) ) { - $attributes['style'] = implode( ' ', $styles ); + + if ( ! empty( $styles['css'] ) ) { + $attributes['style'] = $styles['css']; } return $attributes; diff --git a/lib/block-supports/custom-classname.php b/lib/block-supports/custom-classname.php deleted file mode 100644 index 612eaf30bd50c..0000000000000 --- a/lib/block-supports/custom-classname.php +++ /dev/null @@ -1,58 +0,0 @@ -<?php -/** - * Custom classname block support flag. - * - * @package gutenberg - */ - -/** - * Registers the custom classname block attribute for block types that support it. - * - * @param WP_Block_Type $block_type Block Type. - */ -function gutenberg_register_custom_classname_support( $block_type ) { - $has_custom_classname_support = gutenberg_block_has_support( $block_type, array( 'customClassName' ), true ); - - if ( $has_custom_classname_support ) { - if ( ! $block_type->attributes ) { - $block_type->attributes = array(); - } - - if ( ! array_key_exists( 'className', $block_type->attributes ) ) { - $block_type->attributes['className'] = array( - 'type' => 'string', - ); - } - } -} - -/** - * Add the custom classnames to the output. - * - * @param WP_Block_Type $block_type Block Type. - * @param array $block_attributes Block attributes. - * - * @return array Block CSS classes and inline styles. - */ -function gutenberg_apply_custom_classname_support( $block_type, $block_attributes ) { - $has_custom_classname_support = gutenberg_block_has_support( $block_type, array( 'customClassName' ), true ); - $attributes = array(); - if ( $has_custom_classname_support ) { - $has_custom_classnames = array_key_exists( 'className', $block_attributes ); - - if ( $has_custom_classnames ) { - $attributes['class'] = $block_attributes['className']; - } - } - - return $attributes; -} - -// Register the block support. -WP_Block_Supports::get_instance()->register( - 'custom-classname', - array( - 'register_attribute' => 'gutenberg_register_custom_classname_support', - 'apply' => 'gutenberg_apply_custom_classname_support', - ) -); diff --git a/lib/block-supports/dimensions.php b/lib/block-supports/dimensions.php new file mode 100644 index 0000000000000..8fe5b82c3e765 --- /dev/null +++ b/lib/block-supports/dimensions.php @@ -0,0 +1,67 @@ +<?php +/** + * Dimensions block support flag. + * + * This does not include the `spacing` block support even though that visually + * appears under the "Dimensions" panel in the editor. It remains in its + * original `spacing.php` file for compatibility with core. + * + * @package gutenberg + */ + +/** + * Registers the style block attribute for block types that support it. + * + * @param WP_Block_Type $block_type Block Type. + */ +function gutenberg_register_dimensions_support( $block_type ) { + // Setup attributes and styles within that if needed. + if ( ! $block_type->attributes ) { + $block_type->attributes = array(); + } + + // Check for existing style attribute definition e.g. from block.json. + if ( array_key_exists( 'style', $block_type->attributes ) ) { + return; + } + + $has_dimensions_support = block_has_support( $block_type, array( '__experimentalDimensions' ), false ); + // Future block supports such as height & width will be added here. + + if ( $has_dimensions_support ) { + $block_type->attributes['style'] = array( + 'type' => 'object', + ); + } +} + +/** + * Add CSS classes for block dimensions to the incoming attributes array. + * This will be applied to the block markup in the front-end. + * + * @param WP_Block_Type $block_type Block Type. + * @param array $block_attributes Block attributes. + * + * @return array Block dimensions CSS classes and inline styles. + */ +function gutenberg_apply_dimensions_support( $block_type, $block_attributes ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable + if ( gutenberg_should_skip_block_supports_serialization( $block_type, '__experimentalDimensions' ) ) { + return array(); + } + + $styles = array(); + + // Height support to be added in near future. + // Width support to be added in near future. + + return empty( $styles ) ? array() : array( 'style' => implode( ' ', $styles ) ); +} + +// Register the block support. +WP_Block_Supports::get_instance()->register( + 'dimensions', + array( + 'register_attribute' => 'gutenberg_register_dimensions_support', + 'apply' => 'gutenberg_apply_dimensions_support', + ) +); diff --git a/lib/block-supports/duotone.php b/lib/block-supports/duotone.php index 5869d521b2d38..63d258bfe8959 100644 --- a/lib/block-supports/duotone.php +++ b/lib/block-supports/duotone.php @@ -36,6 +36,25 @@ function gutenberg_tinycolor_bound01( $n, $max ) { return ( $n % $max ) / (float) $max; } +/** + * Direct port of tinycolor's boundAlpha function to maintain consistency with + * how tinycolor works. + * + * @see https://github.com/bgrins/TinyColor + * + * @param mixed $n Number of unknown type. + * @return float Value in the range [0,1]. + */ +function gutenberg_tinycolor_bound_alpha( $n ) { + if ( is_numeric( $n ) ) { + $n = (float) $n; + if ( $n >= 0 && $n <= 1 ) { + return $n; + } + } + return 1; +} + /** * Round and convert values of an RGB object. * @@ -116,8 +135,7 @@ function gutenberg_tinycolor_hsl_to_rgb( $hsl_color ) { /** * Parses hex, hsl, and rgb CSS strings using the same regex as tinycolor v1.4.2 - * used in the JavaScript. Only colors output from react-color are implemented - * and the alpha value is ignored as it is not used in duotone. + * used in the JavaScript. Only colors output from react-color are implemented. * * @see https://github.com/bgrins/TinyColor * @see https://github.com/casesandberg/react-color/ @@ -138,93 +156,243 @@ function gutenberg_tinycolor_string_to_rgb( $color_str ) { $rgb_regexp = '/^rgb' . $permissive_match3 . '$/'; if ( preg_match( $rgb_regexp, $color_str, $match ) ) { - return gutenberg_tinycolor_rgb_to_rgb( + $rgb = gutenberg_tinycolor_rgb_to_rgb( array( 'r' => $match[1], 'g' => $match[2], 'b' => $match[3], ) ); + + $rgb['a'] = 1; + + return $rgb; } $rgba_regexp = '/^rgba' . $permissive_match4 . '$/'; if ( preg_match( $rgba_regexp, $color_str, $match ) ) { - return gutenberg_tinycolor_rgb_to_rgb( + $rgb = gutenberg_tinycolor_rgb_to_rgb( array( 'r' => $match[1], 'g' => $match[2], 'b' => $match[3], ) ); + + $rgb['a'] = gutenberg_tinycolor_bound_alpha( $match[4] ); + + return $rgb; } $hsl_regexp = '/^hsl' . $permissive_match3 . '$/'; if ( preg_match( $hsl_regexp, $color_str, $match ) ) { - return gutenberg_tinycolor_hsl_to_rgb( + $rgb = gutenberg_tinycolor_hsl_to_rgb( array( 'h' => $match[1], 's' => $match[2], 'l' => $match[3], ) ); + + $rgb['a'] = 1; + + return $rgb; } $hsla_regexp = '/^hsla' . $permissive_match4 . '$/'; if ( preg_match( $hsla_regexp, $color_str, $match ) ) { - return gutenberg_tinycolor_hsl_to_rgb( + $rgb = gutenberg_tinycolor_hsl_to_rgb( array( 'h' => $match[1], 's' => $match[2], 'l' => $match[3], ) ); + + $rgb['a'] = gutenberg_tinycolor_bound_alpha( $match[4] ); + + return $rgb; } $hex8_regexp = '/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/'; if ( preg_match( $hex8_regexp, $color_str, $match ) ) { - return gutenberg_tinycolor_rgb_to_rgb( + $rgb = gutenberg_tinycolor_rgb_to_rgb( array( 'r' => base_convert( $match[1], 16, 10 ), 'g' => base_convert( $match[2], 16, 10 ), 'b' => base_convert( $match[3], 16, 10 ), ) ); + + $rgb['a'] = gutenberg_tinycolor_bound_alpha( + base_convert( $match[4], 16, 10 ) / 255 + ); + + return $rgb; } $hex6_regexp = '/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/'; if ( preg_match( $hex6_regexp, $color_str, $match ) ) { - return gutenberg_tinycolor_rgb_to_rgb( + $rgb = gutenberg_tinycolor_rgb_to_rgb( array( 'r' => base_convert( $match[1], 16, 10 ), 'g' => base_convert( $match[2], 16, 10 ), 'b' => base_convert( $match[3], 16, 10 ), ) ); + + $rgb['a'] = 1; + + return $rgb; } $hex4_regexp = '/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/'; if ( preg_match( $hex4_regexp, $color_str, $match ) ) { - return gutenberg_tinycolor_rgb_to_rgb( + $rgb = gutenberg_tinycolor_rgb_to_rgb( array( 'r' => base_convert( $match[1] . $match[1], 16, 10 ), 'g' => base_convert( $match[2] . $match[2], 16, 10 ), 'b' => base_convert( $match[3] . $match[3], 16, 10 ), ) ); + + $rgb['a'] = gutenberg_tinycolor_bound_alpha( + base_convert( $match[4] . $match[4], 16, 10 ) / 255 + ); + + return $rgb; } $hex3_regexp = '/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/'; if ( preg_match( $hex3_regexp, $color_str, $match ) ) { - return gutenberg_tinycolor_rgb_to_rgb( + $rgb = gutenberg_tinycolor_rgb_to_rgb( array( 'r' => base_convert( $match[1] . $match[1], 16, 10 ), 'g' => base_convert( $match[2] . $match[2], 16, 10 ), 'b' => base_convert( $match[3] . $match[3], 16, 10 ), ) ); + + $rgb['a'] = 1; + + return $rgb; + } + + // The JS color picker considers the string "transparent" to be a hex value, + // so we need to handle it here as a special case. + if ( 'transparent' === $color_str ) { + return array( + 'r' => 0, + 'g' => 0, + 'b' => 0, + 'a' => 0, + ); } } +/** + * Returns the prefixed id for the duotone filter for use as a CSS id. + * + * @param array $preset Duotone preset value as seen in theme.json. + * @return string Duotone filter CSS id. + */ +function gutenberg_get_duotone_filter_id( $preset ) { + if ( ! isset( $preset['slug'] ) ) { + return ''; + } + + return 'wp-duotone-' . $preset['slug']; +} + +/** + * Returns the CSS filter property url to reference the rendered SVG. + * + * @param array $preset Duotone preset value as seen in theme.json. + * @return string Duotone CSS filter property url value. + */ +function gutenberg_get_duotone_filter_property( $preset ) { + $filter_id = gutenberg_get_duotone_filter_id( $preset ); + return "url('#" . $filter_id . "')"; +} + +/** + * Returns the duotone filter SVG string for the preset. + * + * @param array $preset Duotone preset value as seen in theme.json. + * @return string Duotone SVG filter. + */ +function gutenberg_get_duotone_filter_svg( $preset ) { + $filter_id = gutenberg_get_duotone_filter_id( $preset ); + + $duotone_values = array( + 'r' => array(), + 'g' => array(), + 'b' => array(), + 'a' => array(), + ); + + if ( ! isset( $preset['colors'] ) || ! is_array( $preset['colors'] ) ) { + $preset['colors'] = array(); + } + + foreach ( $preset['colors'] as $color_str ) { + $color = gutenberg_tinycolor_string_to_rgb( $color_str ); + + $duotone_values['r'][] = $color['r'] / 255; + $duotone_values['g'][] = $color['g'] / 255; + $duotone_values['b'][] = $color['b'] / 255; + $duotone_values['a'][] = $color['a']; + } + + ob_start(); + + ?> + + <svg + xmlns="http://www.w3.org/2000/svg" + viewBox="0 0 0 0" + width="0" + height="0" + focusable="false" + role="none" + style="visibility: hidden; position: absolute; left: -9999px; overflow: hidden;" + > + <defs> + <filter id="<?php echo esc_attr( $filter_id ); ?>"> + <feColorMatrix + color-interpolation-filters="sRGB" + type="matrix" + values=" + .299 .587 .114 0 0 + .299 .587 .114 0 0 + .299 .587 .114 0 0 + .299 .587 .114 0 0 + " + /> + <feComponentTransfer color-interpolation-filters="sRGB" > + <feFuncR type="table" tableValues="<?php echo esc_attr( implode( ' ', $duotone_values['r'] ) ); ?>" /> + <feFuncG type="table" tableValues="<?php echo esc_attr( implode( ' ', $duotone_values['g'] ) ); ?>" /> + <feFuncB type="table" tableValues="<?php echo esc_attr( implode( ' ', $duotone_values['b'] ) ); ?>" /> + <feFuncA type="table" tableValues="<?php echo esc_attr( implode( ' ', $duotone_values['a'] ) ); ?>" /> + </feComponentTransfer> + <feComposite in2="SourceGraphic" operator="in" /> + </filter> + </defs> + </svg> + + <?php + + $svg = ob_get_clean(); + + if ( ! defined( 'SCRIPT_DEBUG' ) || ! SCRIPT_DEBUG ) { + // Clean up the whitespace. + $svg = preg_replace( "/[\r\n\t ]+/", ' ', $svg ); + $svg = preg_replace( '/> </', '><', $svg ); + $svg = trim( $svg ); + } + + return $svg; +} /** * Registers the style and colors block attributes for block types that support it. @@ -274,92 +442,59 @@ function gutenberg_render_duotone_support( $block_content, $block ) { return $block_content; } - $duotone_colors = $block['attrs']['style']['color']['duotone']; - - $duotone_values = array( - 'r' => array(), - 'g' => array(), - 'b' => array(), + $filter_preset = array( + 'slug' => wp_unique_id( sanitize_key( implode( '-', $block['attrs']['style']['color']['duotone'] ) . '-' ) ), + 'colors' => $block['attrs']['style']['color']['duotone'], ); - foreach ( $duotone_colors as $color_str ) { - $color = gutenberg_tinycolor_string_to_rgb( $color_str ); - - $duotone_values['r'][] = $color['r'] / 255; - $duotone_values['g'][] = $color['g'] / 255; - $duotone_values['b'][] = $color['b'] / 255; + $filter_property = gutenberg_get_duotone_filter_property( $filter_preset ); + $filter_id = gutenberg_get_duotone_filter_id( $filter_preset ); + $filter_svg = gutenberg_get_duotone_filter_svg( $filter_preset ); + + $scope = '.' . $filter_id; + $selectors = explode( ',', $duotone_support ); + $scoped = array(); + foreach ( $selectors as $sel ) { + $scoped[] = $scope . ' ' . trim( $sel ); } + $selector = implode( ', ', $scoped ); - $duotone_id = 'wp-duotone-filter-' . uniqid(); - - $selectors = explode( ',', $duotone_support ); - $selectors_scoped = array_map( - function ( $selector ) use ( $duotone_id ) { - return '.' . $duotone_id . ' ' . trim( $selector ); - }, - $selectors - ); - $selectors_group = implode( ', ', $selectors_scoped ); + // !important is needed because these styles render before global styles, + // and they should be overriding the duotone filters set by global styles. + $filter_style = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG + ? $selector . " {\n\tfilter: " . $filter_property . " !important;\n}\n" + : $selector . '{filter:' . $filter_property . ' !important;}'; - ob_start(); + wp_register_style( $filter_id, false, array(), true, true ); + wp_add_inline_style( $filter_id, $filter_style ); + wp_enqueue_style( $filter_id ); - ?> - - <style> - <?php echo $selectors_group; ?> { - filter: url( <?php echo esc_url( '#' . $duotone_id ); ?> ); + add_action( + 'wp_footer', + static function () use ( $filter_svg, $selector ) { + echo $filter_svg; + + // Safari renders elements incorrectly on first paint when the SVG + // filter comes after the content that it is filtering, so we force + // a repaint with a WebKit hack which solves the issue. + global $is_safari; + if ( $is_safari ) { + printf( + // Simply accessing el.offsetHeight flushes layout and style + // changes in WebKit without having to wait for setTimeout. + '<script>( function() { var el = document.querySelector( %s ); var display = el.style.display; el.style.display = "none"; el.offsetHeight; el.style.display = display; } )();</script>', + wp_json_encode( $selector ) + ); + } } - </style> - - <svg - xmlns:xlink="http://www.w3.org/1999/xlink" - viewBox="0 0 0 0" - width="0" - height="0" - focusable="false" - role="none" - style="visibility: hidden; position: absolute; left: -9999px; overflow: hidden;" - > - <defs> - <filter id="<?php echo esc_attr( $duotone_id ); ?>"> - <feColorMatrix - type="matrix" - <?php // phpcs:disable Generic.WhiteSpace.DisallowSpaceIndent ?> - values=".299 .587 .114 0 0 - .299 .587 .114 0 0 - .299 .587 .114 0 0 - 0 0 0 1 0" - <?php // phpcs:enable Generic.WhiteSpace.DisallowSpaceIndent ?> - /> - <feComponentTransfer color-interpolation-filters="sRGB" > - <feFuncR type="table" tableValues="<?php echo esc_attr( implode( ' ', $duotone_values['r'] ) ); ?>" /> - <feFuncG type="table" tableValues="<?php echo esc_attr( implode( ' ', $duotone_values['g'] ) ); ?>" /> - <feFuncB type="table" tableValues="<?php echo esc_attr( implode( ' ', $duotone_values['b'] ) ); ?>" /> - </feComponentTransfer> - </filter> - </defs> - </svg> - - <?php - - $duotone = ob_get_clean(); + ); // Like the layout hook, this assumes the hook only applies to blocks with a single wrapper. - $content = preg_replace( + return preg_replace( '/' . preg_quote( 'class="', '/' ) . '/', - 'class="' . $duotone_id . ' ', + 'class="' . $filter_id . ' ', $block_content, 1 ); - - add_action( - // Ideally we should use wp_head, but SVG defs can't be put in there. - 'wp_footer', - function () use ( $duotone ) { - echo $duotone; - } - ); - - return $content; } // Register the block support. diff --git a/lib/block-supports/elements.php b/lib/block-supports/elements.php index 48fd10d32767e..62671c5f81d01 100644 --- a/lib/block-supports/elements.php +++ b/lib/block-supports/elements.php @@ -6,13 +6,34 @@ */ /** - * Render the elements stylesheet. + * Get the elements class names. + * + * @param array $block Block object. + * @return string The unique class name. + */ +function gutenberg_get_elements_class_name( $block ) { + return 'wp-elements-' . md5( serialize( $block ) ); +} + +/** + * Update the block content with elements class names. * * @param string $block_content Rendered block content. * @param array $block Block object. * @return string Filtered block content. */ function gutenberg_render_elements_support( $block_content, $block ) { + if ( ! $block_content ) { + return $block_content; + } + + $block_type = WP_Block_Type_Registry::get_instance()->get_registered( $block['blockName'] ); + $skip_link_color_serialization = gutenberg_should_skip_block_supports_serialization( $block_type, 'color', 'link' ); + + if ( $skip_link_color_serialization ) { + return $block_content; + } + $link_color = null; if ( ! empty( $block['attrs'] ) ) { $link_color = _wp_array_get( $block['attrs'], array( 'style', 'elements', 'link', 'color', 'text' ), null ); @@ -28,17 +49,7 @@ function gutenberg_render_elements_support( $block_content, $block ) { return $block_content; } - $class_name = 'wp-elements-' . uniqid(); - - if ( strpos( $link_color, 'var:preset|color|' ) !== false ) { - // Get the name from the string and add proper styles. - $index_to_splice = strrpos( $link_color, '|' ) + 1; - $link_color_name = substr( $link_color, $index_to_splice ); - $link_color = "var(--wp--preset--color--$link_color_name)"; - } - $link_color_declaration = esc_html( safecss_filter_attr( "color: $link_color" ) ); - - $style = "<style>.$class_name a{" . $link_color_declaration . " !important;}</style>\n"; + $class_name = gutenberg_get_elements_class_name( $block ); // Like the layout hook this assumes the hook only applies to blocks with a single wrapper. // Retrieve the opening tag of the first HTML element. @@ -59,10 +70,63 @@ function gutenberg_render_elements_support( $block_content, $block ) { $first_element_offset = $html_element_matches[0][1]; $content = substr_replace( $block_content, ' class="' . $class_name . '"', $first_element_offset + strlen( $first_element ) - 1, 0 ); } - return $content . $style; + return $content; +} + +/** + * Render the elements stylesheet. + * + * In the case of nested blocks we want the parent element styles to be rendered before their descendants. + * This solves the issue of an element (e.g.: link color) being styled in both the parent and a descendant: + * we want the descendant style to take priority, and this is done by loading it after, in DOM order. + * + * @param string|null $pre_render The pre-rendered content. Default null. + * @param array $block The block being rendered. + * + * @return null + */ +function gutenberg_render_elements_support_styles( $pre_render, $block ) { + $block_type = WP_Block_Type_Registry::get_instance()->get_registered( $block['blockName'] ); + $skip_link_color_serialization = gutenberg_should_skip_block_supports_serialization( $block_type, 'color', 'link' ); + if ( $skip_link_color_serialization ) { + return null; + } + + $link_color = null; + if ( ! empty( $block['attrs'] ) ) { + $link_color = _wp_array_get( $block['attrs'], array( 'style', 'elements', 'link', 'color', 'text' ), null ); + } + + /* + * For now we only care about link color. + * This code in the future when we have a public API + * should take advantage of WP_Theme_JSON_Gutenberg::compute_style_properties + * and work for any element and style. + */ + if ( null === $link_color ) { + return null; + } + + $class_name = gutenberg_get_elements_class_name( $block ); + + if ( strpos( $link_color, 'var:preset|color|' ) !== false ) { + // Get the name from the string and add proper styles. + $index_to_splice = strrpos( $link_color, '|' ) + 1; + $link_color_name = substr( $link_color, $index_to_splice ); + $link_color = "var(--wp--preset--color--$link_color_name)"; + } + $link_color_declaration = esc_html( safecss_filter_attr( "color: $link_color" ) ); + + $style = ".$class_name a{" . $link_color_declaration . ';}'; + + gutenberg_enqueue_block_support_styles( $style ); + + return null; } -// Remove WordPress core filter to avoid rendering duplicate elements stylesheet. +// Remove WordPress core filters to avoid rendering duplicate elements stylesheet & attaching classes twice. remove_filter( 'render_block', 'wp_render_elements_support', 10, 2 ); +remove_filter( 'pre_render_block', 'wp_render_elements_support_styles', 10, 2 ); add_filter( 'render_block', 'gutenberg_render_elements_support', 10, 2 ); +add_filter( 'pre_render_block', 'gutenberg_render_elements_support_styles', 10, 2 ); diff --git a/lib/block-supports/generated-classname.php b/lib/block-supports/generated-classname.php deleted file mode 100644 index 8be75f6431fb2..0000000000000 --- a/lib/block-supports/generated-classname.php +++ /dev/null @@ -1,61 +0,0 @@ -<?php -/** - * Generated classname block support flag. - * - * @package gutenberg - */ - -/** - * Get the generated classname from a given block name. - * - * @param string $block_name Block Name. - * @return string Generated classname. - */ -function gutenberg_get_block_default_classname( $block_name ) { - // Generated HTML classes for blocks follow the `wp-block-{name}` nomenclature. - // Blocks provided by WordPress drop the prefixes 'core/' or 'core-' (historically used in 'core-embed/'). - $classname = 'wp-block-' . preg_replace( - '/^core-/', - '', - str_replace( '/', '-', $block_name ) - ); - - /** - * Filters the default block className for server rendered blocks. - * - * @param string $class_name The current applied classname. - * @param string $block_name The block name. - */ - $classname = apply_filters( 'block_default_classname', $classname, $block_name ); - - return $classname; -} - -/** - * Add the generated classnames to the output. - * - * @param WP_Block_Type $block_type Block Type. - * - * @return array Block CSS classes and inline styles. - */ -function gutenberg_apply_generated_classname_support( $block_type ) { - $attributes = array(); - $has_generated_classname_support = gutenberg_block_has_support( $block_type, array( 'className' ), true ); - if ( $has_generated_classname_support ) { - $block_classname = gutenberg_get_block_default_classname( $block_type->name ); - - if ( $block_classname ) { - $attributes['class'] = $block_classname; - } - } - - return $attributes; -} - -// Register the block support. -WP_Block_Supports::get_instance()->register( - 'generated-classname', - array( - 'apply' => 'gutenberg_apply_generated_classname_support', - ) -); diff --git a/lib/block-supports/layout.php b/lib/block-supports/layout.php index 7baa5fec4ffd6..01e6b9324e5a5 100644 --- a/lib/block-supports/layout.php +++ b/lib/block-supports/layout.php @@ -11,7 +11,7 @@ * @param WP_Block_Type $block_type Block Type. */ function gutenberg_register_layout_support( $block_type ) { - $support_layout = gutenberg_block_has_support( $block_type, array( '__experimentalLayout' ), false ); + $support_layout = block_has_support( $block_type, array( '__experimentalLayout' ), false ); if ( $support_layout ) { if ( ! $block_type->attributes ) { $block_type->attributes = array(); @@ -28,18 +28,22 @@ function gutenberg_register_layout_support( $block_type ) { /** * Generates the CSS corresponding to the provided layout. * - * @param string $selector CSS selector. - * @param array $layout Layout object. + * @param string $selector CSS selector. + * @param array $layout Layout object. The one that is passed has already checked the existence of default block layout. + * @param boolean $has_block_gap_support Whether the theme has support for the block gap. + * @param string $gap_value The block gap value to apply. + * @param boolean $should_skip_gap_serialization Whether to skip applying the user-defined value set in the editor. + * @param string $fallback_gap_value The block gap value to apply. * - * @return string CSS style. + * @return string CSS style. */ -function gutenberg_get_layout_style( $selector, $layout ) { +function gutenberg_get_layout_style( $selector, $layout, $has_block_gap_support = false, $gap_value = null, $should_skip_gap_serialization = false, $fallback_gap_value = '0.5em' ) { $layout_type = isset( $layout['type'] ) ? $layout['type'] : 'default'; $style = ''; if ( 'default' === $layout_type ) { - $content_size = isset( $layout['contentSize'] ) ? $layout['contentSize'] : null; - $wide_size = isset( $layout['wideSize'] ) ? $layout['wideSize'] : null; + $content_size = isset( $layout['contentSize'] ) ? $layout['contentSize'] : ''; + $wide_size = isset( $layout['wideSize'] ) ? $layout['wideSize'] : ''; $all_max_width_value = $content_size ? $content_size : $wide_size; $wide_max_width_value = $wide_size ? $wide_size : $content_size; @@ -49,27 +53,93 @@ function gutenberg_get_layout_style( $selector, $layout ) { $all_max_width_value = wp_strip_all_tags( explode( ';', $all_max_width_value )[0] ); $wide_max_width_value = wp_strip_all_tags( explode( ';', $wide_max_width_value )[0] ); - $style = ''; if ( $content_size || $wide_size ) { - $style = "$selector > * {"; + $style = "$selector > :where(:not(.alignleft):not(.alignright)) {"; $style .= 'max-width: ' . esc_html( $all_max_width_value ) . ';'; $style .= 'margin-left: auto !important;'; $style .= 'margin-right: auto !important;'; $style .= '}'; $style .= "$selector > .alignwide { max-width: " . esc_html( $wide_max_width_value ) . ';}'; - $style .= "$selector .alignfull { max-width: none; }"; } - $style .= "$selector .alignleft { float: left; margin-right: 2em; }"; - $style .= "$selector .alignright { float: right; margin-left: 2em; }"; + $style .= "$selector > .alignleft { float: left; margin-inline-start: 0; margin-inline-end: 2em; }"; + $style .= "$selector > .alignright { float: right; margin-inline-start: 2em; margin-inline-end: 0; }"; + $style .= "$selector > .aligncenter { margin-left: auto !important; margin-right: auto !important; }"; + if ( $has_block_gap_support ) { + if ( is_array( $gap_value ) ) { + $gap_value = isset( $gap_value['top'] ) ? $gap_value['top'] : null; + } + $gap_style = $gap_value && ! $should_skip_gap_serialization ? $gap_value : 'var( --wp--style--block-gap )'; + $style .= "$selector > * { margin-block-start: 0; margin-block-end: 0; }"; + $style .= "$selector > * + * { margin-block-start: $gap_style; margin-block-end: 0; }"; + } } elseif ( 'flex' === $layout_type ) { + $layout_orientation = isset( $layout['orientation'] ) ? $layout['orientation'] : 'horizontal'; + + $justify_content_options = array( + 'left' => 'flex-start', + 'right' => 'flex-end', + 'center' => 'center', + ); + + $vertical_alignment_options = array( + 'top' => 'flex-start', + 'center' => 'center', + 'bottom' => 'flex-end', + ); + + if ( 'horizontal' === $layout_orientation ) { + $justify_content_options += array( 'space-between' => 'space-between' ); + } + + $flex_wrap_options = array( 'wrap', 'nowrap' ); + $flex_wrap = ! empty( $layout['flexWrap'] ) && in_array( $layout['flexWrap'], $flex_wrap_options, true ) ? + $layout['flexWrap'] : + 'wrap'; + $style = "$selector {"; $style .= 'display: flex;'; - $style .= 'column-gap: 0.5em;'; - $style .= 'align-items: center;'; + if ( $has_block_gap_support ) { + if ( is_array( $gap_value ) ) { + $gap_row = isset( $gap_value['top'] ) ? $gap_value['top'] : $fallback_gap_value; + $gap_column = isset( $gap_value['left'] ) ? $gap_value['left'] : $fallback_gap_value; + $gap_value = $gap_row === $gap_column ? $gap_row : $gap_row . ' ' . $gap_column; + } + $gap_style = $gap_value && ! $should_skip_gap_serialization ? $gap_value : "var( --wp--style--block-gap, $fallback_gap_value )"; + $style .= "gap: $gap_style;"; + } else { + $style .= "gap: $fallback_gap_value;"; + } + + $style .= "flex-wrap: $flex_wrap;"; + if ( 'horizontal' === $layout_orientation ) { + /** + * Add this style only if is not empty for backwards compatibility, + * since we intend to convert blocks that had flex layout implemented + * by custom css. + */ + if ( ! empty( $layout['justifyContent'] ) && array_key_exists( $layout['justifyContent'], $justify_content_options ) ) { + $style .= "justify-content: {$justify_content_options[ $layout['justifyContent'] ]};"; + } + + if ( ! empty( $layout['verticalAlignment'] ) && array_key_exists( $layout['verticalAlignment'], $vertical_alignment_options ) ) { + $style .= "align-items: {$vertical_alignment_options[ $layout['verticalAlignment'] ]};"; + } else { + $style .= 'align-items: center;'; + } + } else { + $style .= 'flex-direction: column;'; + if ( ! empty( $layout['justifyContent'] ) && array_key_exists( $layout['justifyContent'], $justify_content_options ) ) { + $style .= "align-items: {$justify_content_options[ $layout['justifyContent'] ]};"; + } else { + $style .= 'align-items: flex-start;'; + } + } $style .= '}'; + + $style .= "$selector > * { margin: 0; }"; } return $style; @@ -84,41 +154,53 @@ function gutenberg_get_layout_style( $selector, $layout ) { */ function gutenberg_render_layout_support_flag( $block_content, $block ) { $block_type = WP_Block_Type_Registry::get_instance()->get_registered( $block['blockName'] ); - $support_layout = gutenberg_block_has_support( $block_type, array( '__experimentalLayout' ), false ); - if ( ! $support_layout || ! isset( $block['attrs']['layout'] ) ) { + $support_layout = block_has_support( $block_type, array( '__experimentalLayout' ), false ); + + if ( ! $support_layout ) { return $block_content; } - $used_layout = $block['attrs']['layout']; + $block_gap = gutenberg_get_global_settings( array( 'spacing', 'blockGap' ) ); + $default_layout = gutenberg_get_global_settings( array( 'layout' ) ); + $has_block_gap_support = isset( $block_gap ) ? null !== $block_gap : false; + $default_block_layout = _wp_array_get( $block_type->supports, array( '__experimentalLayout', 'default' ), array() ); + $used_layout = isset( $block['attrs']['layout'] ) ? $block['attrs']['layout'] : $default_block_layout; if ( isset( $used_layout['inherit'] ) && $used_layout['inherit'] ) { - $tree = WP_Theme_JSON_Resolver_Gutenberg::get_merged_data( array(), 'theme' ); - $default_layout = _wp_array_get( $tree->get_settings(), array( 'layout' ) ); if ( ! $default_layout ) { return $block_content; } $used_layout = $default_layout; } - $id = uniqid(); - $style = gutenberg_get_layout_style( ".wp-container-$id", $used_layout ); + $class_name = wp_unique_id( 'wp-container-' ); + $gap_value = _wp_array_get( $block, array( 'attrs', 'style', 'spacing', 'blockGap' ) ); + // Skip if gap value contains unsupported characters. + // Regex for CSS value borrowed from `safecss_filter_attr`, and used here + // because we only want to match against the value, not the CSS attribute. + if ( is_array( $gap_value ) ) { + foreach ( $gap_value as $key => $value ) { + $gap_value[ $key ] = $value && preg_match( '%[\\\(&=}]|/\*%', $value ) ? null : $value; + } + } else { + $gap_value = $gap_value && preg_match( '%[\\\(&=}]|/\*%', $gap_value ) ? null : $gap_value; + } + + $fallback_gap_value = _wp_array_get( $block_type->supports, array( 'spacing', 'blockGap', '__experimentalDefault' ), '0.5em' ); + + // If a block's block.json skips serialization for spacing or spacing.blockGap, + // don't apply the user-defined value to the styles. + $should_skip_gap_serialization = gutenberg_should_skip_block_supports_serialization( $block_type, 'spacing', 'blockGap' ); + $style = gutenberg_get_layout_style( ".$class_name", $used_layout, $has_block_gap_support, $gap_value, $should_skip_gap_serialization, $fallback_gap_value ); // This assumes the hook only applies to blocks with a single wrapper. // I think this is a reasonable limitation for that particular hook. $content = preg_replace( '/' . preg_quote( 'class="', '/' ) . '/', - 'class="wp-container-' . $id . ' ', + 'class="' . esc_attr( $class_name ) . ' ', $block_content, 1 ); - // Ideally styles should be loaded in the head, but blocks may be parsed - // after that, so loading in the footer for now. - // See https://core.trac.wordpress.org/ticket/53494. - add_action( - 'wp_footer', - function () use ( $style ) { - echo '<style>' . $style . '</style>'; - } - ); + gutenberg_enqueue_block_support_styles( $style ); return $content; } @@ -145,17 +227,23 @@ function () use ( $style ) { * @return string Filtered block content. */ function gutenberg_restore_group_inner_container( $block_content, $block ) { - $group_with_inner_container_regex = '/(^\s*<div\b[^>]*wp-block-group(\s|")[^>]*>)(\s*<div\b[^>]*wp-block-group__inner-container(\s|")[^>]*>)((.|\S|\s)*)/'; - + $tag_name = isset( $block['attrs']['tagName'] ) ? $block['attrs']['tagName'] : 'div'; + $group_with_inner_container_regex = sprintf( + '/(^\s*<%1$s\b[^>]*wp-block-group(\s|")[^>]*>)(\s*<div\b[^>]*wp-block-group__inner-container(\s|")[^>]*>)((.|\S|\s)*)/U', + preg_quote( $tag_name, '/' ) + ); if ( - 'core/group' !== $block['blockName'] || WP_Theme_JSON_Resolver_Gutenberg::theme_has_support() || - 1 === preg_match( $group_with_inner_container_regex, $block_content ) + 1 === preg_match( $group_with_inner_container_regex, $block_content ) || + ( isset( $block['attrs']['layout']['type'] ) && 'default' !== $block['attrs']['layout']['type'] ) ) { return $block_content; } - $replace_regex = '/(^\s*<div\b[^>]*wp-block-group[^>]*>)(.*)(<\/div>\s*$)/ms'; + $replace_regex = sprintf( + '/(^\s*<%1$s\b[^>]*wp-block-group[^>]*>)(.*)(<\/%1$s>\s*$)/ms', + preg_quote( $tag_name, '/' ) + ); $updated_content = preg_replace_callback( $replace_regex, function( $matches ) { @@ -166,7 +254,70 @@ function( $matches ) { return $updated_content; } -// This can be removed when plugin support requires WordPress 5.8.0+. -if ( ! function_exists( 'wp_restore_group_inner_container' ) ) { - add_filter( 'render_block', 'gutenberg_restore_group_inner_container', 10, 2 ); +if ( function_exists( 'wp_restore_group_inner_container' ) ) { + remove_filter( 'render_block', 'wp_restore_group_inner_container', 10, 2 ); + remove_filter( 'render_block_core/group', 'wp_restore_group_inner_container', 10, 2 ); +} +add_filter( 'render_block_core/group', 'gutenberg_restore_group_inner_container', 10, 2 ); + + +/** + * For themes without theme.json file, make sure + * to restore the outer div for the aligned image block + * to avoid breaking styles relying on that div. + * + * @param string $block_content Rendered block content. + * @param array $block Block object. + * @return string Filtered block content. + */ +function gutenberg_restore_image_outer_container( $block_content, $block ) { + $image_with_align = " +/# 1) everything up to the class attribute contents +( + ^\s* + <figure\b + [^>]* + \bclass= + [\"'] +) +# 2) the class attribute contents +( + [^\"']* + \bwp-block-image\b + [^\"']* + \b(?:alignleft|alignright|aligncenter)\b + [^\"']* +) +# 3) everything after the class attribute contents +( + [\"'] + [^>]* + > + .* + <\/figure> +)/iUx"; + + if ( + WP_Theme_JSON_Resolver::theme_has_support() || + 0 === preg_match( $image_with_align, $block_content, $matches ) + ) { + return $block_content; + } + + $wrapper_classnames = array( 'wp-block-image' ); + + // If the block has a classNames attribute these classnames need to be removed from the content and added back + // to the new wrapper div also. + if ( ! empty( $block['attrs']['className'] ) ) { + $wrapper_classnames = array_merge( $wrapper_classnames, explode( ' ', $block['attrs']['className'] ) ); + } + $content_classnames = explode( ' ', $matches[2] ); + $filtered_content_classnames = array_diff( $content_classnames, $wrapper_classnames ); + + return '<div class="' . implode( ' ', $wrapper_classnames ) . '">' . $matches[1] . implode( ' ', $filtered_content_classnames ) . $matches[3] . '</div>'; +} + +if ( function_exists( 'wp_restore_image_outer_container' ) ) { + remove_filter( 'render_block_core/image', 'wp_restore_image_outer_container', 10, 2 ); } +add_filter( 'render_block_core/image', 'gutenberg_restore_image_outer_container', 10, 2 ); diff --git a/lib/block-supports/spacing.php b/lib/block-supports/spacing.php index 592949f0473b8..b20c7d4406f4f 100644 --- a/lib/block-supports/spacing.php +++ b/lib/block-supports/spacing.php @@ -2,6 +2,10 @@ /** * Spacing block support flag. * + * For backwards compatibility with core, this remains separate to the + * dimensions.php block support despite both belonging under a single panel in + * the editor. + * * @package gutenberg */ @@ -11,7 +15,7 @@ * @param WP_Block_Type $block_type Block Type. */ function gutenberg_register_spacing_support( $block_type ) { - $has_spacing_support = gutenberg_block_has_support( $block_type, array( 'spacing' ), false ); + $has_spacing_support = block_has_support( $block_type, array( 'spacing' ), false ); // Setup attributes and styles within that if needed. if ( ! $block_type->attributes ) { @@ -35,55 +39,33 @@ function gutenberg_register_spacing_support( $block_type ) { * @return array Block spacing CSS classes and inline styles. */ function gutenberg_apply_spacing_support( $block_type, $block_attributes ) { - if ( gutenberg_skip_spacing_serialization( $block_type ) ) { + if ( gutenberg_should_skip_block_supports_serialization( $block_type, 'spacing' ) ) { return array(); } - $has_padding_support = gutenberg_block_has_support( $block_type, array( 'spacing', 'padding' ), false ); - $has_margin_support = gutenberg_block_has_support( $block_type, array( 'spacing', 'margin' ), false ); - $styles = array(); - - if ( $has_padding_support ) { - $padding_value = _wp_array_get( $block_attributes, array( 'style', 'spacing', 'padding' ), null ); + $attributes = array(); + $has_padding_support = block_has_support( $block_type, array( 'spacing', 'padding' ), false ); + $has_margin_support = block_has_support( $block_type, array( 'spacing', 'margin' ), false ); + $block_styles = isset( $block_attributes['style'] ) ? $block_attributes['style'] : null; - if ( is_array( $padding_value ) ) { - foreach ( $padding_value as $key => $value ) { - $styles[] = sprintf( 'padding-%s: %s;', $key, $value ); - } - } elseif ( null !== $padding_value ) { - $styles[] = sprintf( 'padding: %s;', $padding_value ); - } + if ( ! $block_styles ) { + return $attributes; } - if ( $has_margin_support ) { - $margin_value = _wp_array_get( $block_attributes, array( 'style', 'spacing', 'margin' ), null ); + $skip_padding = gutenberg_should_skip_block_supports_serialization( $block_type, 'spacing', 'padding' ); + $skip_margin = gutenberg_should_skip_block_supports_serialization( $block_type, 'spacing', 'margin' ); + $spacing_block_styles = array(); + $spacing_block_styles['padding'] = $has_padding_support && ! $skip_padding ? _wp_array_get( $block_styles, array( 'spacing', 'padding' ), null ) : null; + $spacing_block_styles['margin'] = $has_margin_support && ! $skip_margin ? _wp_array_get( $block_styles, array( 'spacing', 'margin' ), null ) : null; + $styles = gutenberg_style_engine_generate( + array( 'spacing' => $spacing_block_styles ) + ); - if ( is_array( $margin_value ) ) { - foreach ( $margin_value as $key => $value ) { - $styles[] = sprintf( 'margin-%s: %s;', $key, $value ); - } - } elseif ( null !== $margin_value ) { - $styles[] = sprintf( 'margin: %s;', $margin_value ); - } + if ( ! empty( $styles['css'] ) ) { + $attributes['style'] = $styles['css']; } - return empty( $styles ) ? array() : array( 'style' => implode( ' ', $styles ) ); -} - -/** - * Checks whether serialization of the current block's spacing properties should - * occur. - * - * @param WP_Block_type $block_type Block type. - * - * @return boolean Whether to serialize spacing support styles & classes. - */ -function gutenberg_skip_spacing_serialization( $block_type ) { - $spacing_support = _wp_array_get( $block_type->supports, array( 'spacing' ), false ); - - return is_array( $spacing_support ) && - array_key_exists( '__experimentalSkipSerialization', $spacing_support ) && - $spacing_support['__experimentalSkipSerialization']; + return $attributes; } // Register the block support. diff --git a/lib/block-supports/typography.php b/lib/block-supports/typography.php index 811c96b9083d0..35912e59e3a6b 100644 --- a/lib/block-supports/typography.php +++ b/lib/block-supports/typography.php @@ -75,15 +75,10 @@ function gutenberg_apply_typography_support( $block_type, $block_attributes ) { return array(); } - $skip_typography_serialization = _wp_array_get( $typography_supports, array( '__experimentalSkipSerialization' ), false ); - if ( $skip_typography_serialization ) { + if ( gutenberg_should_skip_block_supports_serialization( $block_type, 'typography' ) ) { return array(); } - $attributes = array(); - $classes = array(); - $styles = array(); - $has_font_family_support = _wp_array_get( $typography_supports, array( '__experimentalFontFamily' ), false ); $has_font_size_support = _wp_array_get( $typography_supports, array( 'fontSize' ), false ); $has_font_style_support = _wp_array_get( $typography_supports, array( '__experimentalFontStyle' ), false ); @@ -93,85 +88,107 @@ function gutenberg_apply_typography_support( $block_type, $block_attributes ) { $has_text_decoration_support = _wp_array_get( $typography_supports, array( '__experimentalTextDecoration' ), false ); $has_text_transform_support = _wp_array_get( $typography_supports, array( '__experimentalTextTransform' ), false ); - if ( $has_font_size_support ) { - $has_named_font_size = array_key_exists( 'fontSize', $block_attributes ); - $has_custom_font_size = isset( $block_attributes['style']['typography']['fontSize'] ); + // Whether to skip individual block support features. + $should_skip_font_size = gutenberg_should_skip_block_supports_serialization( $block_type, 'typography', 'fontSize' ); + $should_skip_font_family = gutenberg_should_skip_block_supports_serialization( $block_type, 'typography', 'fontFamily' ); + $should_skip_font_style = gutenberg_should_skip_block_supports_serialization( $block_type, 'typography', 'fontStyle' ); + $should_skip_font_weight = gutenberg_should_skip_block_supports_serialization( $block_type, 'typography', 'fontWeight' ); + $should_skip_line_height = gutenberg_should_skip_block_supports_serialization( $block_type, 'typography', 'lineHeight' ); + $should_skip_text_decoration = gutenberg_should_skip_block_supports_serialization( $block_type, 'typography', 'textDecoration' ); + $should_skip_text_transform = gutenberg_should_skip_block_supports_serialization( $block_type, 'typography', 'textTransform' ); + $should_skip_letter_spacing = gutenberg_should_skip_block_supports_serialization( $block_type, 'typography', 'letterSpacing' ); - if ( $has_named_font_size ) { - $classes[] = sprintf( 'has-%s-font-size', $block_attributes['fontSize'] ); - } elseif ( $has_custom_font_size ) { - $styles[] = sprintf( 'font-size: %s;', $block_attributes['style']['typography']['fontSize'] ); - } + $typography_block_styles = array(); + if ( $has_font_size_support && ! $should_skip_font_size ) { + $preset_font_size = array_key_exists( 'fontSize', $block_attributes ) ? "var:preset|font-size|{$block_attributes['fontSize']}" : null; + $custom_font_size = isset( $block_attributes['style']['typography']['fontSize'] ) ? $block_attributes['style']['typography']['fontSize'] : null; + $typography_block_styles['fontSize'] = $preset_font_size ? $preset_font_size : $custom_font_size; } - if ( $has_font_family_support ) { - $has_font_family = isset( $block_attributes['style']['typography']['fontFamily'] ); - if ( $has_font_family ) { - $font_family = $block_attributes['style']['typography']['fontFamily']; - if ( strpos( $font_family, 'var:preset|font-family' ) !== false ) { - // Get the name from the string and add proper styles. - $index_to_splice = strrpos( $font_family, '|' ) + 1; - $font_family_name = substr( $font_family, $index_to_splice ); - $styles[] = sprintf( 'font-family: var(--wp--preset--font-family--%s);', $font_family_name ); - } else { - $styles[] = sprintf( 'font-family: %s;', $block_attributes['style']['typography']['fontFamily'] ); - } - } + if ( $has_font_family_support && ! $should_skip_font_family ) { + $preset_font_family = array_key_exists( 'fontFamily', $block_attributes ) ? "var:preset|font-family|{$block_attributes['fontFamily']}" : null; + $custom_font_family = isset( $block_attributes['style']['typography']['fontFamily'] ) ? gutenberg_typography_get_preset_inline_style_value( $block_attributes['style']['typography']['fontFamily'], 'font-family' ) : null; + $typography_block_styles['fontFamily'] = $preset_font_family ? $preset_font_family : $custom_font_family; } - if ( $has_font_style_support ) { - $font_style = gutenberg_typography_get_css_variable_inline_style( $block_attributes, 'fontStyle', 'font-style' ); - if ( $font_style ) { - $styles[] = $font_style; - } + if ( $has_font_style_support && ! $should_skip_font_style && isset( $block_attributes['style']['typography']['fontStyle'] ) ) { + $typography_block_styles['fontStyle'] = + gutenberg_typography_get_preset_inline_style_value( $block_attributes['style']['typography']['fontStyle'], 'font-style' ); } - if ( $has_font_weight_support ) { - $font_weight = gutenberg_typography_get_css_variable_inline_style( $block_attributes, 'fontWeight', 'font-weight' ); - if ( $font_weight ) { - $styles[] = $font_weight; - } + if ( $has_font_weight_support && ! $should_skip_font_weight && isset( $block_attributes['style']['typography']['fontWeight'] ) ) { + $typography_block_styles['fontWeight'] = + gutenberg_typography_get_preset_inline_style_value( $block_attributes['style']['typography']['fontWeight'], 'font-weight' ); } - if ( $has_line_height_support ) { - $has_line_height = isset( $block_attributes['style']['typography']['lineHeight'] ); - if ( $has_line_height ) { - $styles[] = sprintf( 'line-height: %s;', $block_attributes['style']['typography']['lineHeight'] ); - } + if ( $has_line_height_support && ! $should_skip_line_height ) { + $typography_block_styles['lineHeight'] = _wp_array_get( $block_attributes, array( 'style', 'typography', 'lineHeight' ), null ); } - if ( $has_text_decoration_support ) { - $text_decoration_style = gutenberg_typography_get_css_variable_inline_style( $block_attributes, 'textDecoration', 'text-decoration' ); - if ( $text_decoration_style ) { - $styles[] = $text_decoration_style; - } + if ( $has_text_decoration_support && ! $should_skip_text_decoration && isset( $block_attributes['style']['typography']['textDecoration'] ) ) { + $typography_block_styles['textDecoration'] = + gutenberg_typography_get_preset_inline_style_value( $block_attributes['style']['typography']['textDecoration'], 'text-decoration' ); } - if ( $has_text_transform_support ) { - $text_transform_style = gutenberg_typography_get_css_variable_inline_style( $block_attributes, 'textTransform', 'text-transform' ); - if ( $text_transform_style ) { - $styles[] = $text_transform_style; - } + if ( $has_text_transform_support && ! $should_skip_text_transform && isset( $block_attributes['style']['typography']['textTransform'] ) ) { + $typography_block_styles['textTransform'] = + gutenberg_typography_get_preset_inline_style_value( $block_attributes['style']['typography']['textTransform'], 'text-transform' ); } - if ( $has_letter_spacing_support ) { - $letter_spacing_style = gutenberg_typography_get_css_variable_inline_style( $block_attributes, 'letterSpacing', 'letter-spacing' ); - if ( $letter_spacing_style ) { - $styles[] = $letter_spacing_style; - } + if ( $has_letter_spacing_support && ! $should_skip_letter_spacing && isset( $block_attributes['style']['typography']['letterSpacing'] ) ) { + $typography_block_styles['letterSpacing'] = + gutenberg_typography_get_preset_inline_style_value( $block_attributes['style']['typography']['letterSpacing'], 'letter-spacing' ); } - if ( ! empty( $classes ) ) { - $attributes['class'] = implode( ' ', $classes ); + $attributes = array(); + $styles = gutenberg_style_engine_generate( array( 'typography' => $typography_block_styles ) ); + + if ( ! empty( $styles['classnames'] ) ) { + $attributes['class'] = $styles['classnames']; } - if ( ! empty( $styles ) ) { - $attributes['style'] = implode( ' ', $styles ); + + if ( ! empty( $styles['css'] ) ) { + $attributes['style'] = $styles['css']; } return $attributes; } /** + * Note: this method is for backwards compatibility. + * It mostly replaces `gutenberg_typography_get_css_variable_inline_style()`. + * + * Generates an inline style value for a typography feature e.g. text decoration, + * text transform, and font style. + * + * @param string $style_value A raw style value for a single typography feature from a block's style attribute. + * @param string $css_property Slug for the CSS property the inline style sets. + * + * @return string? A CSS inline style value. + */ +function gutenberg_typography_get_preset_inline_style_value( $style_value, $css_property ) { + // If the style value is not a preset CSS variable go no further. + if ( empty( $style_value ) || strpos( $style_value, "var:preset|{$css_property}|" ) === false ) { + return $style_value; + } + + // For backwards compatibility. + // Presets were removed in https://github.com/WordPress/gutenberg/pull/27555. + // We have a preset CSS variable as the style. + // Get the style value from the string and return CSS style. + $index_to_splice = strrpos( $style_value, '|' ) + 1; + $slug = _wp_to_kebab_case( substr( $style_value, $index_to_splice ) ); + + // Return the actual CSS inline style value e.g. `var(--wp--preset--text-decoration--underline);`. + return sprintf( 'var(--wp--preset--%s--%s);', $css_property, $slug ); +} + +/** + * Deprecated. + * This method is no longer used and will have to be deprecated in Core. + * + * It can be deleted once migrated to the next WordPress version. + * * Generates an inline style for a typography feature e.g. text decoration, * text transform, and font style. * diff --git a/lib/block-supports/utils.php b/lib/block-supports/utils.php new file mode 100644 index 0000000000000..89199ac644cb0 --- /dev/null +++ b/lib/block-supports/utils.php @@ -0,0 +1,31 @@ +<?php +/** + * Block support utility functions. + * + * @package gutenberg + */ + +/** + * Checks whether serialization of the current block's supported properties + * should occur. + * + * @param WP_Block_type $block_type Block type. + * @param string $feature_set Name of block support feature set.. + * @param string $feature Optional name of individual feature to check. + * + * @return boolean Whether to serialize block support styles & classes. + */ +function gutenberg_should_skip_block_supports_serialization( $block_type, $feature_set, $feature = null ) { + if ( ! is_object( $block_type ) || ! $feature_set ) { + return false; + } + + $path = array( $feature_set, '__experimentalSkipSerialization' ); + $skip_serialization = _wp_array_get( $block_type->supports, $path, false ); + + if ( is_array( $skip_serialization ) ) { + return in_array( $feature, $skip_serialization, true ); + } + + return $skip_serialization; +} diff --git a/lib/blocks.php b/lib/blocks.php index cc3f4c8662254..3f0e8a547a868 100644 --- a/lib/blocks.php +++ b/lib/blocks.php @@ -1,6 +1,6 @@ <?php /** - * Block and style registration functions. + * Block functions specific for the Gutenberg editor plugin. * * @package gutenberg */ @@ -21,18 +21,14 @@ function gutenberg_reregister_core_block_types() { 'code', 'column', 'columns', - 'cover', - 'gallery', + 'comments', 'group', 'heading', 'html', - 'home-link', - 'image', 'list', 'media-text', 'missing', 'more', - 'navigation-link', 'nextpage', 'paragraph', 'preformatted', @@ -42,59 +38,77 @@ function gutenberg_reregister_core_block_types() { 'social-links', 'spacer', 'table', - // 'table-of-contents', + 'table-of-contents', 'text-columns', 'verse', 'video', 'embed', ), 'block_names' => array( - 'archives.php' => 'core/archives', - 'block.php' => 'core/block', - 'calendar.php' => 'core/calendar', - 'categories.php' => 'core/categories', - 'file.php' => 'core/file', - 'latest-comments.php' => 'core/latest-comments', - 'latest-posts.php' => 'core/latest-posts', - 'loginout.php' => 'core/loginout', - 'navigation.php' => 'core/navigation', - 'navigation-link.php' => 'core/navigation-link', - 'home-link.php' => 'core/home-link', - 'rss.php' => 'core/rss', - 'search.php' => 'core/search', - 'shortcode.php' => 'core/shortcode', - 'social-link.php' => 'core/social-link', - 'tag-cloud.php' => 'core/tag-cloud', - 'page-list.php' => 'core/page-list', - 'post-author.php' => 'core/post-author', - 'post-comment.php' => 'core/post-comment', - 'post-comment-author.php' => 'core/post-comment-author', - 'post-comment-content.php' => 'core/post-comment-content', - 'post-comment-date.php' => 'core/post-comment-date', - 'post-comments.php' => 'core/post-comments', - 'post-comments-count.php' => 'core/post-comments-count', - 'post-comments-form.php' => 'core/post-comments-form', - 'post-comments-link.php' => 'core/post-comments-link', - 'post-content.php' => 'core/post-content', - 'post-date.php' => 'core/post-date', - 'post-excerpt.php' => 'core/post-excerpt', - 'post-featured-image.php' => 'core/post-featured-image', - 'post-terms.php' => 'core/post-terms', - 'post-navigation-link.php' => 'core/post-navigation-link', - 'post-title.php' => 'core/post-title', - 'query.php' => 'core/query', - 'post-template.php' => 'core/post-template', - 'query-title.php' => 'core/query-title', - 'query-pagination.php' => 'core/query-pagination', - 'query-pagination-next.php' => 'core/query-pagination-next', - 'query-pagination-numbers.php' => 'core/query-pagination-numbers', - 'query-pagination-previous.php' => 'core/query-pagination-previous', - 'site-logo.php' => 'core/site-logo', - 'site-tagline.php' => 'core/site-tagline', - 'site-title.php' => 'core/site-title', - // 'table-of-contents.php' => 'core/table-of-contents', - 'template-part.php' => 'core/template-part', - 'term-description.php' => 'core/term-description', + 'archives.php' => 'core/archives', + 'avatar.php' => 'core/avatar', + 'block.php' => 'core/block', + 'calendar.php' => 'core/calendar', + 'categories.php' => 'core/categories', + 'cover.php' => 'core/cover', + 'comment-author-avatar.php' => 'core/comment-author-avatar', + 'comment-author-name.php' => 'core/comment-author-name', + 'comment-content.php' => 'core/comment-content', + 'comment-date.php' => 'core/comment-date', + 'comment-edit-link.php' => 'core/comment-edit-link', + 'comment-reply-link.php' => 'core/comment-reply-link', + 'comment-template.php' => 'core/comment-template', + 'comments-pagination.php' => 'core/comments-pagination', + 'comments-pagination-next.php' => 'core/comments-pagination-next', + 'comments-pagination-numbers.php' => 'core/comments-pagination-numbers', + 'comments-pagination-previous.php' => 'core/comments-pagination-previous', + 'comments-title.php' => 'core/comments-title', + 'file.php' => 'core/file', + 'home-link.php' => 'core/home-link', + 'image.php' => 'core/image', + 'gallery.php' => 'core/gallery', + 'latest-comments.php' => 'core/latest-comments', + 'latest-posts.php' => 'core/latest-posts', + 'loginout.php' => 'core/loginout', + 'navigation.php' => 'core/navigation', + 'navigation-link.php' => 'core/navigation-link', + 'navigation-submenu.php' => 'core/navigation-submenu', + 'page-list.php' => 'core/page-list', + 'pattern.php' => 'core/pattern', + 'post-author.php' => 'core/post-author', + 'post-author-name.php' => 'core/post-author-name', + 'post-author-biography.php' => 'core/post-author-biography', + 'post-comment.php' => 'core/post-comment', + 'post-comments.php' => 'core/post-comments', + 'post-comments-count.php' => 'core/post-comments-count', + 'post-comments-form.php' => 'core/post-comments-form', + 'post-comments-link.php' => 'core/post-comments-link', + 'post-content.php' => 'core/post-content', + 'post-date.php' => 'core/post-date', + 'post-excerpt.php' => 'core/post-excerpt', + 'post-featured-image.php' => 'core/post-featured-image', + 'post-navigation-link.php' => 'core/post-navigation-link', + 'post-terms.php' => 'core/post-terms', + 'post-title.php' => 'core/post-title', + 'query.php' => 'core/query', + 'post-template.php' => 'core/post-template', + 'query-no-results.php' => 'core/query-no-results', + 'query-pagination.php' => 'core/query-pagination', + 'query-pagination-next.php' => 'core/query-pagination-next', + 'query-pagination-numbers.php' => 'core/query-pagination-numbers', + 'query-pagination-previous.php' => 'core/query-pagination-previous', + 'query-title.php' => 'core/query-title', + 'read-more.php' => 'core/read-more', + 'rss.php' => 'core/rss', + 'search.php' => 'core/search', + 'shortcode.php' => 'core/shortcode', + 'social-link.php' => 'core/social-link', + 'site-logo.php' => 'core/site-logo', + 'site-tagline.php' => 'core/site-tagline', + 'site-title.php' => 'core/site-title', + 'tag-cloud.php' => 'core/tag-cloud', + 'template-part.php' => 'core/template-part', + 'term-description.php' => 'core/term-description', ), ), __DIR__ . '/../build/edit-widgets/blocks/' => array( @@ -106,9 +120,11 @@ function gutenberg_reregister_core_block_types() { __DIR__ . '/../build/widgets/blocks/' => array( 'block_folders' => array( 'legacy-widget', + 'widget-group', ), 'block_names' => array( 'legacy-widget.php' => 'core/legacy-widget', + 'widget-group.php' => 'core/widget-group', ), ), ); @@ -126,7 +142,7 @@ function gutenberg_reregister_core_block_types() { // to replace paths with overrides defined by the plugin. $metadata = json_decode( file_get_contents( $block_json_file ), true ); if ( ! is_array( $metadata ) || ! $metadata['name'] ) { - return false; + continue; } if ( $registry->is_registered( $metadata['name'] ) ) { @@ -139,7 +155,7 @@ function gutenberg_reregister_core_block_types() { foreach ( $block_names as $file => $sub_block_names ) { if ( ! file_exists( $blocks_dir . $file ) ) { - return; + continue; } $sub_block_names_normalized = is_string( $sub_block_names ) ? array( $sub_block_names ) : $sub_block_names; @@ -252,90 +268,6 @@ function() { } } -/** - * Change the way styles get loaded depending on their size. - * - * Optimizes performance and sustainability of styles by inlining smaller stylesheets. - * - * @todo Remove this function when the minimum supported version is WordPress 5.8. - * - * @return void - */ -function gutenberg_maybe_inline_styles() { - - // Early exit if the "wp_maybe_inline_styles" function exists. - if ( function_exists( 'wp_maybe_inline_styles' ) ) { - return; - } - - $total_inline_limit = 20000; - /** - * The maximum size of inlined styles in bytes. - * - * @param int $total_inline_limit The file-size threshold, in bytes. Defaults to 20000. - * @return int The file-size threshold, in bytes. - */ - $total_inline_limit = apply_filters( 'styles_inline_size_limit', $total_inline_limit ); - - global $wp_styles; - $styles = array(); - - // Build an array of styles that have a path defined. - foreach ( $wp_styles->queue as $handle ) { - if ( wp_styles()->get_data( $handle, 'path' ) && file_exists( $wp_styles->registered[ $handle ]->extra['path'] ) ) { - $styles[] = array( - 'handle' => $handle, - 'path' => $wp_styles->registered[ $handle ]->extra['path'], - 'size' => filesize( $wp_styles->registered[ $handle ]->extra['path'] ), - ); - } - } - - if ( ! empty( $styles ) ) { - // Reorder styles array based on size. - usort( - $styles, - function( $a, $b ) { - return ( $a['size'] <= $b['size'] ) ? -1 : 1; - } - ); - - /** - * The total inlined size. - * - * On each iteration of the loop, if a style gets added inline the value of this var increases - * to reflect the total size of inlined styles. - */ - $total_inline_size = 0; - - // Loop styles. - foreach ( $styles as $style ) { - - // Size check. Since styles are ordered by size, we can break the loop. - if ( $total_inline_size + $style['size'] > $total_inline_limit ) { - break; - } - - // Get the styles if we don't already have them. - $style['css'] = file_get_contents( $style['path'] ); - - // Set `src` to `false` and add styles inline. - $wp_styles->registered[ $style['handle'] ]->src = false; - if ( empty( $wp_styles->registered[ $style['handle'] ]->extra['after'] ) ) { - $wp_styles->registered[ $style['handle'] ]->extra['after'] = array(); - } - array_unshift( $wp_styles->registered[ $style['handle'] ]->extra['after'], $style['css'] ); - - // Add the styles size to the $total_inline_size var. - $total_inline_size += (int) $style['size']; - } - } -} -// Run for styles enqueued in <head>. -add_action( 'wp_head', 'gutenberg_maybe_inline_styles', 1 ); -// Run for late-loaded styles in the footer. -add_action( 'wp_footer', 'gutenberg_maybe_inline_styles', 1 ); - /** * Complements the implementation of block type `core/social-icon`, whether it * be provided by core or the plugin, with derived block types for each @@ -345,7 +277,7 @@ function( $a, $b ) { * plugin who have used Social Links prior to their conversion to block * variations. * - * This shim is INTENTIONALLY left out of core, as Social Links haven't yet + * This shim is INTENTIONALLY left out of core, as Social Links have never * landed there. * * @see https://github.com/WordPress/gutenberg/pull/19887 @@ -417,94 +349,3 @@ function gutenberg_register_legacy_social_link_blocks() { } add_action( 'init', 'gutenberg_register_legacy_social_link_blocks' ); - -/** - * Filters the default block categories array to add a new one for themes. - * - * This can be removed when plugin support requires WordPress 5.8.0+. - * - * @see https://core.trac.wordpress.org/ticket/52883 - * - * @param array[] $categories The list of default block categories. - * - * @return array[] Filtered block categories. - */ -function gutenberg_register_theme_block_category( $categories ) { - foreach ( $categories as $category ) { - // Skip when the category is already set in WordPress core. - if ( - isset( $category['slug'] ) && - 'theme' === $category['slug'] - ) { - return $categories; - } - } - - $categories[] = array( - 'slug' => 'theme', - 'title' => _x( 'Theme', 'block category', 'gutenberg' ), - 'icon' => null, - ); - return $categories; -} -// This can be removed when plugin support requires WordPress 5.8.0+. -if ( ! function_exists( 'get_default_block_categories' ) ) { - add_filter( 'block_categories', 'gutenberg_register_theme_block_category' ); -} - -/** - * Checks whether the current block type supports the feature requested. - * - * @param WP_Block_Type $block_type Block type to check for support. - * @param array $feature Path of the feature to check support for. - * @param mixed $default Fallback value for feature support, defaults to false. - * - * @return boolean Whether or not the feature is supported. - */ -function gutenberg_block_has_support( $block_type, $feature, $default = false ) { - $block_support = $default; - if ( $block_type && property_exists( $block_type, 'supports' ) ) { - $block_support = _wp_array_get( $block_type->supports, $feature, $default ); - } - - return true === $block_support || is_array( $block_support ); -} - -/** - * Updates the shape of supports for declaring fontSize and lineHeight. - * - * @param array $metadata Metadata for registering a block type. - * @return array Metadata for registering a block type with the supports shape updated. - */ -function gutenberg_migrate_old_typography_shape( $metadata ) { - // Temporarily disable migrations from core blocks to avoid warnings on versions older than 5.8. - if ( isset( $metadata['supports'] ) && false === strpos( $metadata['file'], '/wp-includes/blocks/' ) ) { - $typography_keys = array( - '__experimentalFontFamily', - '__experimentalFontStyle', - '__experimentalFontWeight', - '__experimentalLetterSpacing', - '__experimentalTextDecoration', - '__experimentalTextTransform', - 'fontSize', - 'lineHeight', - ); - foreach ( $typography_keys as $typography_key ) { - $support_for_key = _wp_array_get( $metadata['supports'], array( $typography_key ), null ); - if ( null !== $support_for_key ) { - trigger_error( - /* translators: %1$s: Block type, %2$s: typography supports key e.g: fontSize, lineHeight etc... */ - sprintf( __( 'Block %1$s is declaring %2$s support on block.json under supports.%2$s. %2$s support is now declared under supports.typography.%2$s.', 'gutenberg' ), $metadata['name'], $typography_key ), - headers_sent() || WP_DEBUG ? E_USER_WARNING : E_USER_NOTICE - ); - gutenberg_experimental_set( $metadata['supports'], array( 'typography', $typography_key ), $support_for_key ); - unset( $metadata['supports'][ $typography_key ] ); - } - } - } - return $metadata; -} - -if ( ! function_exists( 'wp_migrate_old_typography_shape' ) ) { - add_filter( 'block_type_metadata', 'gutenberg_migrate_old_typography_shape' ); -} diff --git a/lib/class-wp-rest-pattern-directory-controller.php b/lib/class-wp-rest-pattern-directory-controller.php deleted file mode 100644 index b2b9c11a8b597..0000000000000 --- a/lib/class-wp-rest-pattern-directory-controller.php +++ /dev/null @@ -1,349 +0,0 @@ -<?php -/** - * Start: Include for phase 2 - * Block Pattern Directory REST API: WP_REST_Pattern_Directory_Controller class - * - * @since 5.8.0 - * @package gutenberg - */ - -/** - * Controller which provides REST endpoint for block patterns. - * - * This simply proxies the endpoint at http://api.wordpress.org/patterns/1.0/. That isn't necessary for - * functionality, but is desired for privacy. It prevents api.wordpress.org from knowing the user's IP address. - * - * This class can be removed when plugin support requires WordPress 5.8.0+. - * - * @since 5.8.0 - * - * @see WP_REST_Controller - */ -class WP_REST_Pattern_Directory_Controller extends WP_REST_Controller { - - /** - * Constructs the controller. - */ - public function __construct() { - $this->namespace = 'wp/v2'; - $this->rest_base = 'pattern-directory'; - } - - /** - * Registers the necessary REST API routes. - */ - public function register_routes() { - register_rest_route( - $this->namespace, - '/' . $this->rest_base . '/patterns', - array( - array( - 'methods' => WP_REST_Server::READABLE, - 'callback' => array( $this, 'get_items' ), - 'permission_callback' => array( $this, 'get_items_permissions_check' ), - 'args' => $this->get_collection_params(), - ), - 'schema' => array( $this, 'get_public_item_schema' ), - ) - ); - } - - /** - * Checks whether a given request has permission to view the local pattern directory. - * - * @since 5.8.0 - * - * @param WP_REST_Request $request Full details about the request. - * - * @return WP_Error|bool True if the request has permission, WP_Error object otherwise. - */ - public function get_items_permissions_check( $request ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis - if ( current_user_can( 'edit_posts' ) ) { - return true; - } - - foreach ( get_post_types( array( 'show_in_rest' => true ), 'objects' ) as $post_type ) { - if ( current_user_can( $post_type->cap->edit_posts ) ) { - return true; - } - } - - return new WP_Error( - 'rest_pattern_directory_cannot_view', - __( 'Sorry, you are not allowed to browse the local block pattern directory.', 'gutenberg' ), - array( 'status' => rest_authorization_required_code() ) - ); - } - - /** - * Search and retrieve block patterns metadata - * - * @since 5.8.0 - * - * @param WP_REST_Request $request Full details about the request. - * - * @return WP_Error|WP_REST_Response Response object on success, or WP_Error object on failure. - */ - public function get_items( $request ) { - /* - * Include an unmodified `$wp_version`, so the API can craft a response that's tailored to - * it. Some plugins modify the version in a misguided attempt to improve security by - * obscuring the version, which can cause invalid requests. - */ - require ABSPATH . WPINC . '/version.php'; - require_once ABSPATH . 'wp-admin/includes/plugin.php'; - - $gutenberg_data = get_plugin_data( dirname( __DIR__ ) . '/gutenberg.php', false ); - - $query_args = array( - 'locale' => get_user_locale(), - 'wp-version' => $wp_version, // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UndefinedVariable -- it's defined in `version.php` above. - 'gutenberg-version' => $gutenberg_data['Version'], - ); - - $category_id = $request['category']; - $keyword_id = $request['keyword']; - $search_term = $request['search']; - - if ( $category_id ) { - $query_args['pattern-categories'] = $category_id; - } - - if ( $keyword_id ) { - $query_args['pattern-keywords'] = $keyword_id; - } - - if ( $search_term ) { - $query_args['search'] = $search_term; - } - - /* - * Include a hash of the query args, so that different requests are stored in - * separate caches. - * - * MD5 is chosen for its speed, low-collision rate, universal availability, and to stay - * under the character limit for `_site_transient_timeout_{...}` keys. - * - * @link https://stackoverflow.com/questions/3665247/fastest-hash-for-non-cryptographic-uses - */ - $transient_key = 'wp_remote_block_patterns_' . md5( implode( '-', $query_args ) ); - - /* - * Use network-wide transient to improve performance. The locale is the only site - * configuration that affects the response, and it's included in the transient key. - */ - $raw_patterns = get_site_transient( $transient_key ); - - if ( ! $raw_patterns ) { - $api_url = add_query_arg( - array_map( 'rawurlencode', $query_args ), - 'http://api.wordpress.org/patterns/1.0/' - ); - - if ( wp_http_supports( array( 'ssl' ) ) ) { - $api_url = set_url_scheme( $api_url, 'https' ); - } - - /* - * Default to a short TTL, to mitigate cache stampedes on high-traffic sites. - * This assumes that most errors will be short-lived, e.g., packet loss that causes the - * first request to fail, but a follow-up one will succeed. The value should be high - * enough to avoid stampedes, but low enough to not interfere with users manually - * re-trying a failed request. - */ - $cache_ttl = 5; - $wporg_response = wp_remote_get( $api_url ); - $raw_patterns = json_decode( wp_remote_retrieve_body( $wporg_response ) ); - - if ( is_wp_error( $wporg_response ) ) { - $raw_patterns = $wporg_response; - - } elseif ( ! is_array( $raw_patterns ) ) { - // HTTP request succeeded, but response data is invalid. - $raw_patterns = new WP_Error( - 'pattern_api_failed', - sprintf( - /* translators: %s: Support forums URL. */ - __( 'An unexpected error occurred. Something may be wrong with WordPress.org or this server’s configuration. If you continue to have problems, please try the <a href="%s">support forums</a>.', 'gutenberg' ), - __( 'https://wordpress.org/support/forums/', 'gutenberg' ) - ), - array( - 'response' => wp_remote_retrieve_body( $wporg_response ), - ) - ); - - } else { - // Response has valid data. - $cache_ttl = HOUR_IN_SECONDS; - } - - set_site_transient( $transient_key, $raw_patterns, $cache_ttl ); - } - - if ( is_wp_error( $raw_patterns ) ) { - $raw_patterns->add_data( array( 'status' => 500 ) ); - - return $raw_patterns; - } - - $response = array(); - - if ( $raw_patterns ) { - foreach ( $raw_patterns as $pattern ) { - $response[] = $this->prepare_response_for_collection( - $this->prepare_item_for_response( $pattern, $request ) - ); - } - } - - return new WP_REST_Response( $response ); - } - - /** - * Prepare a raw pattern before it's output in an API response. - * - * @since 5.8.0 - * - * @param object $raw_pattern A pattern from api.wordpress.org, before any changes. - * @param WP_REST_Request $request Request object. - * - * @return WP_REST_Response - */ - public function prepare_item_for_response( $raw_pattern, $request ) { - $prepared_pattern = array( - 'id' => absint( $raw_pattern->id ), - 'title' => sanitize_text_field( $raw_pattern->title->rendered ), - 'content' => wp_kses_post( $raw_pattern->pattern_content ), - 'categories' => array_map( 'sanitize_title', $raw_pattern->category_slugs ), - 'keywords' => array_map( 'sanitize_title', $raw_pattern->keyword_slugs ), - 'description' => sanitize_text_field( $raw_pattern->meta->wpop_description ), - 'viewport_width' => absint( $raw_pattern->meta->wpop_viewport_width ), - ); - - $prepared_pattern = $this->add_additional_fields_to_object( $prepared_pattern, $request ); - - $response = new WP_REST_Response( $prepared_pattern ); - - /** - * Filters the REST API response for a pattern. - * - * @since 5.8.0 - * - * @param WP_REST_Response $response The response object. - * @param object $raw_pattern The unprepared pattern. - * @param WP_REST_Request $request The request object. - */ - return apply_filters( 'rest_prepare_block_pattern', $response, $raw_pattern, $request ); - } - - /** - * Retrieves the pattern's schema, conforming to JSON Schema. - * - * @since 5.8.0 - * - * @return array Item schema data. - */ - public function get_item_schema() { - if ( $this->schema ) { - return $this->add_additional_fields_schema( $this->schema ); - } - - $this->schema = array( - '$schema' => 'http://json-schema.org/draft-04/schema#', - 'title' => 'pattern-directory-item', - 'type' => 'object', - 'properties' => array( - 'id' => array( - 'description' => __( 'The pattern ID.', 'gutenberg' ), - 'type' => 'integer', - 'minimum' => 1, - 'context' => array( 'view', 'embed' ), - ), - - 'title' => array( - 'description' => __( 'The pattern title, in human readable format.', 'gutenberg' ), - 'type' => 'string', - 'minLength' => 1, - 'context' => array( 'view', 'embed' ), - ), - - 'content' => array( - 'description' => __( 'The pattern content.', 'gutenberg' ), - 'type' => 'string', - 'minLength' => 1, - 'context' => array( 'view', 'embed' ), - ), - - 'categories' => array( - 'description' => __( "The pattern's category slugs.", 'gutenberg' ), - 'type' => 'array', - 'uniqueItems' => true, - 'items' => array( 'type' => 'string' ), - 'context' => array( 'view', 'embed' ), - ), - - 'keywords' => array( - 'description' => __( "The pattern's keyword slugs.", 'gutenberg' ), - 'type' => 'array', - 'uniqueItems' => true, - 'items' => array( 'type' => 'string' ), - 'context' => array( 'view', 'embed' ), - ), - - 'description' => array( - 'description' => __( 'A description of the pattern.', 'gutenberg' ), - 'type' => 'string', - 'minLength' => 1, - 'context' => array( 'view', 'embed' ), - ), - - 'viewport_width' => array( - 'description' => __( 'The preferred width of the viewport when previewing a pattern, in pixels.', 'gutenberg' ), - 'type' => 'integer', - 'context' => array( 'view', 'embed' ), - ), - ), - ); - - return $this->add_additional_fields_schema( $this->schema ); - } - - /** - * Retrieves the search params for the patterns collection. - * - * @since 5.8.0 - * - * @return array Collection parameters. - */ - public function get_collection_params() { - $query_params = parent::get_collection_params(); - - // Pagination is not supported. - unset( $query_params['page'] ); - unset( $query_params['per_page'] ); - - $query_params['search']['minLength'] = 1; - $query_params['context']['default'] = 'view'; - - $query_params['category'] = array( - 'description' => __( 'Limit results to those matching a category ID.', 'gutenberg' ), - 'type' => 'integer', - 'minimum' => 1, - ); - - $query_params['keyword'] = array( - 'description' => __( 'Limit results to those matching a keyword ID.', 'gutenberg' ), - 'type' => 'integer', - 'minimum' => 1, - ); - - /** - * Filter collection parameters for the pattern directory controller. - * - * @since 5.8.0 - * - * @param array $query_params JSON Schema-formatted collection parameters. - */ - return apply_filters( 'rest_pattern_directory_collection_params', $query_params ); - } -} diff --git a/lib/class-wp-rest-sidebars-controller.php b/lib/class-wp-rest-sidebars-controller.php deleted file mode 100644 index 4a2c290310df3..0000000000000 --- a/lib/class-wp-rest-sidebars-controller.php +++ /dev/null @@ -1,463 +0,0 @@ -<?php -/** - * REST API: WP_REST_Sidebars_Controller class - * - * @package WordPress - * @subpackage REST_API - * @since 5.6.0 - * - * Copyright (C) 2015 Martin Pettersson - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * - * @author Martin Pettersson <martin_pettersson@outlook.com> - * @copyright 2015 Martin Pettersson - * @license GPLv2 - * @link https://github.com/martin-pettersson/wp-rest-api-sidebars - */ - -/** - * Core class used to manage a site's sidebars. - * - * @since 5.6.0 - * - * @see WP_REST_Controller - */ -class WP_REST_Sidebars_Controller extends WP_REST_Controller { - - /** - * Sidebars controller constructor. - * - * @since 5.6.0 - */ - public function __construct() { - $this->namespace = 'wp/v2'; - $this->rest_base = 'sidebars'; - } - - /** - * Registers the controllers routes. - * - * @return void - */ - public function register_routes() { - register_rest_route( - $this->namespace, - '/' . $this->rest_base, - array( - array( - 'methods' => WP_REST_Server::READABLE, - 'callback' => array( $this, 'get_items' ), - 'permission_callback' => array( $this, 'get_items_permissions_check' ), - 'args' => array( - 'context' => $this->get_context_param( array( 'default' => 'view' ) ), - ), - ), - 'schema' => array( $this, 'get_public_item_schema' ), - ) - ); - - register_rest_route( - $this->namespace, - '/' . $this->rest_base . '/(?P<id>[\w-]+)', - array( - array( - 'methods' => WP_REST_Server::READABLE, - 'callback' => array( $this, 'get_item' ), - 'permission_callback' => array( $this, 'get_item_permissions_check' ), - 'args' => array( - 'id' => array( - 'description' => __( 'The id of a registered sidebar', 'gutenberg' ), - 'type' => 'string', - ), - 'context' => $this->get_context_param( array( 'default' => 'view' ) ), - ), - ), - array( - 'methods' => WP_REST_Server::EDITABLE, - 'callback' => array( $this, 'update_item' ), - 'permission_callback' => array( $this, 'update_item_permissions_check' ), - 'args' => $this->get_endpoint_args_for_item_schema( WP_REST_Server::EDITABLE ), - ), - 'schema' => array( $this, 'get_public_item_schema' ), - ) - ); - } - - /** - * Checks if a given request has access to get sidebars. - * - * @since 5.6.0 - * - * @param WP_REST_Request $request Full details about the request. - * @return true|WP_Error True if the request has read access, WP_Error object otherwise. - */ - public function get_items_permissions_check( $request ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable - return $this->do_permissions_check(); - } - - /** - * Retrieves the list of sidebars (active or inactive). - * - * @since 5.6.0 - * - * @param WP_REST_Request $request Full details about the request. - * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure. - */ - public function get_items( $request ) { - retrieve_widgets(); - - $data = array(); - foreach ( wp_get_sidebars_widgets() as $id => $widgets ) { - $sidebar = $this->get_sidebar( $id ); - - if ( ! $sidebar ) { - continue; - } - - $data[] = $this->prepare_response_for_collection( - $this->prepare_item_for_response( $sidebar, $request ) - ); - } - - return rest_ensure_response( $data ); - } - - /** - * Checks if a given request has access to get a single sidebar. - * - * @since 5.6.0 - * - * @param WP_REST_Request $request Full details about the request. - * @return true|WP_Error True if the request has read access, WP_Error object otherwise. - */ - public function get_item_permissions_check( $request ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable - return $this->do_permissions_check(); - } - - /** - * Retrieves one sidebar from the collection. - * - * @since 5.6.0 - * - * @param WP_REST_Request $request Full details about the request. - * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure. - */ - public function get_item( $request ) { - retrieve_widgets(); - - $sidebar = $this->get_sidebar( $request['id'] ); - - if ( ! $sidebar ) { - return new WP_Error( 'rest_sidebar_not_found', __( 'No sidebar exists with that id.', 'gutenberg' ), array( 'status' => 404 ) ); - } - - return $this->prepare_item_for_response( $sidebar, $request ); - } - - /** - * Checks if a given request has access to update sidebars. - * - * @since 5.6.0 - * - * @param WP_REST_Request $request Full details about the request. - * @return true|WP_Error True if the request has read access, WP_Error object otherwise. - */ - public function update_item_permissions_check( $request ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable - return $this->do_permissions_check(); - } - - /** - * Updates a sidebar. - * - * @since 5.6.0 - * - * @param WP_REST_Request $request Full details about the request. - * @return WP_REST_Response Response object on success, or WP_Error object on failure. - */ - public function update_item( $request ) { - if ( isset( $request['widgets'] ) ) { - $sidebars = wp_get_sidebars_widgets(); - - foreach ( $sidebars as $sidebar_id => $widgets ) { - foreach ( $widgets as $i => $widget_id ) { - // This automatically removes the passed widget ids from any other sidebars in use. - if ( $sidebar_id !== $request['id'] && in_array( $widget_id, $request['widgets'], true ) ) { - unset( $sidebars[ $sidebar_id ][ $i ] ); - } - - // This automatically removes omitted widget ids to the inactive sidebar. - if ( $sidebar_id === $request['id'] && ! in_array( $widget_id, $request['widgets'], true ) ) { - $sidebars['wp_inactive_widgets'][] = $widget_id; - } - } - } - - $sidebars[ $request['id'] ] = $request['widgets']; - - wp_set_sidebars_widgets( $sidebars ); - } - - $request['context'] = 'edit'; - - $sidebar = $this->get_sidebar( $request['id'] ); - - return $this->prepare_item_for_response( $sidebar, $request ); - } - - /** - * Checks if the user has permissions to make the request. - * - * @since 5.6.0 - * - * @return true|WP_Error True if the request has read access, WP_Error object otherwise. - */ - protected function do_permissions_check() { - // Verify if the current user has edit_theme_options capability. - // This capability is required to access the widgets screen. - if ( ! current_user_can( 'edit_theme_options' ) ) { - return new WP_Error( - 'rest_cannot_manage_widgets', - __( 'Sorry, you are not allowed to manage widgets on this site.', 'gutenberg' ), - array( 'status' => rest_authorization_required_code() ) - ); - } - - return true; - } - - /** - * Retrieves the registered sidebar with the given id. - * - * @since 5.6.0 - * - * @global array $wp_registered_sidebars The registered sidebars. - * - * @param string|int $id ID of the sidebar. - * @return array|null The discovered sidebar, or null if it is not registered. - */ - protected function get_sidebar( $id ) { - global $wp_registered_sidebars; - - foreach ( (array) $wp_registered_sidebars as $sidebar ) { - if ( $sidebar['id'] === $id ) { - return $sidebar; - } - } - - if ( 'wp_inactive_widgets' === $id ) { - return array( - 'id' => 'wp_inactive_widgets', - 'name' => __( 'Inactive widgets', 'gutenberg' ), - ); - } - - return null; - } - - /** - * Prepares a single sidebar output for response. - * - * @since 5.6.0 - * - * @global array $wp_registered_sidebars The registered sidebars. - * @global array $wp_registered_widgets The registered widgets. - * - * @param array $raw_sidebar Sidebar instance. - * @param WP_REST_Request $request Full details about the request. - * - * @return WP_REST_Response Prepared response object. - */ - public function prepare_item_for_response( $raw_sidebar, $request ) { - global $wp_registered_sidebars, $wp_registered_widgets; - - $id = $raw_sidebar['id']; - $sidebar = array( 'id' => $id ); - - if ( isset( $wp_registered_sidebars[ $id ] ) ) { - $registered_sidebar = $wp_registered_sidebars[ $id ]; - - $sidebar['status'] = 'active'; - $sidebar['name'] = isset( $registered_sidebar['name'] ) ? $registered_sidebar['name'] : ''; - $sidebar['description'] = isset( $registered_sidebar['description'] ) ? $registered_sidebar['description'] : ''; - $sidebar['class'] = isset( $registered_sidebar['class'] ) ? $registered_sidebar['class'] : ''; - $sidebar['before_widget'] = isset( $registered_sidebar['before_widget'] ) ? $registered_sidebar['before_widget'] : ''; - $sidebar['after_widget'] = isset( $registered_sidebar['after_widget'] ) ? $registered_sidebar['after_widget'] : ''; - $sidebar['before_title'] = isset( $registered_sidebar['before_title'] ) ? $registered_sidebar['before_title'] : ''; - $sidebar['after_title'] = isset( $registered_sidebar['after_title'] ) ? $registered_sidebar['after_title'] : ''; - } else { - $sidebar['status'] = 'inactive'; - $sidebar['name'] = $raw_sidebar['name']; - $sidebar['description'] = ''; - $sidebar['class'] = ''; - } - - $fields = $this->get_fields_for_response( $request ); - if ( rest_is_field_included( 'widgets', $fields ) ) { - $sidebars = wp_get_sidebars_widgets(); - $widgets = array_filter( - isset( $sidebars[ $sidebar['id'] ] ) ? $sidebars[ $sidebar['id'] ] : array(), - static function ( $widget_id ) use ( $wp_registered_widgets ) { - return isset( $wp_registered_widgets[ $widget_id ] ); - } - ); - - $sidebar['widgets'] = $widgets; - } - - $schema = $this->get_item_schema(); - $data = array(); - foreach ( $schema['properties'] as $property_id => $property ) { - if ( isset( $sidebar[ $property_id ] ) && true === rest_validate_value_from_schema( $sidebar[ $property_id ], $property ) ) { - $data[ $property_id ] = $sidebar[ $property_id ]; - } elseif ( isset( $property['default'] ) ) { - $data[ $property_id ] = $property['default']; - } - } - - $context = ! empty( $request['context'] ) ? $request['context'] : 'view'; - $data = $this->add_additional_fields_to_object( $data, $request ); - $data = $this->filter_response_by_context( $data, $context ); - - $response = rest_ensure_response( $data ); - - $response->add_links( $this->prepare_links( $sidebar ) ); - - /** - * Filters the REST API response for a sidebar. - * - * @since 5.6.0 - * - * @param WP_REST_Response $response The response object. - * @param array $raw_sidebar The raw sidebar data. - * @param WP_REST_Request $request The request object. - */ - return apply_filters( 'rest_prepare_sidebar', $response, $raw_sidebar, $request ); - } - - /** - * Prepares links for the sidebar. - * - * @since 5.6.0 - * - * @param array $sidebar Sidebar. - * - * @return array Links for the given widget. - */ - protected function prepare_links( $sidebar ) { - return array( - 'collection' => array( - 'href' => rest_url( sprintf( '%s/%s', $this->namespace, $this->rest_base ) ), - ), - 'self' => array( - 'href' => rest_url( sprintf( '%s/%s/%s', $this->namespace, $this->rest_base, $sidebar['id'] ) ), - ), - 'https://api.w.org/widget' => array( - 'href' => add_query_arg( 'sidebar', $sidebar['id'], rest_url( '/wp/v2/widgets' ) ), - 'embeddable' => true, - ), - ); - } - - /** - * Retrieves the block type' schema, conforming to JSON Schema. - * - * @return array Item schema data. - */ - public function get_item_schema() { - if ( $this->schema ) { - return $this->add_additional_fields_schema( $this->schema ); - } - - $schema = array( - '$schema' => 'http://json-schema.org/draft-04/schema#', - 'title' => 'sidebar', - 'type' => 'object', - 'properties' => array( - 'id' => array( - 'description' => __( 'ID of sidebar.', 'gutenberg' ), - 'type' => 'string', - 'context' => array( 'embed', 'view', 'edit' ), - 'readonly' => true, - ), - 'name' => array( - 'description' => __( 'Unique name identifying the sidebar.', 'gutenberg' ), - 'type' => 'string', - 'context' => array( 'embed', 'view', 'edit' ), - 'readonly' => true, - ), - 'description' => array( - 'description' => __( 'Description of sidebar.', 'gutenberg' ), - 'type' => 'string', - 'context' => array( 'embed', 'view', 'edit' ), - 'readonly' => true, - ), - 'class' => array( - 'description' => __( 'Extra CSS class to assign to the sidebar in the Widgets interface.', 'gutenberg' ), - 'type' => 'string', - 'context' => array( 'embed', 'view', 'edit' ), - 'readonly' => true, - ), - 'before_widget' => array( - 'description' => __( 'HTML content to prepend to each widget\'s HTML output when assigned to this sidebar. Default is an opening list item element.', 'gutenberg' ), - 'type' => 'string', - 'default' => '', - 'context' => array( 'embed', 'view', 'edit' ), - 'readonly' => true, - ), - 'after_widget' => array( - 'description' => __( 'HTML content to append to each widget\'s HTML output when assigned to this sidebar. Default is a closing list item element.', 'gutenberg' ), - 'type' => 'string', - 'default' => '', - 'context' => array( 'embed', 'view', 'edit' ), - 'readonly' => true, - ), - 'before_title' => array( - 'description' => __( 'HTML content to prepend to the sidebar title when displayed. Default is an opening h2 element.', 'gutenberg' ), - 'type' => 'string', - 'default' => '', - 'context' => array( 'embed', 'view', 'edit' ), - 'readonly' => true, - ), - 'after_title' => array( - 'description' => __( 'HTML content to append to the sidebar title when displayed. Default is a closing h2 element.', 'gutenberg' ), - 'type' => 'string', - 'default' => '', - 'context' => array( 'embed', 'view', 'edit' ), - 'readonly' => true, - ), - 'status' => array( - 'description' => __( 'Status of sidebar.', 'gutenberg' ), - 'type' => 'string', - 'enum' => array( 'active', 'inactive' ), - 'context' => array( 'embed', 'view', 'edit' ), - 'readonly' => true, - ), - 'widgets' => array( - 'description' => __( 'Nested widgets.', 'gutenberg' ), - 'type' => 'array', - 'items' => array( - 'type' => array( 'object', 'string' ), - ), - 'default' => array(), - 'context' => array( 'embed', 'view', 'edit' ), - ), - ), - ); - - $this->schema = $schema; - - return $this->add_additional_fields_schema( $this->schema ); - } -} diff --git a/lib/class-wp-rest-widget-types-controller.php b/lib/class-wp-rest-widget-types-controller.php deleted file mode 100644 index 7e6a21dd3ee8d..0000000000000 --- a/lib/class-wp-rest-widget-types-controller.php +++ /dev/null @@ -1,551 +0,0 @@ -<?php -/** - * REST API: WP_REST_Widget_Types_Controller class - * - * @package WordPress - * @subpackage REST_API - * @since 5.6.0 - */ - -/** - * Core class to access widget types via the REST API. - * - * @since 5.6.0 - * - * @see WP_REST_Controller - */ -class WP_REST_Widget_Types_Controller extends WP_REST_Controller { - - /** - * Constructor. - * - * @since 5.6.0 - */ - public function __construct() { - $this->namespace = 'wp/v2'; - $this->rest_base = 'widget-types'; - } - - /** - * Registers the widget type routes. - * - * @since 5.6.0 - * - * @see register_rest_route() - */ - public function register_routes() { - register_rest_route( - $this->namespace, - '/' . $this->rest_base, - array( - array( - 'methods' => WP_REST_Server::READABLE, - 'callback' => array( $this, 'get_items' ), - 'permission_callback' => array( $this, 'get_items_permissions_check' ), - 'args' => $this->get_collection_params(), - ), - 'schema' => array( $this, 'get_public_item_schema' ), - ) - ); - - register_rest_route( - $this->namespace, - '/' . $this->rest_base . '/(?P<id>[a-zA-Z0-9_-]+)', - array( - 'args' => array( - 'id' => array( - 'description' => __( 'The widget type id.', 'gutenberg' ), - 'type' => 'string', - ), - ), - array( - 'methods' => WP_REST_Server::READABLE, - 'callback' => array( $this, 'get_item' ), - 'permission_callback' => array( $this, 'get_item_permissions_check' ), - 'args' => $this->get_collection_params(), - ), - 'schema' => array( $this, 'get_public_item_schema' ), - ) - ); - - register_rest_route( - $this->namespace, - '/' . $this->rest_base . '/(?P<id>[a-zA-Z0-9_-]+)/encode', - array( - 'args' => array( - 'id' => array( - 'description' => __( 'The widget type id.', 'gutenberg' ), - 'type' => 'string', - 'required' => true, - ), - 'instance' => array( - 'description' => __( 'Current instance settings of the widget.', 'gutenberg' ), - 'type' => 'object', - ), - 'form_data' => array( - 'description' => __( 'Serialized widget form data to encode into instance settings.', 'gutenberg' ), - 'type' => 'string', - 'sanitize_callback' => function( $string ) { - $array = array(); - wp_parse_str( $string, $array ); - return $array; - }, - ), - ), - array( - 'methods' => WP_REST_Server::CREATABLE, - 'permission_callback' => array( $this, 'get_item_permissions_check' ), - 'callback' => array( $this, 'encode_form_data' ), - ), - ) - ); - } - - /** - * Checks whether a given request has permission to read widget types. - * - * @since 5.6.0 - * - * @param WP_REST_Request $request Full details about the request. - * @return WP_Error|bool True if the request has read access, WP_Error object otherwise. - */ - public function get_items_permissions_check( $request ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable - return $this->check_read_permission(); - } - - /** - * Retrieves the list of all widget types. - * - * @since 5.6.0 - * - * @param WP_REST_Request $request Full details about the request. - * @return WP_Error|WP_REST_Response Response object on success, or WP_Error object on failure. - */ - public function get_items( $request ) { - $data = array(); - foreach ( $this->get_widgets() as $widget ) { - $widget_type = $this->prepare_item_for_response( $widget, $request ); - $data[] = $this->prepare_response_for_collection( $widget_type ); - } - - return rest_ensure_response( $data ); - } - - /** - * Checks if a given request has access to read a widget type. - * - * @since 5.6.0 - * - * @param WP_REST_Request $request Full details about the request. - * @return WP_Error|bool True if the request has read access for the item, WP_Error object otherwise. - */ - public function get_item_permissions_check( $request ) { - $check = $this->check_read_permission(); - if ( is_wp_error( $check ) ) { - return $check; - } - $widget_id = $request['id']; - $widget_type = $this->get_widget( $widget_id ); - if ( is_wp_error( $widget_type ) ) { - return $widget_type; - } - - return true; - } - - /** - * Checks whether the user can read widget types. - * - * @since 5.6.0 - * - * @return WP_Error|bool True if the widget type is visible, WP_Error otherwise. - */ - protected function check_read_permission() { - if ( ! current_user_can( 'edit_theme_options' ) ) { - return new WP_Error( - 'rest_cannot_manage_widgets', - __( 'Sorry, you are not allowed to manage widgets on this site.', 'gutenberg' ), - array( - 'status' => rest_authorization_required_code(), - ) - ); - } - - return true; - } - - /** - * Gets the details about the requested widget. - * - * @since 5.6.0 - * - * @param string $id The widget type id. - * @return array|WP_Error The array of widget data if the name is valid, WP_Error otherwise. - */ - public function get_widget( $id ) { - foreach ( $this->get_widgets() as $widget ) { - if ( $id === $widget['id'] ) { - return $widget; - } - } - - return new WP_Error( 'rest_widget_type_invalid', __( 'Invalid widget type.', 'gutenberg' ), array( 'status' => 404 ) ); - } - - /** - * Normalize array of widgets. - * - * @since 5.6.0 - * - * @global array $wp_registered_widgets The list of registered widgets. - * - * @return array Array of widgets. - */ - protected function get_widgets() { - global $wp_registered_widgets; - - $widgets = array(); - - foreach ( $wp_registered_widgets as $widget ) { - $parsed_id = wp_parse_widget_id( $widget['id'] ); - $widget_object = gutenberg_get_widget_object( $parsed_id['id_base'] ); - - $widget['id'] = $parsed_id['id_base']; - $widget['is_multi'] = (bool) $widget_object; - $widget['name'] = html_entity_decode( $widget['name'] ); - $widget['description'] = html_entity_decode( $widget['description'] ); - - unset( $widget['callback'] ); - - $classname = ''; - foreach ( (array) $widget['classname'] as $cn ) { - if ( is_string( $cn ) ) { - $classname .= '_' . $cn; - } elseif ( is_object( $cn ) ) { - $classname .= '_' . get_class( $cn ); - } - } - $widget['classname'] = ltrim( $classname, '_' ); - - $widgets[] = $widget; - } - - return $widgets; - } - - /** - * Retrieves a single widget type from the collection. - * - * @since 5.6.0 - * - * @param WP_REST_Request $request Full details about the request. - * @return WP_Error|WP_REST_Response Response object on success, or WP_Error object on failure. - */ - public function get_item( $request ) { - $widget_id = $request['id']; - $widget_type = $this->get_widget( $widget_id ); - if ( is_wp_error( $widget_type ) ) { - return $widget_type; - } - $data = $this->prepare_item_for_response( $widget_type, $request ); - - return rest_ensure_response( $data ); - } - - /** - * Prepares a widget type object for serialization. - * - * @since 5.6.0 - * - * @param array $widget_type Widget type data. - * @param WP_REST_Request $request Full details about the request. - * @return WP_REST_Response Widget type data. - */ - public function prepare_item_for_response( $widget_type, $request ) { - $fields = $this->get_fields_for_response( $request ); - $data = array( - 'id' => $widget_type['id'], - ); - - $schema = $this->get_item_schema(); - $extra_fields = array( - 'name', - 'description', - 'is_multi', - 'classname', - 'widget_class', - 'option_name', - 'customize_selective_refresh', - ); - - foreach ( $extra_fields as $extra_field ) { - if ( ! rest_is_field_included( $extra_field, $fields ) ) { - continue; - } - - if ( isset( $widget_type[ $extra_field ] ) ) { - $field = $widget_type[ $extra_field ]; - } elseif ( array_key_exists( 'default', $schema['properties'][ $extra_field ] ) ) { - $field = $schema['properties'][ $extra_field ]['default']; - } else { - $field = ''; - } - - $data[ $extra_field ] = rest_sanitize_value_from_schema( $field, $schema['properties'][ $extra_field ] ); - } - - $context = ! empty( $request['context'] ) ? $request['context'] : 'view'; - $data = $this->add_additional_fields_to_object( $data, $request ); - $data = $this->filter_response_by_context( $data, $context ); - - $response = rest_ensure_response( $data ); - - $response->add_links( $this->prepare_links( $widget_type ) ); - - /** - * Filters the REST API response for a widget type. - * - * @since 5.6.0 - * - * @param WP_REST_Response $response The response object. - * @param array $widget_type The array of widget data. - * @param WP_REST_Request $request The request object. - */ - return apply_filters( 'rest_prepare_widget_type', $response, $widget_type, $request ); - } - - /** - * Prepares links for the widget type. - * - * @since 5.6.0 - * - * @param array $widget_type Widget type data. - * @return array Links for the given widget type. - */ - protected function prepare_links( $widget_type ) { - return array( - 'collection' => array( - 'href' => rest_url( sprintf( '%s/%s', $this->namespace, $this->rest_base ) ), - ), - 'self' => array( - 'href' => rest_url( sprintf( '%s/%s/%s', $this->namespace, $this->rest_base, $widget_type['id'] ) ), - ), - ); - } - - /** - * Retrieves the widget type's schema, conforming to JSON Schema. - * - * @since 5.6.0 - * - * @return array Item schema data. - */ - public function get_item_schema() { - if ( $this->schema ) { - return $this->add_additional_fields_schema( $this->schema ); - } - - $schema = array( - '$schema' => 'http://json-schema.org/draft-04/schema#', - 'title' => 'widget-type', - 'type' => 'object', - 'properties' => array( - 'id' => array( - 'description' => __( 'Unique slug identifying the widget type.', 'gutenberg' ), - 'type' => 'string', - 'context' => array( 'embed', 'view', 'edit' ), - 'readonly' => true, - ), - 'name' => array( - 'description' => __( 'Human-readable name identifying the widget type.', 'gutenberg' ), - 'type' => 'string', - 'default' => '', - 'context' => array( 'embed', 'view', 'edit' ), - 'readonly' => true, - ), - 'description' => array( - 'description' => __( 'Description of the widget.', 'gutenberg' ), - 'type' => 'string', - 'default' => '', - 'context' => array( 'view', 'edit', 'embed' ), - ), - 'is_multi' => array( - 'description' => __( 'Whether the widget supports multiple instances', 'gutenberg' ), - 'type' => 'boolean', - 'context' => array( 'view', 'edit', 'embed' ), - 'readonly' => true, - ), - 'classname' => array( - 'description' => __( 'Class name', 'gutenberg' ), - 'type' => 'string', - 'default' => '', - 'context' => array( 'embed', 'view', 'edit' ), - 'readonly' => true, - ), - ), - ); - - $this->schema = $schema; - - return $this->add_additional_fields_schema( $this->schema ); - } - - /** - * An RPC-style endpoint which can be used by clients to turn user input in - * a widget admin form into an encoded instance object. - * - * Accepts: - * - * - id: A widget type ID. - * - instance: A widget's encoded instance object. Optional. - * - form_data: Form data from submitting a widget's admin form. Optional. - * - * Returns: - * - instance: The encoded instance object after updating the widget with - * the given form data. - * - form: The widget's admin form after updating the widget with the - * given form data. - * - * @param WP_REST_Request $request Full details about the request. - * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure. - */ - public function encode_form_data( $request ) { - $id = $request['id']; - $widget_object = gutenberg_get_widget_object( $id ); - - if ( ! $widget_object ) { - return new WP_Error( - 'rest_invalid_widget', - __( 'Cannot preview a widget that does not extend WP_Widget.', 'gutenberg' ), - array( 'status' => 400 ) - ); - } - - // Set the widget's number so that the id attributes in the HTML that we - // return are predictable. - if ( isset( $request['number'] ) && is_numeric( $request['number'] ) ) { - $widget_object->_set( (int) $request['number'] ); - } else { - $widget_object->_set( -1 ); - } - - if ( isset( $request['instance']['encoded'], $request['instance']['hash'] ) ) { - $serialized_instance = base64_decode( $request['instance']['encoded'] ); - if ( ! hash_equals( wp_hash( $serialized_instance ), $request['instance']['hash'] ) ) { - return new WP_Error( - 'rest_invalid_widget', - __( 'The provided instance is malformed.', 'gutenberg' ), - array( 'status' => 400 ) - ); - } - $instance = unserialize( $serialized_instance ); - } else { - $instance = array(); - } - - if ( - isset( $request['form_data'][ "widget-$id" ] ) && - is_array( $request['form_data'][ "widget-$id" ] ) - ) { - $new_instance = array_values( $request['form_data'][ "widget-$id" ] )[0]; - $old_instance = $instance; - - $instance = $widget_object->update( $new_instance, $old_instance ); - - /** This filter is documented in wp-includes/class-wp-widget.php */ - $instance = apply_filters( - 'widget_update_callback', - $instance, - $new_instance, - $old_instance, - $widget_object - ); - } - - $serialized_instance = serialize( $instance ); - - $response = array( - 'form' => trim( - $this->get_widget_form( - $widget_object, - $instance - ) - ), - 'preview' => trim( - $this->get_widget_preview( - $widget_object, - $instance - ) - ), - 'instance' => array( - 'encoded' => base64_encode( $serialized_instance ), - 'hash' => wp_hash( $serialized_instance ), - ), - ); - - if ( ! empty( $widget_object->show_instance_in_rest ) ) { - // Use new stdClass so that JSON result is {} and not []. - $response['instance']['raw'] = empty( $instance ) ? new stdClass : $instance; - } - - return rest_ensure_response( $response ); - } - - /** - * Returns the output of WP_Widget::widget() when called with the provided - * instance. Used by encode_form_data() to preview a widget. - - * @param WP_Widget $widget_object Widget object to call widget() on. - * @param array $instance Widget instance settings. - * @return string - */ - private function get_widget_preview( $widget_object, $instance ) { - ob_start(); - the_widget( get_class( $widget_object ), $instance ); - return ob_get_clean(); - } - - /** - * Returns the output of WP_Widget::form() when called with the provided - * instance. Used by encode_form_data() to preview a widget's form. - * - * @param WP_Widget $widget_object Widget object to call widget() on. - * @param array $instance Widget instance settings. - * @return string - */ - private function get_widget_form( $widget_object, $instance ) { - ob_start(); - - /** This filter is documented in wp-includes/class-wp-widget.php */ - $instance = apply_filters( - 'widget_form_callback', - $instance, - $widget_object - ); - - if ( false !== $instance ) { - $return = $widget_object->form( $instance ); - - /** This filter is documented in wp-includes/class-wp-widget.php */ - do_action_ref_array( - 'in_widget_form', - array( &$widget_object, &$return, $instance ) - ); - } - - return ob_get_clean(); - } - - /** - * Retrieves the query params for collections. - * - * @since 5.6.0 - * - * @return array Collection parameters. - */ - public function get_collection_params() { - return array( - 'context' => $this->get_context_param( array( 'default' => 'view' ) ), - ); - } -} diff --git a/lib/class-wp-rest-widgets-controller.php b/lib/class-wp-rest-widgets-controller.php deleted file mode 100644 index 84256c9eb3d42..0000000000000 --- a/lib/class-wp-rest-widgets-controller.php +++ /dev/null @@ -1,724 +0,0 @@ -<?php -/** - * REST API: WP_REST_Widgets_Controller class - * - * @package WordPress - * @subpackage REST_API - * @since 5.6.0 - */ - -/** - * Core class to access widgets via the REST API. - * - * @since 5.6.0 - * - * @see WP_REST_Controller - */ -class WP_REST_Widgets_Controller extends WP_REST_Controller { - - /** - * Widgets controller constructor. - * - * @since 5.6.0 - */ - public function __construct() { - $this->namespace = 'wp/v2'; - $this->rest_base = 'widgets'; - } - - /** - * Registers the widget routes for the controller. - * - * @since 5.6.0 - */ - public function register_routes() { - register_rest_route( - $this->namespace, - $this->rest_base, - array( - array( - 'methods' => WP_REST_Server::READABLE, - 'callback' => array( $this, 'get_items' ), - 'permission_callback' => array( $this, 'get_items_permissions_check' ), - 'args' => $this->get_collection_params(), - ), - array( - 'methods' => WP_REST_Server::CREATABLE, - 'callback' => array( $this, 'create_item' ), - 'permission_callback' => array( $this, 'create_item_permissions_check' ), - 'args' => $this->get_endpoint_args_for_item_schema(), - ), - 'allow_batch' => array( 'v1' => true ), - 'schema' => array( $this, 'get_public_item_schema' ), - ) - ); - - register_rest_route( - $this->namespace, - $this->rest_base . '/(?P<id>[\w\-]+)', - array( - array( - 'methods' => WP_REST_Server::READABLE, - 'callback' => array( $this, 'get_item' ), - 'permission_callback' => array( $this, 'get_item_permissions_check' ), - 'args' => array( - 'context' => $this->get_context_param( array( 'default' => 'view' ) ), - ), - ), - array( - 'methods' => WP_REST_Server::EDITABLE, - 'callback' => array( $this, 'update_item' ), - 'permission_callback' => array( $this, 'update_item_permissions_check' ), - 'args' => $this->get_endpoint_args_for_item_schema( WP_REST_Server::EDITABLE ), - ), - array( - 'methods' => WP_REST_Server::DELETABLE, - 'callback' => array( $this, 'delete_item' ), - 'permission_callback' => array( $this, 'delete_item_permissions_check' ), - 'args' => array( - 'force' => array( - 'description' => __( 'Whether to force removal of the widget, or move it to the inactive sidebar.', 'gutenberg' ), - 'type' => 'boolean', - ), - ), - ), - 'allow_batch' => array( 'v1' => true ), - 'schema' => array( $this, 'get_public_item_schema' ), - ) - ); - } - - /** - * Checks if a given request has access to get widgets. - * - * @since 5.6.0 - * - * @param WP_REST_Request $request Full details about the request. - * @return true|WP_Error True if the request has read access, WP_Error object otherwise. - */ - public function get_items_permissions_check( $request ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable - return $this->permissions_check(); - } - - /** - * Retrieves a collection of widgets. - * - * @since 5.6.0 - * - * @param WP_REST_Request $request Full details about the request. - * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure. - */ - public function get_items( $request ) { - $prepared = array(); - - foreach ( wp_get_sidebars_widgets() as $sidebar_id => $widget_ids ) { - if ( isset( $request['sidebar'] ) && $sidebar_id !== $request['sidebar'] ) { - continue; - } - - foreach ( $widget_ids as $widget_id ) { - $response = $this->prepare_item_for_response( compact( 'sidebar_id', 'widget_id' ), $request ); - - if ( ! is_wp_error( $response ) ) { - $prepared[] = $this->prepare_response_for_collection( $response ); - } - } - } - - return new WP_REST_Response( $prepared ); - } - - /** - * Checks if a given request has access to get a widget. - * - * @since 5.6.0 - * - * @param WP_REST_Request $request Full details about the request. - * @return true|WP_Error True if the request has read access, WP_Error object otherwise. - */ - public function get_item_permissions_check( $request ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable - return $this->permissions_check(); - } - - /** - * Gets an individual widget. - * - * @since 5.6.0 - * - * @param WP_REST_Request $request Full details about the request. - * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure. - */ - public function get_item( $request ) { - $widget_id = $request['id']; - $sidebar_id = wp_find_widgets_sidebar( $widget_id ); - - if ( is_null( $sidebar_id ) ) { - return new WP_Error( - 'rest_widget_not_found', - __( 'No widget was found with that id.', 'gutenberg' ), - array( 'status' => 404 ) - ); - } - - return $this->prepare_item_for_response( compact( 'widget_id', 'sidebar_id' ), $request ); - } - - /** - * Checks if a given request has access to create widgets. - * - * @since 5.6.0 - * - * @param WP_REST_Request $request Full details about the request. - * @return true|WP_Error True if the request has read access, WP_Error object otherwise. - */ - public function create_item_permissions_check( $request ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable - return $this->permissions_check(); - } - - /** - * Creates a widget. - * - * @since 5.6.0 - * - * @param WP_REST_Request $request Full details about the request. - * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure. - */ - public function create_item( $request ) { - $sidebar_id = $request['sidebar']; - - $widget_id = $this->save_widget( $request ); - - if ( is_wp_error( $widget_id ) ) { - return $widget_id; - } - - wp_assign_widget_to_sidebar( $widget_id, $sidebar_id ); - - $request['context'] = 'edit'; - - $response = $this->prepare_item_for_response( compact( 'sidebar_id', 'widget_id' ), $request ); - - if ( is_wp_error( $response ) ) { - return $response; - } - - $response->set_status( 201 ); - - return $response; - } - - /** - * Checks if a given request has access to update widgets. - * - * @since 5.6.0 - * - * @param WP_REST_Request $request Full details about the request. - * @return true|WP_Error True if the request has read access, WP_Error object otherwise. - */ - public function update_item_permissions_check( $request ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable - return $this->permissions_check(); - } - - /** - * Updates an existing widget. - * - * @since 5.6.0 - * - * @param WP_REST_Request $request Full details about the request. - * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure. - */ - public function update_item( $request ) { - $widget_id = $request['id']; - $sidebar_id = wp_find_widgets_sidebar( $widget_id ); - - // Allow sidebar to be unset or missing when widget is not a WP_Widget. - $parsed_id = wp_parse_widget_id( $widget_id ); - $widget_object = gutenberg_get_widget_object( $parsed_id['id_base'] ); - if ( is_null( $sidebar_id ) && $widget_object ) { - return new WP_Error( - 'rest_widget_not_found', - __( 'No widget was found with that id.', 'gutenberg' ), - array( 'status' => 404 ) - ); - } - - if ( - $request->has_param( 'instance' ) || - $request->has_param( 'form_data' ) - ) { - $maybe_error = $this->save_widget( $request ); - if ( is_wp_error( $maybe_error ) ) { - return $maybe_error; - } - } - - if ( $request->has_param( 'sidebar' ) ) { - if ( $sidebar_id !== $request['sidebar'] ) { - $sidebar_id = $request['sidebar']; - wp_assign_widget_to_sidebar( $widget_id, $sidebar_id ); - } - } - - $request['context'] = 'edit'; - - return $this->prepare_item_for_response( compact( 'widget_id', 'sidebar_id' ), $request ); - } - - /** - * Checks if a given request has access to delete widgets. - * - * @since 5.6.0 - * - * @param WP_REST_Request $request Full details about the request. - * @return true|WP_Error True if the request has read access, WP_Error object otherwise. - */ - public function delete_item_permissions_check( $request ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable - return $this->permissions_check(); - } - - /** - * Deletes a widget. - * - * @since 5.6.0 - * - * @global array $wp_registered_widget_updates The registered widget update functions. - * - * @param WP_REST_Request $request Full details about the request. - * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure. - */ - public function delete_item( $request ) { - global $wp_registered_widget_updates; - - $widget_id = $request['id']; - $sidebar_id = wp_find_widgets_sidebar( $widget_id ); - - if ( is_null( $sidebar_id ) ) { - return new WP_Error( - 'rest_widget_not_found', - __( 'No widget was found with that id.', 'gutenberg' ), - array( 'status' => 404 ) - ); - } - - $request['context'] = 'edit'; - - if ( $request['force'] ) { - $response = $this->prepare_item_for_response( compact( 'widget_id', 'sidebar_id' ), $request ); - - $parsed_id = wp_parse_widget_id( $widget_id ); - $id_base = $parsed_id['id_base']; - - $original_post = $_POST; - $original_request = $_REQUEST; - - $_POST = array( - 'sidebar' => $sidebar_id, - "widget-$id_base" => array(), - 'the-widget-id' => $widget_id, - 'delete_widget' => '1', - ); - $_REQUEST = $_POST; - - $callback = $wp_registered_widget_updates[ $id_base ]['callback']; - $params = $wp_registered_widget_updates[ $id_base ]['params']; - - if ( is_callable( $callback ) ) { - ob_start(); - call_user_func_array( $callback, $params ); - ob_end_clean(); - } - - $_POST = $original_post; - $_REQUEST = $original_request; - - wp_assign_widget_to_sidebar( $widget_id, '' ); - - $response->set_data( - array( - 'deleted' => true, - 'previous' => $response->get_data(), - ) - ); - } else { - wp_assign_widget_to_sidebar( $widget_id, 'wp_inactive_widgets' ); - - $response = $this->prepare_item_for_response( - array( - 'sidebar_id' => 'wp_inactive_widgets', - 'widget_id' => $widget_id, - ), - $request - ); - } - - return $response; - } - - /** - * Performs a permissions check for managing widgets. - * - * @since 5.6.0 - * - * @return true|WP_Error - */ - protected function permissions_check() { - if ( ! current_user_can( 'edit_theme_options' ) ) { - return new WP_Error( - 'rest_cannot_manage_widgets', - __( 'Sorry, you are not allowed to manage widgets on this site.', 'gutenberg' ), - array( - 'status' => rest_authorization_required_code(), - ) - ); - } - - return true; - } - - /** - * Saves the widget in the request object. - * - * @since 5.6.0 - * - * @param WP_REST_Request $request Full details about the request. - * - * @return string The saved widget ID. - */ - protected function save_widget( $request ) { - global $wp_registered_widget_updates; - - require_once ABSPATH . 'wp-admin/includes/widgets.php'; // For next_widget_id_number(). - - if ( isset( $request['id'] ) ) { - // Saving an existing widget. - $id = $request['id']; - $parsed_id = wp_parse_widget_id( $id ); - $id_base = $parsed_id['id_base']; - $number = isset( $parsed_id['number'] ) ? $parsed_id['number'] : null; - $widget_object = gutenberg_get_widget_object( $id_base ); - } elseif ( $request['id_base'] ) { - // Saving a new widget. - $id_base = $request['id_base']; - $widget_object = gutenberg_get_widget_object( $id_base ); - $number = $widget_object ? next_widget_id_number( $id_base ) : null; - $id = $widget_object ? $id_base . '-' . $number : $id_base; - } else { - return new WP_Error( - 'rest_invalid_widget', - __( 'Widget type (id_base) is required.', 'gutenberg' ), - array( 'status' => 400 ) - ); - } - - if ( ! isset( $wp_registered_widget_updates[ $id_base ] ) ) { - return new WP_Error( - 'rest_invalid_widget', - __( 'The provided widget type (id_base) cannot be updated.', 'gutenberg' ), - array( 'status' => 400 ) - ); - } - - if ( isset( $request['instance'] ) ) { - if ( ! $widget_object ) { - return new WP_Error( - 'rest_invalid_widget', - __( 'Cannot set instance on a widget that does not extend WP_Widget.', 'gutenberg' ), - array( 'status' => 400 ) - ); - } - - if ( isset( $request['instance']['raw'] ) ) { - if ( empty( $widget_object->show_instance_in_rest ) ) { - return new WP_Error( - 'rest_invalid_widget', - __( 'Widget type does not support raw instances.', 'gutenberg' ), - array( 'status' => 400 ) - ); - } - $instance = $request['instance']['raw']; - } elseif ( isset( $request['instance']['encoded'], $request['instance']['hash'] ) ) { - $serialized_instance = base64_decode( $request['instance']['encoded'] ); - if ( ! hash_equals( wp_hash( $serialized_instance ), $request['instance']['hash'] ) ) { - return new WP_Error( - 'rest_invalid_widget', - __( 'The provided instance is malformed.', 'gutenberg' ), - array( 'status' => 400 ) - ); - } - $instance = unserialize( $serialized_instance ); - } else { - return new WP_Error( - 'rest_invalid_widget', - __( 'The provided instance is invalid. Must contain raw OR encoded and hash.', 'gutenberg' ), - array( 'status' => 400 ) - ); - } - - $form_data = array( - "widget-$id_base" => array( - $number => $instance, - ), - ); - } elseif ( isset( $request['form_data'] ) ) { - $form_data = $request['form_data']; - } else { - $form_data = array(); - } - - $original_post = $_POST; - $original_request = $_REQUEST; - - foreach ( $form_data as $key => $value ) { - $slashed_value = wp_slash( $value ); - $_POST[ $key ] = $slashed_value; - $_REQUEST[ $key ] = $slashed_value; - } - - $callback = $wp_registered_widget_updates[ $id_base ]['callback']; - $params = $wp_registered_widget_updates[ $id_base ]['params']; - - if ( is_callable( $callback ) ) { - ob_start(); - call_user_func_array( $callback, $params ); - ob_end_clean(); - } - - $_POST = $original_post; - $_REQUEST = $original_request; - - if ( $widget_object ) { - // Register any multi-widget that the update callback just created. - $widget_object->_set( $number ); - $widget_object->_register_one( $number ); - - // WP_Widget sets updated = true after an update to prevent more - // than one widget from being saved per request. This isn't what we - // want in the REST API, though, as we support batch requests. - $widget_object->updated = false; - } - - return $id; - } - - /** - * Prepares the widget for the REST response. - * - * @since 5.6.0 - * - * @global array $wp_registered_sidebars The registered sidebars. - * @global array $wp_registered_widgets The registered widgets. - * @global array $wp_registered_widget_controls The registered widget controls. - * - * @param array $item An array containing a widget_id and sidebar_id. - * @param WP_REST_Request $request Request object. - * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure. - */ - public function prepare_item_for_response( $item, $request ) { - global $wp_registered_widgets; - - $widget_id = $item['widget_id']; - $sidebar_id = $item['sidebar_id']; - - if ( ! isset( $wp_registered_widgets[ $widget_id ] ) ) { - return new WP_Error( - 'rest_invalid_widget', - __( 'The requested widget is invalid.', 'gutenberg' ), - array( 'status' => 500 ) - ); - } - - $widget = $wp_registered_widgets[ $widget_id ]; - $parsed_id = wp_parse_widget_id( $widget_id ); - $fields = $this->get_fields_for_response( $request ); - - $prepared = array( - 'id' => $widget_id, - 'id_base' => $parsed_id['id_base'], - 'sidebar' => $sidebar_id, - 'rendered' => '', - 'rendered_form' => null, - 'instance' => null, - ); - - if ( - rest_is_field_included( 'rendered', $fields ) && - 'wp_inactive_widgets' !== $sidebar_id - ) { - $prepared['rendered'] = trim( wp_render_widget( $widget_id, $sidebar_id ) ); - } - - if ( rest_is_field_included( 'rendered_form', $fields ) ) { - $rendered_form = wp_render_widget_control( $widget_id ); - if ( ! is_null( $rendered_form ) ) { - $prepared['rendered_form'] = trim( $rendered_form ); - } - } - - if ( rest_is_field_included( 'instance', $fields ) ) { - $widget_object = gutenberg_get_widget_object( $parsed_id['id_base'] ); - $instance = gutenberg_get_widget_instance( $widget_id ); - - if ( ! is_null( $instance ) ) { - $serialized_instance = serialize( $instance ); - $prepared['instance']['encoded'] = base64_encode( $serialized_instance ); - $prepared['instance']['hash'] = wp_hash( $serialized_instance ); - - if ( ! empty( $widget_object->show_instance_in_rest ) ) { - // Use new stdClass so that JSON result is {} and not []. - $prepared['instance']['raw'] = empty( $instance ) ? new stdClass : $instance; - } - } - } - - $context = ! empty( $request['context'] ) ? $request['context'] : 'view'; - $prepared = $this->add_additional_fields_to_object( $prepared, $request ); - $prepared = $this->filter_response_by_context( $prepared, $context ); - - $response = rest_ensure_response( $prepared ); - - $response->add_links( $this->prepare_links( $prepared ) ); - - /** - * Filters the REST API response for a widget. - * - * @since 5.6.0 - * - * @param WP_REST_Response $response The response object. - * @param array $widget The registered widget data. - * @param WP_REST_Request $request Request used to generate the response. - */ - return apply_filters( 'rest_prepare_widget', $response, $widget, $request ); - } - - /** - * Prepares links for the widget. - * - * @since 5.6.0 - * - * @param array $prepared Widget. - * @return array Links for the given widget. - */ - protected function prepare_links( $prepared ) { - $id_base = ! empty( $prepared['id_base'] ) ? $prepared['id_base'] : $prepared['id']; - - return array( - 'self' => array( - 'href' => rest_url( sprintf( '%s/%s/%s', $this->namespace, $this->rest_base, $prepared['id'] ) ), - ), - 'collection' => array( - 'href' => rest_url( sprintf( '%s/%s', $this->namespace, $this->rest_base ) ), - ), - 'about' => array( - 'href' => rest_url( sprintf( 'wp/v2/widget-types/%s', $id_base ) ), - 'embeddable' => true, - ), - 'https://api.w.org/sidebar' => array( - 'href' => rest_url( sprintf( 'wp/v2/sidebars/%s/', $prepared['sidebar'] ) ), - ), - ); - } - - /** - * Gets the list of collection params. - * - * @since 5.6.0 - * - * @return array[] - */ - public function get_collection_params() { - return array( - 'context' => $this->get_context_param( array( 'default' => 'view' ) ), - 'sidebar' => array( - 'description' => __( 'The sidebar to return widgets for.', 'gutenberg' ), - 'type' => 'string', - ), - ); - } - - /** - * Retrieves the widget's schema, conforming to JSON Schema. - * - * @since 5.6.0 - * - * @return array Item schema data. - */ - public function get_item_schema() { - if ( $this->schema ) { - return $this->add_additional_fields_schema( $this->schema ); - } - - $this->schema = array( - '$schema' => 'http://json-schema.org/draft-04/schema#', - 'title' => 'widget', - 'type' => 'object', - 'properties' => array( - 'id' => array( - 'description' => __( 'Unique identifier for the widget.', 'gutenberg' ), - 'type' => 'string', - 'context' => array( 'view', 'edit', 'embed' ), - ), - 'id_base' => array( - 'description' => __( 'The type of the widget. Corresponds to ID in widget-types endpoint.', 'gutenberg' ), - 'type' => 'string', - 'context' => array( 'view', 'edit', 'embed' ), - ), - 'sidebar' => array( - 'description' => __( 'The sidebar the widget belongs to.', 'gutenberg' ), - 'type' => 'string', - 'default' => 'wp_inactive_widgets', - 'required' => true, - 'context' => array( 'view', 'edit', 'embed' ), - ), - 'rendered' => array( - 'description' => __( 'HTML representation of the widget.', 'gutenberg' ), - 'type' => 'string', - 'context' => array( 'view', 'edit', 'embed' ), - 'readonly' => true, - ), - 'rendered_form' => array( - 'description' => __( 'HTML representation of the widget admin form.', 'gutenberg' ), - 'type' => 'string', - 'context' => array( 'edit' ), - 'readonly' => true, - ), - 'instance' => array( - 'description' => __( 'Instance settings of the widget, if supported.', 'gutenberg' ), - 'type' => 'object', - 'context' => array( 'view', 'edit', 'embed' ), - 'default' => null, - 'properties' => array( - 'encoded' => array( - 'description' => __( 'Base64 encoded representation of the instance settings.', 'gutenberg' ), - 'type' => 'string', - 'context' => array( 'view', 'edit', 'embed' ), - ), - 'hash' => array( - 'description' => __( 'Cryptographic hash of the instance settings.', 'gutenberg' ), - 'type' => 'string', - 'context' => array( 'view', 'edit', 'embed' ), - ), - 'raw' => array( - 'description' => __( 'Unencoded instance settings, if supported.', 'gutenberg' ), - 'type' => 'object', - 'context' => array( 'view', 'edit', 'embed' ), - ), - ), - ), - 'form_data' => array( - 'description' => __( 'URL-encoded form data from the widget admin form. Used to update a widget that does not support instance. Write only.', 'gutenberg' ), - 'type' => 'string', - 'context' => array(), - 'arg_options' => array( - 'sanitize_callback' => function( $string ) { - $array = array(); - wp_parse_str( $string, $array ); - return $array; - }, - ), - ), - ), - ); - - return $this->add_additional_fields_schema( $this->schema ); - } -} diff --git a/lib/class-wp-sidebar-block-editor-control.php b/lib/class-wp-sidebar-block-editor-control.php deleted file mode 100644 index 9773f807fc316..0000000000000 --- a/lib/class-wp-sidebar-block-editor-control.php +++ /dev/null @@ -1,27 +0,0 @@ -<?php -/** - * Widget API: WP_Sidebar_Block_Editor_Control class. - * - * @package Gutenberg - */ - -/** - * Core class used to implement the widgets block editor control in the customizer. - * - * @see WP_Customize_Control - */ -class WP_Sidebar_Block_Editor_Control extends WP_Customize_Control { - /** - * The control type. - * - * @var string - */ - public $type = 'sidebar_block_editor'; - - /** - * Render the widgets block editor container. - */ - public function render_content() { - // Render nothing. - } -} diff --git a/lib/class-wp-theme-json-gutenberg.php b/lib/class-wp-theme-json-gutenberg.php deleted file mode 100644 index b3ee6d1f8b9d3..0000000000000 --- a/lib/class-wp-theme-json-gutenberg.php +++ /dev/null @@ -1,1369 +0,0 @@ -<?php -/** - * Process of structures that adhere to the theme.json schema. - * - * @package gutenberg - */ - -/** - * Class that encapsulates the processing of - * structures that adhere to the theme.json spec. - */ -class WP_Theme_JSON_Gutenberg { - - /** - * Container of data in theme.json format. - * - * @var array - */ - private $theme_json = null; - - /** - * Holds block metadata extracted from block.json - * to be shared among all instances so we don't - * process it twice. - * - * @var array - */ - private static $blocks_metadata = null; - - /** - * The CSS selector for the root block. - * - * @var string - */ - const ROOT_BLOCK_SELECTOR = 'body'; - - const VALID_ORIGINS = array( - 'core', - 'theme', - 'user', - ); - - const VALID_TOP_LEVEL_KEYS = array( - 'customTemplates', - 'templateParts', - 'styles', - 'settings', - 'version', - ); - - const VALID_STYLES = array( - 'border' => array( - 'color' => null, - 'radius' => null, - 'style' => null, - 'width' => null, - ), - 'color' => array( - 'background' => null, - 'gradient' => null, - 'text' => null, - ), - 'spacing' => array( - 'margin' => null, - 'padding' => null, - ), - 'typography' => array( - 'fontFamily' => null, - 'fontSize' => null, - 'fontStyle' => null, - 'fontWeight' => null, - 'letterSpacing' => null, - 'lineHeight' => null, - 'textDecoration' => null, - 'textTransform' => null, - ), - ); - - const VALID_SETTINGS = array( - 'border' => array( - 'customColor' => null, - 'customRadius' => null, - 'customStyle' => null, - 'customWidth' => null, - ), - 'color' => array( - 'custom' => null, - 'customDuotone' => null, - 'customGradient' => null, - 'duotone' => null, - 'gradients' => null, - 'link' => null, - 'palette' => null, - ), - 'custom' => null, - 'layout' => array( - 'contentSize' => null, - 'wideSize' => null, - ), - 'spacing' => array( - 'customMargin' => null, - 'customPadding' => null, - 'units' => null, - ), - 'typography' => array( - 'customFontSize' => null, - 'customFontStyle' => null, - 'customFontWeight' => null, - 'customLetterSpacing' => null, - 'customLineHeight' => null, - 'customTextDecorations' => null, - 'customTextTransforms' => null, - 'dropCap' => null, - 'fontFamilies' => null, - 'fontSizes' => null, - ), - ); - - /** - * Presets are a set of values that serve - * to bootstrap some styles: colors, font sizes, etc. - * - * They are a unkeyed array of values such as: - * - * ```php - * array( - * array( - * 'slug' => 'unique-name-within-the-set', - * 'name' => 'Name for the UI', - * <value_key> => 'value' - * ), - * ) - * ``` - * - * This contains the necessary metadata to process them: - * - * - path => where to find the preset within the settings section - * - * - value_key => the key that represents the value - * - * - css_var_infix => infix to use in generating the CSS Custom Property. Example: - * --wp--preset--<preset_infix>--<slug>: <preset_value> - * - * - classes => array containing a structure with the classes to - * generate for the presets. Each class should have - * the class suffix and the property name. Example: - * - * .has-<slug>-<class_suffix> { - * <property_name>: <preset_value> - * } - */ - const PRESETS_METADATA = array( - array( - 'path' => array( 'color', 'palette' ), - 'value_key' => 'color', - 'css_var_infix' => 'color', - 'classes' => array( - array( - 'class_suffix' => 'color', - 'property_name' => 'color', - ), - array( - 'class_suffix' => 'background-color', - 'property_name' => 'background-color', - ), - array( - 'class_suffix' => 'border-color', - 'property_name' => 'border-color', - ), - ), - ), - array( - 'path' => array( 'color', 'gradients' ), - 'value_key' => 'gradient', - 'css_var_infix' => 'gradient', - 'classes' => array( - array( - 'class_suffix' => 'gradient-background', - 'property_name' => 'background', - ), - ), - ), - array( - 'path' => array( 'typography', 'fontSizes' ), - 'value_key' => 'size', - 'css_var_infix' => 'font-size', - 'classes' => array( - array( - 'class_suffix' => 'font-size', - 'property_name' => 'font-size', - ), - ), - ), - array( - 'path' => array( 'typography', 'fontFamilies' ), - 'value_key' => 'fontFamily', - 'css_var_infix' => 'font-family', - 'classes' => array(), - ), - ); - - /** - * Metadata for style properties. - * - * Each element is a direct mapping from the CSS property name to the - * path to the value in theme.json & block attributes. - */ - const PROPERTIES_METADATA = array( - 'background' => array( 'color', 'gradient' ), - 'background-color' => array( 'color', 'background' ), - 'border-radius' => array( 'border', 'radius' ), - 'border-top-left-radius' => array( 'border', 'radius', 'topLeft' ), - 'border-top-right-radius' => array( 'border', 'radius', 'topRight' ), - 'border-bottom-left-radius' => array( 'border', 'radius', 'bottomLeft' ), - 'border-bottom-right-radius' => array( 'border', 'radius', 'bottomRight' ), - 'border-color' => array( 'border', 'color' ), - 'border-width' => array( 'border', 'width' ), - 'border-style' => array( 'border', 'style' ), - 'color' => array( 'color', 'text' ), - 'font-family' => array( 'typography', 'fontFamily' ), - 'font-size' => array( 'typography', 'fontSize' ), - 'font-style' => array( 'typography', 'fontStyle' ), - 'font-weight' => array( 'typography', 'fontWeight' ), - 'letter-spacing' => array( 'typography', 'letterSpacing' ), - 'line-height' => array( 'typography', 'lineHeight' ), - 'margin' => array( 'spacing', 'margin' ), - 'margin-top' => array( 'spacing', 'margin', 'top' ), - 'margin-right' => array( 'spacing', 'margin', 'right' ), - 'margin-bottom' => array( 'spacing', 'margin', 'bottom' ), - 'margin-left' => array( 'spacing', 'margin', 'left' ), - 'padding' => array( 'spacing', 'padding' ), - 'padding-top' => array( 'spacing', 'padding', 'top' ), - 'padding-right' => array( 'spacing', 'padding', 'right' ), - 'padding-bottom' => array( 'spacing', 'padding', 'bottom' ), - 'padding-left' => array( 'spacing', 'padding', 'left' ), - 'text-decoration' => array( 'typography', 'textDecoration' ), - 'text-transform' => array( 'typography', 'textTransform' ), - ); - - const ELEMENTS = array( - 'link' => 'a', - 'h1' => 'h1', - 'h2' => 'h2', - 'h3' => 'h3', - 'h4' => 'h4', - 'h5' => 'h5', - 'h6' => 'h6', - ); - - const LATEST_SCHEMA = 1; - - /** - * Constructor. - * - * @param array $theme_json A structure that follows the theme.json schema. - * @param string $origin What source of data this object represents. One of core, theme, or user. Default: theme. - */ - public function __construct( $theme_json = array(), $origin = 'theme' ) { - if ( ! in_array( $origin, self::VALID_ORIGINS, true ) ) { - $origin = 'theme'; - } - - // The old format is not meant to be ported to core. - // We can remove it at that point. - if ( ! isset( $theme_json['version'] ) || 0 === $theme_json['version'] ) { - $theme_json = WP_Theme_JSON_Schema_V0::parse( $theme_json ); - } - - $valid_block_names = array_keys( self::get_blocks_metadata() ); - $valid_element_names = array_keys( self::ELEMENTS ); - $this->theme_json = self::sanitize( $theme_json, $valid_block_names, $valid_element_names ); - - // Internally, presets are keyed by origin. - $nodes = self::get_setting_nodes( $this->theme_json ); - foreach ( $nodes as $node ) { - foreach ( self::PRESETS_METADATA as $preset ) { - $path = array_merge( $node['path'], $preset['path'] ); - $preset = _wp_array_get( $this->theme_json, $path, null ); - if ( null !== $preset ) { - gutenberg_experimental_set( $this->theme_json, $path, array( $origin => $preset ) ); - } - } - } - } - - /** - * Sanitizes the input according to the schemas. - * - * @param array $input Structure to sanitize. - * @param array $valid_block_names List of valid block names. - * @param array $valid_element_names List of valid element names. - * - * @return array The sanitized output. - */ - private static function sanitize( $input, $valid_block_names, $valid_element_names ) { - $output = array(); - - if ( ! is_array( $input ) ) { - return $output; - } - - $output = array_intersect_key( $input, array_flip( self::VALID_TOP_LEVEL_KEYS ) ); - - // Build the schema based on valid block & element names. - $schema = array(); - $schema_styles_elements = array(); - foreach ( $valid_element_names as $element ) { - $schema_styles_elements[ $element ] = self::VALID_STYLES; - } - $schema_styles_blocks = array(); - $schema_settings_blocks = array(); - foreach ( $valid_block_names as $block ) { - $schema_settings_blocks[ $block ] = self::VALID_SETTINGS; - $schema_styles_blocks[ $block ] = self::VALID_STYLES; - $schema_styles_blocks[ $block ]['elements'] = $schema_styles_elements; - } - $schema['styles'] = self::VALID_STYLES; - $schema['styles']['blocks'] = $schema_styles_blocks; - $schema['styles']['elements'] = $schema_styles_elements; - $schema['settings'] = self::VALID_SETTINGS; - $schema['settings']['blocks'] = $schema_settings_blocks; - - // Remove anything that's not present in the schema. - foreach ( array( 'styles', 'settings' ) as $subtree ) { - if ( ! isset( $input[ $subtree ] ) ) { - continue; - } - - if ( ! is_array( $input[ $subtree ] ) ) { - unset( $output[ $subtree ] ); - continue; - } - - $result = self::remove_keys_not_in_schema( $input[ $subtree ], $schema[ $subtree ] ); - - if ( empty( $result ) ) { - unset( $output[ $subtree ] ); - } else { - $output[ $subtree ] = $result; - } - } - - return $output; - } - - /** - * Returns the metadata for each block. - * - * Example: - * - * { - * 'core/paragraph': { - * 'selector': 'p' - * }, - * 'core/heading': { - * 'selector': 'h1' - * } - * 'core/group': { - * 'selector': '.wp-block-group' - * } - * } - * - * @return array Block metadata. - */ - private static function get_blocks_metadata() { - if ( null !== self::$blocks_metadata ) { - return self::$blocks_metadata; - } - - self::$blocks_metadata = array(); - - $registry = WP_Block_Type_Registry::get_instance(); - $blocks = $registry->get_all_registered(); - foreach ( $blocks as $block_name => $block_type ) { - if ( - isset( $block_type->supports['__experimentalSelector'] ) && - is_string( $block_type->supports['__experimentalSelector'] ) - ) { - self::$blocks_metadata[ $block_name ]['selector'] = $block_type->supports['__experimentalSelector']; - } else { - self::$blocks_metadata[ $block_name ]['selector'] = '.wp-block-' . str_replace( '/', '-', str_replace( 'core/', '', $block_name ) ); - } - - // Assign defaults, then overwrite those that the block sets by itself. - // If the block selector is compounded, will append the element to each - // individual block selector. - $block_selectors = explode( ',', self::$blocks_metadata[ $block_name ]['selector'] ); - foreach ( self::ELEMENTS as $el_name => $el_selector ) { - $element_selector = array(); - foreach ( $block_selectors as $selector ) { - $element_selector[] = $selector . ' ' . $el_selector; - } - self::$blocks_metadata[ $block_name ]['elements'][ $el_name ] = implode( ',', $element_selector ); - } - } - - return self::$blocks_metadata; - } - - /** - * Given a tree, removes the keys that are not present in the schema. - * - * It is recursive and modifies the input in-place. - * - * @param array $tree Input to process. - * @param array $schema Schema to adhere to. - * - * @return array Returns the modified $tree. - */ - private static function remove_keys_not_in_schema( $tree, $schema ) { - $tree = array_intersect_key( $tree, $schema ); - - foreach ( $schema as $key => $data ) { - if ( ! isset( $tree[ $key ] ) ) { - continue; - } - - if ( is_array( $schema[ $key ] ) && is_array( $tree[ $key ] ) ) { - $tree[ $key ] = self::remove_keys_not_in_schema( $tree[ $key ], $schema[ $key ] ); - - if ( empty( $tree[ $key ] ) ) { - unset( $tree[ $key ] ); - } - } elseif ( is_array( $schema[ $key ] ) && ! is_array( $tree[ $key ] ) ) { - unset( $tree[ $key ] ); - } - } - - return $tree; - } - - /** - * Given a tree, it creates a flattened one - * by merging the keys and binding the leaf values - * to the new keys. - * - * It also transforms camelCase names into kebab-case - * and substitutes '/' by '-'. - * - * This is thought to be useful to generate - * CSS Custom Properties from a tree, - * although there's nothing in the implementation - * of this function that requires that format. - * - * For example, assuming the given prefix is '--wp' - * and the token is '--', for this input tree: - * - * { - * 'some/property': 'value', - * 'nestedProperty': { - * 'sub-property': 'value' - * } - * } - * - * it'll return this output: - * - * { - * '--wp--some-property': 'value', - * '--wp--nested-property--sub-property': 'value' - * } - * - * @param array $tree Input tree to process. - * @param string $prefix Prefix to prepend to each variable. '' by default. - * @param string $token Token to use between levels. '--' by default. - * - * @return array The flattened tree. - */ - private static function flatten_tree( $tree, $prefix = '', $token = '--' ) { - $result = array(); - foreach ( $tree as $property => $value ) { - $new_key = $prefix . str_replace( - '/', - '-', - strtolower( preg_replace( '/(?<!^)[A-Z]/', '-$0', $property ) ) // CamelCase to kebab-case. - ); - - if ( is_array( $value ) ) { - $new_prefix = $new_key . $token; - $result = array_merge( - $result, - self::flatten_tree( $value, $new_prefix, $token ) - ); - } else { - $result[ $new_key ] = $value; - } - } - return $result; - } - - /** - * Returns the style property for the given path. - * - * It also converts CSS Custom Property stored as - * "var:preset|color|secondary" to the form - * "--wp--preset--color--secondary". - * - * @param array $styles Styles subtree. - * @param array $path Which property to process. - * - * @return string Style property value. - */ - private static function get_property_value( $styles, $path ) { - $value = _wp_array_get( $styles, $path, '' ); - - if ( '' === $value || is_array( $value ) ) { - return $value; - } - - $prefix = 'var:'; - $prefix_len = strlen( $prefix ); - $token_in = '|'; - $token_out = '--'; - if ( 0 === strncmp( $value, $prefix, $prefix_len ) ) { - $unwrapped_name = str_replace( - $token_in, - $token_out, - substr( $value, $prefix_len ) - ); - $value = "var(--wp--$unwrapped_name)"; - } - - return $value; - } - - /** - * Given a styles array, it extracts the style properties - * and adds them to the $declarations array following the format: - * - * ```php - * array( - * 'name' => 'property_name', - * 'value' => 'property_value, - * ) - * ``` - * - * @param array $styles Styles to process. - * - * @return array Returns the modified $declarations. - */ - private static function compute_style_properties( $styles ) { - $declarations = array(); - if ( empty( $styles ) ) { - return $declarations; - } - - foreach ( self::PROPERTIES_METADATA as $css_property => $value_path ) { - $value = self::get_property_value( $styles, $value_path ); - - // Skip if empty or value represents array of longhand values. - if ( empty( $value ) || is_array( $value ) ) { - continue; - } - - $declarations[] = array( - 'name' => $css_property, - 'value' => $value, - ); - } - - return $declarations; - } - - /** - * Function that appends a sub-selector to a existing one. - * - * Given the compounded $selector "h1, h2, h3" - * and the $to_append selector ".some-class" the result will be - * "h1.some-class, h2.some-class, h3.some-class". - * - * @param string $selector Original selector. - * @param string $to_append Selector to append. - * - * @return string - */ - private static function append_to_selector( $selector, $to_append ) { - $new_selectors = array(); - $selectors = explode( ',', $selector ); - foreach ( $selectors as $sel ) { - $new_selectors[] = $sel . $to_append; - } - - return implode( ',', $new_selectors ); - } - - /** - * Function that given an array of presets keyed by origin - * and the value key of the preset returns an array where each key is - * the a preset slug and each value is the preset value. - * - * @param array $preset_per_origin Array of presets keyed by origin. - * @param string $value_key The property of the preset that contains its value. - * - * @return array Array of presets where each key is a slug and each value is the preset value. - */ - private static function get_merged_preset_by_slug( $preset_per_origin, $value_key ) { - $result = array(); - foreach ( self::VALID_ORIGINS as $origin ) { - if ( ! isset( $preset_per_origin[ $origin ] ) ) { - continue; - } - foreach ( $preset_per_origin[ $origin ] as $preset ) { - // We don't want to use kebabCase here, - // see https://github.com/WordPress/gutenberg/issues/32347 - // However, we need to make sure the generated class or css variable - // doesn't contain spaces. - $result[ preg_replace( '/\s+/', '-', $preset['slug'] ) ] = $preset[ $value_key ]; - } - } - return $result; - } - - /** - * Given a settings array, it returns the generated rulesets - * for the preset classes. - * - * @param array $settings Settings to process. - * @param string $selector Selector wrapping the classes. - * - * @return string The result of processing the presets. - */ - private static function compute_preset_classes( $settings, $selector ) { - if ( self::ROOT_BLOCK_SELECTOR === $selector ) { - // Classes at the global level do not need any CSS prefixed, - // and we don't want to increase its specificity. - $selector = ''; - } - - $stylesheet = ''; - foreach ( self::PRESETS_METADATA as $preset ) { - $preset_per_origin = _wp_array_get( $settings, $preset['path'], array() ); - $preset_by_slug = self::get_merged_preset_by_slug( $preset_per_origin, $preset['value_key'] ); - foreach ( $preset['classes'] as $class ) { - foreach ( $preset_by_slug as $slug => $value ) { - $stylesheet .= self::to_ruleset( - self::append_to_selector( $selector, '.has-' . gutenberg_experimental_to_kebab_case( $slug ) . '-' . $class['class_suffix'] ), - array( - array( - 'name' => $class['property_name'], - 'value' => 'var(--wp--preset--' . $preset['css_var_infix'] . '--' . gutenberg_experimental_to_kebab_case( $slug ) . ') !important', - ), - ) - ); - } - } - } - - return $stylesheet; - } - - /** - * Given the block settings, it extracts the CSS Custom Properties - * for the presets and adds them to the $declarations array - * following the format: - * - * ```php - * array( - * 'name' => 'property_name', - * 'value' => 'property_value, - * ) - * ``` - * - * @param array $settings Settings to process. - * - * @return array Returns the modified $declarations. - */ - private static function compute_preset_vars( $settings ) { - $declarations = array(); - foreach ( self::PRESETS_METADATA as $preset ) { - $preset_per_origin = _wp_array_get( $settings, $preset['path'], array() ); - $preset_by_slug = self::get_merged_preset_by_slug( $preset_per_origin, $preset['value_key'] ); - foreach ( $preset_by_slug as $slug => $value ) { - $declarations[] = array( - 'name' => '--wp--preset--' . $preset['css_var_infix'] . '--' . gutenberg_experimental_to_kebab_case( $slug ), - 'value' => $value, - ); - } - } - - return $declarations; - } - - /** - * Given an array of settings, it extracts the CSS Custom Properties - * for the custom values and adds them to the $declarations - * array following the format: - * - * ```php - * array( - * 'name' => 'property_name', - * 'value' => 'property_value, - * ) - * ``` - * - * @param array $settings Settings to process. - * - * @return array Returns the modified $declarations. - */ - private static function compute_theme_vars( $settings ) { - $declarations = array(); - $custom_values = _wp_array_get( $settings, array( 'custom' ), array() ); - $css_vars = self::flatten_tree( $custom_values ); - foreach ( $css_vars as $key => $value ) { - $declarations[] = array( - 'name' => '--wp--custom--' . $key, - 'value' => $value, - ); - } - - return $declarations; - } - - /** - * Given a selector and a declaration list, - * creates the corresponding ruleset. - * - * To help debugging, will add some space - * if SCRIPT_DEBUG is defined and true. - * - * @param string $selector CSS selector. - * @param array $declarations List of declarations. - * - * @return string CSS ruleset. - */ - private static function to_ruleset( $selector, $declarations ) { - if ( empty( $declarations ) ) { - return ''; - } - $ruleset = ''; - - if ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) { - $declaration_block = array_reduce( - $declarations, - function ( $carry, $element ) { - return $carry .= "\t" . $element['name'] . ': ' . $element['value'] . ";\n"; }, - '' - ); - $ruleset .= $selector . " {\n" . $declaration_block . "}\n"; - } else { - $declaration_block = array_reduce( - $declarations, - function ( $carry, $element ) { - return $carry .= $element['name'] . ': ' . $element['value'] . ';'; }, - '' - ); - $ruleset .= $selector . '{' . $declaration_block . '}'; - } - - return $ruleset; - } - - /** - * Converts each styles section into a list of rulesets - * to be appended to the stylesheet. - * These rulesets contain all the css variables (custom variables and preset variables). - * - * See glossary at https://developer.mozilla.org/en-US/docs/Web/CSS/Syntax - * - * For each section this creates a new ruleset such as: - * - * block-selector { - * --wp--preset--category--slug: value; - * --wp--custom--variable: value; - * } - * - * @param array $nodes Nodes with settings. - * - * @return string The new stylesheet. - */ - private function get_css_variables( $nodes ) { - $stylesheet = ''; - foreach ( $nodes as $metadata ) { - if ( null === $metadata['selector'] ) { - continue; - } - - $selector = $metadata['selector']; - - $node = _wp_array_get( $this->theme_json, $metadata['path'], array() ); - $declarations = array_merge( self::compute_preset_vars( $node ), self::compute_theme_vars( $node ) ); - - $stylesheet .= self::to_ruleset( $selector, $declarations ); - } - - return $stylesheet; - } - - /** - * Converts each style section into a list of rulesets - * containing the block styles to be appended to the stylesheet. - * - * See glossary at https://developer.mozilla.org/en-US/docs/Web/CSS/Syntax - * - * For each section this creates a new ruleset such as: - * - * block-selector { - * style-property-one: value; - * } - * - * Additionally, it'll also create new rulesets - * as classes for each preset value such as: - * - * .has-value-color { - * color: value; - * } - * - * .has-value-background-color { - * background-color: value; - * } - * - * .has-value-font-size { - * font-size: value; - * } - * - * .has-value-gradient-background { - * background: value; - * } - * - * p.has-value-gradient-background { - * background: value; - * } - * - * @param array $style_nodes Nodes with styles. - * @param array $setting_nodes Nodes with settings. - * - * @return string The new stylesheet. - */ - private function get_block_styles( $style_nodes, $setting_nodes ) { - $block_rules = ''; - foreach ( $style_nodes as $metadata ) { - if ( null === $metadata['selector'] ) { - continue; - } - - $node = _wp_array_get( $this->theme_json, $metadata['path'], array() ); - $selector = $metadata['selector']; - $declarations = self::compute_style_properties( $node ); - $block_rules .= self::to_ruleset( $selector, $declarations ); - } - - $preset_rules = ''; - foreach ( $setting_nodes as $metadata ) { - if ( null === $metadata['selector'] ) { - continue; - } - - $selector = $metadata['selector']; - $node = _wp_array_get( $this->theme_json, $metadata['path'], array() ); - $preset_rules .= self::compute_preset_classes( $node, $selector ); - } - - return $block_rules . $preset_rules; - } - - /** - * Returns the existing settings for each block. - * - * Example: - * - * { - * 'root': { - * 'color': { - * 'custom': true - * } - * }, - * 'core/paragraph': { - * 'spacing': { - * 'customPadding': true - * } - * } - * } - * - * @return array Settings per block. - */ - public function get_settings() { - if ( ! isset( $this->theme_json['settings'] ) ) { - return array(); - } else { - return $this->theme_json['settings']; - } - } - - /** - * Returns the page templates of the current theme. - * - * @return array - */ - public function get_custom_templates() { - $custom_templates = array(); - if ( ! isset( $this->theme_json['customTemplates'] ) ) { - return $custom_templates; - } - - foreach ( $this->theme_json['customTemplates'] as $item ) { - if ( isset( $item['name'] ) ) { - $custom_templates[ $item['name'] ] = array( - 'title' => isset( $item['title'] ) ? $item['title'] : '', - 'postTypes' => isset( $item['postTypes'] ) ? $item['postTypes'] : array( 'page' ), - ); - } - } - return $custom_templates; - } - - /** - * Returns the template part data of current theme. - * - * @return array - */ - public function get_template_parts() { - $template_parts = array(); - if ( ! isset( $this->theme_json['templateParts'] ) ) { - return $template_parts; - } - - foreach ( $this->theme_json['templateParts'] as $item ) { - if ( isset( $item['name'] ) ) { - $template_parts[ $item['name'] ] = array( - 'area' => isset( $item['area'] ) ? $item['area'] : '', - ); - } - } - return $template_parts; - } - - /** - * Builds metadata for the style nodes, which returns in the form of: - * - * [ - * [ - * 'path' => [ 'path', 'to', 'some', 'node' ], - * 'selector' => 'CSS selector for some node' - * ], - * [ - * 'path' => ['path', 'to', 'other', 'node' ], - * 'selector' => 'CSS selector for other node' - * ], - * ] - * - * @param array $theme_json The tree to extract style nodes from. - * @param array $selectors List of selectors per block. - * - * @return array - */ - private static function get_style_nodes( $theme_json, $selectors = array() ) { - $nodes = array(); - if ( ! isset( $theme_json['styles'] ) ) { - return $nodes; - } - - // Top-level. - $nodes[] = array( - 'path' => array( 'styles' ), - 'selector' => self::ROOT_BLOCK_SELECTOR, - ); - - if ( isset( $theme_json['styles']['elements'] ) ) { - foreach ( $theme_json['styles']['elements'] as $element => $node ) { - $nodes[] = array( - 'path' => array( 'styles', 'elements', $element ), - 'selector' => self::ELEMENTS[ $element ], - ); - } - } - - // Blocks. - if ( ! isset( $theme_json['styles']['blocks'] ) ) { - return $nodes; - } - - foreach ( $theme_json['styles']['blocks'] as $name => $node ) { - $selector = null; - if ( isset( $selectors[ $name ]['selector'] ) ) { - $selector = $selectors[ $name ]['selector']; - } - - $nodes[] = array( - 'path' => array( 'styles', 'blocks', $name ), - 'selector' => $selector, - ); - - if ( isset( $theme_json['styles']['blocks'][ $name ]['elements'] ) ) { - foreach ( $theme_json['styles']['blocks'][ $name ]['elements'] as $element => $node ) { - $nodes[] = array( - 'path' => array( 'styles', 'blocks', $name, 'elements', $element ), - 'selector' => $selectors[ $name ]['elements'][ $element ], - ); - } - } - } - - return $nodes; - } - - /** - * Builds metadata for the setting nodes, which returns in the form of: - * - * [ - * [ - * 'path' => ['path', 'to', 'some', 'node' ], - * 'selector' => 'CSS selector for some node' - * ], - * [ - * 'path' => [ 'path', 'to', 'other', 'node' ], - * 'selector' => 'CSS selector for other node' - * ], - * ] - * - * @param array $theme_json The tree to extract setting nodes from. - * @param array $selectors List of selectors per block. - * - * @return array - */ - private static function get_setting_nodes( $theme_json, $selectors = array() ) { - $nodes = array(); - if ( ! isset( $theme_json['settings'] ) ) { - return $nodes; - } - - // Top-level. - $nodes[] = array( - 'path' => array( 'settings' ), - 'selector' => self::ROOT_BLOCK_SELECTOR, - ); - - // Calculate paths for blocks. - if ( ! isset( $theme_json['settings']['blocks'] ) ) { - return $nodes; - } - - foreach ( $theme_json['settings']['blocks'] as $name => $node ) { - $selector = null; - if ( isset( $selectors[ $name ]['selector'] ) ) { - $selector = $selectors[ $name ]['selector']; - } - - $nodes[] = array( - 'path' => array( 'settings', 'blocks', $name ), - 'selector' => $selector, - ); - } - - return $nodes; - } - - /** - * Returns the stylesheet that results of processing - * the theme.json structure this object represents. - * - * @param string $type Type of stylesheet we want accepts 'all', 'block_styles', and 'css_variables'. - * @return string Stylesheet. - */ - public function get_stylesheet( $type = 'all' ) { - $blocks_metadata = self::get_blocks_metadata(); - $style_nodes = self::get_style_nodes( $this->theme_json, $blocks_metadata ); - $setting_nodes = self::get_setting_nodes( $this->theme_json, $blocks_metadata ); - - switch ( $type ) { - case 'block_styles': - return $this->get_block_styles( $style_nodes, $setting_nodes ); - case 'css_variables': - return $this->get_css_variables( $setting_nodes ); - default: - return $this->get_css_variables( $setting_nodes ) . $this->get_block_styles( $style_nodes, $setting_nodes ); - } - } - - /** - * Merge new incoming data. - * - * @param WP_Theme_JSON $incoming Data to merge. - */ - public function merge( $incoming ) { - $incoming_data = $incoming->get_raw_data(); - $this->theme_json = array_replace_recursive( $this->theme_json, $incoming_data ); - - // The array_replace_recursive algorithm merges at the leaf level. - // For leaf values that are arrays it will use the numeric indexes for replacement. - // In those cases, we want to replace the existing with the incoming value, if it exists. - $to_replace = array(); - $to_replace[] = array( 'spacing', 'units' ); - $to_replace[] = array( 'color', 'duotone' ); - foreach ( self::VALID_ORIGINS as $origin ) { - $to_replace[] = array( 'color', 'palette', $origin ); - $to_replace[] = array( 'color', 'gradients', $origin ); - $to_replace[] = array( 'typography', 'fontSizes', $origin ); - $to_replace[] = array( 'typography', 'fontFamilies', $origin ); - } - - $nodes = self::get_setting_nodes( $this->theme_json ); - foreach ( $nodes as $metadata ) { - foreach ( $to_replace as $property_path ) { - $path = array_merge( $metadata['path'], $property_path ); - $node = _wp_array_get( $incoming_data, $path, null ); - if ( isset( $node ) ) { - gutenberg_experimental_set( $this->theme_json, $path, $node ); - } - } - } - - } - - /** - * Processes a setting node and returns the same node - * without the insecure settings. - * - * @param array $input Node to process. - * - * @return array - */ - private static function remove_insecure_settings( $input ) { - $output = array(); - foreach ( self::PRESETS_METADATA as $preset_metadata ) { - $current_preset = _wp_array_get( $input, $preset_metadata['path'], null ); - if ( null === $current_preset ) { - continue; - } - - $escaped_preset = array(); - foreach ( $current_preset as $single_preset ) { - if ( - esc_attr( esc_html( $single_preset['name'] ) ) === $single_preset['name'] && - sanitize_html_class( $single_preset['slug'] ) === $single_preset['slug'] - ) { - $value = $single_preset[ $preset_metadata['value_key'] ]; - $single_preset_is_valid = null; - if ( isset( $preset_metadata['classes'] ) && count( $preset_metadata['classes'] ) > 0 ) { - $single_preset_is_valid = true; - foreach ( $preset_metadata['classes'] as $class_meta_data ) { - $property = $class_meta_data['property_name']; - if ( ! self::is_safe_css_declaration( $property, $value ) ) { - $single_preset_is_valid = false; - break; - } - } - } else { - $property = $preset_metadata['css_var_infix']; - $single_preset_is_valid = self::is_safe_css_declaration( $property, $value ); - } - if ( $single_preset_is_valid ) { - $escaped_preset[] = $single_preset; - } - } - } - - if ( ! empty( $escaped_preset ) ) { - gutenberg_experimental_set( $output, $preset_metadata['path'], $escaped_preset ); - } - } - - return $output; - } - - /** - * Processes a style node and returns the same node - * without the insecure styles. - * - * @param array $input Node to process. - * - * @return array - */ - private static function remove_insecure_styles( $input ) { - $output = array(); - $declarations = self::compute_style_properties( $input ); - - foreach ( $declarations as $declaration ) { - if ( self::is_safe_css_declaration( $declaration['name'], $declaration['value'] ) ) { - $path = self::PROPERTIES_METADATA[ $declaration['name'] ]; - - // Check the value isn't an array before adding so as to not - // double up shorthand and longhand styles. - $value = _wp_array_get( $input, $path, array() ); - if ( ! is_array( $value ) ) { - gutenberg_experimental_set( $output, $path, $value ); - } - } - } - return $output; - } - - /** - * Checks that a declaration provided by the user is safe. - * - * @param string $property_name Property name in a CSS declaration, i.e. the `color` in `color: red`. - * @param string $property_value Value in a CSS declaration, i.e. the `red` in `color: red`. - * @return boolean - */ - private static function is_safe_css_declaration( $property_name, $property_value ) { - $style_to_validate = $property_name . ': ' . $property_value; - $filtered = esc_html( safecss_filter_attr( $style_to_validate ) ); - return ! empty( trim( $filtered ) ); - } - - /** - * Removes insecure data from theme.json. - * - * @param array $theme_json Structure to sanitize. - * - * @return array Sanitized structure. - */ - public static function remove_insecure_properties( $theme_json ) { - $sanitized = array(); - - if ( ! isset( $theme_json['version'] ) || 0 === $theme_json['version'] ) { - $theme_json = WP_Theme_JSON_Schema_V0::parse( $theme_json ); - } - - $valid_block_names = array_keys( self::get_blocks_metadata() ); - $valid_element_names = array_keys( self::ELEMENTS ); - $theme_json = self::sanitize( $theme_json, $valid_block_names, $valid_element_names ); - - $blocks_metadata = self::get_blocks_metadata(); - $style_nodes = self::get_style_nodes( $theme_json, $blocks_metadata ); - foreach ( $style_nodes as $metadata ) { - $input = _wp_array_get( $theme_json, $metadata['path'], array() ); - if ( empty( $input ) ) { - continue; - } - - $output = self::remove_insecure_styles( $input ); - if ( ! empty( $output ) ) { - gutenberg_experimental_set( $sanitized, $metadata['path'], $output ); - } - } - - $setting_nodes = self::get_setting_nodes( $theme_json ); - foreach ( $setting_nodes as $metadata ) { - $input = _wp_array_get( $theme_json, $metadata['path'], array() ); - if ( empty( $input ) ) { - continue; - } - - $output = self::remove_insecure_settings( $input ); - if ( ! empty( $output ) ) { - gutenberg_experimental_set( $sanitized, $metadata['path'], $output ); - } - } - - if ( empty( $sanitized['styles'] ) ) { - unset( $theme_json['styles'] ); - } else { - $theme_json['styles'] = $sanitized['styles']; - } - - if ( empty( $sanitized['settings'] ) ) { - unset( $theme_json['settings'] ); - } else { - $theme_json['settings'] = $sanitized['settings']; - } - - return $theme_json; - } - - /** - * Returns the raw data. - * - * @return array Raw data. - */ - public function get_raw_data() { - return $this->theme_json; - } - - /** - * - * Transforms the given editor settings according the - * add_theme_support format to the theme.json format. - * - * @param array $settings Existing editor settings. - * - * @return array Config that adheres to the theme.json schema. - */ - public static function get_from_editor_settings( $settings ) { - $theme_settings = array( - 'version' => self::LATEST_SCHEMA, - 'settings' => array(), - ); - - // Deprecated theme supports. - if ( isset( $settings['disableCustomColors'] ) ) { - if ( ! isset( $theme_settings['settings']['color'] ) ) { - $theme_settings['settings']['color'] = array(); - } - $theme_settings['settings']['color']['custom'] = ! $settings['disableCustomColors']; - } - - if ( isset( $settings['disableCustomGradients'] ) ) { - if ( ! isset( $theme_settings['settings']['color'] ) ) { - $theme_settings['settings']['color'] = array(); - } - $theme_settings['settings']['color']['customGradient'] = ! $settings['disableCustomGradients']; - } - - if ( isset( $settings['disableCustomFontSizes'] ) ) { - if ( ! isset( $theme_settings['settings']['typography'] ) ) { - $theme_settings['settings']['typography'] = array(); - } - $theme_settings['settings']['typography']['customFontSize'] = ! $settings['disableCustomFontSizes']; - } - - if ( isset( $settings['enableCustomLineHeight'] ) ) { - if ( ! isset( $theme_settings['settings']['typography'] ) ) { - $theme_settings['settings']['typography'] = array(); - } - $theme_settings['settings']['typography']['customLineHeight'] = $settings['enableCustomLineHeight']; - } - - if ( isset( $settings['enableCustomUnits'] ) ) { - if ( ! isset( $theme_settings['settings']['spacing'] ) ) { - $theme_settings['settings']['spacing'] = array(); - } - $theme_settings['settings']['spacing']['units'] = ( true === $settings['enableCustomUnits'] ) ? - array( 'px', 'em', 'rem', 'vh', 'vw', '%' ) : - $settings['enableCustomUnits']; - } - - if ( isset( $settings['colors'] ) ) { - if ( ! isset( $theme_settings['settings']['color'] ) ) { - $theme_settings['settings']['color'] = array(); - } - $theme_settings['settings']['color']['palette'] = $settings['colors']; - } - - if ( isset( $settings['gradients'] ) ) { - if ( ! isset( $theme_settings['settings']['color'] ) ) { - $theme_settings['settings']['color'] = array(); - } - $theme_settings['settings']['color']['gradients'] = $settings['gradients']; - } - - if ( isset( $settings['fontSizes'] ) ) { - $font_sizes = $settings['fontSizes']; - // Back-compatibility for presets without units. - foreach ( $font_sizes as $key => $font_size ) { - if ( is_numeric( $font_size['size'] ) ) { - $font_sizes[ $key ]['size'] = $font_size['size'] . 'px'; - } - } - if ( ! isset( $theme_settings['settings']['typography'] ) ) { - $theme_settings['settings']['typography'] = array(); - } - $theme_settings['settings']['typography']['fontSizes'] = $font_sizes; - } - - // This allows to make the plugin work with WordPress 5.7 beta - // as well as lower versions. The second check can be removed - // as soon as the minimum WordPress version for the plugin - // is bumped to 5.7. - if ( isset( $settings['enableCustomSpacing'] ) ) { - if ( ! isset( $theme_settings['settings']['spacing'] ) ) { - $theme_settings['settings']['spacing'] = array(); - } - $theme_settings['settings']['spacing']['customPadding'] = $settings['enableCustomSpacing']; - } - - // Things that didn't land in core yet, so didn't have a setting assigned. - // This should be removed when the plugin minimum WordPress version - // is bumped to 5.8. - // - // Do not port this to WordPress core. - if ( current( (array) get_theme_support( 'experimental-link-color' ) ) ) { - if ( ! isset( $theme_settings['settings']['color'] ) ) { - $theme_settings['settings']['color'] = array(); - } - $theme_settings['settings']['color']['link'] = true; - } - - return $theme_settings; - } - -} diff --git a/lib/class-wp-theme-json-resolver-gutenberg.php b/lib/class-wp-theme-json-resolver-gutenberg.php deleted file mode 100644 index b58556b4f8d36..0000000000000 --- a/lib/class-wp-theme-json-resolver-gutenberg.php +++ /dev/null @@ -1,534 +0,0 @@ -<?php -/** - * Process the different data sources for site-level - * config and offers and API to work with them. - * - * @package gutenberg - */ - -/** - * Class that abstracts the processing - * of the different data sources. - */ -class WP_Theme_JSON_Resolver_Gutenberg { - - /** - * Container for data coming from core. - * - * @var WP_Theme_JSON_Gutenberg - */ - private static $core = null; - - /** - * Container for data coming from the theme. - * - * @var WP_Theme_JSON_Gutenberg - */ - private static $theme = null; - - /** - * Whether or not the theme supports theme.json. - * - * @var boolean - */ - private static $theme_has_support = null; - - /** - * Container for data coming from the user. - * - * @var WP_Theme_JSON_Gutenberg - */ - private static $user = null; - - /** - * Stores the ID of the custom post type - * that holds the user data. - * - * @var integer - */ - private static $user_custom_post_type_id = null; - - /** - * Structure to hold i18n metadata. - * - * @var Array - */ - private static $theme_json_i18n = null; - - /** - * Processes a file that adheres to the theme.json - * schema and returns an array with its contents, - * or a void array if none found. - * - * @param string $file_path Path to file. Empty if no file. - * - * @return array Contents that adhere to the theme.json schema. - */ - private static function read_json_file( $file_path ) { - $config = array(); - if ( $file_path ) { - $decoded_file = json_decode( - file_get_contents( $file_path ), - true - ); - - $json_decoding_error = json_last_error(); - if ( JSON_ERROR_NONE !== $json_decoding_error ) { - trigger_error( "Error when decoding a theme.json schema at path $file_path " . json_last_error_msg() ); - return $config; - } - - if ( is_array( $decoded_file ) ) { - $config = $decoded_file; - } - } - return $config; - } - - /** - * Converts a tree as in i18n-theme.json into a linear array - * containing metadata to translate a theme.json file. - * - * For example, given this input: - * - * { - * "settings": { - * "*": { - * "typography": { - * "fontSizes": [ { "name": "Font size name" } ], - * "fontStyles": [ { "name": "Font size name" } ] - * } - * } - * } - * } - * - * will return this output: - * - * [ - * 0 => [ - * 'path' => [ 'settings', '*', 'typography', 'fontSizes' ], - * 'key' => 'name', - * 'context' => 'Font size name' - * ], - * 1 => [ - * 'path' => [ 'settings', '*', 'typography', 'fontStyles' ], - * 'key' => 'name', - * 'context' => 'Font style name' - * ] - * ] - * - * @param array $i18n_partial A tree that follows the format of i18n-theme.json. - * @param array $current_path Keeps track of the path as we walk down the given tree. - * - * @return array A linear array containing the paths to translate. - */ - private static function extract_paths_to_translate( $i18n_partial, $current_path = array() ) { - $result = array(); - foreach ( $i18n_partial as $property => $partial_child ) { - if ( is_numeric( $property ) ) { - foreach ( $partial_child as $key => $context ) { - $result[] = array( - 'path' => $current_path, - 'key' => $key, - 'context' => $context, - ); - } - return $result; - } - $result = array_merge( - $result, - self::extract_paths_to_translate( $partial_child, array_merge( $current_path, array( $property ) ) ) - ); - } - return $result; - } - - /** - * Returns a data structure used in theme.json translation. - * - * @return array An array of theme.json fields that are translatable and the keys that are translatable - */ - public static function get_fields_to_translate() { - if ( null === self::$theme_json_i18n ) { - $file_structure = self::read_json_file( __DIR__ . '/experimental-i18n-theme.json' ); - self::$theme_json_i18n = self::extract_paths_to_translate( $file_structure ); - } - return self::$theme_json_i18n; - } - - /** - * Translates a chunk of the loaded theme.json structure. - * - * @param array $array_to_translate The chunk of theme.json to translate. - * @param string $key The key of the field that contains the string to translate. - * @param string $context The context to apply in the translation call. - * @param string $domain Text domain. Unique identifier for retrieving translated strings. - * - * @return array Returns the modified $theme_json chunk. - */ - private static function translate_theme_json_chunk( array $array_to_translate, $key, $context, $domain ) { - foreach ( $array_to_translate as $item_key => $item_to_translate ) { - if ( empty( $item_to_translate[ $key ] ) ) { - continue; - } - - // phpcs:ignore WordPress.WP.I18n.LowLevelTranslationFunction,WordPress.WP.I18n.NonSingularStringLiteralText,WordPress.WP.I18n.NonSingularStringLiteralContext,WordPress.WP.I18n.NonSingularStringLiteralDomain - $array_to_translate[ $item_key ][ $key ] = translate_with_gettext_context( $array_to_translate[ $item_key ][ $key ], $context, $domain ); - } - - return $array_to_translate; - } - - /** - * Given a theme.json structure modifies it in place - * to update certain values by its translated strings - * according to the language set by the user. - * - * @param array $theme_json The theme.json to translate. - * @param string $domain Optional. Text domain. Unique identifier for retrieving translated strings. - * Default 'default'. - * - * @return array Returns the modified $theme_json_structure. - */ - private static function translate( $theme_json, $domain = 'default' ) { - $fields = self::get_fields_to_translate(); - foreach ( $fields as $field ) { - $path = $field['path']; - $key = $field['key']; - $context = $field['context']; - - /* - * We need to process the paths that include '*' separately. - * One example of such a path would be: - * [ 'settings', 'blocks', '*', 'color', 'palette' ] - */ - $nodes_to_iterate = array_keys( $path, '*', true ); - if ( ! empty( $nodes_to_iterate ) ) { - /* - * At the moment, we only need to support one '*' in the path, so take it directly. - * - base will be [ 'settings', 'blocks' ] - * - data will be [ 'color', 'palette' ] - */ - $base_path = array_slice( $path, 0, $nodes_to_iterate[0] ); - $data_path = array_slice( $path, $nodes_to_iterate[0] + 1 ); - $base_tree = _wp_array_get( $theme_json, $base_path, array() ); - foreach ( $base_tree as $node_name => $node_data ) { - $array_to_translate = _wp_array_get( $node_data, $data_path, null ); - if ( is_null( $array_to_translate ) ) { - continue; - } - - // Whole path will be [ 'settings', 'blocks', 'core/paragraph', 'color', 'palette' ]. - $whole_path = array_merge( $base_path, array( $node_name ), $data_path ); - $translated_array = self::translate_theme_json_chunk( $array_to_translate, $key, $context, $domain ); - gutenberg_experimental_set( $theme_json, $whole_path, $translated_array ); - } - } else { - $array_to_translate = _wp_array_get( $theme_json, $path, null ); - if ( is_null( $array_to_translate ) ) { - continue; - } - - $translated_array = self::translate_theme_json_chunk( $array_to_translate, $key, $context, $domain ); - gutenberg_experimental_set( $theme_json, $path, $translated_array ); - } - } - - return $theme_json; - } - - /** - * Return core's origin config. - * - * @return WP_Theme_JSON_Gutenberg Entity that holds core data. - */ - public static function get_core_data() { - if ( null !== self::$core ) { - return self::$core; - } - - $config = self::read_json_file( __DIR__ . '/experimental-default-theme.json' ); - $config = self::translate( $config ); - self::$core = new WP_Theme_JSON_Gutenberg( $config, 'core' ); - - return self::$core; - } - - /** - * Returns the theme's data. - * - * Data from theme.json can be augmented via the - * $theme_support_data variable. This is useful, for example, - * to backfill the gaps in theme.json that a theme has declared - * via add_theme_supports. - * - * Note that if the same data is present in theme.json - * and in $theme_support_data, the theme.json's is not overwritten. - * - * @param array $theme_support_data Theme support data in theme.json format. - * - * @return WP_Theme_JSON_Gutenberg Entity that holds theme data. - */ - public static function get_theme_data( $theme_support_data = array() ) { - if ( null === self::$theme ) { - $theme_json_data = self::read_json_file( self::get_file_path_from_theme( 'theme.json' ) ); - // Fallback to experimental-theme.json. - if ( empty( $theme_json_data ) ) { - $theme_json_data = self::read_json_file( self::get_file_path_from_theme( 'experimental-theme.json' ) ); - } - $theme_json_data = self::translate( $theme_json_data, wp_get_theme()->get( 'TextDomain' ) ); - self::$theme = new WP_Theme_JSON_Gutenberg( $theme_json_data ); - } - - if ( empty( $theme_support_data ) ) { - return self::$theme; - } - - /* - * We want the presets and settings declared in theme.json - * to override the ones declared via add_theme_support. - */ - $with_theme_supports = new WP_Theme_JSON_Gutenberg( $theme_support_data ); - $with_theme_supports->merge( self::$theme ); - - return $with_theme_supports; - } - - /** - * Returns the CPT that contains the user's origin config - * for the current theme or a void array if none found. - * - * It can also create and return a new draft CPT. - * - * @param bool $should_create_cpt Whether a new CPT should be created if no one was found. - * False by default. - * @param array $post_status_filter Filter CPT by post status. - * ['publish'] by default, so it only fetches published posts. - * - * @return array Custom Post Type for the user's origin config. - */ - private static function get_user_data_from_custom_post_type( $should_create_cpt = false, $post_status_filter = array( 'publish' ) ) { - $user_cpt = array(); - $post_type_filter = 'wp_global_styles'; - $recent_posts = wp_get_recent_posts( - array( - 'numberposts' => 1, - 'orderby' => 'date', - 'order' => 'desc', - 'post_type' => $post_type_filter, - 'post_status' => $post_status_filter, - 'tax_query' => array( - array( - 'taxonomy' => 'wp_theme', - 'field' => 'name', - 'terms' => wp_get_theme()->get_stylesheet(), - ), - ), - ) - ); - - if ( is_array( $recent_posts ) && ( count( $recent_posts ) === 1 ) ) { - $user_cpt = $recent_posts[0]; - } elseif ( $should_create_cpt ) { - $cpt_post_id = wp_insert_post( - array( - 'post_content' => '{"version": ' . WP_Theme_JSON_Gutenberg::LATEST_SCHEMA . ', "isGlobalStylesUserThemeJSON": true }', - 'post_status' => 'publish', - 'post_title' => __( 'Custom Styles', 'default' ), - 'post_type' => $post_type_filter, - 'post_name' => 'wp-global-styles-' . urlencode( wp_get_theme()->get_stylesheet() ), - 'tax_input' => array( - 'wp_theme' => array( wp_get_theme()->get_stylesheet() ), - ), - ), - true - ); - $user_cpt = get_post( $cpt_post_id, ARRAY_A ); - } - - return $user_cpt; - } - - /** - * Returns the user's origin config. - * - * @return WP_Theme_JSON_Gutenberg Entity that holds user data. - */ - public static function get_user_data() { - if ( null !== self::$user ) { - return self::$user; - } - - $config = array(); - $user_cpt = self::get_user_data_from_custom_post_type(); - if ( array_key_exists( 'post_content', $user_cpt ) ) { - $decoded_data = json_decode( $user_cpt['post_content'], true ); - - $json_decoding_error = json_last_error(); - if ( JSON_ERROR_NONE !== $json_decoding_error ) { - trigger_error( 'Error when decoding a theme.json schema for user data. ' . json_last_error_msg() ); - return new WP_Theme_JSON_Gutenberg( $config, 'user' ); - } - - // Very important to verify if the flag isGlobalStylesUserThemeJSON is true. - // If is not true the content was not escaped and is not safe. - if ( - is_array( $decoded_data ) && - isset( $decoded_data['isGlobalStylesUserThemeJSON'] ) && - $decoded_data['isGlobalStylesUserThemeJSON'] - ) { - unset( $decoded_data['isGlobalStylesUserThemeJSON'] ); - $config = $decoded_data; - } - } - self::$user = new WP_Theme_JSON_Gutenberg( $config, 'user' ); - - return self::$user; - } - - /** - * There are three sources of data (origins) for a site: - * core, theme, and user. The user's has higher priority - * than the theme's, and the theme's higher than core's. - * - * Unlike the getters {@link get_core_data}, - * {@link get_theme_data}, and {@link get_user_data}, - * this method returns data after it has been merged - * with the previous origins. This means that if the same piece of data - * is declared in different origins (user, theme, and core), - * the last origin overrides the previous. - * - * For example, if the user has set a background color - * for the paragraph block, and the theme has done it as well, - * the user preference wins. - * - * @param array $settings Existing block editor settings. - * Empty array by default. - * @param string $origin To what level should we merge data. - * Valid values are 'theme' or 'user'. - * Default is 'user'. - * - * @return WP_Theme_JSON_Gutenberg - */ - public static function get_merged_data( $settings = array(), $origin = 'user' ) { - $theme_support_data = WP_Theme_JSON_Gutenberg::get_from_editor_settings( $settings ); - - $result = new WP_Theme_JSON_Gutenberg(); - $result->merge( self::get_core_data() ); - $result->merge( self::get_theme_data( $theme_support_data ) ); - - if ( 'user' === $origin ) { - $result->merge( self::get_user_data() ); - } - - return $result; - } - - /** - * Registers a Custom Post Type to store the user's origin config. - */ - public static function register_user_custom_post_type() { - $args = array( - 'label' => __( 'Global Styles', 'gutenberg' ), - 'description' => 'CPT to store user design tokens', - 'public' => false, - 'show_ui' => false, - 'show_in_rest' => true, - 'rest_base' => '__experimental/global-styles', - 'capabilities' => array( - 'read' => 'edit_theme_options', - 'create_posts' => 'edit_theme_options', - 'edit_posts' => 'edit_theme_options', - 'edit_published_posts' => 'edit_theme_options', - 'delete_published_posts' => 'edit_theme_options', - 'edit_others_posts' => 'edit_theme_options', - 'delete_others_posts' => 'edit_theme_options', - ), - 'map_meta_cap' => true, - 'supports' => array( - 'title', - 'editor', - 'revisions', - ), - ); - register_post_type( 'wp_global_styles', $args ); - } - - /** - * Returns the ID of the custom post type - * that stores user data. - * - * @return integer - */ - public static function get_user_custom_post_type_id() { - if ( null !== self::$user_custom_post_type_id ) { - return self::$user_custom_post_type_id; - } - - $user_cpt = self::get_user_data_from_custom_post_type( true ); - if ( array_key_exists( 'ID', $user_cpt ) ) { - self::$user_custom_post_type_id = $user_cpt['ID']; - } - - return self::$user_custom_post_type_id; - } - - /** - * Whether the current theme has a theme.json file. - * - * @return boolean - */ - public static function theme_has_support() { - if ( ! isset( self::$theme_has_support ) ) { - self::$theme_has_support = (bool) self::get_file_path_from_theme( 'theme.json' ); - if ( ! self::$theme_has_support ) { - // Fallback to experimental-theme.json. - self::$theme_has_support = (bool) self::get_file_path_from_theme( 'experimental-theme.json' ); - } - } - - return self::$theme_has_support; - } - - /** - * Builds the path to the given file - * and checks that it is readable. - * - * If it isn't, returns an empty string, - * otherwise returns the whole file path. - * - * @param string $file_name Name of the file. - * @return string The whole file path or empty if the file doesn't exist. - */ - private static function get_file_path_from_theme( $file_name ) { - // This used to be a locate_template call. - // However, that method proved problematic - // due to its use of constants (STYLESHEETPATH) - // that threw errors in some scenarios. - // - // When the theme.json merge algorithm properly supports - // child themes, this should also fallback - // to the template path, as locate_template did. - $located = ''; - $candidate = get_stylesheet_directory() . '/' . $file_name; - if ( is_readable( $candidate ) ) { - $located = $candidate; - } - return $located; - } - - /** - * Cleans the cached data so it can be recalculated. - */ - public static function clean_cached_data() { - self::$core = null; - self::$theme = null; - self::$user = null; - self::$user_custom_post_type_id = null; - self::$theme_has_support = null; - self::$theme_json_i18n = null; - } - -} - -add_action( 'switch_theme', array( 'WP_Theme_JSON_Resolver_Gutenberg', 'clean_cached_data' ) ); diff --git a/lib/class-wp-theme-json-schema-v0.php b/lib/class-wp-theme-json-schema-v0.php deleted file mode 100644 index 30a0578178c7f..0000000000000 --- a/lib/class-wp-theme-json-schema-v0.php +++ /dev/null @@ -1,361 +0,0 @@ -<?php -/** - * Class that implements a WP_Theme_JSON_Schema to convert - * a given structure in v0 schema to the latest one. - * - * @package gutenberg - */ - -/** - * Class that implements a WP_Theme_JSON_Schema to convert - * a given structure in v0 schema to the latest one. - */ -class WP_Theme_JSON_Schema_V0 implements WP_Theme_JSON_Schema { - - /** - * How to address all the blocks - * in the theme.json file. - */ - const ALL_BLOCKS_NAME = 'defaults'; - - /** - * How to address the root block - * in the theme.json file. - * - * @var string - */ - const ROOT_BLOCK_NAME = 'root'; - - /** - * Data schema of each block within a theme.json. - * - * Example: - * - * { - * 'block-one': { - * 'styles': { - * 'color': { - * 'background': 'color' - * } - * }, - * 'settings': { - * 'color': { - * 'custom': true - * } - * } - * }, - * 'block-two': { - * 'styles': { - * 'color': { - * 'link': 'color' - * } - * } - * } - * } - */ - const SCHEMA = array( - 'customTemplates' => null, - 'templateParts' => null, - 'styles' => array( - 'border' => array( - 'radius' => null, - 'color' => null, - 'style' => null, - 'width' => null, - ), - 'color' => array( - 'background' => null, - 'gradient' => null, - 'link' => null, - 'text' => null, - ), - 'spacing' => array( - 'padding' => array( - 'top' => null, - 'right' => null, - 'bottom' => null, - 'left' => null, - ), - ), - 'typography' => array( - 'fontFamily' => null, - 'fontSize' => null, - 'fontStyle' => null, - 'fontWeight' => null, - 'lineHeight' => null, - 'textDecoration' => null, - 'textTransform' => null, - ), - ), - 'settings' => array( - 'border' => array( - 'customRadius' => null, - 'customColor' => null, - 'customStyle' => null, - 'customWidth' => null, - ), - 'color' => array( - 'custom' => null, - 'customGradient' => null, - 'gradients' => null, - 'link' => null, - 'palette' => null, - ), - 'spacing' => array( - 'customPadding' => null, - 'units' => null, - ), - 'typography' => array( - 'customFontSize' => null, - 'customLineHeight' => null, - 'dropCap' => null, - 'fontFamilies' => null, - 'fontSizes' => null, - 'customFontStyle' => null, - 'customFontWeight' => null, - 'customTextDecorations' => null, - 'customTextTransforms' => null, - ), - 'custom' => null, - 'layout' => null, - ), - ); - - /** - * Converts a v0 schema into the latest. - * - * @param array $old Data in v0 schema. - * - * @return array Data in the latest schema. - */ - public static function parse( $old ) { - // Copy everything. - $new = $old; - - // Overwrite the things that change. - if ( isset( $old['settings'] ) ) { - $new['settings'] = self::process_settings( $old['settings'] ); - } - if ( isset( $old['styles'] ) ) { - $new['styles'] = self::process_styles( $old['styles'] ); - } - - $new['version'] = WP_Theme_JSON_Gutenberg::LATEST_SCHEMA; - - return $new; - } - - /** - * Processes the settings subtree. - * - * @param array $settings Array to process. - * - * @return array The settings in the new format. - */ - private static function process_settings( $settings ) { - $new = array(); - $blocks_to_consolidate = array( - 'core/heading/h1' => 'core/heading', - 'core/heading/h2' => 'core/heading', - 'core/heading/h3' => 'core/heading', - 'core/heading/h4' => 'core/heading', - 'core/heading/h5' => 'core/heading', - 'core/heading/h6' => 'core/heading', - 'core/post-title/h1' => 'core/post-title', - 'core/post-title/h2' => 'core/post-title', - 'core/post-title/h3' => 'core/post-title', - 'core/post-title/h4' => 'core/post-title', - 'core/post-title/h5' => 'core/post-title', - 'core/post-title/h6' => 'core/post-title', - 'core/query-title/h1' => 'core/query-title', - 'core/query-title/h2' => 'core/query-title', - 'core/query-title/h3' => 'core/query-title', - 'core/query-title/h4' => 'core/query-title', - 'core/query-title/h5' => 'core/query-title', - 'core/query-title/h6' => 'core/query-title', - ); - - $paths_to_override = array( - array( 'color', 'palette' ), - array( 'color', 'gradients' ), - array( 'spacing', 'units' ), - array( 'typography', 'fontSizes' ), - array( 'typography', 'fontFamilies' ), - array( 'custom' ), - ); - - // 'defaults' settings become top-level. - if ( isset( $settings[ self::ALL_BLOCKS_NAME ] ) ) { - $new = $settings[ self::ALL_BLOCKS_NAME ]; - unset( $settings[ self::ALL_BLOCKS_NAME ] ); - } - - // 'root' settings override 'defaults'. - if ( isset( $settings[ self::ROOT_BLOCK_NAME ] ) ) { - $new = array_replace_recursive( $new, $settings[ self::ROOT_BLOCK_NAME ] ); - - // The array_replace_recursive algorithm merges at the leaf level. - // This means that when a leaf value is an array, - // the incoming array won't replace the existing, - // but the numeric indexes are used for replacement. - // - // These cases we hold into $paths_to_override - // and need to replace them with the new data. - foreach ( $paths_to_override as $path ) { - $root_value = _wp_array_get( - $settings, - array_merge( array( self::ROOT_BLOCK_NAME ), $path ), - null - ); - if ( null !== $root_value ) { - gutenberg_experimental_set( $new, $path, $root_value ); - } - } - - unset( $settings[ self::ROOT_BLOCK_NAME ] ); - } - - if ( empty( $settings ) ) { - return $new; - } - - /* - * At this point, it only contains block's data. - * However, some block data we need to consolidate - * into a different section, as it's the case for: - * - * - core/heading/h1, core/heading/h2, ... => core/heading - * - core/post-title/h1, core/post-title/h2, ... => core/post-title - * - core/query-title/h1, core/query-title/h2, ... => core/query-title - * - */ - $new['blocks'] = $settings; - foreach ( $blocks_to_consolidate as $old_name => $new_name ) { - // Unset the $old_name. - unset( $new[ $old_name ] ); - - // Consolidate the $new value. - $block_settings = _wp_array_get( $settings, array( $old_name ), null ); - if ( null !== $block_settings ) { - $new_path = array( 'blocks', $new_name ); - $new_settings = array(); - gutenberg_experimental_set( $new_settings, $new_path, $block_settings ); - - $new = array_replace_recursive( $new, $new_settings ); - foreach ( $paths_to_override as $path ) { - $block_value = _wp_array_get( $block_settings, $path, null ); - if ( null !== $block_value ) { - gutenberg_experimental_set( $new, array_merge( $new_path, $path ), $block_value ); - } - } - } - } - - return $new; - } - - /** - * Processes the styles subtree. - * - * @param array $styles Array to process. - * - * @return array The styles in the new format. - */ - private static function process_styles( $styles ) { - $new = array(); - $block_heading = array( - 'core/heading/h1' => 'h1', - 'core/heading/h2' => 'h2', - 'core/heading/h3' => 'h3', - 'core/heading/h4' => 'h4', - 'core/heading/h5' => 'h5', - 'core/heading/h6' => 'h6', - ); - $blocks_to_consolidate = array( - 'core/post-title/h1' => 'core/post-title', - 'core/post-title/h2' => 'core/post-title', - 'core/post-title/h3' => 'core/post-title', - 'core/post-title/h4' => 'core/post-title', - 'core/post-title/h5' => 'core/post-title', - 'core/post-title/h6' => 'core/post-title', - 'core/query-title/h1' => 'core/query-title', - 'core/query-title/h2' => 'core/query-title', - 'core/query-title/h3' => 'core/query-title', - 'core/query-title/h4' => 'core/query-title', - 'core/query-title/h5' => 'core/query-title', - 'core/query-title/h6' => 'core/query-title', - ); - - // Styles within root become top-level. - if ( isset( $styles[ self::ROOT_BLOCK_NAME ] ) ) { - $new = $styles[ self::ROOT_BLOCK_NAME ]; - unset( $styles[ self::ROOT_BLOCK_NAME ] ); - - // Transform root.styles.color.link into elements.link.color.text. - if ( isset( $new['color']['link'] ) ) { - $new['elements']['link']['color']['text'] = $new['color']['link']; - unset( $new['color']['link'] ); - } - } - - if ( empty( $styles ) ) { - return $new; - } - - /* - * At this point, it only contains block's data. - * However, we still need to consolidate a few things: - * - * - link element => transform from link color property - * - heading elements => consolidate multiple blocks (core/heading/h1, core/heading/h2) - * into a single one (core/heading). - */ - $new['blocks'] = $styles; - - // link elements. - foreach ( $new['blocks'] as $block_name => $metadata ) { - if ( isset( $metadata['color']['link'] ) ) { - $new['blocks'][ $block_name ]['elements']['link']['color']['text'] = $metadata['color']['link']; - unset( $new['blocks'][ $block_name ]['color']['link'] ); - } - } - - /* - * The heading block needs a special treatment: - * - * - if it has a link color => it needs to be moved to the blocks.core/heading - * - the rest is consolidated into the corresponding element - * - */ - foreach ( $block_heading as $old_name => $new_name ) { - if ( ! isset( $new['blocks'][ $old_name ] ) ) { - continue; - } - - gutenberg_experimental_set( $new, array( 'elements', $new_name ), $new['blocks'][ $old_name ] ); - - if ( isset( $new['blocks'][ $old_name ]['elements'] ) ) { - gutenberg_experimental_set( $new, array( 'blocks', 'core/heading', 'elements' ), $new['blocks'][ $old_name ]['elements'] ); - } - - unset( $new['blocks'][ $old_name ] ); - - } - - /* - * Port the styles from the old blocks to the new, - * overriding the previous values. - */ - foreach ( $blocks_to_consolidate as $old_name => $new_name ) { - if ( ! isset( $new['blocks'][ $old_name ] ) ) { - continue; - } - - gutenberg_experimental_set( $new, array( 'blocks', $new_name ), $new['blocks'][ $old_name ] ); - unset( $new['blocks'][ $old_name ] ); - - } - - return $new; - } -} diff --git a/lib/class-wp-widget-block.php b/lib/class-wp-widget-block.php deleted file mode 100644 index c6361f59bb1aa..0000000000000 --- a/lib/class-wp-widget-block.php +++ /dev/null @@ -1,221 +0,0 @@ -<?php -/** - * Widget API: WP_Widget_Block class - * - * @package Gutenberg - */ - -/** - * Core class used to implement a Block widget. - * - * @see WP_Widget - */ -class WP_Widget_Block extends WP_Widget { - - /** - * Default instance. - * - * @since 4.8.1 - * @var array - */ - protected $default_instance = array( - 'content' => '', - ); - - /** - * Whether or not to show the widget's instance settings array in the REST - * API. - * - * @since 5.8.0 - * @var array - */ - public $show_instance_in_rest = true; - - /** - * Sets up a new Block widget instance. - * - * @since 4.8.1 - */ - public function __construct() { - $widget_ops = array( - 'classname' => 'widget_block', - 'description' => __( 'Gutenberg block.', 'gutenberg' ), - 'customize_selective_refresh' => true, - ); - $control_ops = array( - 'width' => 400, - 'height' => 350, - ); - parent::__construct( 'block', __( 'Block', 'gutenberg' ), $widget_ops, $control_ops ); - add_action( 'is_wide_widget_in_customizer', array( $this, 'set_is_wide_widget_in_customizer' ), 10, 2 ); - } - - /** - * Outputs the content for the current Block widget instance. - * - * @param array $args Display arguments including 'before_title', 'after_title', - * 'before_widget', and 'after_widget'. - * @param array $instance Settings for the current Block widget instance. - * - * @since 4.8.1 - * - * @global WP_Post $post Global post object. - */ - public function widget( $args, $instance ) { - $instance = wp_parse_args( $instance, $this->default_instance ); - - echo str_replace( - 'widget_block', - $this->get_dynamic_classname( $instance['content'] ), - $args['before_widget'] - ); - - // Handle embeds for block widgets. - // - // When this feature is added to core it may need to be implemented - // differently. WP_Widget_Text is a good reference, that applies a - // filter for its content, which WP_Embed uses in its constructor. - // See https://core.trac.wordpress.org/ticket/51566. - global $wp_embed; - $content = $wp_embed->run_shortcode( $instance['content'] ); - $content = $wp_embed->autoembed( $content ); - - $content = do_blocks( $content ); - $content = do_shortcode( $content ); - - echo $content; - - echo $args['after_widget']; - } - - /** - * Calculates the classname to use in the block widget's container HTML. - * - * Usually this is set to $this->widget_options['classname'] by - * dynamic_sidebar(). In this case, however, we want to set the classname - * dynamically depending on the block contained by this block widget. - * - * If a block widget contains a block that has an equivalent legacy widget, - * we display that legacy widget's class name. This helps with theme - * backwards compatibility. - * - * @since 9.3.0 - * - * @param array $content The HTML content of the current block widget. - * - * @return string The classname to use in the block widget's container HTML. - */ - private function get_dynamic_classname( $content ) { - $blocks = parse_blocks( $content ); - - $block_name = isset( $blocks[0] ) ? $blocks[0]['blockName'] : null; - - switch ( $block_name ) { - case 'core/paragraph': - $classname = 'widget_block widget_text'; - break; - case 'core/calendar': - $classname = 'widget_block widget_calendar'; - break; - case 'core/search': - $classname = 'widget_block widget_search'; - break; - case 'core/html': - $classname = 'widget_block widget_custom_html'; - break; - case 'core/archives': - $classname = 'widget_block widget_archive'; - break; - case 'core/latest-posts': - $classname = 'widget_block widget_recent_entries'; - break; - case 'core/latest-comments': - $classname = 'widget_block widget_recent_comments'; - break; - case 'core/tag-cloud': - $classname = 'widget_block widget_tag_cloud'; - break; - case 'core/categories': - $classname = 'widget_block widget_categories'; - break; - case 'core/audio': - $classname = 'widget_block widget_media_audio'; - break; - case 'core/video': - $classname = 'widget_block widget_media_video'; - break; - case 'core/image': - $classname = 'widget_block widget_media_image'; - break; - case 'core/gallery': - $classname = 'widget_block widget_media_gallery'; - break; - case 'core/rss': - $classname = 'widget_block widget_rss'; - break; - default: - $classname = 'widget_block'; - } - - /** - * The classname used in the block widget's container HTML. - * - * This can be set according to the name of the block contained by the - * block widget. - * - * @param string $classname The classname to be used in the block widget's container HTML, e.g. 'widget_block widget_text'. - * @param string $block_name The name of the block contained by the block widget, e.g. 'core/paragraph'. - */ - return apply_filters( 'widget_block_dynamic_classname', $classname, $block_name ); - } - - /** - * Handles updating settings for the current Block widget instance. - * - * @param array $new_instance New settings for this instance as input by the user via - * WP_Widget::form(). - * @param array $old_instance Old settings for this instance. - * - * @return array Settings to save or bool false to cancel saving. - * @since 4.8.1 - */ - public function update( $new_instance, $old_instance ) { - $instance = array_merge( $this->default_instance, $old_instance ); - $instance['content'] = $new_instance['content']; - - return $instance; - } - - /** - * Outputs the Block widget settings form. - * - * @param array $instance Current instance. - * - * @see WP_Widget_Custom_HTML::render_control_template_scripts() - */ - public function form( $instance ) { - $instance = wp_parse_args( (array) $instance, $this->default_instance ); - ?> - <p> - <label for="<?php echo $this->get_field_id( 'content' ); ?>"><?php echo __( 'Block HTML:', 'gutenberg' ); ?></label> - <textarea id="<?php echo $this->get_field_id( 'content' ); ?>" name="<?php echo $this->get_field_name( 'content' ); ?>" rows="6" cols="50" class="widefat code"><?php echo esc_textarea( $instance['content'] ); ?></textarea> - </p> - <?php - } - - /** - * Make sure no block widget is considered to be wide. - * - * @param boolean $is_wide Is regarded wide. - * @param string $widget_id Widget ID. - * - * @return bool Updated is_wide value. - */ - public function set_is_wide_widget_in_customizer( $is_wide, $widget_id ) { - if ( strpos( $widget_id, 'block-' ) === 0 ) { - return false; - } - - return $is_wide; - } -} diff --git a/lib/client-assets.php b/lib/client-assets.php index 4adc79fc68904..116742d925aac 100644 --- a/lib/client-assets.php +++ b/lib/client-assets.php @@ -1,7 +1,7 @@ <?php /** - * Functions to register client-side assets (scripts and stylesheets) for the - * Gutenberg editor plugin. + * Functions to register client-side assets (scripts and stylesheets) specific + * for the Gutenberg editor plugin. * * @package gutenberg */ @@ -54,6 +54,12 @@ function gutenberg_url( $path ) { * Default 'false'. */ function gutenberg_override_script( $scripts, $handle, $src, $deps = array(), $ver = false, $in_footer = false ) { + /* + * Force `wp-i18n` script to be registered in the <head> as a + * temporary workaround for https://meta.trac.wordpress.org/ticket/6195. + */ + $in_footer = 'wp-i18n' === $handle ? false : $in_footer; + $script = $scripts->query( $handle, 'registered' ); if ( $script ) { /* @@ -66,22 +72,9 @@ function gutenberg_override_script( $scripts, $handle, $src, $deps = array(), $v $script->src = $src; $script->deps = $deps; $script->ver = $ver; - $script->args = $in_footer; - - /* - * The script's `group` designation is an indication of whether it is - * to be printed in the header or footer. The behavior here defers to - * the arguments as passed. Specifically, group data is not assigned - * for a script unless it is designated to be printed in the footer. - */ - - // See: `wp_register_script` . - unset( $script->extra['group'] ); - if ( $in_footer ) { - $script->add_data( 'group', 1 ); - } + $script->args = $in_footer ? 1 : null; } else { - $scripts->add( $handle, $src, $deps, $ver, $in_footer ); + $scripts->add( $handle, $src, $deps, $ver, ( $in_footer ? 1 : null ) ); } /* @@ -96,13 +89,6 @@ function gutenberg_override_script( $scripts, $handle, $src, $deps = array(), $v $scripts->set_translations( $handle, 'default' ); } - // Remove this check once the minimum supported WordPress version is at least 5.7. - if ( 'wp-i18n' === $handle ) { - $ltr = 'rtl' === _x( 'ltr', 'text direction', 'default' ) ? 'rtl' : 'ltr'; - $output = sprintf( "wp.i18n.setLocaleData( { 'text direction\u0004ltr': [ '%s' ] }, 'default' );", $ltr ); - $scripts->add_inline_script( 'wp-i18n', $output, 'after' ); - } - /* * Wp-editor module is exposed as window.wp.editor. * Problem: there is quite some code expecting window.wp.oldEditor object available under window.wp.editor. @@ -196,48 +182,6 @@ function gutenberg_override_style( $styles, $handle, $src, $deps = array(), $ver $styles->add( $handle, $src, $deps, $ver, $media ); } -/** - * Registers vendor JavaScript files to be used as dependencies of the editor - * and plugins. - * - * This function is called from a script during the plugin build process, so it - * should not call any WordPress PHP functions. - * - * @since 0.1.0 - * - * @param WP_Scripts $scripts WP_Scripts instance. - */ -function gutenberg_register_vendor_scripts( $scripts ) { - $suffix = SCRIPT_DEBUG ? '' : '.min'; - - $react_suffix = ( SCRIPT_DEBUG ? '.development' : '.production' ) . $suffix; - gutenberg_register_vendor_script( - $scripts, - 'react', - 'https://unpkg.com/react@17.0.1/umd/react' . $react_suffix . '.js', - array( 'wp-polyfill' ) - ); - gutenberg_register_vendor_script( - $scripts, - 'react-dom', - 'https://unpkg.com/react-dom@17.0.1/umd/react-dom' . $react_suffix . '.js', - array( 'react' ) - ); - - /* - * This script registration and the corresponding function should be removed - * removed once the plugin is updated to support WordPress 5.7.0 and newer. - */ - gutenberg_register_vendor_script( - $scripts, - 'object-fit-polyfill', - 'https://unpkg.com/objectFitPolyfill@2.3.5/dist/objectFitPolyfill.min.js', - array(), - '2.3.5' - ); -} -add_action( 'wp_default_scripts', 'gutenberg_register_vendor_scripts' ); - /** * Registers all the WordPress packages scripts that are in the standardized * `build/` location. @@ -389,7 +333,7 @@ function gutenberg_register_packages_styles( $styles ) { $styles, 'wp-reset-editor-styles', gutenberg_url( 'build/block-library/reset.css' ), - array( 'common', 'forms' ), // Make sure the reset is loaded after the default WP Adminn styles. + array( 'common', 'forms' ), // Make sure the reset is loaded after the default WP Admin styles. $version ); $styles->add_data( 'wp-reset-editor-styles', 'rtl', 'replace' ); @@ -502,318 +446,3 @@ function gutenberg_register_packages_styles( $styles ) { $styles->add_data( 'wp-widgets', 'rtl', 'replace' ); } add_action( 'wp_default_styles', 'gutenberg_register_packages_styles' ); - -/** - * Registers common scripts and styles to be used as dependencies of the editor - * and plugins. - * - * @since 0.1.0 - */ -function gutenberg_enqueue_block_editor_assets() { - if ( defined( 'GUTENBERG_LIVE_RELOAD' ) && GUTENBERG_LIVE_RELOAD ) { - $live_reload_url = ( GUTENBERG_LIVE_RELOAD === true ) ? 'http://localhost:35729/livereload.js' : GUTENBERG_LIVE_RELOAD; - - wp_enqueue_script( - 'gutenberg-live-reload', - $live_reload_url - ); - } -} -add_action( 'enqueue_block_editor_assets', 'gutenberg_enqueue_block_editor_assets' ); - -/** - * Retrieves a unique and reasonably short and human-friendly filename for a - * vendor script based on a URL and the script handle. - * - * @param string $handle The name of the script. - * @param string $src Full URL of the external script. - * - * @return string Script filename suitable for local caching. - * - * @since 0.1.0 - */ -function gutenberg_vendor_script_filename( $handle, $src ) { - $filename = basename( $src ); - $match = preg_match( - '/^' - . '(?P<ignore>.*?)' - . '(?P<suffix>\.min)?' - . '(?P<extension>\.js)' - . '(?P<extra>.*)' - . '$/', - $filename, - $filename_pieces - ); - - $prefix = $handle; - $suffix = $match ? $filename_pieces['suffix'] : ''; - $hash = substr( md5( $src ), 0, 8 ); - - return "${prefix}${suffix}.${hash}.js"; -} - -/** - * Registers a vendor script from a URL, preferring a locally cached version if - * possible, or downloading it if the cached version is unavailable or - * outdated. - * - * @param WP_Scripts $scripts WP_Scripts instance. - * @param string $handle Name of the script. - * @param string $src Full URL of the external script. - * @param array $deps Optional. An array of registered script handles this - * script depends on. - * @param string|bool|null $ver Optional. String specifying script version number, if it has one, which is added to the URL - * as a query string for cache busting purposes. If version is set to false, a version - * number is automatically added equal to current installed WordPress version. - * If set to null, no version is added. - * @param bool $in_footer Optional. Whether to enqueue the script before </body> instead of in the <head>. - * Default 'false'. - * - * @since 0.1.0 - */ -function gutenberg_register_vendor_script( $scripts, $handle, $src, $deps = array(), $ver = null, $in_footer = false ) { - if ( defined( 'GUTENBERG_LOAD_VENDOR_SCRIPTS' ) && ! GUTENBERG_LOAD_VENDOR_SCRIPTS ) { - return; - } - - $filename = gutenberg_vendor_script_filename( $handle, $src ); - - if ( defined( 'GUTENBERG_LIST_VENDOR_ASSETS' ) && GUTENBERG_LIST_VENDOR_ASSETS ) { - echo "$src|$filename\n"; - return; - } - - $full_path = gutenberg_dir_path() . 'vendor/' . $filename; - - $needs_fetch = ( - defined( 'GUTENBERG_DEVELOPMENT_MODE' ) && GUTENBERG_DEVELOPMENT_MODE && ( - ! file_exists( $full_path ) || - time() - filemtime( $full_path ) >= DAY_IN_SECONDS - ) - ); - - if ( $needs_fetch ) { - // Determine whether we can write to this file. If not, don't waste - // time doing a network request. - // @codingStandardsIgnoreStart - - $is_writable = is_writable( $full_path ); - if ( $is_writable ) { - $f = @fopen( $full_path, 'a' ); - if ( ! $f ) { - $is_writable = false; - } else { - fclose( $f ); - } - } - - // @codingStandardsIgnoreEnd - if ( ! $is_writable ) { - // Failed to open the file for writing, probably due to server - // permissions. Enqueue the script directly from the URL instead. - gutenberg_override_script( $scripts, $handle, $src, $deps, $ver, $in_footer ); - return; - } - - $response = wp_remote_get( $src ); - if ( wp_remote_retrieve_response_code( $response ) === 200 ) { - $f = fopen( $full_path, 'w' ); - fwrite( $f, wp_remote_retrieve_body( $response ) ); - fclose( $f ); - } elseif ( ! filesize( $full_path ) ) { - // The request failed. If the file is already cached, continue to - // use this file. If not, then unlink the 0 byte file, and enqueue - // the script directly from the URL. - gutenberg_override_script( $scripts, $handle, $src, $deps, $ver, $in_footer ); - unlink( $full_path ); - return; - } - } - gutenberg_override_script( - $scripts, - $handle, - gutenberg_url( 'vendor/' . $filename ), - $deps, - $ver, - $in_footer - ); -} - -/** - * Extends block editor settings to remove the Gutenberg's `editor-styles.css`; - * - * This can be removed when plugin support requires WordPress 5.8.0+. - * - * @param array $settings Default editor settings. - * - * @return array Filtered editor settings. - */ -function gutenberg_extend_block_editor_styles( $settings ) { - if ( empty( $settings['styles'] ) ) { - $settings['styles'] = array(); - } else { - /* - * WordPress versions prior to 5.8 include a legacy editor styles file - * that need to be removed. - * This code can be removed from the Gutenberg plugin when the supported WP - * version is 5.8 - */ - $default_styles_file = is_rtl() ? - ABSPATH . WPINC . '/css/dist/editor/editor-styles-rtl.css' : - ABSPATH . WPINC . '/css/dist/editor/editor-styles.css'; - - if ( file_exists( $default_styles_file ) ) { - $default_styles = file_get_contents( - $default_styles_file - ); - - /* - * Iterate backwards from the end of the array since the preferred - * insertion point in case not found is prepended as first entry. - */ - for ( $i = count( $settings['styles'] ) - 1; $i >= 0; $i-- ) { - if ( isset( $settings['styles'][ $i ]['css'] ) && - $default_styles === $settings['styles'][ $i ]['css'] ) { - break; - } - } - - if ( isset( $i ) && $i >= 0 ) { - unset( $settings['styles'][ $i ] ); - } - } - } - - // Remove the default font editor styles for FSE themes. - if ( WP_Theme_JSON_Resolver_Gutenberg::theme_has_support() ) { - foreach ( $settings['styles'] as $j => $style ) { - if ( 0 === strpos( $style['css'], 'body { font-family:' ) ) { - unset( $settings['styles'][ $j ] ); - } - } - } - - return $settings; -} -// This can be removed when plugin support requires WordPress 5.8.0+. -if ( function_exists( 'get_block_editor_settings' ) ) { - add_filter( 'block_editor_settings_all', 'gutenberg_extend_block_editor_styles' ); -} else { - add_filter( 'block_editor_settings', 'gutenberg_extend_block_editor_styles' ); -} - -/** - * Adds a flag to the editor settings to know whether we're in FSE theme or not. - * - * This can be removed when plugin support requires WordPress 5.8.0+. - * - * @param array $settings Default editor settings. - * - * @return array Filtered editor settings. - */ -function gutenberg_extend_block_editor_settings_with_fse_theme_flag( $settings ) { - $settings['supportsTemplateMode'] = gutenberg_supports_block_templates(); - - // Enable the new layout options for themes with a theme.json file. - $settings['supportsLayout'] = WP_Theme_JSON_Resolver_Gutenberg::theme_has_support(); - - return $settings; -} -// This can be removed when plugin support requires WordPress 5.8.0+. -if ( function_exists( 'get_block_editor_settings' ) ) { - add_filter( 'block_editor_settings_all', 'gutenberg_extend_block_editor_settings_with_fse_theme_flag' ); -} else { - add_filter( 'block_editor_settings', 'gutenberg_extend_block_editor_settings_with_fse_theme_flag' ); -} - -/** - * Sets the editor styles to be consumed by JS. - */ -function gutenberg_extend_block_editor_styles_html() { - $script_handles = array(); - $style_handles = array( - 'wp-block-editor', - 'wp-block-library', - 'wp-block-library-theme', - 'wp-edit-blocks', - ); - - $block_registry = WP_Block_Type_Registry::get_instance(); - - foreach ( $block_registry->get_all_registered() as $block_type ) { - if ( ! empty( $block_type->style ) ) { - $style_handles[] = $block_type->style; - } - - if ( ! empty( $block_type->editor_style ) ) { - $style_handles[] = $block_type->editor_style; - } - - if ( ! empty( $block_type->script ) ) { - $script_handles[] = $block_type->script; - } - } - - $style_handles = array_unique( $style_handles ); - $done = wp_styles()->done; - - ob_start(); - - // We do not need reset styles for the iframed editor. - wp_styles()->done = array( 'wp-reset-editor-styles' ); - wp_styles()->do_items( $style_handles ); - wp_styles()->done = $done; - - $styles = ob_get_clean(); - - $script_handles = array_unique( $script_handles ); - $done = wp_scripts()->done; - - ob_start(); - - wp_scripts()->done = array(); - wp_scripts()->do_items( $script_handles ); - wp_scripts()->done = $done; - - $scripts = ob_get_clean(); - - $editor_assets = wp_json_encode( - array( - 'styles' => $styles, - 'scripts' => $scripts, - ) - ); - - echo "<script>window.__editorAssets = $editor_assets</script>"; -} -add_action( 'admin_footer-toplevel_page_gutenberg-edit-site', 'gutenberg_extend_block_editor_styles_html' ); -add_action( 'admin_footer-post.php', 'gutenberg_extend_block_editor_styles_html' ); -add_action( 'admin_footer-post-new.php', 'gutenberg_extend_block_editor_styles_html' ); - -/** - * Adds a polyfill for object-fit in environments which do not support it. - * - * The script registration occurs in `gutenberg_register_vendor_scripts`, which - * should be removed in coordination with this function. - * - * Remove this when the minimum supported version is WordPress 5.7 - * - * @see gutenberg_register_vendor_scripts - * @see https://developer.mozilla.org/en-US/docs/Web/CSS/object-fit - * - * @since 9.1.0 - * - * @param WP_Scripts $scripts WP_Scripts object. - */ -function gutenberg_add_object_fit_polyfill( $scripts ) { - did_action( 'init' ) && $scripts->add_inline_script( - 'wp-polyfill', - wp_get_script_polyfill( - $scripts, - array( - '"objectFit" in document.documentElement.style' => 'object-fit-polyfill', - ) - ) - ); -} -add_action( 'wp_default_scripts', 'gutenberg_add_object_fit_polyfill', 20 ); diff --git a/lib/compat.php b/lib/compat.php deleted file mode 100644 index 917d22fe73370..0000000000000 --- a/lib/compat.php +++ /dev/null @@ -1,192 +0,0 @@ -<?php -/** - * Temporary compatibility shims for features present in Gutenberg, pending - * upstream commit to the WordPress core source repository. Functions here - * exist only as long as necessary for corresponding WordPress support, and - * each should be associated with a Trac ticket. - * - * @package gutenberg - */ - -/** - * Backporting wp_should_load_separate_core_block_assets from WP-Core. - * - * @todo Remove this function when the minimum supported version is WordPress 5.8. - */ -if ( ! function_exists( 'wp_should_load_separate_core_block_assets' ) ) { - /** - * Checks whether separate assets should be loaded for core blocks on-render. - * - * @since 5.8.0 - * - * @return bool Whether separate assets will be loaded. - */ - function wp_should_load_separate_core_block_assets() { - if ( is_admin() || is_feed() || ( defined( 'REST_REQUEST' ) && REST_REQUEST ) ) { - return false; - } - - /** - * Filters the flag that decides whether separate scripts and styles - * will be loaded for core blocks on-render. - * - * @since 5.8.0 - * - * @param bool $load_separate_assets Whether separate assets will be loaded. - * Default false. - */ - return apply_filters( 'should_load_separate_core_block_assets', false ); - } -} - -/** - * Opt-in to separate styles loading for block themes in WordPress 5.8. - * - * @todo Remove this function when the minimum supported version is WordPress 5.8. - */ -add_filter( - 'separate_core_block_assets', - function( $load_separate_styles ) { - if ( function_exists( 'gutenberg_is_fse_theme' ) && gutenberg_is_fse_theme() ) { - return true; - } - return $load_separate_styles; - } -); - -/** - * Remove the `wp_enqueue_registered_block_scripts_and_styles` hook if needed. - * - * @return void - */ -function gutenberg_remove_hook_wp_enqueue_registered_block_scripts_and_styles() { - if ( wp_should_load_separate_core_block_assets() ) { - /** - * Avoid enqueueing block assets of all registered blocks for all posts, instead - * deferring to block render mechanics to enqueue scripts, thereby ensuring only - * blocks of the content have their assets enqueued. - * - * This can be removed once minimum support for the plugin is outside the range - * of the version associated with closure of the following ticket. - * - * @see https://core.trac.wordpress.org/ticket/50328 - * - * @see WP_Block::render - */ - remove_action( 'enqueue_block_assets', 'wp_enqueue_registered_block_scripts_and_styles' ); - } -} - -add_action( 'init', 'gutenberg_remove_hook_wp_enqueue_registered_block_scripts_and_styles' ); - -/** - * Callback hooked to the register_block_type_args filter. - * - * This hooks into block registration to inject the default context into the block object. - * It can be removed once the default context is added into Core. - * - * @param array $args Block attributes. - * @return array Block attributes. - */ -function gutenberg_inject_default_block_context( $args ) { - if ( is_callable( $args['render_callback'] ) ) { - $block_render_callback = $args['render_callback']; - $args['render_callback'] = function( $attributes, $content, $block = null ) use ( $block_render_callback ) { - global $post; - - // Check for null for back compatibility with WP_Block_Type->render - // which is unused since the introduction of WP_Block class. - // - // See: - // - https://core.trac.wordpress.org/ticket/49927 - // - commit 910de8f6890c87f93359c6f2edc6c27b9a3f3292 at wordpress-develop. - - if ( null === $block ) { - return $block_render_callback( $attributes, $content ); - } - - $registry = WP_Block_Type_Registry::get_instance(); - $block_type = $registry->get_registered( $block->name ); - - // For WordPress versions that don't support the context API. - if ( ! $block->context ) { - $block->context = array(); - } - - // Inject the post context if not done by Core. - $needs_post_id = ! empty( $block_type->uses_context ) && in_array( 'postId', $block_type->uses_context, true ); - if ( $post instanceof WP_Post && $needs_post_id && ! isset( $block->context['postId'] ) && 'wp_template' !== $post->post_type && 'wp_template_part' !== $post->post_type ) { - $block->context['postId'] = $post->ID; - } - $needs_post_type = ! empty( $block_type->uses_context ) && in_array( 'postType', $block_type->uses_context, true ); - if ( $post instanceof WP_Post && $needs_post_type && ! isset( $block->context['postType'] ) && 'wp_template' !== $post->post_type && 'wp_template_part' !== $post->post_type ) { - /* - * The `postType` context is largely unnecessary server-side, since the - * ID is usually sufficient on its own. That being said, since a block's - * manifest is expected to be shared between the server and the client, - * it should be included to consistently fulfill the expectation. - */ - $block->context['postType'] = $post->post_type; - } - - return $block_render_callback( $attributes, $content, $block ); - }; - } - return $args; -} - -add_filter( 'register_block_type_args', 'gutenberg_inject_default_block_context' ); - -/** - * Override post type labels for Reusable Block custom post type. - * The labels are different from the ones in Core. - * - * Remove this when Core receives the new labels (minimum supported version WordPress 5.8) - * - * @return array Array of new labels for Reusable Block post type. - */ -function gutenberg_override_reusable_block_post_type_labels() { - return array( - 'name' => _x( 'Reusable blocks', 'post type general name', 'gutenberg' ), - 'singular_name' => _x( 'Reusable block', 'post type singular name', 'gutenberg' ), - 'menu_name' => _x( 'Reusable blocks', 'admin menu', 'gutenberg' ), - 'name_admin_bar' => _x( 'Reusable block', 'add new on admin bar', 'gutenberg' ), - 'add_new' => _x( 'Add New', 'Reusable block', 'gutenberg' ), - 'add_new_item' => __( 'Add new Reusable block', 'gutenberg' ), - 'new_item' => __( 'New Reusable block', 'gutenberg' ), - 'edit_item' => __( 'Edit Reusable block', 'gutenberg' ), - 'view_item' => __( 'View Reusable block', 'gutenberg' ), - 'all_items' => __( 'All Reusable blocks', 'gutenberg' ), - 'search_items' => __( 'Search Reusable blocks', 'gutenberg' ), - 'not_found' => __( 'No reusable blocks found.', 'gutenberg' ), - 'not_found_in_trash' => __( 'No reusable blocks found in Trash.', 'gutenberg' ), - 'filter_items_list' => __( 'Filter reusable blocks list', 'gutenberg' ), - 'items_list_navigation' => __( 'Reusable blocks list navigation', 'gutenberg' ), - 'items_list' => __( 'Reusable blocks list', 'gutenberg' ), - 'item_published' => __( 'Reusable block published.', 'gutenberg' ), - 'item_published_privately' => __( 'Reusable block published privately.', 'gutenberg' ), - 'item_reverted_to_draft' => __( 'Reusable block reverted to draft.', 'gutenberg' ), - 'item_scheduled' => __( 'Reusable block scheduled.', 'gutenberg' ), - 'item_updated' => __( 'Reusable block updated.', 'gutenberg' ), - ); -} -add_filter( 'post_type_labels_wp_block', 'gutenberg_override_reusable_block_post_type_labels', 10, 0 ); - -/** - * Update allowed inline style attributes list. - * - * Note: This should be removed when the minimum required WP version is >= 5.8. - * - * @param string[] $attrs Array of allowed CSS attributes. - * @return string[] CSS attributes. - */ -function gutenberg_safe_style_attrs( $attrs ) { - $attrs[] = 'object-position'; - $attrs[] = 'border-top-left-radius'; - $attrs[] = 'border-top-right-radius'; - $attrs[] = 'border-bottom-right-radius'; - $attrs[] = 'border-bottom-left-radius'; - - return $attrs; -} -add_filter( 'safe_style_css', 'gutenberg_safe_style_attrs' ); diff --git a/lib/compat/wordpress-5.8/block-editor.php b/lib/compat/wordpress-5.8/block-editor.php deleted file mode 100644 index 983889dd3fbcf..0000000000000 --- a/lib/compat/wordpress-5.8/block-editor.php +++ /dev/null @@ -1,397 +0,0 @@ -<?php -/** - * Block Editor API. - * - * @package Gutenberg - * @subpackage Editor - * @since 10.5.0 - */ - -/** - * Returns the list of default categories for block types. - * - * This is a temporary solution until the Gutenberg plugin sets - * the required WordPress version to 5.8. - * - * @see https://core.trac.wordpress.org/ticket/52920 - * - * @since 10.5.0. - * - * @return array[] Array of categories for block types. - */ -function gutenberg_get_default_block_categories() { - return array( - array( - 'slug' => 'text', - 'title' => _x( 'Text', 'block category', 'gutenberg' ), - 'icon' => null, - ), - array( - 'slug' => 'media', - 'title' => _x( 'Media', 'block category', 'gutenberg' ), - 'icon' => null, - ), - array( - 'slug' => 'design', - 'title' => _x( 'Design', 'block category', 'gutenberg' ), - 'icon' => null, - ), - array( - 'slug' => 'widgets', - 'title' => _x( 'Widgets', 'block category', 'gutenberg' ), - 'icon' => null, - ), - array( - 'slug' => 'theme', - 'title' => _x( 'Theme', 'block category', 'gutenberg' ), - 'icon' => null, - ), - array( - 'slug' => 'embed', - 'title' => _x( 'Embeds', 'block category', 'gutenberg' ), - 'icon' => null, - ), - array( - 'slug' => 'reusable', - 'title' => _x( 'Reusable Blocks', 'block category', 'gutenberg' ), - 'icon' => null, - ), - ); -} - -/** - * Returns all the categories for block types that will be shown in the block editor. - * - * This is a temporary solution until the Gutenberg plugin sets - * the required WordPress version to 5.8. - * - * @see https://core.trac.wordpress.org/ticket/52920 - * - * @since 10.5.0 - * - * @param WP_Post|WP_Block_Editor_Context $post_or_block_editor_context The current post object or - * the block editor context. - * @return array[] Array of categories for block types. - */ -function gutenberg_get_block_categories( $post_or_block_editor_context ) { - $block_categories = gutenberg_get_default_block_categories(); - $block_editor_context = $post_or_block_editor_context instanceof WP_Post ? - new WP_Block_Editor_Context( - array( - 'post' => $post_or_block_editor_context, - ) - ) : $post_or_block_editor_context; - - /** - * Filters the default array of categories for block types. - * - * @since 5.8.0 - * - * @param array[] $block_categories Array of categories for block types. - * @param WP_Block_Editor_Context $block_editor_context The current block editor context. - */ - $block_categories = apply_filters( 'block_categories_all', $block_categories, $block_editor_context ); - if ( ! empty( $block_editor_context->post ) ) { - $post = $block_editor_context->post; - - /** - * Filters the default array of categories for block types. - * - * @since 5.0.0 - * @deprecated 5.8.0 The hook transitioned to support also screens that don't contain the $post instance. - * - * @param array[] $block_categories Array of categories for block types. - * @param WP_Post $post Post being loaded. - */ - $block_categories = apply_filters_deprecated( 'block_categories', array( $block_categories, $post ), '5.8.0', 'block_categories_all' ); - } - - return $block_categories; -} - -/** - * Gets the list of allowed block types to use in the block editor. - * - * This is a temporary solution until the Gutenberg plugin sets - * the required WordPress version to 5.8. - * - * @see https://core.trac.wordpress.org/ticket/52920 - * - * @since 10.5.0 - * - * @param WP_Block_Editor_Context $block_editor_context The current block editor context. - * - * @return bool|array Array of block type slugs, or boolean to enable/disable all. - */ -function gutenberg_get_allowed_block_types( $block_editor_context ) { - $allowed_block_types = true; - - /** - * Filters the allowed block types for all editor types, defaulting to `true` - * (all registered block types supported). - * - * @since 5.8.0 - * - * @param bool|array $allowed_block_types Array of block type slugs, or - * boolean to enable/disable all. - * @param WP_Block_Editor_Context $block_editor_context The current block editor context. - */ - $allowed_block_types = apply_filters( 'allowed_block_types_all', $allowed_block_types, $block_editor_context ); - if ( ! empty( $block_editor_context->post ) ) { - $post = $block_editor_context->post; - - /** - * Filters the allowed block types for the editor, defaulting to true (all - * block types supported). - * - * @since 5.0.0 - * @deprecated 5.8.0 The hook transitioned to support also screens that don't contain $post instance. - * - * @param bool|array $allowed_block_types Array of block type slugs, or - * boolean to enable/disable all. - * @param WP_Post $post The post resource data. - */ - $allowed_block_types = apply_filters_deprecated( 'allowed_block_types', array( $allowed_block_types, $post ), '5.8.0', 'allowed_block_types_all' ); - } - - return $allowed_block_types; -} - -/** - * Returns the default block editor settings. - * - * This is a temporary solution until the Gutenberg plugin sets - * the required WordPress version to 5.8. - * - * @see https://core.trac.wordpress.org/ticket/52920 - * - * @since 10.5.0 - * - * @return array The default block editor settings. - */ -function gutenberg_get_default_block_editor_settings() { - // Media settings. - $max_upload_size = wp_max_upload_size(); - if ( ! $max_upload_size ) { - $max_upload_size = 0; - } - - /** This filter is documented in wp-admin/includes/media.php */ - $image_size_names = apply_filters( - 'image_size_names_choose', - array( - 'thumbnail' => __( 'Thumbnail', 'gutenberg' ), - 'medium' => __( 'Medium', 'gutenberg' ), - 'large' => __( 'Large', 'gutenberg' ), - 'full' => __( 'Full Size', 'gutenberg' ), - ) - ); - - $available_image_sizes = array(); - foreach ( $image_size_names as $image_size_slug => $image_size_name ) { - $available_image_sizes[] = array( - 'slug' => $image_size_slug, - 'name' => $image_size_name, - ); - } - - $default_size = get_option( 'image_default_size', 'large' ); - $image_default_size = in_array( $default_size, array_keys( $image_size_names ), true ) ? $default_size : 'large'; - - $image_dimensions = array(); - $all_sizes = wp_get_registered_image_subsizes(); - foreach ( $available_image_sizes as $size ) { - $key = $size['slug']; - if ( isset( $all_sizes[ $key ] ) ) { - $image_dimensions[ $key ] = $all_sizes[ $key ]; - } - } - - $editor_settings = array( - '__unstableEnableFullSiteEditingBlocks' => gutenberg_supports_block_templates(), - 'alignWide' => get_theme_support( 'align-wide' ), - 'allowedBlockTypes' => true, - 'allowedMimeTypes' => get_allowed_mime_types(), - 'blockCategories' => gutenberg_get_default_block_categories(), - 'disableCustomColors' => get_theme_support( 'disable-custom-colors' ), - 'disableCustomFontSizes' => get_theme_support( 'disable-custom-font-sizes' ), - 'disableCustomGradients' => get_theme_support( 'disable-custom-gradients' ), - 'enableCustomLineHeight' => get_theme_support( 'custom-line-height' ), - 'enableCustomSpacing' => get_theme_support( 'custom-spacing' ), - 'enableCustomUnits' => get_theme_support( 'custom-units' ), - 'isRTL' => is_rtl(), - 'imageDefaultSize' => $image_default_size, - 'imageDimensions' => $image_dimensions, - 'imageEditing' => true, - 'imageSizes' => $available_image_sizes, - 'maxUploadFileSize' => $max_upload_size, - ); - - // Theme settings. - $color_palette = current( (array) get_theme_support( 'editor-color-palette' ) ); - if ( false !== $color_palette ) { - $editor_settings['colors'] = $color_palette; - } - - $font_sizes = current( (array) get_theme_support( 'editor-font-sizes' ) ); - if ( false !== $font_sizes ) { - $editor_settings['fontSizes'] = $font_sizes; - } - - $gradient_presets = current( (array) get_theme_support( 'editor-gradient-presets' ) ); - if ( false !== $gradient_presets ) { - $editor_settings['gradients'] = $gradient_presets; - } - - return $editor_settings; -} - -/** - * Returns the contextualized block editor settings settings for a selected editor type. - * - * This is a temporary solution until the Gutenberg plugin sets - * the required WordPress version to 5.8. - * - * @see https://core.trac.wordpress.org/ticket/52920 - * - * @since 10.5.0 - * - * @param array $custom_settings Custom settings to use with the given editor type. - * @param WP_Block_Editor_Context $block_editor_context The current block editor context. - * - * @return array The contextualized block editor settings. - */ -function gutenberg_get_block_editor_settings( $custom_settings, $block_editor_context ) { - $editor_settings = array_merge( - gutenberg_get_default_block_editor_settings(), - array( - 'allowedBlockTypes' => gutenberg_get_allowed_block_types( $block_editor_context ), - 'blockCategories' => gutenberg_get_block_categories( $block_editor_context ), - ), - $custom_settings - ); - - /** - * Filters the settings to pass to the block editor for all editor type. - * - * @since 5.8.0 - * - * @param array $editor_settings Default editor settings. - * @param WP_Block_Editor_Context $block_editor_context The current block editor context. - */ - $editor_settings = apply_filters( 'block_editor_settings_all', $editor_settings, $block_editor_context ); - if ( ! empty( $block_editor_context->post ) ) { - $post = $block_editor_context->post; - - /** - * Filters the settings to pass to the block editor. - * - * @since 5.0.0 - * @deprecated 5.8.0 The hook transitioned to support also screens that don't contain $post instance. - * - * @param array $editor_settings Default editor settings. - * @param WP_Post $post Post being edited. - */ - $editor_settings = apply_filters_deprecated( 'block_editor_settings', array( $editor_settings, $post ), '5.8.0', 'block_editor_settings_all' ); - } - - return $editor_settings; -} - -/** - * Preloads common data used with the block editor by specifying an array of - * REST API paths that will be preloaded for a given block editor context. - * - * @see https://core.trac.wordpress.org/ticket/52920 - * - * @since 10.7.0 - * - * @global WP_Post $post Global post object. - * - * @param array $preload_paths List of paths to preload. - * @param WP_Block_Editor_Context $block_editor_context The current block editor context. - * - * @return void - */ -function gutenberg_block_editor_rest_api_preload( array $preload_paths, $block_editor_context ) { - global $post; - - /** - * Filters the array of REST API paths that will be used to preloaded common data - * to use with the block editor. - * - * @since 5.8.0 - * - * @param string[] $preload_paths Array of paths to preload. - */ - $preload_paths = apply_filters( 'block_editor_rest_api_preload_paths', $preload_paths, $block_editor_context ); - if ( ! empty( $block_editor_context->post ) ) { - $selected_post = $block_editor_context->post; - - /** - * Preload common data by specifying an array of REST API paths that will be preloaded. - * - * Filters the array of paths that will be preloaded. - * - * @since 5.0.0 - * @deprecated 5.8.0 The hook transitioned to support also screens that don't contain $post instance. - * - * @param string[] $preload_paths Array of paths to preload. - * @param WP_Post $selected_post Post being edited. - */ - $preload_paths = apply_filters_deprecated( 'block_editor_preload_paths', array( $preload_paths, $selected_post ), '5.8.0', 'block_editor_rest_api_preload_paths' ); - } - - if ( empty( $preload_paths ) ) { - return; - } - - /* - * Ensure the global $post remains the same after API data is preloaded. - * Because API preloading can call the_content and other filters, plugins - * can unexpectedly modify $post. - */ - $backup_global_post = ! empty( $post ) ? clone $post : $post; - - $preload_data = array_reduce( - $preload_paths, - 'rest_preload_api_request', - array() - ); - - // Restore the global $post as it was before API preloading. - $post = $backup_global_post; - - wp_add_inline_script( - 'wp-api-fetch', - sprintf( - 'wp.apiFetch.use( wp.apiFetch.createPreloadingMiddleware( %s ) );', - wp_json_encode( $preload_data ) - ), - 'after' - ); -} - -/** - * Filters the arguments for registering a block type. - * - * @todo Remove from the Gutenberg plugin when WordPress 5.8 is the minimum required version. - * - * @param array $args Array of arguments for registering a block type. - * - * @return array Returns the $metadata with any missing `style` and `editorStyle` added. - */ -function gutenberg_add_missing_styles_to_core_block_json( $args ) { - if ( ! empty( $args['name'] ) && 0 === strpos( $args['name'], 'core/' ) ) { - $block_name = str_replace( 'core/', '', $args['name'] ); - - if ( ! isset( $args['style'] ) ) { - $args['style'] = "wp-block-$block_name"; - } - if ( ! isset( $args['editor_style'] ) ) { - $args['editor_style'] = "wp-block-$block_name-editor"; - } - } - return $args; -} -add_filter( 'register_block_type_args', 'gutenberg_add_missing_styles_to_core_block_json' ); diff --git a/lib/compat/wordpress-5.8/blocks.php b/lib/compat/wordpress-5.8/blocks.php deleted file mode 100644 index 54a9864a27096..0000000000000 --- a/lib/compat/wordpress-5.8/blocks.php +++ /dev/null @@ -1,57 +0,0 @@ -<?php -/** - * Blocks. - * - * @package Gutenberg - * @subpackage Editor - * @since 11.0.0 - */ - -/** - * Registers view scripts for core blocks if handling is missing in WordPress core. - * - * This is a temporary solution until the Gutenberg plugin sets - * the required WordPress version to 5.8. - * - * @param array $settings Array of determined settings for registering a block type. - * @param array $metadata Metadata provided for registering a block type. - * - * @return array Array of settings for registering a block type. - */ -function gutenberg_block_type_metadata_view_script( $settings, $metadata ) { - if ( - ! isset( $metadata['viewScript'] ) || - ! empty( $settings['view_script'] ) || - ! isset( $metadata['file'] ) || - strpos( $metadata['file'], gutenberg_dir_path() ) !== 0 - ) { - return $settings; - } - - $view_script_path = realpath( dirname( $metadata['file'] ) . '/' . remove_block_asset_path_prefix( $metadata['viewScript'] ) ); - if ( file_exists( $view_script_path ) ) { - $view_script_handle = str_replace( 'core/', 'wp-block-', $metadata['name'] ) . '-view'; - wp_deregister_script( $view_script_handle ); - - // Replace suffix and extension with `.asset.php` to find the generated dependencies file. - $view_asset_file = substr( $view_script_path, 0, -( strlen( '.js' ) ) ) . '.asset.php'; - $view_asset = file_exists( $view_asset_file ) ? require( $view_asset_file ) : null; - $view_script_dependencies = isset( $view_asset['dependencies'] ) ? $view_asset['dependencies'] : array(); - $view_script_version = isset( $view_asset['version'] ) ? $view_asset['version'] : false; - - $result = wp_register_script( - $view_script_handle, - gutenberg_url( str_replace( gutenberg_dir_path(), '', $view_script_path ) ), - $view_script_dependencies, - $view_script_version, - true - ); - if ( $result ) { - $settings['view_script'] = $view_script_handle; - } - } - - return $settings; -} - -add_filter( 'block_type_metadata_settings', 'gutenberg_block_type_metadata_view_script', 10, 2 ); diff --git a/lib/compat/wordpress-5.8/class-wp-block-editor-context.php b/lib/compat/wordpress-5.8/class-wp-block-editor-context.php deleted file mode 100644 index 9f146c8b86146..0000000000000 --- a/lib/compat/wordpress-5.8/class-wp-block-editor-context.php +++ /dev/null @@ -1,35 +0,0 @@ -<?php -/** - * Blocks API: WP_Block_Editor_Context class - * - * @package Gutenberg - */ - -/** - * Class representing a current block editor context. - * - * The expectation is that block editor can have a different set - * of requirements on every screen where it is used. This class - * allows to define supporting settings that can be used with filters. - */ -final class WP_Block_Editor_Context { - /** - * Post being edited. Optional. - * - * @var WP_Post|null - */ - public $post = null; - - /** - * Constructor. - * - * Populates optional properties for a given block editor context. - * - * @param array $settings The list of optional settings to expose in a given context. - */ - public function __construct( array $settings = array() ) { - if ( isset( $settings['post'] ) ) { - $this->post = $settings['post']; - } - } -} diff --git a/lib/compat/wordpress-5.8/index.php b/lib/compat/wordpress-5.8/index.php deleted file mode 100644 index d1dc42880061f..0000000000000 --- a/lib/compat/wordpress-5.8/index.php +++ /dev/null @@ -1,166 +0,0 @@ -<?php -/** - * Temporary compatibility shims for features present in Gutenberg. - * This file should be removed when WordPress 5.8.0 becomes the lowest - * supported version by this plugin. - * - * @package gutenberg - */ - -if ( ! class_exists( 'WP_Block_Editor_Context' ) ) { - require_once __DIR__ . '/class-wp-block-editor-context.php'; -} - -require_once __DIR__ . '/block-editor.php'; -require_once __DIR__ . '/blocks.php'; - -if ( ! function_exists( 'build_query_vars_from_query_block' ) ) { - /** - * Helper function that constructs a WP_Query args array from - * a `Query` block properties. - * - * It's used in QueryLoop, QueryPaginationNumbers and QueryPaginationNext blocks. - * - * @param WP_Block $block Block instance. - * @param int $page Current query's page. - * - * @return array Returns the constructed WP_Query arguments. - */ - function build_query_vars_from_query_block( $block, $page ) { - $query = array( - 'post_type' => 'post', - 'order' => 'DESC', - 'orderby' => 'date', - 'post__not_in' => array(), - ); - - if ( isset( $block->context['query'] ) ) { - if ( ! empty( $block->context['query']['postType'] ) ) { - $post_type_param = $block->context['query']['postType']; - if ( is_post_type_viewable( $post_type_param ) ) { - $query['post_type'] = $post_type_param; - } - } - if ( isset( $block->context['query']['sticky'] ) && ! empty( $block->context['query']['sticky'] ) ) { - $sticky = get_option( 'sticky_posts' ); - if ( 'only' === $block->context['query']['sticky'] ) { - $query['post__in'] = $sticky; - } else { - $query['post__not_in'] = array_merge( $query['post__not_in'], $sticky ); - } - } - if ( ! empty( $block->context['query']['exclude'] ) ) { - $excluded_post_ids = array_map( 'intval', $block->context['query']['exclude'] ); - $excluded_post_ids = array_filter( $excluded_post_ids ); - $query['post__not_in'] = array_merge( $query['post__not_in'], $excluded_post_ids ); - } - if ( - isset( $block->context['query']['perPage'] ) && - is_numeric( $block->context['query']['perPage'] ) - ) { - $per_page = absint( $block->context['query']['perPage'] ); - $offset = 0; - - if ( - isset( $block->context['query']['offset'] ) && - is_numeric( $block->context['query']['offset'] ) - ) { - $offset = absint( $block->context['query']['offset'] ); - } - - $query['offset'] = ( $per_page * ( $page - 1 ) ) + $offset; - $query['posts_per_page'] = $per_page; - } - if ( ! empty( $block->context['query']['categoryIds'] ) ) { - $term_ids = array_map( 'intval', $block->context['query']['categoryIds'] ); - $term_ids = array_filter( $term_ids ); - $query['category__in'] = $term_ids; - } - if ( ! empty( $block->context['query']['tagIds'] ) ) { - $term_ids = array_map( 'intval', $block->context['query']['tagIds'] ); - $term_ids = array_filter( $term_ids ); - $query['tag__in'] = $term_ids; - } - if ( - isset( $block->context['query']['order'] ) && - in_array( strtoupper( $block->context['query']['order'] ), array( 'ASC', 'DESC' ), true ) - ) { - $query['order'] = strtoupper( $block->context['query']['order'] ); - } - if ( isset( $block->context['query']['orderBy'] ) ) { - $query['orderby'] = $block->context['query']['orderBy']; - } - if ( - isset( $block->context['query']['author'] ) && - (int) $block->context['query']['author'] > 0 - ) { - $query['author'] = (int) $block->context['query']['author']; - } - if ( ! empty( $block->context['query']['search'] ) ) { - $query['s'] = $block->context['query']['search']; - } - } - return $query; - } -} - -if ( ! function_exists( 'gutenberg_register_legacy_query_loop_block' ) ) { - /** - * Renders the legacy `core/query-loop` block on the server. - * It triggers a developer warning and then calls the renamed - * block's `render_callback` function output. - * - * @param array $attributes Block attributes. - * @param string $content Block default content. - * @param WP_Block $block Block instance. - * - * @return string Returns the output of the query, structured using the layout defined by the block's inner blocks. - */ - function gutenberg_render_legacy_query_loop_block( $attributes, $content, $block ) { - trigger_error( - /* translators: %1$s: Block type */ - sprintf( __( 'Block %1$s has been renamed to Post Template. %1$s will be supported until WordPress version 5.9.', 'gutenberg' ), $block->name ), - headers_sent() || WP_DEBUG ? E_USER_WARNING : E_USER_NOTICE - ); - return render_block_core_post_template( $attributes, $content, $block ); - } -} - -if ( ! function_exists( 'gutenberg_register_legacy_query_loop_block' ) ) { - /** - * Complements the renaming of `Query Loop` to `Post Template`. - * This ensures backwards compatibility for any users running the Gutenberg - * plugin who have used Query Loop prior to its renaming. - * - * @see https://github.com/WordPress/gutenberg/pull/32514 - */ - function gutenberg_register_legacy_query_loop_block() { - $registry = WP_Block_Type_Registry::get_instance(); - if ( $registry->is_registered( 'core/query-loop' ) ) { - unregister_block_type( 'core/query-loop' ); - } - register_block_type( - 'core/query-loop', - array( - 'category' => 'design', - 'uses_context' => array( - 'queryId', - 'query', - 'queryContext', - 'displayLayout', - 'templateSlug', - ), - 'supports' => array( - 'reusable' => false, - 'html' => false, - 'align' => true, - ), - 'style' => 'wp-block-post-template', - 'render_callback' => 'gutenberg_render_legacy_query_loop_block', - 'skip_inner_blocks' => true, - ) - ); - } - - add_action( 'init', 'gutenberg_register_legacy_query_loop_block' ); -} diff --git a/lib/compat/wordpress-5.9/admin-menu.php b/lib/compat/wordpress-5.9/admin-menu.php new file mode 100644 index 0000000000000..c070761945092 --- /dev/null +++ b/lib/compat/wordpress-5.9/admin-menu.php @@ -0,0 +1,112 @@ +<?php +/** + * WP Admin Menus changes to match WordPress 5.9 + * + * @package gutenberg + */ + +/** + * Removes legacy pages from FSE themes. + */ +function gutenberg_remove_legacy_pages() { + if ( ! wp_is_block_theme() ) { + return; + } + + global $submenu; + if ( ! isset( $submenu['themes.php'] ) ) { + return; + } + + $indexes_to_remove = array(); + $customize_menu = null; + foreach ( $submenu['themes.php'] as $index => $menu_item ) { + if ( false !== strpos( $menu_item[2], 'customize.php' ) ) { + // Assume the first entry is the Customizer proper, if customize.php is linked > once. + if ( is_null( $customize_menu ) ) { + $indexes_to_remove[] = $index; + $customize_menu = $menu_item; + } + } + + if ( false !== strpos( $menu_item[2], 'site-editor.php' ) ) { + $indexes_to_remove[] = $index; + } + + if ( false !== strpos( $menu_item[2], 'gutenberg-widgets' ) ) { + $indexes_to_remove[] = $index; + } + } + + foreach ( $indexes_to_remove as $index ) { + unset( $submenu['themes.php'][ $index ] ); + } + + // Add Customizer back but with a new sub-menu position when a site requires this feature. + if ( gutenberg_site_requires_customizer() && $customize_menu ) { + $submenu['themes.php'][20] = $customize_menu; + } +} +add_action( 'admin_menu', 'gutenberg_remove_legacy_pages' ); + +/** + * Removes legacy adminbar items from FSE themes. + * + * @param WP_Admin_Bar $wp_admin_bar The admin-bar instance. + */ +function gutenberg_adminbar_items( $wp_admin_bar ) { + + // Early exit if not a block theme. + if ( ! wp_is_block_theme() ) { + return; + } + + // Remove customizer link, if this site does not rely on them for plugins or theme options. + if ( ! gutenberg_site_requires_customizer() ) { + $wp_admin_bar->remove_node( 'customize' ); + $wp_admin_bar->remove_node( 'customize-background' ); + $wp_admin_bar->remove_node( 'customize-header' ); + $wp_admin_bar->remove_node( 'widgets' ); + } + + // Add site-editor link. + if ( ! is_admin() && current_user_can( 'edit_theme_options' ) ) { + $wp_admin_bar->add_node( + array( + 'id' => 'site-editor', + 'title' => __( 'Edit site', 'gutenberg' ), + 'href' => admin_url( 'themes.php?page=gutenberg-edit-site' ), + ) + ); + } +} +add_action( 'admin_bar_menu', 'gutenberg_adminbar_items', 50 ); + +/** + * Override Site Editor URLs to use plugin page. + * + * @param string $url Admin URL link with path. + * @param string $path Path relative to the admin URL. + * @return string Modified Admin URL link. + */ +function gutenberg_override_site_editor_urls( $url, $path ) { + if ( 'site-editor.php' === $path ) { + $url = str_replace( $path, 'themes.php?page=gutenberg-edit-site', $url ); + } + + return $url; +} +add_filter( 'admin_url', 'gutenberg_override_site_editor_urls', 10, 2 ); + +/** + * Check if any plugin, or theme features, are using the Customizer. + * + * @return bool A boolean value indicating if Customizer support is needed. + */ +function gutenberg_site_requires_customizer() { + if ( has_action( 'customize_register' ) ) { + return true; + } + + return false; +} diff --git a/lib/compat/wordpress-5.9/block-editor-settings.php b/lib/compat/wordpress-5.9/block-editor-settings.php new file mode 100644 index 0000000000000..91849b0c6afb4 --- /dev/null +++ b/lib/compat/wordpress-5.9/block-editor-settings.php @@ -0,0 +1,29 @@ +<?php +/** + * Adds settings to the block editor. + * + * @package gutenberg + */ + +/** + * Extends the block editor with settings that are only in the plugin. + * + * This is a temporary solution until the Gutenberg plugin sets + * the required WordPress version to 5.9. + * + * @see https://core.trac.wordpress.org/ticket/52920 + * + * @param array $settings Existing editor settings. + * + * @return array Filtered settings. + */ +function gutenberg_get_block_editor_settings_5_9( $settings ) { + $settings['__unstableEnableFullSiteEditingBlocks'] = current_theme_supports( 'block-templates' ); + + if ( wp_is_block_theme() ) { + $settings['defaultTemplatePartAreas'] = get_allowed_block_template_part_areas(); + } + + return $settings; +} +add_filter( 'block_editor_settings_all', 'gutenberg_get_block_editor_settings_5_9' ); diff --git a/lib/compat/wordpress-5.9/block-gallery.php b/lib/compat/wordpress-5.9/block-gallery.php new file mode 100644 index 0000000000000..3c46c03d520c4 --- /dev/null +++ b/lib/compat/wordpress-5.9/block-gallery.php @@ -0,0 +1,57 @@ +<?php +/** + * Gallery block modifications. + * + * @package gutenberg + */ + +/** + * The new gallery block format is not compatible with the use_BalanceTags option + * in WP versions <= 5.8 https://core.trac.wordpress.org/ticket/54130. + * This method adds a variable to the wp namespace to indicate if the new gallery block + * format can be enabled or not. It needs to be added this early and to the wp namespace + * as it needs to be available when the initial block parsing runs on editor load, and most of + * the editor store and standard flags are not loaded yet at that point + * + * @since 12.1.0 + * @todo This should be removed when the minimum required WP version is >= 5.9. + * + * @return void. + */ +function gutenberg_check_gallery_block_v2_compatibility() { + $use_balance_tags = (int) get_option( 'use_balanceTags' ); + $v2_gallery_enabled = boolval( 1 !== $use_balance_tags || is_wp_version_compatible( '5.9' ) ) ? 'true' : 'false'; + + wp_add_inline_script( + 'wp-dom-ready', + 'wp.galleryBlockV2Enabled = ' . $v2_gallery_enabled . ';', + 'after' + ); +} +add_action( 'init', 'gutenberg_check_gallery_block_v2_compatibility' ); + +/** + * Prevent use_balanceTags being enabled on WordPress 5.8 or earlier as it breaks + * the layout of the new Gallery block. + * + * @since 12.1.0 + * @todo This should be removed when the minimum required WP version is >= 5.9. + * + * @param int $new_value The new value for use_balanceTags. + */ +function gutenberg_use_balancetags_check( $new_value ) { + global $wp_version; + + if ( 1 === (int) $new_value && version_compare( $wp_version, '5.9', '<' ) ) { + /* translators: %s: Minimum required version */ + $message = sprintf( __( 'Gutenberg requires WordPress %s or later in order to enable the “Correct invalidly nested XHTML automatically” option. Please upgrade WordPress before enabling.', 'gutenberg' ), '5.9' ); + add_settings_error( 'gutenberg_use_balancetags_check', 'gutenberg_use_balancetags_check', $message, 'error' ); + if ( class_exists( 'WP_CLI' ) ) { + WP_CLI::error( $message ); + } + return 0; + } + + return $new_value; +} +add_filter( 'pre_update_option_use_balanceTags', 'gutenberg_use_balancetags_check' ); diff --git a/lib/compat/wordpress-5.9/block-patterns.php b/lib/compat/wordpress-5.9/block-patterns.php new file mode 100644 index 0000000000000..f92a6203057e6 --- /dev/null +++ b/lib/compat/wordpress-5.9/block-patterns.php @@ -0,0 +1,45 @@ +<?php +/** + * Block patterns functions. + * + * @package gutenberg + */ + +if ( ! function_exists( '_load_remote_featured_patterns' ) ) { + /** + * Loads featured patterns from patterns directory. + */ + function _load_remote_featured_patterns() { + /** + * Filter to disable remote block patterns. + * + * @since 5.8.0 + * + * @param bool $should_load_remote + */ + if ( ! apply_filters( 'should_load_remote_block_patterns', true ) ) { + return; + } + + if ( ! get_theme_support( 'core-block-patterns' ) ) { + return; + } + + $request = new WP_REST_Request( 'GET', '/wp/v2/pattern-directory/patterns' ); + $request['category'] = 26; // This is the `Featured` category id from pattern directory. + $response = rest_do_request( $request ); + if ( $response->is_error() ) { + return; + } + $patterns = $response->get_data(); + foreach ( $patterns as $pattern ) { + $pattern_name = sanitize_title( $pattern['title'] ); + $registry = WP_Block_Patterns_Registry::get_instance(); + // Some patterns might be already registered as core patterns with the `core` prefix. + $is_registered = $registry->is_registered( $pattern_name ) || $registry->is_registered( "core/$pattern_name" ); + if ( ! $is_registered ) { + register_block_pattern( $pattern_name, (array) $pattern ); + } + } + } +} diff --git a/lib/compat/wordpress-5.9/block-template-utils.php b/lib/compat/wordpress-5.9/block-template-utils.php new file mode 100644 index 0000000000000..dd08edd8e600b --- /dev/null +++ b/lib/compat/wordpress-5.9/block-template-utils.php @@ -0,0 +1,896 @@ +<?php +/** + * Temporary compatibility shims for features present in Gutenberg. + * This file should be removed when WordPress 5.9.0 becomes the lowest + * supported version by this plugin. + * + * @package gutenberg + */ + +// Define constants for supported wp_template_part_area taxonomy. +if ( ! defined( 'WP_TEMPLATE_PART_AREA_HEADER' ) ) { + define( 'WP_TEMPLATE_PART_AREA_HEADER', 'header' ); +} +if ( ! defined( 'WP_TEMPLATE_PART_AREA_FOOTER' ) ) { + define( 'WP_TEMPLATE_PART_AREA_FOOTER', 'footer' ); +} +if ( ! defined( 'WP_TEMPLATE_PART_AREA_SIDEBAR' ) ) { + define( 'WP_TEMPLATE_PART_AREA_SIDEBAR', 'sidebar' ); +} +if ( ! defined( 'WP_TEMPLATE_PART_AREA_UNCATEGORIZED' ) ) { + define( 'WP_TEMPLATE_PART_AREA_UNCATEGORIZED', 'uncategorized' ); +} + +if ( ! function_exists( 'get_block_theme_folders' ) ) { + /** + * For backward compatibility reasons, + * block themes might be using block-templates or block-template-parts, + * this function ensures we fallback to these folders properly. + * + * @param string $theme_stylesheet The stylesheet. Default is to leverage the main theme root. + * + * @return array Folder names used by block themes. + */ + function get_block_theme_folders( $theme_stylesheet = null ) { + $theme_name = null === $theme_stylesheet ? get_stylesheet() : $theme_stylesheet; + $root_dir = get_theme_root( $theme_name ); + $theme_dir = "$root_dir/$theme_name"; + + if ( file_exists( $theme_dir . '/block-templates' ) || file_exists( $theme_dir . '/block-template-parts' ) ) { + return array( + 'wp_template' => 'block-templates', + 'wp_template_part' => 'block-template-parts', + ); + } + + return array( + 'wp_template' => 'templates', + 'wp_template_part' => 'parts', + ); + } +} + +if ( ! function_exists( 'get_allowed_block_template_part_areas' ) ) { + /** + * Returns a filtered list of allowed area values for template parts. + * + * @return array The supported template part area values. + */ + function get_allowed_block_template_part_areas() { + $default_area_definitions = array( + array( + 'area' => WP_TEMPLATE_PART_AREA_UNCATEGORIZED, + 'label' => __( 'General', 'gutenberg' ), + 'description' => __( + 'General templates often perform a specific role like displaying post content, and are not tied to any particular area.', + 'gutenberg' + ), + 'icon' => 'layout', + 'area_tag' => 'div', + ), + array( + 'area' => WP_TEMPLATE_PART_AREA_HEADER, + 'label' => __( 'Header', 'gutenberg' ), + 'description' => __( + 'The Header template defines a page area that typically contains a title, logo, and main navigation.', + 'gutenberg' + ), + 'icon' => 'header', + 'area_tag' => 'header', + ), + array( + 'area' => WP_TEMPLATE_PART_AREA_FOOTER, + 'label' => __( 'Footer', 'gutenberg' ), + 'description' => __( + 'The Footer template defines a page area that typically contains site credits, social links, or any other combination of blocks.', + 'gutenberg' + ), + 'icon' => 'footer', + 'area_tag' => 'footer', + ), + ); + + /** + * Filters the list of allowed template part area values. + * + * @param array $default_areas An array of supported area objects. + */ + return apply_filters( 'default_wp_template_part_areas', $default_area_definitions ); + } +} + +if ( ! function_exists( 'get_default_block_template_types' ) ) { + /** + * Returns a filtered list of default template types, containing their + * localized titles and descriptions. + * + * @return array The default template types. + */ + function get_default_block_template_types() { + $default_template_types = array( + 'index' => array( + 'title' => _x( 'Index', 'Template name', 'gutenberg' ), + 'description' => __( 'Displays posts.', 'gutenberg' ), + ), + 'home' => array( + 'title' => _x( 'Home', 'Template name', 'gutenberg' ), + 'description' => __( 'Displays posts on the homepage, or on the Posts page if a static homepage is set.', 'gutenberg' ), + ), + 'front-page' => array( + 'title' => _x( 'Front Page', 'Template name', 'gutenberg' ), + 'description' => __( 'Displays the homepage.', 'gutenberg' ), + ), + 'singular' => array( + 'title' => _x( 'Singular', 'Template name', 'gutenberg' ), + 'description' => __( 'Displays a single post or page.', 'gutenberg' ), + ), + 'single' => array( + 'title' => _x( 'Single Post', 'Template name', 'gutenberg' ), + 'description' => __( 'Displays a single post.', 'gutenberg' ), + ), + 'page' => array( + 'title' => _x( 'Page', 'Template name', 'gutenberg' ), + 'description' => __( 'Displays a single page.', 'gutenberg' ), + ), + 'archive' => array( + 'title' => _x( 'Archive', 'Template name', 'gutenberg' ), + 'description' => __( 'Displays post categories, tags, and other archives.', 'gutenberg' ), + ), + 'author' => array( + 'title' => _x( 'Author', 'Template name', 'gutenberg' ), + 'description' => __( 'Displays latest posts written by a single author.', 'gutenberg' ), + ), + 'category' => array( + 'title' => _x( 'Category', 'Template name', 'gutenberg' ), + 'description' => __( 'Displays latest posts in single post category.', 'gutenberg' ), + ), + 'taxonomy' => array( + 'title' => _x( 'Taxonomy', 'Template name', 'gutenberg' ), + 'description' => __( 'Displays latest posts from a single post taxonomy.', 'gutenberg' ), + ), + 'date' => array( + 'title' => _x( 'Date', 'Template name', 'gutenberg' ), + 'description' => __( 'Displays posts from a specific date.', 'gutenberg' ), + ), + 'tag' => array( + 'title' => _x( 'Tag', 'Template name', 'gutenberg' ), + 'description' => __( 'Displays latest posts with a single post tag.', 'gutenberg' ), + ), + 'attachment' => array( + 'title' => __( 'Media', 'gutenberg' ), + 'description' => __( 'Displays individual media items or attachments.', 'gutenberg' ), + ), + 'search' => array( + 'title' => _x( 'Search', 'Template name', 'gutenberg' ), + 'description' => __( 'Displays search results.', 'gutenberg' ), + ), + 'privacy-policy' => array( + 'title' => __( 'Privacy Policy', 'gutenberg' ), + 'description' => __( 'Displays the privacy policy page.', 'gutenberg' ), + ), + '404' => array( + 'title' => _x( '404', 'Template name', 'gutenberg' ), + 'description' => __( 'Displays when no content is found.', 'gutenberg' ), + ), + ); + + /** + * Filters the list of template types. + * + * @param array $default_template_types An array of template types, formatted as [ slug => [ title, description ] ]. + * + * @since 5.x.x + */ + return apply_filters( 'default_template_types', $default_template_types ); + } +} + +if ( ! function_exists( '_filter_block_template_part_area' ) ) { + /** + * Checks whether the input 'area' is a supported value. + * Returns the input if supported, otherwise returns the 'uncategorized' value. + * + * @param string $type Template part area name. + * + * @return string Input if supported, else the uncategorized value. + */ + function _filter_block_template_part_area( $type ) { + $allowed_areas = array_map( + static function ( $item ) { + return $item['area']; + }, + get_allowed_block_template_part_areas() + ); + if ( in_array( $type, $allowed_areas, true ) ) { + return $type; + } + + /* translators: %1$s: Template area type, %2$s: the uncategorized template area value. */ + $warning_message = sprintf( __( '"%1$s" is not a supported wp_template_part area value and has been added as "%2$s".', 'gutenberg' ), $type, WP_TEMPLATE_PART_AREA_UNCATEGORIZED ); + trigger_error( $warning_message, E_USER_NOTICE ); + return WP_TEMPLATE_PART_AREA_UNCATEGORIZED; + } +} + +if ( ! function_exists( '_get_block_templates_paths' ) ) { + /** + * Finds all nested template part file paths in a theme's directory. + * + * @access private + * + * @param string $base_directory The theme's file path. + * @return array $path_list A list of paths to all template part files. + */ + function _get_block_templates_paths( $base_directory ) { + $path_list = array(); + if ( file_exists( $base_directory ) ) { + $nested_files = new RecursiveIteratorIterator( new RecursiveDirectoryIterator( $base_directory ) ); + $nested_html_files = new RegexIterator( $nested_files, '/^.+\.html$/i', RecursiveRegexIterator::GET_MATCH ); + foreach ( $nested_html_files as $path => $file ) { + $path_list[] = $path; + } + } + return $path_list; + } +} + +if ( ! function_exists( '_get_block_template_file' ) ) { + /** + * Retrieves the template file from the theme for a given slug. + * + * @access private + * @internal + * + * @param string $template_type wp_template or wp_template_part. + * @param string $slug template slug. + * + * @return array|null Template. + */ + function _get_block_template_file( $template_type, $slug ) { + if ( 'wp_template' !== $template_type && 'wp_template_part' !== $template_type ) { + return null; + } + + $themes = array( + get_stylesheet() => get_stylesheet_directory(), + get_template() => get_template_directory(), + ); + foreach ( $themes as $theme_slug => $theme_dir ) { + $template_base_paths = get_block_theme_folders( $theme_slug ); + $file_path = $theme_dir . '/' . $template_base_paths[ $template_type ] . '/' . $slug . '.html'; + if ( file_exists( $file_path ) ) { + $new_template_item = array( + 'slug' => $slug, + 'path' => $file_path, + 'theme' => $theme_slug, + 'type' => $template_type, + ); + + if ( 'wp_template_part' === $template_type ) { + return _add_block_template_part_area_info( $new_template_item ); + } + + if ( 'wp_template' === $template_type ) { + return _add_block_template_info( $new_template_item ); + } + + return $new_template_item; + } + } + + return null; + } +} + +if ( ! function_exists( '_get_block_templates_files' ) ) { + /** + * Retrieves the template files from the theme. + * + * @access private + * @internal + * + * @param string $template_type wp_template or wp_template_part. + * + * @return array Template. + */ + function _get_block_templates_files( $template_type ) { + if ( 'wp_template' !== $template_type && 'wp_template_part' !== $template_type ) { + return null; + } + + $themes = array( + get_stylesheet() => get_stylesheet_directory(), + get_template() => get_template_directory(), + ); + $template_files = array(); + foreach ( $themes as $theme_slug => $theme_dir ) { + $template_base_paths = get_block_theme_folders( $theme_slug ); + $theme_template_files = _get_block_templates_paths( $theme_dir . '/' . $template_base_paths[ $template_type ] ); + foreach ( $theme_template_files as $template_file ) { + $template_base_path = $template_base_paths[ $template_type ]; + $template_slug = substr( + $template_file, + // Starting position of slug. + strpos( $template_file, $template_base_path . DIRECTORY_SEPARATOR ) + 1 + strlen( $template_base_path ), + // Subtract ending '.html'. + -5 + ); + $new_template_item = array( + 'slug' => $template_slug, + 'path' => $template_file, + 'theme' => $theme_slug, + 'type' => $template_type, + ); + + if ( 'wp_template_part' === $template_type ) { + $template_files[] = _add_block_template_part_area_info( $new_template_item ); + } + + if ( 'wp_template' === $template_type ) { + $template_files[] = _add_block_template_info( $new_template_item ); + } + } + } + + return $template_files; + } +} + +if ( ! function_exists( '_add_block_template_info' ) ) { + /** + * Attempts to add custom template information to the template item. + * + * @param array $template_item Template to add information to (requires 'slug' field). + * @return array Template + */ + function _add_block_template_info( $template_item ) { + if ( ! WP_Theme_JSON_Resolver_Gutenberg::theme_has_support() ) { + return $template_item; + } + + $theme_data = WP_Theme_JSON_Resolver_Gutenberg::get_theme_data()->get_custom_templates(); + if ( isset( $theme_data[ $template_item['slug'] ] ) ) { + $template_item['title'] = $theme_data[ $template_item['slug'] ]['title']; + $template_item['postTypes'] = $theme_data[ $template_item['slug'] ]['postTypes']; + } + + return $template_item; + } +} + +if ( ! function_exists( '_add_block_template_part_area_info' ) ) { + /** + * Attempts to add the template part's area information to the input template. + * + * @param array $template_info Template to add information to (requires 'type' and 'slug' fields). + * + * @return array Template. + */ + function _add_block_template_part_area_info( $template_info ) { + if ( WP_Theme_JSON_Resolver_Gutenberg::theme_has_support() ) { + $theme_data = WP_Theme_JSON_Resolver_Gutenberg::get_theme_data()->get_template_parts(); + } + + if ( isset( $theme_data[ $template_info['slug'] ]['area'] ) ) { + $template_info['title'] = $theme_data[ $template_info['slug'] ]['title']; + $template_info['area'] = _filter_block_template_part_area( $theme_data[ $template_info['slug'] ]['area'] ); + } else { + $template_info['area'] = WP_TEMPLATE_PART_AREA_UNCATEGORIZED; + } + + return $template_info; + } +} + +if ( ! function_exists( '_flatten_blocks' ) ) { + /** + * Returns an array containing the references of + * the passed blocks and their inner blocks. + * + * @param array $blocks array of blocks. + * + * @return array block references to the passed blocks and their inner blocks. + */ + function _flatten_blocks( &$blocks ) { + $all_blocks = array(); + $queue = array(); + foreach ( $blocks as &$block ) { + $queue[] = &$block; + } + + while ( count( $queue ) > 0 ) { + $block = &$queue[0]; + array_shift( $queue ); + $all_blocks[] = &$block; + + if ( ! empty( $block['innerBlocks'] ) ) { + foreach ( $block['innerBlocks'] as &$inner_block ) { + $queue[] = &$inner_block; + } + } + } + + return $all_blocks; + } +} + +if ( ! function_exists( '_inject_theme_attribute_in_block_template_content' ) ) { + /** + * Parses wp_template content and injects the current theme's + * stylesheet as a theme attribute into each wp_template_part + * + * @param string $template_content serialized wp_template content. + * + * @return string Updated wp_template content. + */ + function _inject_theme_attribute_in_block_template_content( $template_content ) { + $has_updated_content = false; + $new_content = ''; + $template_blocks = parse_blocks( $template_content ); + + $blocks = _flatten_blocks( $template_blocks ); + foreach ( $blocks as &$block ) { + if ( + 'core/template-part' === $block['blockName'] && + ! isset( $block['attrs']['theme'] ) + ) { + $block['attrs']['theme'] = wp_get_theme()->get_stylesheet(); + $has_updated_content = true; + } + } + + if ( $has_updated_content ) { + foreach ( $template_blocks as &$block ) { + $new_content .= serialize_block( $block ); + } + + return $new_content; + } + + return $template_content; + } +} + +if ( ! function_exists( '_remove_theme_attribute_in_block_template_content' ) ) { + /** + * Parses wp_template content and removes the theme attribute from + * each wp_template_part + * + * @param string $template_content serialized wp_template content. + * + * @return string Updated wp_template content. + */ + function _remove_theme_attribute_in_block_template_content( $template_content ) { + $has_updated_content = false; + $new_content = ''; + $template_blocks = parse_blocks( $template_content ); + + $blocks = _flatten_blocks( $template_blocks ); + foreach ( $blocks as $key => $block ) { + if ( 'core/template-part' === $block['blockName'] && isset( $block['attrs']['theme'] ) ) { + unset( $blocks[ $key ]['attrs']['theme'] ); + $has_updated_content = true; + } + } + + if ( ! $has_updated_content ) { + return $template_content; + } + + foreach ( $template_blocks as $block ) { + $new_content .= serialize_block( $block ); + } + + return $new_content; + } +} + +if ( ! function_exists( '_build_block_template_result_from_file' ) ) { + /** + * Build a unified template object based on a theme file. + * + * @param array $template_file Theme file. + * @param array $template_type wp_template or wp_template_part. + * + * @return Gutenberg_Block_Template Template. + */ + function _build_block_template_result_from_file( $template_file, $template_type ) { + $default_template_types = get_default_block_template_types(); + $template_content = file_get_contents( $template_file['path'] ); + $theme = wp_get_theme()->get_stylesheet(); + + $template = new Gutenberg_Block_Template(); + $template->id = $theme . '//' . $template_file['slug']; + $template->theme = $theme; + $template->content = _inject_theme_attribute_in_block_template_content( $template_content ); + $template->slug = $template_file['slug']; + $template->source = 'theme'; + $template->type = $template_type; + $template->title = ! empty( $template_file['title'] ) ? $template_file['title'] : $template_file['slug']; + $template->status = 'publish'; + $template->has_theme_file = true; + $template->is_custom = true; + + if ( 'wp_template' === $template_type && isset( $default_template_types[ $template_file['slug'] ] ) ) { + $template->description = $default_template_types[ $template_file['slug'] ]['description']; + $template->title = $default_template_types[ $template_file['slug'] ]['title']; + $template->is_custom = false; + } + + if ( 'wp_template' === $template_type && isset( $template_file['postTypes'] ) ) { + $template->post_types = $template_file['postTypes']; + } + + if ( 'wp_template_part' === $template_type && isset( $template_file['area'] ) ) { + $template->area = $template_file['area']; + } + + return $template; + } +} + +if ( ! function_exists( '_build_block_template_result_from_post' ) ) { + /** + * Build a unified template object based a post Object. + * + * @param WP_Post $post Template post. + * + * @return Gutenberg_Block_Template|WP_Error Template. + */ + function _build_block_template_result_from_post( $post ) { + $default_template_types = get_default_block_template_types(); + $terms = get_the_terms( $post, 'wp_theme' ); + + if ( is_wp_error( $terms ) ) { + return $terms; + } + + if ( ! $terms ) { + return new WP_Error( 'template_missing_theme', __( 'No theme is defined for this template.', 'gutenberg' ) ); + } + + $origin = get_post_meta( $post->ID, 'origin', true ); + + $theme = $terms[0]->name; + $has_theme_file = wp_get_theme()->get_stylesheet() === $theme && + null !== _get_block_template_file( $post->post_type, $post->post_name ); + + $template = new Gutenberg_Block_Template(); + $template->wp_id = $post->ID; + $template->id = $theme . '//' . $post->post_name; + $template->theme = $theme; + $template->content = $post->post_content; + $template->slug = $post->post_name; + $template->source = 'custom'; + $template->origin = ! empty( $origin ) ? $origin : null; + $template->type = $post->post_type; + $template->description = $post->post_excerpt; + $template->title = $post->post_title; + $template->status = $post->post_status; + $template->has_theme_file = $has_theme_file; + $template->is_custom = true; + $template->author = $post->post_author; + + if ( 'wp_template' === $post->post_type && isset( $default_template_types[ $template->slug ] ) ) { + $template->is_custom = false; + } + + if ( 'wp_template_part' === $post->post_type ) { + $type_terms = get_the_terms( $post, 'wp_template_part_area' ); + if ( ! is_wp_error( $type_terms ) && false !== $type_terms ) { + $template->area = $type_terms[0]->name; + } + } + + return $template; + } +} + + +/** + * Retrieves a list of unified template objects based on a query. + * + * @param array $query { + * Optional. Arguments to retrieve templates. + * + * @type array $slug__in List of slugs to include. + * @type int $wp_id Post ID of customized template. + * @type string $area A 'wp_template_part_area' taxonomy value to filter by (for wp_template_part template type only). + * @type string $post_type Post type to get the templates for. + * } + * @param array $template_type wp_template or wp_template_part. + * + * @return array Templates. + */ +function gutenberg_get_block_templates( $query = array(), $template_type = 'wp_template' ) { + /** + * Filters the block templates array before the query takes place. + * + * Return a non-null value to bypass the WordPress queries. + * + * @since 10.8 + * + * @param Gutenberg_Block_Template[]|null $block_templates Return an array of block templates to short-circuit the default query, + * or null to allow WP to run it's normal queries. + * @param array $query { + * Optional. Arguments to retrieve templates. + * + * @type array $slug__in List of slugs to include. + * @type int $wp_id Post ID of customized template. + * @type string $post_type Post type to get the templates for. + * } + * @param array $template_type wp_template or wp_template_part. + */ + $templates = apply_filters( 'pre_get_block_templates', null, $query, $template_type ); + if ( ! is_null( $templates ) ) { + return $templates; + } + + $post_type = isset( $query['post_type'] ) ? $query['post_type'] : ''; + $wp_query_args = array( + 'post_status' => array( 'auto-draft', 'draft', 'publish' ), + 'post_type' => $template_type, + 'posts_per_page' => -1, + 'no_found_rows' => true, + 'tax_query' => array( + array( + 'taxonomy' => 'wp_theme', + 'field' => 'name', + 'terms' => wp_get_theme()->get_stylesheet(), + ), + ), + ); + + if ( 'wp_template_part' === $template_type && isset( $query['area'] ) ) { + $wp_query_args['tax_query'][] = array( + 'taxonomy' => 'wp_template_part_area', + 'field' => 'name', + 'terms' => $query['area'], + ); + $wp_query_args['tax_query']['relation'] = 'AND'; + } + + if ( isset( $query['slug__in'] ) ) { + $wp_query_args['post_name__in'] = $query['slug__in']; + } + + // This is only needed for the regular templates/template parts CPT listing and editor. + if ( isset( $query['wp_id'] ) ) { + $wp_query_args['p'] = $query['wp_id']; + } else { + $wp_query_args['post_status'] = 'publish'; + } + + $template_query = new WP_Query( $wp_query_args ); + $query_result = array(); + foreach ( $template_query->posts as $post ) { + $template = _build_block_template_result_from_post( $post ); + + if ( is_wp_error( $template ) ) { + continue; + } + + if ( $post_type && ! $template->is_custom ) { + continue; + } + + $query_result[] = $template; + } + + if ( ! isset( $query['wp_id'] ) ) { + $template_files = _get_block_templates_files( $template_type ); + foreach ( $template_files as $template_file ) { + $template = _build_block_template_result_from_file( $template_file, $template_type ); + + if ( $post_type && ! $template->is_custom ) { + continue; + } + + if ( $post_type && + isset( $template->post_types ) && + ! in_array( $post_type, $template->post_types, true ) + ) { + continue; + } + + $is_not_custom = false === array_search( + wp_get_theme()->get_stylesheet() . '//' . $template_file['slug'], + array_column( $query_result, 'id' ), + true + ); + $fits_slug_query = + ! isset( $query['slug__in'] ) || in_array( $template_file['slug'], $query['slug__in'], true ); + $fits_area_query = + ! isset( $query['area'] ) || $template_file['area'] === $query['area']; + $should_include = $is_not_custom && $fits_slug_query && $fits_area_query; + if ( $should_include ) { + $query_result[] = $template; + } + } + } + /** + * Filters the array of queried block templates array after they've been fetched. + * + * @since 10.8 + * + * @param Gutenberg_Block_Template[] $query_result Array of found block templates. + * @param array $query { + * Optional. Arguments to retrieve templates. + * + * @type array $slug__in List of slugs to include. + * @type int $wp_id Post ID of customized template. + * } + * @param array $template_type wp_template or wp_template_part. + */ + return apply_filters( 'get_block_templates', $query_result, $query, $template_type ); +} + +/** + * Retrieves a single unified template object using its id. + * + * @param string $id Template unique identifier (example: theme_slug//template_slug). + * @param array $template_type wp_template or wp_template_part. + * + * @return Gutenberg_Block_Template|null Template. + */ +function gutenberg_get_block_template( $id, $template_type = 'wp_template' ) { + /** + * Filters the block template object before the query takes place. + * + * Return a non-null value to bypass the WordPress queries. + * + * @since 10.8 + * + * @param Gutenberg_Block_Template|null $block_template Return block template object to short-circuit the default query, + * or null to allow WP to run it's normal queries. + * @param string $id Template unique identifier (example: theme_slug//template_slug). + * @param array $template_type wp_template or wp_template_part. + */ + $block_template = apply_filters( 'pre_get_block_template', null, $id, $template_type ); + if ( ! is_null( $block_template ) ) { + return $block_template; + } + + $parts = explode( '//', $id, 2 ); + if ( count( $parts ) < 2 ) { + return null; + } + list( $theme, $slug ) = $parts; + $wp_query_args = array( + 'post_name__in' => array( $slug ), + 'post_type' => $template_type, + 'post_status' => array( 'auto-draft', 'draft', 'publish', 'trash' ), + 'posts_per_page' => 1, + 'no_found_rows' => true, + 'tax_query' => array( + array( + 'taxonomy' => 'wp_theme', + 'field' => 'name', + 'terms' => $theme, + ), + ), + ); + $template_query = new WP_Query( $wp_query_args ); + $posts = $template_query->posts; + + if ( count( $posts ) > 0 ) { + $template = _build_block_template_result_from_post( $posts[0] ); + + if ( ! is_wp_error( $template ) ) { + return $template; + } + } + + $block_template = get_block_file_template( $id, $template_type ); + + /** + * Filters the queried block template object after it's been fetched. + * + * @since 10.8 + * + * @param Gutenberg_Block_Template|null $block_template The found block template, or null if there isn't one. + * @param string $id Template unique identifier (example: theme_slug//template_slug). + * @param array $template_type wp_template or wp_template_part. + */ + return apply_filters( 'get_block_template', $block_template, $id, $template_type ); +} + +if ( ! function_exists( 'get_block_file_template' ) ) { + /** + * Retrieves a single unified template object using its id. + * Retrieves the file template. + * + * @param string $id Template unique identifier (example: theme_slug//template_slug). + * @param array $template_type wp_template or wp_template_part. + * + * @return Gutenberg_Block_Template|null File template. + */ + function get_block_file_template( $id, $template_type = 'wp_template' ) { + /** + * Filters the block templates array before the query takes place. + * + * Return a non-null value to bypass the WordPress queries. + * + * @since 10.8 + * + * @param Gutenberg_Block_Template|null $block_template Return block template object to short-circuit the default query, + * or null to allow WP to run it's normal queries. + * @param string $id Template unique identifier (example: theme_slug//template_slug). + * @param array $template_type wp_template or wp_template_part. + */ + $block_template = apply_filters( 'pre_get_block_file_template', null, $id, $template_type ); + if ( ! is_null( $block_template ) ) { + return $block_template; + } + + $parts = explode( '//', $id, 2 ); + if ( count( $parts ) < 2 ) { + /** This filter is documented at the end of this function */ + return apply_filters( 'get_block_file_template', null, $id, $template_type ); + } + list( $theme, $slug ) = $parts; + + if ( wp_get_theme()->get_stylesheet() !== $theme ) { + /** This filter is documented at the end of this function */ + return apply_filters( 'get_block_file_template', null, $id, $template_type ); + } + + $template_file = _get_block_template_file( $template_type, $slug ); + if ( null === $template_file ) { + /** This filter is documented at the end of this function */ + return apply_filters( 'get_block_file_template', null, $id, $template_type ); + } + + $block_template = _build_block_template_result_from_file( $template_file, $template_type ); + + /** + * Filters the array of queried block templates array after they've been fetched. + * + * @since 10.8 + * + * @param null|Gutenberg_Block_Template $block_template The found block template. + * @param string $id Template unique identifier (example: theme_slug//template_slug). + * @param array $template_type wp_template or wp_template_part. + */ + return apply_filters( 'get_block_file_template', $block_template, $id, $template_type ); + } +} + +if ( ! function_exists( 'block_template_part' ) ) { + /** + * Print a template-part. + * + * @param string $part The template-part to print. Use "header" or "footer". + * + * @return void + */ + function block_template_part( $part ) { + $template_part = gutenberg_get_block_template( get_stylesheet() . '//' . $part, 'wp_template_part' ); + if ( ! $template_part || empty( $template_part->content ) ) { + return; + } + echo do_blocks( $template_part->content ); + } +} + +if ( ! function_exists( 'block_header_area' ) ) { + /** + * Print the header template-part. + * + * @return void + */ + function block_header_area() { + block_template_part( 'header' ); + } +} + +if ( ! function_exists( 'block_footer_area' ) ) { + /** + * Print the footer template-part. + * + * @return void + */ + function block_footer_area() { + block_template_part( 'footer' ); + } +} diff --git a/lib/compat/wordpress-5.9/block-template.php b/lib/compat/wordpress-5.9/block-template.php new file mode 100644 index 0000000000000..155e9d88809b7 --- /dev/null +++ b/lib/compat/wordpress-5.9/block-template.php @@ -0,0 +1,307 @@ +<?php +/** + * Block template loader functions. + * + * @package gutenberg + */ + +/** + * Adds necessary filters to use 'wp_template' posts instead of theme template files. + */ +function gutenberg_add_template_loader_filters() { + if ( ! current_theme_supports( 'block-templates' ) ) { + return; + } + $template_type_slugs = array_keys( get_default_block_template_types() ); + foreach ( $template_type_slugs as $template_type ) { + if ( 'embed' === $template_type ) { // Skip 'embed' for now because it is not a regular template type. + continue; + } + add_filter( str_replace( '-', '', $template_type ) . '_template', 'gutenberg_locate_block_template', 20, 3 ); + } + + // Request to resolve a template. + if ( isset( $_GET['_wp-find-template'] ) ) { + add_filter( 'pre_get_posts', 'gutenberg_resolve_template_for_new_post' ); + } +} + +add_action( 'wp_loaded', 'gutenberg_add_template_loader_filters' ); + +/** + * Filters into the "{$type}_template" hooks to redirect them to the Full Site Editing template canvas. + * + * Internally, this communicates the block content that needs to be used by the template canvas through a global variable. + * + * @param string $template Path to the template. See locate_template(). + * @param string $type Sanitized filename without extension. + * @param array $templates A list of template candidates, in descending order of priority. + * @return string The path to the Full Site Editing template canvas file. + */ +function gutenberg_locate_block_template( $template, $type, array $templates ) { + global $_wp_current_template_content; + + if ( $template ) { + // locate_template() has found a PHP template at the path specified by $template. + // That means that we have a fallback candidate if we cannot find a block template + // with higher specificity. + // Thus, before looking for matching block themes, we shorten our list of candidate + // templates accordingly. + + // Locate the index of $template (without the theme directory path) in $templates. + $relative_template_path = str_replace( + array( get_stylesheet_directory() . '/', get_template_directory() . '/' ), + '', + $template + ); + $index = array_search( $relative_template_path, $templates, true ); + + // If the template hierarchy algorithm has successfully located a PHP template file, + // we will only consider block templates with higher or equal specificity. + $templates = array_slice( $templates, 0, $index + 1 ); + } + + $block_template = gutenberg_resolve_template( $type, $templates, $template ); + + if ( $block_template ) { + if ( empty( $block_template->content ) && is_user_logged_in() ) { + $_wp_current_template_content = + sprintf( + /* translators: %s: Template title */ + __( 'Empty template: %s', 'gutenberg' ), + $block_template->title + ); + } elseif ( ! empty( $block_template->content ) ) { + $_wp_current_template_content = $block_template->content; + } + if ( isset( $_GET['_wp-find-template'] ) ) { + wp_send_json_success( $block_template ); + } + } else { + if ( $template ) { + return $template; + } + + if ( 'index' === $type ) { + if ( isset( $_GET['_wp-find-template'] ) ) { + wp_send_json_error( array( 'message' => __( 'No matching template found.', 'gutenberg' ) ) ); + } + } else { + return false; // So that the template loader keeps looking for templates. + } + } + + // Add hooks for template canvas. + // Add viewport meta tag. + add_action( 'wp_head', 'gutenberg_viewport_meta_tag', 0 ); + + // Render title tag with content, regardless of whether theme has title-tag support. + remove_action( 'wp_head', '_wp_render_title_tag', 1 ); // Remove conditional title tag rendering... + // Override WP 5.8 title-tag support. + remove_action( 'wp_head', '_block_template_render_title_tag', 1 ); + add_action( 'wp_head', 'gutenberg_render_title_tag', 1 ); // ...and make it unconditional. + + // This file will be included instead of the theme's template file. + return gutenberg_dir_path() . 'lib/compat/wordpress-5.9/template-canvas.php'; +} + +/** + * Return the correct 'wp_template' to render for the request template type. + * + * Accepts an optional $template_hierarchy argument as a hint. + * + * @since 5.9.0 Added the `$fallback_template` parameter. + * + * @param string $template_type The current template type. + * @param string[] $template_hierarchy (optional) The current template hierarchy, ordered by priority. + * @param string $fallback_template A PHP fallback template to use if no matching block template is found. + * @return null|Gutenberg_Block_Template A block template if found. Null if not. + */ +function gutenberg_resolve_template( $template_type, $template_hierarchy, $fallback_template ) { + if ( ! $template_type ) { + return null; + } + + if ( empty( $template_hierarchy ) ) { + $template_hierarchy = array( $template_type ); + } + + $slugs = array_map( + 'gutenberg_strip_template_file_suffix', + $template_hierarchy + ); + + // Find all potential templates 'wp_template' post matching the hierarchy. + $query = array( + 'theme' => wp_get_theme()->get_stylesheet(), + 'slug__in' => $slugs, + ); + $templates = gutenberg_get_block_templates( $query ); + + // Order these templates per slug priority. + // Build map of template slugs to their priority in the current hierarchy. + $slug_priorities = array_flip( $slugs ); + + usort( + $templates, + function ( $template_a, $template_b ) use ( $slug_priorities ) { + return $slug_priorities[ $template_a->slug ] - $slug_priorities[ $template_b->slug ]; + } + ); + + $theme_base_path = get_stylesheet_directory() . DIRECTORY_SEPARATOR; + $parent_theme_base_path = get_template_directory() . DIRECTORY_SEPARATOR; + + // Is the current theme a child theme, and is the PHP fallback template part of it? + if ( + strpos( $fallback_template, $theme_base_path ) === 0 && + strpos( $fallback_template, $parent_theme_base_path ) === false + ) { + $fallback_template_slug = substr( + $fallback_template, + // Starting position of slug. + strpos( $fallback_template, $theme_base_path ) + strlen( $theme_base_path ), + // Remove '.php' suffix. + -4 + ); + + // Is our candidate block template's slug identical to our PHP fallback template's? + if ( + count( $templates ) && + $fallback_template_slug === $templates[0]->slug && + 'theme' === $templates[0]->source + ) { + // Unfortunately, we cannot trust $templates[0]->theme, since it will always + // be set to the current theme's slug by _build_block_template_result_from_file(), + // even if the block template is really coming from the current theme's parent. + // (The reason for this is that we want it to be associated with the current theme + // -- not its parent -- once we edit it and store it to the DB as a wp_template CPT.) + // Instead, we use _get_block_template_file() to locate the block template file. + $template_file = _get_block_template_file( 'wp_template', $fallback_template_slug ); + if ( $template_file && get_template() === $template_file['theme'] ) { + // The block template is part of the parent theme, so we + // have to give precedence to the child theme's PHP template. + array_shift( $templates ); + } + } + } + + return count( $templates ) ? $templates[0] : null; +} + +/** + * Displays title tag with content, regardless of whether theme has title-tag support. + * + * @see _wp_render_title_tag() + */ +function gutenberg_render_title_tag() { + echo '<title>' . wp_get_document_title() . '' . "\n"; +} + +/** + * Returns the markup for the current template. + */ +function gutenberg_get_the_template_html() { + global $_wp_current_template_content; + global $wp_embed; + + if ( ! $_wp_current_template_content ) { + if ( is_user_logged_in() ) { + return '

' . esc_html__( 'No matching template found', 'gutenberg' ) . '

'; + } + return; + } + + $content = $wp_embed->run_shortcode( $_wp_current_template_content ); + $content = $wp_embed->autoembed( $content ); + $content = do_blocks( $content ); + $content = wptexturize( $content ); + $content = convert_smilies( $content ); + $content = shortcode_unautop( $content ); + $content = wp_filter_content_tags( $content ); + $content = do_shortcode( $content ); + $content = str_replace( ']]>', ']]>', $content ); + + // Wrap block template in .wp-site-blocks to allow for specific descendant styles + // (e.g. `.wp-site-blocks > *`). + return '
' . $content . '
'; +} + +/** + * Renders a 'viewport' meta tag. + * + * This is hooked into {@see 'wp_head'} to decouple its output from the default template canvas. + */ +function gutenberg_viewport_meta_tag() { + echo '' . "\n"; +} + +/** + * Strips .php suffix from template file names. + * + * @access private + * + * @param string $template_file Template file name. + * @return string Template file name without extension. + */ +function gutenberg_strip_template_file_suffix( $template_file ) { + return preg_replace( '/\.(php|html)$/', '', $template_file ); +} + +/** + * Removes post details from block context when rendering a block template. + * + * @param array $context Default context. + * + * @return array Filtered context. + */ +function gutenberg_template_render_without_post_block_context( $context ) { + /* + * When loading a template or template part directly and not through a page + * that resolves it, the top-level post ID and type context get set to that + * of the template part. Templates are just the structure of a site, and + * they should not be available as post context because blocks like Post + * Content would recurse infinitely. + */ + if ( isset( $context['postType'] ) && + ( 'wp_template' === $context['postType'] || 'wp_template_part' === $context['postType'] ) ) { + unset( $context['postId'] ); + unset( $context['postType'] ); + } + + return $context; +} + +// override WordPress 5.8 filters. +remove_filter( 'render_block_context', '_block_template_render_without_post_block_context' ); +add_filter( 'render_block_context', 'gutenberg_template_render_without_post_block_context' ); + +/** + * Sets the current WP_Query to return auto-draft posts. + * + * The auto-draft status indicates a new post, so allow the the WP_Query instance to + * return an auto-draft post for template resolution when editing a new post. + * + * @param WP_Query $wp_query Current WP_Query instance, passed by reference. + * @return void + */ +function gutenberg_resolve_template_for_new_post( $wp_query ) { + remove_filter( 'pre_get_posts', 'gutenberg_resolve_template_for_new_post' ); + + // Pages. + $page_id = isset( $wp_query->query['page_id'] ) ? $wp_query->query['page_id'] : null; + + // Posts, including custom post types. + $p = isset( $wp_query->query['p'] ) ? $wp_query->query['p'] : null; + + $post_id = $page_id ? $page_id : $p; + $post = get_post( $post_id ); + + if ( + $post && + 'auto-draft' === $post->post_status && + current_user_can( 'edit_post', $post->ID ) + ) { + $wp_query->set( 'post_status', 'auto-draft' ); + } +} diff --git a/lib/compat/wordpress-5.9/blocks.php b/lib/compat/wordpress-5.9/blocks.php new file mode 100644 index 0000000000000..5793042079871 --- /dev/null +++ b/lib/compat/wordpress-5.9/blocks.php @@ -0,0 +1,247 @@ + '', + 'arrow' => array( + 'next' => '→', + 'previous' => '←', + ), + 'chevron' => array( + 'next' => '»', + 'previous' => '«', + ), + ); + if ( ! empty( $block->context['paginationArrow'] ) && array_key_exists( $block->context['paginationArrow'], $arrow_map ) && ! empty( $arrow_map[ $block->context['paginationArrow'] ] ) ) { + $pagination_type = $is_next ? 'next' : 'previous'; + $arrow_attribute = $block->context['paginationArrow']; + $arrow = $arrow_map[ $block->context['paginationArrow'] ][ $pagination_type ]; + $arrow_classes = "wp-block-query-pagination-$pagination_type-arrow is-arrow-$arrow_attribute"; + return "$arrow"; + } + return null; + } +} + +/** + * Update allowed inline style attributes list. + * + * Note: This should be removed when the minimum required WP version is >= 5.9. + * + * @param string[] $attrs Array of allowed CSS attributes. + * @return string[] CSS attributes. + */ +function gutenberg_safe_style_attrs( $attrs ) { + $attrs[] = 'object-position'; + $attrs[] = 'border-top-left-radius'; + $attrs[] = 'border-top-right-radius'; + $attrs[] = 'border-bottom-right-radius'; + $attrs[] = 'border-bottom-left-radius'; + $attrs[] = 'filter'; + + return $attrs; +} +add_filter( 'safe_style_css', 'gutenberg_safe_style_attrs' ); + +if ( ! function_exists( '_wp_normalize_relative_css_links' ) ) { + /** + * Make URLs relative to the WordPress installation. + * + * @since 5.9.0 + * + * @param string $css The CSS to make URLs relative to the WordPress installation. + * @param string $stylesheet_url The URL to the stylesheet. + * + * @return string The CSS with URLs made relative to the WordPress installation. + */ + function _wp_normalize_relative_css_links( $css, $stylesheet_url ) { + $has_src_results = preg_match_all( '#url\s*\(\s*[\'"]?\s*([^\'"\)]+)#', $css, $src_results ); + if ( $has_src_results ) { + // Loop through the URLs to find relative ones. + foreach ( $src_results[1] as $src_index => $src_result ) { + // Skip if this is an absolute URL. + if ( 0 === strpos( $src_result, 'http' ) || 0 === strpos( $src_result, '//' ) ) { + continue; + } + + // Build the absolute URL. + $absolute_url = dirname( $stylesheet_url ) . '/' . $src_result; + $absolute_url = str_replace( '/./', '/', $absolute_url ); + // Convert to URL related to the site root. + $relative_url = wp_make_link_relative( $absolute_url ); + + // Replace the URL in the CSS. + $css = str_replace( + $src_results[0][ $src_index ], + str_replace( $src_result, $relative_url, $src_results[0][ $src_index ] ), + $css + ); + } + } + + return $css; + } +} + +if ( ! function_exists( 'wp_enqueue_block_style' ) ) { + /** + * Enqueue a stylesheet for a specific block. + * + * If the theme has opted-in to separate-styles loading, + * then the stylesheet will be enqueued on-render, + * otherwise when the block inits. + * + * @since 5.9.0 + * + * @param string $block_name The block-name, including namespace. + * @param array $args An array of arguments [handle,src,deps,ver,media]. + * + * @return void + */ + function wp_enqueue_block_style( $block_name, $args ) { + $args = wp_parse_args( + $args, + array( + 'handle' => '', + 'src' => '', + 'deps' => array(), + 'ver' => false, + 'media' => 'all', + ) + ); + + /** + * Callback function to register and enqueue styles. + * + * @param string $content When the callback is used for the render_block filter, + * the content needs to be returned so the function parameter + * is to ensure the content exists. + * @return string Block content. + */ + $callback = static function( $content ) use ( $args ) { + // Register the stylesheet. + if ( ! empty( $args['src'] ) ) { + wp_register_style( $args['handle'], $args['src'], $args['deps'], $args['ver'], $args['media'] ); + } + + // Add `path` data if provided. + if ( isset( $args['path'] ) ) { + wp_style_add_data( $args['handle'], 'path', $args['path'] ); + + // Get the RTL file path. + $rtl_file_path = str_replace( '.css', '-rtl.css', $args['path'] ); + + // Add RTL stylesheet. + if ( file_exists( $rtl_file_path ) ) { + wp_style_add_data( $args['handle'], 'rtl', 'replace' ); + + if ( is_rtl() ) { + wp_style_add_data( $args['handle'], 'path', $rtl_file_path ); + } + } + } + + // Enqueue the stylesheet. + wp_enqueue_style( $args['handle'] ); + + return $content; + }; + + $hook = did_action( 'wp_enqueue_scripts' ) ? 'wp_footer' : 'wp_enqueue_scripts'; + if ( wp_should_load_separate_core_block_assets() ) { + /** + * Callback function to register and enqueue styles. + * + * @param string $content The block content. + * @param array $block The full block, including name and attributes. + * @return string Block content. + */ + $callback_separate = static function( $content, $block ) use ( $block_name, $callback ) { + if ( ! empty( $block['blockName'] ) && $block_name === $block['blockName'] ) { + return $callback( $content ); + } + return $content; + }; + + /* + * The filter's callback here is an anonymous function because + * using a named function in this case is not possible. + * + * The function cannot be unhooked, however, users are still able + * to dequeue the stylesheets registered/enqueued by the callback + * which is why in this case, using an anonymous function + * was deemed acceptable. + */ + add_filter( 'render_block', $callback_separate, 10, 2 ); + return; + } + + /* + * The filter's callback here is an anonymous function because + * using a named function in this case is not possible. + * + * The function cannot be unhooked, however, users are still able + * to dequeue the stylesheets registered/enqueued by the callback + * which is why in this case, using an anonymous function + * was deemed acceptable. + */ + add_filter( $hook, $callback ); + + // Enqueue assets in the editor. + add_action( 'enqueue_block_assets', $callback ); + } +} + +/** + * Allow multiple block styles. + * + * @since 5.9.0 + * + * @param array $metadata Metadata for registering a block type. + * + * @return array + */ +function gutenberg_multiple_block_styles( $metadata ) { + foreach ( array( 'style', 'editorStyle' ) as $key ) { + if ( ! empty( $metadata[ $key ] ) && is_array( $metadata[ $key ] ) ) { + $default_style = array_shift( $metadata[ $key ] ); + foreach ( $metadata[ $key ] as $handle ) { + $args = array( 'handle' => $handle ); + if ( 0 === strpos( $handle, 'file:' ) && isset( $metadata['file'] ) ) { + $style_path = remove_block_asset_path_prefix( $handle ); + $args = array( + 'handle' => sanitize_key( "{$metadata['name']}-{$style_path}" ), + 'src' => plugins_url( $style_path, $metadata['file'] ), + ); + } + + wp_enqueue_block_style( $metadata['name'], $args ); + } + + // Only return the 1st item in the array. + $metadata[ $key ] = $default_style; + } + } + return $metadata; +} +add_filter( 'block_type_metadata', 'gutenberg_multiple_block_styles' ); diff --git a/lib/compat/wordpress-5.9/class-gutenberg-block-template.php b/lib/compat/wordpress-5.9/class-gutenberg-block-template.php new file mode 100644 index 0000000000000..4259457e77231 --- /dev/null +++ b/lib/compat/wordpress-5.9/class-gutenberg-block-template.php @@ -0,0 +1,131 @@ +namespace, - '/' . $this->rest_base . '/(?P[\/\w-]+)', + '/' . $this->rest_base . '/(?P[\/\s%\w\.\(\)\[\]\@_\-]+)', array( array( 'methods' => WP_REST_Server::READABLE, @@ -67,8 +67,9 @@ public function register_routes() { 'permission_callback' => array( $this, 'get_item_permissions_check' ), 'args' => array( 'id' => array( - 'description' => __( 'The id of a template', 'gutenberg' ), - 'type' => 'string', + 'description' => __( 'The id of a template', 'gutenberg' ), + 'type' => 'string', + 'sanitize_callback' => array( $this, '_sanitize_template_id' ), ), ), ), @@ -116,6 +117,39 @@ protected function permissions_check() { return true; } + /** + * Requesting this endpoint for a template like "twentytwentytwo//home" requires using + * a path like /wp/v2/templates/twentytwentytwo//home. There are special cases when + * WordPress routing corrects the name to contain only a single slash like "twentytwentytwo/home". + * + * This method doubles the last slash if it's not already doubled. It relies on the template + * ID format {theme_name}//{template_slug} and the fact that slugs cannot contain slashes. + * + * See https://core.trac.wordpress.org/ticket/54507 for more context + * + * @param string $id Template ID. + * @return string Sanitized template ID. + */ + public function _sanitize_template_id( $id ) { + // Decode empty space. + $last_slash_pos = strrpos( $id, '/' ); + $id = urldecode( $id ); + + if ( false === $last_slash_pos ) { + return $id; + } + + $is_double_slashed = substr( $id, $last_slash_pos - 1, 1 ) === '/'; + if ( $is_double_slashed ) { + return $id; + } + return ( + substr( $id, 0, $last_slash_pos ) + . '/' + . substr( $id, $last_slash_pos ) + ); + } + /** * Checks if a given request has access to read templates. * @@ -141,6 +175,10 @@ public function get_items( $request ) { if ( isset( $request['area'] ) ) { $query['area'] = $request['area']; } + if ( isset( $request['post_type'] ) ) { + $query['post_type'] = $request['post_type']; + } + $templates = array(); foreach ( gutenberg_get_block_templates( $query, $this->post_type ) as $template ) { $data = $this->prepare_item_for_response( $template, $request ); @@ -169,7 +207,7 @@ public function get_item_permissions_check( $request ) { */ public function get_item( $request ) { if ( isset( $request['source'] ) && 'theme' === $request['source'] ) { - $template = gutenberg_get_block_file_template( $request['id'], $this->post_type ); + $template = get_block_file_template( $request['id'], $this->post_type ); } else { $template = gutenberg_get_block_template( $request['id'], $this->post_type ); } @@ -205,11 +243,15 @@ public function update_item( $request ) { if ( isset( $request['source'] ) && 'theme' === $request['source'] ) { wp_delete_post( $template->wp_id, true ); - return $this->prepare_item_for_response( gutenberg_get_block_file_template( $request['id'], $this->post_type ), $request ); + return $this->prepare_item_for_response( get_block_file_template( $request['id'], $this->post_type ), $request ); } $changes = $this->prepare_item_for_database( $request ); + if ( is_wp_error( $changes ) ) { + return $changes; + } + if ( 'custom' === $template->source ) { $result = wp_update_post( wp_slash( (array) $changes ), true ); } else { @@ -248,7 +290,12 @@ public function create_item_permissions_check( $request ) { * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure. */ public function create_item( $request ) { - $changes = $this->prepare_item_for_database( $request ); + $changes = $this->prepare_item_for_database( $request ); + + if ( is_wp_error( $changes ) ) { + return $changes; + } + $changes->post_name = $request['slug']; $result = wp_insert_post( wp_slash( (array) $changes ), true ); if ( is_wp_error( $result ) ) { @@ -350,6 +397,9 @@ protected function prepare_item_for_database( $request ) { $changes->tax_input = array( 'wp_theme' => $template->theme, ); + $changes->meta_input = array( + 'origin' => $template->source, + ); } else { $changes->post_name = $template->slug; $changes->ID = $template->wp_id; @@ -373,22 +423,40 @@ protected function prepare_item_for_database( $request ) { if ( 'wp_template_part' === $this->post_type ) { if ( isset( $request['area'] ) ) { - $changes->tax_input['wp_template_part_area'] = gutenberg_filter_template_part_area( $request['area'] ); + $changes->tax_input['wp_template_part_area'] = _filter_block_template_part_area( $request['area'] ); } elseif ( null !== $template && 'custom' !== $template->source && $template->area ) { - $changes->tax_input['wp_template_part_area'] = gutenberg_filter_template_part_area( $template->area ); + $changes->tax_input['wp_template_part_area'] = _filter_block_template_part_area( $template->area ); } elseif ( ! $template->area ) { $changes->tax_input['wp_template_part_area'] = WP_TEMPLATE_PART_AREA_UNCATEGORIZED; } } + if ( ! empty( $request['author'] ) ) { + $post_author = (int) $request['author']; + + if ( get_current_user_id() !== $post_author ) { + $user_obj = get_userdata( $post_author ); + + if ( ! $user_obj ) { + return new WP_Error( + 'rest_invalid_author', + __( 'Invalid author ID.', 'gutenberg' ), + array( 'status' => 400 ) + ); + } + } + + $changes->post_author = $post_author; + } + return $changes; } /** * Prepare a single template output for response * - * @param WP_Block_Template $template Template instance. - * @param WP_REST_Request $request Request object. + * @param Gutenberg_Block_Template $template Template instance. + * @param WP_REST_Request $request Request object. * * @return WP_REST_Response $data */ @@ -399,6 +467,7 @@ public function prepare_item_for_response( $template, $request ) { // phpcs:igno 'content' => array( 'raw' => $template->content ), 'slug' => $template->slug, 'source' => $template->source, + 'origin' => $template->origin, 'type' => $template->type, 'description' => $template->description, 'title' => array( @@ -408,8 +477,13 @@ public function prepare_item_for_response( $template, $request ) { // phpcs:igno 'status' => $template->status, 'wp_id' => $template->wp_id, 'has_theme_file' => $template->has_theme_file, + 'author' => (int) $template->author, ); + if ( 'wp_template' === $template->type ) { + $result['is_custom'] = $template->is_custom; + } + if ( 'wp_template_part' === $template->type ) { $result['area'] = $template->area; } @@ -483,11 +557,19 @@ protected function get_available_actions() { */ public function get_collection_params() { return array( - 'context' => $this->get_context_param(), - 'wp_id' => array( + 'context' => $this->get_context_param(), + 'wp_id' => array( 'description' => __( 'Limit to the specified post id.', 'gutenberg' ), 'type' => 'integer', ), + 'area' => array( + 'description' => __( 'Limit to the specified template part area.', 'gutenberg' ), + 'type' => 'string', + ), + 'post_type' => array( + 'description' => __( 'Post type to get the templates for.', 'gutenberg' ), + 'type' => 'string', + ), ); } @@ -518,7 +600,7 @@ public function get_item_schema() { 'context' => array( 'embed', 'view', 'edit' ), 'required' => true, 'minLength' => 1, - 'pattern' => '[a-zA-Z_\-]+', + 'pattern' => '[a-zA-Z0-9_\-]+', ), 'theme' => array( 'description' => __( 'Theme identifier for the template.', 'gutenberg' ), @@ -531,6 +613,12 @@ public function get_item_schema() { 'context' => array( 'embed', 'view', 'edit' ), 'readonly' => true, ), + 'origin' => array( + 'description' => __( 'Source of customized template', 'gutenberg' ), + 'type' => 'string', + 'context' => array( 'embed', 'view', 'edit' ), + 'readonly' => true, + ), 'content' => array( 'description' => __( 'Content of template.', 'gutenberg' ), 'type' => array( 'object', 'string' ), @@ -567,9 +655,23 @@ public function get_item_schema() { 'context' => array( 'embed', 'view', 'edit' ), 'readonly' => true, ), + 'author' => array( + 'description' => __( 'The ID for the author of the template.', 'gutenberg' ), + 'type' => 'integer', + 'context' => array( 'view', 'edit', 'embed' ), + ), ), ); + if ( 'wp_template' === $this->post_type ) { + $schema['properties']['is_custom'] = array( + 'description' => __( 'Whether a template is a custom template.', 'gutenberg' ), + 'type' => 'bool', + 'context' => array( 'embed', 'view', 'edit' ), + 'readonly' => true, + ); + } + if ( 'wp_template_part' === $this->post_type ) { $schema['properties']['area'] = array( 'description' => __( 'Where the template part is intended for use (header, footer, etc.)', 'gutenberg' ), diff --git a/lib/compat/wordpress-5.9/class-wp-rest-global-styles-controller.php b/lib/compat/wordpress-5.9/class-wp-rest-global-styles-controller.php new file mode 100644 index 0000000000000..755b324257d29 --- /dev/null +++ b/lib/compat/wordpress-5.9/class-wp-rest-global-styles-controller.php @@ -0,0 +1,590 @@ +namespace = 'wp/v2'; + $this->rest_base = 'global-styles'; + $this->post_type = 'wp_global_styles'; + } + + /** + * Registers the controllers routes. + * + * @since 5.9.0 + * + * @return void + */ + public function register_routes() { + // List themes global styles. + register_rest_route( + $this->namespace, + // The route. + sprintf( + '/%s/themes/(?P%s)', + $this->rest_base, + // Matches theme's directory: `/themes///` or `/themes//`. + // Excludes invalid directory name characters: `/:<>*?"|`. + '[^\/:<>\*\?"\|]+(?:\/[^\/:<>\*\?"\|]+)?' + ), + array( + array( + 'methods' => WP_REST_Server::READABLE, + 'callback' => array( $this, 'get_theme_item' ), + 'permission_callback' => array( $this, 'get_theme_item_permissions_check' ), + 'args' => array( + 'stylesheet' => array( + 'description' => __( 'The theme identifier', 'gutenberg' ), + 'type' => 'string', + 'sanitize_callback' => array( $this, '_sanitize_global_styles_callback' ), + ), + ), + ), + ) + ); + + // Lists/updates a single global style variation based on the given id. + register_rest_route( + $this->namespace, + '/' . $this->rest_base . '/(?P[\/\w-]+)', + array( + array( + 'methods' => WP_REST_Server::READABLE, + 'callback' => array( $this, 'get_item' ), + 'permission_callback' => array( $this, 'get_item_permissions_check' ), + 'args' => array( + 'id' => array( + 'description' => __( 'The id of a template', 'gutenberg' ), + 'type' => 'string', + 'sanitize_callback' => array( $this, '_sanitize_global_styles_callback' ), + ), + ), + ), + array( + 'methods' => WP_REST_Server::EDITABLE, + 'callback' => array( $this, 'update_item' ), + 'permission_callback' => array( $this, 'update_item_permissions_check' ), + 'args' => $this->get_endpoint_args_for_item_schema( WP_REST_Server::EDITABLE ), + ), + 'schema' => array( $this, 'get_public_item_schema' ), + ) + ); + } + + /** + * Sanitize the global styles ID or stylesheet to decode endpoint. + * For example, `wp/v2/global-styles/twentytwentytwo%200.4.0` + * would be decoded to `twentytwentytwo 0.4.0`. + * + * @since 5.9.0 + * + * @param string $id_or_stylesheet Global styles ID or stylesheet. + * @return string Sanitized global styles ID or stylesheet. + */ + public function _sanitize_global_styles_callback( $id_or_stylesheet ) { + return urldecode( $id_or_stylesheet ); + } + + /** + * Checks if a given request has access to read a single global style. + * + * @since 5.9.0 + * + * @param WP_REST_Request $request Full details about the request. + * @return true|WP_Error True if the request has read access, WP_Error object otherwise. + */ + public function get_item_permissions_check( $request ) { + $post = $this->get_post( $request['id'] ); + if ( is_wp_error( $post ) ) { + return $post; + } + + if ( 'edit' === $request['context'] && $post && ! $this->check_update_permission( $post ) ) { + return new WP_Error( + 'rest_forbidden_context', + __( 'Sorry, you are not allowed to edit this global style.', 'gutenberg' ), + array( 'status' => rest_authorization_required_code() ) + ); + } + + if ( ! $this->check_read_permission( $post ) ) { + return new WP_Error( + 'rest_cannot_view', + __( 'Sorry, you are not allowed to view this global style.', 'gutenberg' ), + array( 'status' => rest_authorization_required_code() ) + ); + } + + return true; + } + + /** + * Checks if a global style can be read. + * + * @since 5.9.0 + * + * @param WP_Post $post Post object. + * @return bool Whether the post can be read. + */ + protected function check_read_permission( $post ) { + return current_user_can( 'read_post', $post->ID ); + } + + /** + * Returns the given global styles config. + * + * @since 5.9.0 + * + * @param WP_REST_Request $request The request instance. + * + * @return WP_REST_Response|WP_Error + */ + public function get_item( $request ) { + $post = $this->get_post( $request['id'] ); + if ( is_wp_error( $post ) ) { + return $post; + } + + return $this->prepare_item_for_response( $post, $request ); + } + + /** + * Checks if a given request has access to write a single global styles config. + * + * @since 5.9.0 + * + * @param WP_REST_Request $request Full details about the request. + * @return true|WP_Error True if the request has write access for the item, WP_Error object otherwise. + */ + public function update_item_permissions_check( $request ) { + $post = $this->get_post( $request['id'] ); + if ( is_wp_error( $post ) ) { + return $post; + } + + if ( $post && ! $this->check_update_permission( $post ) ) { + return new WP_Error( + 'rest_cannot_edit', + __( 'Sorry, you are not allowed to edit this global style.', 'gutenberg' ), + array( 'status' => rest_authorization_required_code() ) + ); + } + + return true; + } + + /** + * Checks if a global style can be edited. + * + * @since 5.9.0 + * + * @param WP_Post $post Post object. + * @return bool Whether the post can be edited. + */ + protected function check_update_permission( $post ) { + return current_user_can( 'edit_post', $post->ID ); + } + + /** + * Updates a single global style config. + * + * @since 5.9.0 + * + * @param WP_REST_Request $request Full details about the request. + * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure. + */ + public function update_item( $request ) { + $post_before = $this->get_post( $request['id'] ); + if ( is_wp_error( $post_before ) ) { + return $post_before; + } + + $changes = $this->prepare_item_for_database( $request ); + $result = wp_update_post( wp_slash( (array) $changes ), true, false ); + if ( is_wp_error( $result ) ) { + return $result; + } + + $post = get_post( $request['id'] ); + $fields_update = $this->update_additional_fields_for_object( $post, $request ); + if ( is_wp_error( $fields_update ) ) { + return $fields_update; + } + + wp_after_insert_post( $post, true, $post_before ); + + $response = $this->prepare_item_for_response( $post, $request ); + + return rest_ensure_response( $response ); + } + + /** + * Prepares a single global styles config for update. + * + * @since 5.9.0 + * + * @param WP_REST_Request $request Request object. + * @return stdClass Changes to pass to wp_update_post. + */ + protected function prepare_item_for_database( $request ) { + $changes = new stdClass(); + $changes->ID = $request['id']; + + $post = get_post( $request['id'] ); + $existing_config = array(); + if ( $post ) { + $existing_config = json_decode( $post->post_content, true ); + $json_decoding_error = json_last_error(); + if ( JSON_ERROR_NONE !== $json_decoding_error || ! isset( $existing_config['isGlobalStylesUserThemeJSON'] ) || + ! $existing_config['isGlobalStylesUserThemeJSON'] ) { + $existing_config = array(); + } + } + + if ( isset( $request['styles'] ) || isset( $request['settings'] ) ) { + $config = array(); + if ( isset( $request['styles'] ) ) { + $config['styles'] = $request['styles']; + } elseif ( isset( $existing_config['styles'] ) ) { + $config['styles'] = $existing_config['styles']; + } + if ( isset( $request['settings'] ) ) { + $config['settings'] = $request['settings']; + } elseif ( isset( $existing_config['settings'] ) ) { + $config['settings'] = $existing_config['settings']; + } + $config['isGlobalStylesUserThemeJSON'] = true; + $config['version'] = WP_Theme_JSON_Gutenberg::LATEST_SCHEMA; + $changes->post_content = wp_json_encode( $config ); + } + + // Post title. + if ( isset( $request['title'] ) ) { + if ( is_string( $request['title'] ) ) { + $changes->post_title = $request['title']; + } elseif ( ! empty( $request['title']['raw'] ) ) { + $changes->post_title = $request['title']['raw']; + } + } + + return $changes; + } + + /** + * Prepare a global styles config output for response. + * + * @since 5.9.0 + * + * @param WP_Post $post Global Styles post object. + * @param WP_REST_Request $request Request object. + * @return WP_REST_Response Response object. + */ + public function prepare_item_for_response( $post, $request ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable + $raw_config = json_decode( $post->post_content, true ); + $is_global_styles_user_theme_json = isset( $raw_config['isGlobalStylesUserThemeJSON'] ) && true === $raw_config['isGlobalStylesUserThemeJSON']; + $config = array(); + if ( $is_global_styles_user_theme_json ) { + $config = ( new WP_Theme_JSON_Gutenberg( $raw_config, 'custom' ) )->get_raw_data(); + } + + // Base fields for every post. + $data = array(); + $fields = $this->get_fields_for_response( $request ); + + if ( rest_is_field_included( 'id', $fields ) ) { + $data['id'] = $post->ID; + } + + if ( rest_is_field_included( 'title', $fields ) ) { + $data['title'] = array(); + } + if ( rest_is_field_included( 'title.raw', $fields ) ) { + $data['title']['raw'] = $post->post_title; + } + if ( rest_is_field_included( 'title.rendered', $fields ) ) { + add_filter( 'protected_title_format', array( $this, 'protected_title_format' ) ); + + $data['title']['rendered'] = get_the_title( $post->ID ); + + remove_filter( 'protected_title_format', array( $this, 'protected_title_format' ) ); + } + + if ( rest_is_field_included( 'settings', $fields ) ) { + $data['settings'] = ! empty( $config['settings'] ) && $is_global_styles_user_theme_json ? $config['settings'] : new stdClass(); + } + + if ( rest_is_field_included( 'styles', $fields ) ) { + $data['styles'] = ! empty( $config['styles'] ) && $is_global_styles_user_theme_json ? $config['styles'] : new stdClass(); + } + + $context = ! empty( $request['context'] ) ? $request['context'] : 'view'; + $data = $this->add_additional_fields_to_object( $data, $request ); + $data = $this->filter_response_by_context( $data, $context ); + + // Wrap the data in a response object. + $response = rest_ensure_response( $data ); + + $links = $this->prepare_links( $post->ID ); + $response->add_links( $links ); + if ( ! empty( $links['self']['href'] ) ) { + $actions = $this->get_available_actions(); + $self = $links['self']['href']; + foreach ( $actions as $rel ) { + $response->add_link( $rel, $self ); + } + } + + return $response; + } + + /** + * Get the post, if the ID is valid. + * + * @since 5.9.0 + * + * @param int $id Supplied ID. + * @return WP_Post|WP_Error Post object if ID is valid, WP_Error otherwise. + */ + protected function get_post( $id ) { + $error = new WP_Error( + 'rest_global_styles_not_found', + __( 'No global styles config exist with that id.', 'gutenberg' ), + array( 'status' => 404 ) + ); + + $id = (int) $id; + if ( $id <= 0 ) { + return $error; + } + + $post = get_post( $id ); + if ( empty( $post ) || empty( $post->ID ) || $this->post_type !== $post->post_type ) { + return $error; + } + + return $post; + } + + + /** + * Prepares links for the request. + * + * @since 5.9.0 + * + * @param integer $id ID. + * @return array Links for the given post. + */ + protected function prepare_links( $id ) { + $base = sprintf( '%s/%s', $this->namespace, $this->rest_base ); + + $links = array( + 'self' => array( + 'href' => rest_url( trailingslashit( $base ) . $id ), + ), + ); + + return $links; + } + + /** + * Get the link relations available for the post and current user. + * + * @since 5.9.0 + * + * @return array List of link relations. + */ + protected function get_available_actions() { + $rels = array(); + + $post_type = get_post_type_object( $this->post_type ); + if ( current_user_can( $post_type->cap->publish_posts ) ) { + $rels[] = 'https://api.w.org/action-publish'; + } + + return $rels; + } + + /** + * Overwrites the default protected title format. + * + * By default, WordPress will show password protected posts with a title of + * "Protected: %s", as the REST API communicates the protected status of a post + * in a machine readable format, we remove the "Protected: " prefix. + * + * @since 5.9.0 + * + * @return string Protected title format. + */ + public function protected_title_format() { + return '%s'; + } + + /** + * Retrieves the query params for the global styles collection. + * + * @since 5.9.0 + * + * @return array Collection parameters. + */ + public function get_collection_params() { + return array(); + } + + /** + * Retrieves the global styles type' schema, conforming to JSON Schema. + * + * @since 5.9.0 + * + * @return array Item schema data. + */ + public function get_item_schema() { + if ( $this->schema ) { + return $this->add_additional_fields_schema( $this->schema ); + } + + $schema = array( + '$schema' => 'http://json-schema.org/draft-04/schema#', + 'title' => $this->post_type, + 'type' => 'object', + 'properties' => array( + 'id' => array( + 'description' => __( 'ID of global styles config.', 'gutenberg' ), + 'type' => 'string', + 'context' => array( 'embed', 'view', 'edit' ), + 'readonly' => true, + ), + 'styles' => array( + 'description' => __( 'Global styles.', 'gutenberg' ), + 'type' => array( 'object' ), + 'context' => array( 'view', 'edit' ), + ), + 'settings' => array( + 'description' => __( 'Global settings.', 'gutenberg' ), + 'type' => array( 'object' ), + 'context' => array( 'view', 'edit' ), + ), + 'title' => array( + 'description' => __( 'Title of the global styles variation.', 'gutenberg' ), + 'type' => array( 'object', 'string' ), + 'default' => '', + 'context' => array( 'embed', 'view', 'edit' ), + 'properties' => array( + 'raw' => array( + 'description' => __( 'Title for the global styles variation, as it exists in the database.', 'gutenberg' ), + 'type' => 'string', + 'context' => array( 'view', 'edit', 'embed' ), + ), + 'rendered' => array( + 'description' => __( 'HTML title for the post, transformed for display.', 'gutenberg' ), + 'type' => 'string', + 'context' => array( 'view', 'edit', 'embed' ), + 'readonly' => true, + ), + ), + ), + ), + ); + + $this->schema = $schema; + + return $this->add_additional_fields_schema( $this->schema ); + } + + /** + * Checks if a given request has access to read a single theme global styles config. + * + * @since 5.9.0 + * + * @param WP_REST_Request $request Full details about the request. + * @return true|WP_Error True if the request has read access for the item, WP_Error object otherwise. + */ + public function get_theme_item_permissions_check( $request ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable + // Verify if the current user has edit_theme_options capability. + // This capability is required to edit/view/delete templates. + if ( ! current_user_can( 'edit_theme_options' ) ) { + return new WP_Error( + 'rest_cannot_manage_global_styles', + __( 'Sorry, you are not allowed to access the global styles on this site.', 'gutenberg' ), + array( + 'status' => rest_authorization_required_code(), + ) + ); + } + + return true; + } + + /** + * Returns the given theme global styles config. + * + * @since 5.9.0 + * + * @param WP_REST_Request $request The request instance. + * @return WP_REST_Response|WP_Error + */ + public function get_theme_item( $request ) { + if ( wp_get_theme()->get_stylesheet() !== $request['stylesheet'] ) { + // This endpoint only supports the active theme for now. + return new WP_Error( + 'rest_theme_not_found', + __( 'Theme not found.', 'gutenberg' ), + array( 'status' => 404 ) + ); + } + + $theme = WP_Theme_JSON_Resolver_Gutenberg::get_merged_data( 'theme' ); + $data = array(); + $fields = $this->get_fields_for_response( $request ); + + if ( rest_is_field_included( 'settings', $fields ) ) { + $data['settings'] = $theme->get_settings(); + } + + if ( rest_is_field_included( 'styles', $fields ) ) { + $raw_data = $theme->get_raw_data(); + if ( isset( $raw_data['styles'] ) ) { + $data['styles'] = $raw_data['styles']; + } + } + + $context = ! empty( $request['context'] ) ? $request['context'] : 'view'; + $data = $this->add_additional_fields_to_object( $data, $request ); + $data = $this->filter_response_by_context( $data, $context ); + + $response = rest_ensure_response( $data ); + + $links = array( + 'self' => array( + 'href' => rest_url( sprintf( '%s/%s/themes/%s', $this->namespace, $this->rest_base, $request['stylesheet'] ) ), + ), + ); + + $response->add_links( $links ); + + return $response; + } + } +} diff --git a/lib/class-wp-rest-menu-items-controller.php b/lib/compat/wordpress-5.9/class-wp-rest-menu-items-controller.php similarity index 84% rename from lib/class-wp-rest-menu-items-controller.php rename to lib/compat/wordpress-5.9/class-wp-rest-menu-items-controller.php index c84b71bc297c2..4102184864d78 100644 --- a/lib/class-wp-rest-menu-items-controller.php +++ b/lib/compat/wordpress-5.9/class-wp-rest-menu-items-controller.php @@ -12,15 +12,14 @@ * @see WP_REST_Posts_Controller */ class WP_REST_Menu_Items_Controller extends WP_REST_Posts_Controller { + /** - * Constructor. + * Whether the controller supports batching. * - * @param string $post_type Post type. + * @since 5.9.0 + * @var array */ - public function __construct( $post_type ) { - parent::__construct( $post_type ); - $this->namespace = '__experimental'; - } + protected $allow_batch = array( 'v1' => true ); /** * Overrides the route registration to support "allow_batch". @@ -44,7 +43,7 @@ public function register_routes() { 'permission_callback' => array( $this, 'create_item_permissions_check' ), 'args' => $this->get_endpoint_args_for_item_schema( WP_REST_Server::CREATABLE ), ), - 'allow_batch' => array( 'v1' => true ), + 'allow_batch' => $this->allow_batch, 'schema' => array( $this, 'get_public_item_schema' ), ) ); @@ -93,7 +92,7 @@ public function register_routes() { ), ), ), - 'allow_batch' => array( 'v1' => true ), + 'allow_batch' => $this->allow_batch, 'schema' => array( $this, 'get_public_item_schema' ), ) ); @@ -181,7 +180,7 @@ public function create_item( $request ) { } $prepared_nav_item = (array) $prepared_nav_item; - $nav_menu_item_id = wp_update_nav_menu_item( $prepared_nav_item['menu-id'], $prepared_nav_item['menu-item-db-id'], $prepared_nav_item ); + $nav_menu_item_id = wp_update_nav_menu_item( $prepared_nav_item['menu-id'], $prepared_nav_item['menu-item-db-id'], wp_slash( $prepared_nav_item ) ); if ( is_wp_error( $nav_menu_item_id ) ) { if ( 'db_insert_error' === $nav_menu_item_id->get_error_code() ) { $nav_menu_item_id->add_data( array( 'status' => 500 ) ); @@ -271,7 +270,7 @@ public function update_item( $request ) { $prepared_nav_item = (array) $prepared_nav_item; - $nav_menu_item_id = wp_update_nav_menu_item( $prepared_nav_item['menu-id'], $prepared_nav_item['menu-item-db-id'], $prepared_nav_item ); + $nav_menu_item_id = wp_update_nav_menu_item( $prepared_nav_item['menu-id'], $prepared_nav_item['menu-item-db-id'], wp_slash( $prepared_nav_item ) ); if ( is_wp_error( $nav_menu_item_id ) ) { if ( 'db_update_error' === $nav_menu_item_id->get_error_code() ) { @@ -324,7 +323,7 @@ public function update_item( $request ) { * Deletes a single menu item. * * @param WP_REST_Request $request Full details about the request. - * @return true|WP_Error True on success, or WP_Error object on failure. + * @return WP_REST_Response|WP_Error True on success, or WP_Error object on failure. */ public function delete_item( $request ) { $menu_item = $this->get_nav_menu_item( $request['id'] ); @@ -391,6 +390,7 @@ protected function prepare_item_for_database( $request ) { 'menu-item-object' => $menu_item_obj->object, 'menu-item-parent-id' => $menu_item_obj->menu_item_parent, 'menu-item-position' => $position, + 'menu-item-type' => $menu_item_obj->type, 'menu-item-title' => $menu_item_obj->title, 'menu-item-url' => $menu_item_obj->url, 'menu-item-description' => $menu_item_obj->description, @@ -410,7 +410,7 @@ protected function prepare_item_for_database( $request ) { 'menu-item-object-id' => 0, 'menu-item-object' => '', 'menu-item-parent-id' => 0, - 'menu-item-position' => 0, + 'menu-item-position' => 1, 'menu-item-type' => 'custom', 'menu-item-title' => '', 'menu-item-url' => '', @@ -478,13 +478,15 @@ protected function prepare_item_for_database( $request ) { } } + $error = new WP_Error(); + // Check if object id exists before saving. if ( ! $prepared_nav_item['menu-item-object'] ) { // If taxonony, check if term exists. if ( 'taxonomy' === $prepared_nav_item['menu-item-type'] ) { $original = get_term( absint( $prepared_nav_item['menu-item-object-id'] ) ); if ( empty( $original ) || is_wp_error( $original ) ) { - return new WP_Error( 'rest_term_invalid_id', __( 'Invalid term ID.', 'gutenberg' ), array( 'status' => 400 ) ); + $error->add( 'rest_term_invalid_id', __( 'Invalid term ID.', 'gutenberg' ), array( 'status' => 400 ) ); } $prepared_nav_item['menu-item-object'] = get_term_field( 'taxonomy', $original ); @@ -492,7 +494,7 @@ protected function prepare_item_for_database( $request ) { } elseif ( 'post_type' === $prepared_nav_item['menu-item-type'] ) { $original = get_post( absint( $prepared_nav_item['menu-item-object-id'] ) ); if ( empty( $original ) ) { - return new WP_Error( 'rest_post_invalid_id', __( 'Invalid post ID.', 'gutenberg' ), array( 'status' => 400 ) ); + $error->add( 'rest_post_invalid_id', __( 'Invalid post ID.', 'gutenberg' ), array( 'status' => 400 ) ); } $prepared_nav_item['menu-item-object'] = get_post_type( $original ); } @@ -503,70 +505,36 @@ protected function prepare_item_for_database( $request ) { $post_type = ( $prepared_nav_item['menu-item-object'] ) ? $prepared_nav_item['menu-item-object'] : false; $original = get_post_type_object( $post_type ); if ( empty( $original ) ) { - return new WP_Error( 'rest_post_invalid_type', __( 'Invalid post type.', 'gutenberg' ), array( 'status' => 400 ) ); + $error->add( 'rest_post_invalid_type', __( 'Invalid post type.', 'gutenberg' ), array( 'status' => 400 ) ); } } // Check if menu item is type custom, then title and url are required. if ( 'custom' === $prepared_nav_item['menu-item-type'] ) { if ( '' === $prepared_nav_item['menu-item-title'] ) { - return new WP_Error( 'rest_title_required', __( 'Title required if menu item of type custom.', 'gutenberg' ), array( 'status' => 400 ) ); + $error->add( 'rest_title_required', __( 'Title required if menu item of type custom.', 'gutenberg' ), array( 'status' => 400 ) ); } if ( empty( $prepared_nav_item['menu-item-url'] ) ) { - return new WP_Error( 'rest_url_required', __( 'URL required if menu item of type custom.', 'gutenberg' ), array( 'status' => 400 ) ); + $error->add( 'rest_url_required', __( 'URL required if menu item of type custom.', 'gutenberg' ), array( 'status' => 400 ) ); } } // If menu item is type block, then content is required. - if ( 'block' === $prepared_nav_item['menu-item-type'] ) { - if ( empty( $prepared_nav_item['menu-item-content'] ) ) { - return new WP_Error( 'rest_content_required', __( 'Content required if menu item of type block.', 'gutenberg' ), array( 'status' => 400 ) ); - } + if ( 'block' === $prepared_nav_item['menu-item-type'] && empty( $prepared_nav_item['menu-item-content'] ) ) { + $error->add( 'rest_content_required', __( 'Content required if menu item of type block.', 'gutenberg' ), array( 'status' => 400 ) ); } - // If menu id is set, valid the value of menu item position and parent id. - if ( ! empty( $prepared_nav_item['menu-id'] ) ) { - // Check if nav menu is valid. - if ( ! is_nav_menu( $prepared_nav_item['menu-id'] ) ) { - return new WP_Error( 'invalid_menu_id', __( 'Invalid menu ID.', 'gutenberg' ), array( 'status' => 400 ) ); - } - - // If menu item position is set to 0, insert as the last item in the existing menu. - $menu_items = wp_get_nav_menu_items( $prepared_nav_item['menu-id'], array( 'post_status' => 'publish,draft' ) ); - if ( 0 === (int) $prepared_nav_item['menu-item-position'] ) { - if ( $menu_items ) { - $last_item = $menu_items[ count( $menu_items ) - 1 ]; - if ( $last_item && isset( $last_item->menu_order ) ) { - $prepared_nav_item['menu-item-position'] = $last_item->menu_order + 1; - } else { - $prepared_nav_item['menu-item-position'] = count( $menu_items ) - 1; - } - array_push( $menu_items, $last_item ); - } else { - $prepared_nav_item['menu-item-position'] = 1; - } - } - - // Check if existing menu position is already in use by another menu item. - $menu_item_ids = array(); - foreach ( $menu_items as $menu_item ) { - $menu_item_ids[] = $menu_item->ID; - if ( $menu_item->ID !== (int) $menu_item_db_id ) { - if ( (int) $prepared_nav_item['menu-item-position'] === (int) $menu_item->menu_order ) { - return new WP_Error( 'invalid_menu_order', __( 'Invalid menu position.', 'gutenberg' ), array( 'status' => 400 ) ); - } - } + // Valid url. + if ( '' !== $prepared_nav_item['menu-item-url'] ) { + $prepared_nav_item['menu-item-url'] = esc_url_raw( $prepared_nav_item['menu-item-url'] ); + if ( '' === $prepared_nav_item['menu-item-url'] ) { + // Fail sanitization if URL is invalid. + $error->add( 'invalid_url', __( 'Invalid URL.', 'gutenberg' ), array( 'status' => 400 ) ); } + } - // Check if valid parent id is valid nav menu item in menu. - if ( $prepared_nav_item['menu-item-parent-id'] ) { - if ( ! is_nav_menu_item( $prepared_nav_item['menu-item-parent-id'] ) ) { - return new WP_Error( 'invalid_menu_item_parent', __( 'Invalid menu item parent.', 'gutenberg' ), array( 'status' => 400 ) ); - } - if ( ! $menu_item_ids || ! in_array( $prepared_nav_item['menu-item-parent-id'], $menu_item_ids, true ) ) { - return new WP_Error( 'invalid_item_parent', __( 'Invalid menu item parent.', 'gutenberg' ), array( 'status' => 400 ) ); - } - } + if ( $error->has_errors() ) { + return $error; } foreach ( array( 'menu-item-object-id', 'menu-item-parent-id' ) as $key ) { @@ -587,25 +555,6 @@ protected function prepare_item_for_database( $request ) { $prepared_nav_item[ $key ] = implode( ' ', array_map( 'sanitize_html_class', $value ) ); } - // Apply the same filters as when calling wp_insert_post(). - - /** This filter is documented in wp-includes/post.php */ - $prepared_nav_item['menu-item-title'] = wp_unslash( apply_filters( 'title_save_pre', wp_slash( $prepared_nav_item['menu-item-title'] ) ) ); - - /** This filter is documented in wp-includes/post.php */ - $prepared_nav_item['menu-item-attr-title'] = wp_unslash( apply_filters( 'excerpt_save_pre', wp_slash( $prepared_nav_item['menu-item-attr-title'] ) ) ); - - /** This filter is documented in wp-includes/post.php */ - $prepared_nav_item['menu-item-description'] = wp_unslash( apply_filters( 'content_save_pre', wp_slash( $prepared_nav_item['menu-item-description'] ) ) ); - - // Valid url. - if ( '' !== $prepared_nav_item['menu-item-url'] ) { - $prepared_nav_item['menu-item-url'] = esc_url_raw( $prepared_nav_item['menu-item-url'] ); - if ( '' === $prepared_nav_item['menu-item-url'] ) { - // Fail sanitization if URL is invalid. - return new WP_Error( 'invalid_url', __( 'Invalid URL.', 'gutenberg' ), array( 'status' => 400 ) ); - } - } // Only draft / publish are valid post status for menu items. if ( 'publish' !== $prepared_nav_item['menu-item-status'] ) { $prepared_nav_item['menu-item-status'] = 'draft'; @@ -639,11 +588,17 @@ public function prepare_item_for_response( $post, $request ) { // Base fields for every post. $menu_item = wp_setup_nav_menu_item( $post ); $data = array(); - if ( in_array( 'id', $fields, true ) ) { + if ( rest_is_field_included( 'id', $fields ) ) { $data['id'] = $menu_item->ID; } - if ( in_array( 'title', $fields, true ) ) { + if ( rest_is_field_included( 'title', $fields ) ) { + $data['title'] = array(); + } + if ( rest_is_field_included( 'title.raw', $fields ) ) { + $data['title']['raw'] = $menu_item->title; + } + if ( rest_is_field_included( 'title.rendered', $fields ) ) { add_filter( 'protected_title_format', array( $this, 'protected_title_format' ) ); /** This filter is documented in wp-includes/post-template.php */ @@ -652,47 +607,44 @@ public function prepare_item_for_response( $post, $request ) { /** This filter is documented in wp-includes/class-walker-nav-menu.php */ $title = apply_filters( 'nav_menu_item_title', $title, $menu_item, null, 0 ); - $data['title'] = array( - 'raw' => $menu_item->title, - 'rendered' => $title, - ); + $data['title']['rendered'] = $title; remove_filter( 'protected_title_format', array( $this, 'protected_title_format' ) ); } - if ( in_array( 'status', $fields, true ) ) { + if ( rest_is_field_included( 'status', $fields ) ) { $data['status'] = $menu_item->post_status; } - if ( in_array( 'url', $fields, true ) ) { + if ( rest_is_field_included( 'url', $fields ) ) { $data['url'] = $menu_item->url; } - if ( in_array( 'attr_title', $fields, true ) ) { + if ( rest_is_field_included( 'attr_title', $fields ) ) { // Same as post_excerpt. $data['attr_title'] = $menu_item->attr_title; } - if ( in_array( 'description', $fields, true ) ) { + if ( rest_is_field_included( 'description', $fields ) ) { // Same as post_content. $data['description'] = $menu_item->description; } - if ( in_array( 'type', $fields, true ) ) { + if ( rest_is_field_included( 'type', $fields ) ) { // Using 'item_type' since 'type' already exists. $data['type'] = $menu_item->type; } - if ( in_array( 'type_label', $fields, true ) ) { + if ( rest_is_field_included( 'type_label', $fields ) ) { // Using 'item_type_label' to match up with 'item_type' - IS READ ONLY! $data['type_label'] = $menu_item->type_label; } - if ( in_array( 'object', $fields, true ) ) { + if ( rest_is_field_included( 'object', $fields ) ) { $data['object'] = $menu_item->object; } - if ( in_array( 'object_id', $fields, true ) ) { + if ( rest_is_field_included( 'object_id', $fields ) ) { // Usually is a string, but lets expose as an integer. $data['object_id'] = absint( $menu_item->object_id ); } @@ -711,33 +663,37 @@ public function prepare_item_for_response( $post, $request ) { $data['content']['block_version'] = block_version( $menu_item->content ); } - if ( in_array( 'parent', $fields, true ) ) { + if ( rest_is_field_included( 'parent', $fields ) ) { // Same as post_parent, expose as integer. - $data['parent'] = absint( $menu_item->menu_item_parent ); + $data['parent'] = (int) $menu_item->menu_item_parent; } - if ( in_array( 'menu_order', $fields, true ) ) { + if ( rest_is_field_included( 'menu_order', $fields ) ) { // Same as post_parent, expose as integer. - $data['menu_order'] = absint( $menu_item->menu_order ); + $data['menu_order'] = (int) $menu_item->menu_order; } - if ( in_array( 'menu_id', $fields, true ) ) { + if ( rest_is_field_included( 'menu_id', $fields ) ) { $data['menu_id'] = $this->get_menu_id( $menu_item->ID ); } - if ( in_array( 'target', $fields, true ) ) { + if ( rest_is_field_included( 'target', $fields ) ) { $data['target'] = $menu_item->target; } - if ( in_array( 'classes', $fields, true ) ) { + if ( rest_is_field_included( 'classes', $fields ) ) { $data['classes'] = (array) $menu_item->classes; } - if ( in_array( 'xfn', $fields, true ) ) { + if ( rest_is_field_included( 'xfn', $fields ) ) { $data['xfn'] = array_map( 'sanitize_html_class', explode( ' ', $menu_item->xfn ) ); } - if ( in_array( 'meta', $fields, true ) ) { + if ( rest_is_field_included( 'invalid', $fields ) ) { + $data['invalid'] = (bool) $menu_item->_invalid; + } + + if ( rest_is_field_included( 'meta', $fields ) ) { $data['meta'] = $this->meta->get_value( $menu_item->ID, $request ); } @@ -746,9 +702,14 @@ public function prepare_item_for_response( $post, $request ) { foreach ( $taxonomies as $taxonomy ) { $base = ! empty( $taxonomy->rest_base ) ? $taxonomy->rest_base : $taxonomy->name; - if ( in_array( $base, $fields, true ) ) { - $terms = get_the_terms( $post, $taxonomy->name ); - $data[ $base ] = $terms ? array_values( wp_list_pluck( $terms, 'term_id' ) ) : array(); + if ( rest_is_field_included( $base, $fields ) ) { + $terms = get_the_terms( $post, $taxonomy->name ); + $term_ids = $terms ? array_values( wp_list_pluck( $terms, 'term_id' ) ) : array(); + if ( 'nav_menu' === $taxonomy->name ) { + $data[ $base ] = $term_ids ? array_shift( $term_ids ) : 0; + } else { + $data[ $base ] = $term_ids; + } } } @@ -793,29 +754,27 @@ public function prepare_item_for_response( $post, $request ) { */ protected function prepare_links( $menu_item ) { $links = parent::prepare_links( $menu_item ); - - if ( 'post_type' === $menu_item->type && ! empty( $menu_item->object_id ) ) { - $post_type_object = get_post_type_object( $menu_item->object ); - if ( $post_type_object->show_in_rest ) { - $rest_base = ! empty( $post_type_object->rest_base ) ? $post_type_object->rest_base : $post_type_object->name; - $url = rest_url( sprintf( 'wp/v2/%s/%d', $rest_base, $menu_item->object_id ) ); - $links['https://api.w.org/object'][] = array( - 'href' => $url, - 'post_type' => $menu_item->type, - 'embeddable' => true, - ); - } - } elseif ( 'taxonomy' === $menu_item->type && ! empty( $menu_item->object_id ) ) { - $taxonomy_object = get_taxonomy( $menu_item->object ); - if ( $taxonomy_object->show_in_rest ) { - $rest_base = ! empty( $taxonomy_object->rest_base ) ? $taxonomy_object->rest_base : $taxonomy_object->name; - $url = rest_url( sprintf( 'wp/v2/%s/%d', $rest_base, $menu_item->object_id ) ); - $links['https://api.w.org/object'][] = array( - 'href' => $url, - 'taxonomy' => $menu_item->type, - 'embeddable' => true, - ); - } + if ( empty( $menu_item->object_id ) ) { + return $links; + } + + $path = ''; + $type = ''; + $key = $menu_item->type; + if ( 'post_type' === $menu_item->type ) { + $path = rest_get_route_for_post( $menu_item->object_id ); + $type = get_post_type( $menu_item->object_id ); + } elseif ( 'taxonomy' === $menu_item->type ) { + $path = rest_get_route_for_term( $menu_item->object_id ); + $type = get_term_field( 'taxonomy', $menu_item->object_id ); + } + + if ( $path && $type ) { + $links['https://api.w.org/menu-item-object'][] = array( + 'href' => rest_url( $path ), + $key => $type, + 'embeddable' => true, + ); } return $links; @@ -959,10 +918,11 @@ public function get_item_schema() { 'description' => __( 'The DB ID of the nav_menu_item that is this item\'s menu parent, if any, otherwise 0.', 'gutenberg' ), 'context' => array( 'view', 'edit', 'embed' ), 'type' => 'integer', - 'minimum' => 0, - 'default' => 0, + 'minimum' => 1, + 'default' => 1, ); - $schema['properties']['object'] = array( + + $schema['properties']['object'] = array( 'description' => __( 'The type of object originally represented, such as "category," "post", or "attachment."', 'gutenberg' ), 'context' => array( 'view', 'edit', 'embed' ), 'type' => 'string', @@ -1043,7 +1003,7 @@ public function get_item_schema() { ), ); - $schema['properties']['_invalid'] = array( + $schema['properties']['invalid'] = array( 'description' => __( 'Whether the menu item represents an object that no longer exists.', 'gutenberg' ), 'context' => array( 'view', 'edit', 'embed' ), 'type' => 'boolean', diff --git a/lib/class-wp-rest-menu-locations-controller.php b/lib/compat/wordpress-5.9/class-wp-rest-menu-locations-controller.php similarity index 91% rename from lib/class-wp-rest-menu-locations-controller.php rename to lib/compat/wordpress-5.9/class-wp-rest-menu-locations-controller.php index d5df276c03c6a..8fc9f699aeec9 100644 --- a/lib/class-wp-rest-menu-locations-controller.php +++ b/lib/compat/wordpress-5.9/class-wp-rest-menu-locations-controller.php @@ -17,7 +17,7 @@ class WP_REST_Menu_Locations_Controller extends WP_REST_Controller { * Constructor. */ public function __construct() { - $this->namespace = '__experimental'; + $this->namespace = 'wp/v2'; $this->rest_base = 'menu-locations'; } @@ -152,11 +152,21 @@ public function get_item( $request ) { public function prepare_item_for_response( $location, $request ) { $locations = get_nav_menu_locations(); $menu = ( isset( $locations[ $location->name ] ) ) ? $locations[ $location->name ] : 0; - $data = array( - 'name' => $location->name, - 'description' => $location->description, - 'menu' => $menu, - ); + + $fields = $this->get_fields_for_response( $request ); + $data = array(); + + if ( rest_is_field_included( 'name', $fields ) ) { + $data['name'] = $location->name; + } + + if ( rest_is_field_included( 'description', $fields ) ) { + $data['description'] = $location->description; + } + + if ( rest_is_field_included( 'menu', $fields ) ) { + $data['menu'] = (int) $menu; + } $context = ! empty( $request['context'] ) ? $request['context'] : 'view'; $data = $this->add_additional_fields_to_object( $data, $request ); @@ -250,8 +260,10 @@ protected function prepare_links( $location ) { if ( $menu ) { $taxonomy_object = get_taxonomy( 'nav_menu' ); if ( $taxonomy_object->show_in_rest ) { - $rest_base = ! empty( $taxonomy_object->rest_base ) ? $taxonomy_object->rest_base : $taxonomy_object->name; - $url = rest_url( sprintf( '__experimental/%s/%d', $rest_base, $menu ) ); + $rest_base = ! empty( $taxonomy_object->rest_base ) ? $taxonomy_object->rest_base : $taxonomy_object->name; + $namespace = ! empty( $taxonomy_object->rest_namespace ) ? $taxonomy_object->rest_namespace : '__experimental'; + $url = rest_url( sprintf( '%s/%s/%d', $namespace, $rest_base, $menu ) ); + $links['https://api.w.org/menu'][] = array( 'href' => $url, 'embeddable' => true, diff --git a/lib/class-wp-rest-menus-controller.php b/lib/compat/wordpress-5.9/class-wp-rest-menus-controller.php similarity index 86% rename from lib/class-wp-rest-menus-controller.php rename to lib/compat/wordpress-5.9/class-wp-rest-menus-controller.php index 84fc22952aa28..3e839c2c958af 100644 --- a/lib/class-wp-rest-menus-controller.php +++ b/lib/compat/wordpress-5.9/class-wp-rest-menus-controller.php @@ -12,16 +12,87 @@ * @see WP_REST_Controller */ class WP_REST_Menus_Controller extends WP_REST_Terms_Controller { + + /** + * Whether the controller supports batching. + * + * @since 5.9.0 + * @var array + */ + protected $allow_batch = array( 'v1' => true ); + /** - * Constructor. + * Overrides the route registration to support "allow_batch". + * + * @since 11.5.0 * - * @param string $taxonomy Taxonomy key. + * @see register_rest_route() */ - public function __construct( $taxonomy ) { - parent::__construct( $taxonomy ); - $this->namespace = '__experimental'; + public function register_routes() { + register_rest_route( + $this->namespace, + '/' . $this->rest_base, + array( + array( + 'methods' => WP_REST_Server::READABLE, + 'callback' => array( $this, 'get_items' ), + 'permission_callback' => array( $this, 'get_items_permissions_check' ), + 'args' => $this->get_collection_params(), + ), + array( + 'methods' => WP_REST_Server::CREATABLE, + 'callback' => array( $this, 'create_item' ), + 'permission_callback' => array( $this, 'create_item_permissions_check' ), + 'args' => $this->get_endpoint_args_for_item_schema( WP_REST_Server::CREATABLE ), + ), + 'allow_batch' => $this->allow_batch, + 'schema' => array( $this, 'get_public_item_schema' ), + ) + ); + + register_rest_route( + $this->namespace, + '/' . $this->rest_base . '/(?P[\d]+)', + array( + 'args' => array( + 'id' => array( + 'description' => __( 'Unique identifier for the term.', 'default' ), + 'type' => 'integer', + ), + ), + array( + 'methods' => WP_REST_Server::READABLE, + 'callback' => array( $this, 'get_item' ), + 'permission_callback' => array( $this, 'get_item_permissions_check' ), + 'args' => array( + 'context' => $this->get_context_param( array( 'default' => 'view' ) ), + ), + ), + array( + 'methods' => WP_REST_Server::EDITABLE, + 'callback' => array( $this, 'update_item' ), + 'permission_callback' => array( $this, 'update_item_permissions_check' ), + 'args' => $this->get_endpoint_args_for_item_schema( WP_REST_Server::EDITABLE ), + ), + array( + 'methods' => WP_REST_Server::DELETABLE, + 'callback' => array( $this, 'delete_item' ), + 'permission_callback' => array( $this, 'delete_item_permissions_check' ), + 'args' => array( + 'force' => array( + 'type' => 'boolean', + 'default' => false, + 'description' => __( 'Required to be true, as terms do not support trashing.', 'default' ), + ), + ), + ), + 'allow_batch' => $this->allow_batch, + 'schema' => array( $this, 'get_public_item_schema' ), + ) + ); } + /** * Checks if a request has access to read terms in the specified taxonomy. * @@ -189,11 +260,11 @@ public function prepare_item_for_response( $term, $request ) { $fields = $this->get_fields_for_response( $request ); $data = $response->get_data(); - if ( in_array( 'locations', $fields, true ) ) { + if ( rest_is_field_included( 'locations', $fields ) ) { $data['locations'] = $this->get_menu_locations( $nav_menu->term_id ); } - if ( in_array( 'auto_add', $fields, true ) ) { + if ( rest_is_field_included( 'auto_add', $fields ) ) { $auto_add = $this->get_menu_auto_add( $nav_menu->term_id ); $data['auto_add'] = $auto_add; } @@ -222,7 +293,7 @@ protected function prepare_links( $term ) { $locations = $this->get_menu_locations( $term->term_id ); $rest_base = 'menu-locations'; foreach ( $locations as $location ) { - $url = rest_url( sprintf( '__experimental/%s/%s', $rest_base, $location ) ); + $url = rest_url( sprintf( 'wp/v2/%s/%s', $rest_base, $location ) ); $links['https://api.w.org/menu-location'][] = array( 'href' => $url, 'embeddable' => true, @@ -280,16 +351,18 @@ public function create_item( $request ) { * If we're going to inform the client that the term already exists, * give them the identifier for future use. */ - $term_id = $term->get_error_data( 'term_exists' ); - if ( $term_id ) { - $existing_term = get_term( $term_id, $this->taxonomy ); - $term->add_data( $existing_term->term_id, 'term_exists' ); + + if ( in_array( 'menu_exists', $term->get_error_codes(), true ) ) { + $existing_term = get_term_by( 'name', $prepared_term['menu-name'], $this->taxonomy ); + $term->add_data( $existing_term->term_id, 'menu_exists' ); $term->add_data( array( 'status' => 400, - 'term_id' => $term_id, + 'term_id' => $existing_term->term_id, ) ); + } else { + $term->add_data( array( 'status' => 400 ) ); } return $term; diff --git a/lib/class-wp-rest-url-details-controller.php b/lib/compat/wordpress-5.9/class-wp-rest-url-details-controller.php similarity index 97% rename from lib/class-wp-rest-url-details-controller.php rename to lib/compat/wordpress-5.9/class-wp-rest-url-details-controller.php index f73a9265ff815..b9ff5982b4ecd 100644 --- a/lib/class-wp-rest-url-details-controller.php +++ b/lib/compat/wordpress-5.9/class-wp-rest-url-details-controller.php @@ -19,7 +19,7 @@ class WP_REST_URL_Details_Controller extends WP_REST_Controller { * Constructs the controller. */ public function __construct() { - $this->namespace = '__experimental'; + $this->namespace = 'wp-block-editor/v1'; $this->rest_base = 'url-details'; } @@ -310,7 +310,7 @@ private function get_description( $meta_elements ) { return ''; } - $description = $this->get_metadata_from_meta_element( $meta_elements, 'name', '\bdescription\b' ); + $description = $this->get_metadata_from_meta_element( $meta_elements, 'name', '(?:description|og:description)' ); // Bail out if description not found. if ( '' === $description ) { @@ -383,7 +383,7 @@ private function build_cache_key_for_url( $url ) { * @return mixed The value from the cache. */ private function get_cache( $key ) { - return get_transient( $key ); + return get_site_transient( $key ); } /** @@ -406,14 +406,14 @@ private function set_cache( $key, $data = '' ) { */ $cache_expiration = apply_filters( 'rest_url_details_cache_expiration', $ttl ); - return set_transient( $key, $data, $cache_expiration ); + return set_site_transient( $key, $data, $cache_expiration ); } /** * Retrieves the `` section. * * @param string $html The string of HTML to parse. - * @return string The `..` section on succes, or original HTML. + * @return string The `..` section on success, or original HTML. */ private function get_document_head( $html ) { $head_html = $html; @@ -481,7 +481,7 @@ private function get_meta_with_content_elements( $html ) { $pattern = '# symbol. */ '[^>]*' . @@ -499,7 +499,7 @@ private function get_meta_with_content_elements( $html ) { 'content=(["\']??)(.*)\1' . /* - * Alows for additional attributes after the content attribute. + * Allows for additional attributes after the content attribute. * Searches for anything other than > symbol. */ '[^>]*' . diff --git a/lib/compat/wordpress-5.9/class-wp-theme-json-5-9.php b/lib/compat/wordpress-5.9/class-wp-theme-json-5-9.php new file mode 100644 index 0000000000000..19b8611df0a4d --- /dev/null +++ b/lib/compat/wordpress-5.9/class-wp-theme-json-5-9.php @@ -0,0 +1,1944 @@ + 'unique-name-within-the-set', + * 'name' => 'Name for the UI', + * => 'value' + * ), + * ) + * ``` + * + * This contains the necessary metadata to process them: + * + * - path => where to find the preset within the settings section + * - override => whether a theme preset with the same slug as a default preset + * can override it + * - use_default_names => whether to use the default names + * - value_key => the key that represents the value + * - value_func => optionally, instead of value_key, a function to generate + * the value that takes a preset as an argument + * (either value_key or value_func should be present) + * - css_vars => template string to use in generating the CSS Custom Property. + * Example output: "--wp--preset--duotone--blue: " will generate as many CSS Custom Properties as presets defined + * substituting the $slug for the slug's value for each preset value. + * - classes => array containing a structure with the classes to + * generate for the presets, where for each array item + * the key is the class name and the value the property name. + * The "$slug" substring will be replaced by the slug of each preset. + * For example: + * 'classes' => array( + * '.has-$slug-color' => 'color', + * '.has-$slug-background-color' => 'background-color', + * '.has-$slug-border-color' => 'border-color', + * ) + * - properties => array of CSS properties to be used by kses to + * validate the content of each preset + * by means of the remove_insecure_properties method. + */ + const PRESETS_METADATA = array( + array( + 'path' => array( 'color', 'palette' ), + 'override' => array( 'color', 'defaultPalette' ), + 'use_default_names' => false, + 'value_key' => 'color', + 'css_vars' => '--wp--preset--color--$slug', + 'classes' => array( + '.has-$slug-color' => 'color', + '.has-$slug-background-color' => 'background-color', + '.has-$slug-border-color' => 'border-color', + ), + 'properties' => array( 'color', 'background-color', 'border-color' ), + ), + array( + 'path' => array( 'color', 'gradients' ), + 'override' => array( 'color', 'defaultGradients' ), + 'use_default_names' => false, + 'value_key' => 'gradient', + 'css_vars' => '--wp--preset--gradient--$slug', + 'classes' => array( '.has-$slug-gradient-background' => 'background' ), + 'properties' => array( 'background' ), + ), + array( + 'path' => array( 'color', 'duotone' ), + 'override' => true, + 'use_default_names' => false, + 'value_func' => 'gutenberg_get_duotone_filter_property', + 'css_vars' => '--wp--preset--duotone--$slug', + 'classes' => array(), + 'properties' => array( 'filter' ), + ), + array( + 'path' => array( 'typography', 'fontSizes' ), + 'override' => true, + 'use_default_names' => true, + 'value_key' => 'size', + 'css_vars' => '--wp--preset--font-size--$slug', + 'classes' => array( '.has-$slug-font-size' => 'font-size' ), + 'properties' => array( 'font-size' ), + ), + array( + 'path' => array( 'typography', 'fontFamilies' ), + 'override' => true, + 'use_default_names' => false, + 'value_key' => 'fontFamily', + 'css_vars' => '--wp--preset--font-family--$slug', + 'classes' => array( '.has-$slug-font-family' => 'font-family' ), + 'properties' => array( 'font-family' ), + ), + ); + + /** + * Metadata for style properties. + * + * Each element is a direct mapping from the CSS property name to the + * path to the value in theme.json & block attributes. + */ + const PROPERTIES_METADATA = array( + 'background' => array( 'color', 'gradient' ), + 'background-color' => array( 'color', 'background' ), + 'border-radius' => array( 'border', 'radius' ), + 'border-top-left-radius' => array( 'border', 'radius', 'topLeft' ), + 'border-top-right-radius' => array( 'border', 'radius', 'topRight' ), + 'border-bottom-left-radius' => array( 'border', 'radius', 'bottomLeft' ), + 'border-bottom-right-radius' => array( 'border', 'radius', 'bottomRight' ), + 'border-color' => array( 'border', 'color' ), + 'border-width' => array( 'border', 'width' ), + 'border-style' => array( 'border', 'style' ), + 'color' => array( 'color', 'text' ), + 'font-family' => array( 'typography', 'fontFamily' ), + 'font-size' => array( 'typography', 'fontSize' ), + 'font-style' => array( 'typography', 'fontStyle' ), + 'font-weight' => array( 'typography', 'fontWeight' ), + 'letter-spacing' => array( 'typography', 'letterSpacing' ), + 'line-height' => array( 'typography', 'lineHeight' ), + 'margin' => array( 'spacing', 'margin' ), + 'margin-top' => array( 'spacing', 'margin', 'top' ), + 'margin-right' => array( 'spacing', 'margin', 'right' ), + 'margin-bottom' => array( 'spacing', 'margin', 'bottom' ), + 'margin-left' => array( 'spacing', 'margin', 'left' ), + 'padding' => array( 'spacing', 'padding' ), + 'padding-top' => array( 'spacing', 'padding', 'top' ), + 'padding-right' => array( 'spacing', 'padding', 'right' ), + 'padding-bottom' => array( 'spacing', 'padding', 'bottom' ), + 'padding-left' => array( 'spacing', 'padding', 'left' ), + '--wp--style--block-gap' => array( 'spacing', 'blockGap' ), + 'text-decoration' => array( 'typography', 'textDecoration' ), + 'text-transform' => array( 'typography', 'textTransform' ), + 'filter' => array( 'filter', 'duotone' ), + ); + + /** + * Protected style properties. + * + * These style properties are only rendered if a setting enables it + * via a value other than `null`. + * + * Each element maps the style property to the corresponding theme.json + * setting key. + */ + const PROTECTED_PROPERTIES = array( + 'spacing.blockGap' => array( 'spacing', 'blockGap' ), + ); + + /** + * The top-level keys a theme.json can have. + * + * @var string[] + */ + const VALID_TOP_LEVEL_KEYS = array( + 'customTemplates', + 'settings', + 'styles', + 'templateParts', + 'version', + ); + + /** + * The valid properties under the settings key. + * + * @var array + */ + const VALID_SETTINGS = array( + 'appearanceTools' => null, + 'border' => array( + 'color' => null, + 'radius' => null, + 'style' => null, + 'width' => null, + ), + 'color' => array( + 'background' => null, + 'custom' => null, + 'customDuotone' => null, + 'customGradient' => null, + 'defaultGradients' => null, + 'defaultPalette' => null, + 'duotone' => null, + 'gradients' => null, + 'link' => null, + 'palette' => null, + 'text' => null, + ), + 'custom' => null, + 'layout' => array( + 'contentSize' => null, + 'wideSize' => null, + ), + 'spacing' => array( + 'blockGap' => null, + 'margin' => null, + 'padding' => null, + 'units' => null, + ), + 'typography' => array( + 'customFontSize' => null, + 'dropCap' => null, + 'fontFamilies' => null, + 'fontSizes' => null, + 'fontStyle' => null, + 'fontWeight' => null, + 'letterSpacing' => null, + 'lineHeight' => null, + 'textDecoration' => null, + 'textTransform' => null, + ), + ); + + /** + * The valid properties under the styles key. + * + * @var array + */ + const VALID_STYLES = array( + 'border' => array( + 'color' => null, + 'radius' => null, + 'style' => null, + 'width' => null, + ), + 'color' => array( + 'background' => null, + 'gradient' => null, + 'text' => null, + ), + 'filter' => array( + 'duotone' => null, + ), + 'spacing' => array( + 'margin' => null, + 'padding' => null, + 'blockGap' => 'top', + ), + 'typography' => array( + 'fontFamily' => null, + 'fontSize' => null, + 'fontStyle' => null, + 'fontWeight' => null, + 'letterSpacing' => null, + 'lineHeight' => null, + 'textDecoration' => null, + 'textTransform' => null, + ), + ); + + /** + * The valid elements that can be found under styles. + * + * @var string[] + */ + const ELEMENTS = array( + 'link' => 'a', + 'h1' => 'h1', + 'h2' => 'h2', + 'h3' => 'h3', + 'h4' => 'h4', + 'h5' => 'h5', + 'h6' => 'h6', + ); + + /** + * The latest version of the schema in use. + * + * @var int + */ + const LATEST_SCHEMA = 2; + + /** + * Constructor. + * + * @param array $theme_json A structure that follows the theme.json schema. + * @param string $origin Optional. What source of data this object represents. + * One of 'default', 'theme', or 'custom'. Default 'theme'. + */ + public function __construct( $theme_json = array(), $origin = 'theme' ) { + if ( ! in_array( $origin, static::VALID_ORIGINS, true ) ) { + $origin = 'theme'; + } + + $this->theme_json = WP_Theme_JSON_Schema_Gutenberg::migrate( $theme_json ); + $valid_block_names = array_keys( static::get_blocks_metadata() ); + $valid_element_names = array_keys( static::ELEMENTS ); + $theme_json = static::sanitize( $this->theme_json, $valid_block_names, $valid_element_names ); + $this->theme_json = static::maybe_opt_in_into_settings( $theme_json ); + + // Internally, presets are keyed by origin. + $nodes = static::get_setting_nodes( $this->theme_json ); + foreach ( $nodes as $node ) { + foreach ( static::PRESETS_METADATA as $preset_metadata ) { + $path = array_merge( $node['path'], $preset_metadata['path'] ); + $preset = _wp_array_get( $this->theme_json, $path, null ); + if ( null !== $preset ) { + // If the preset is not already keyed by origin. + if ( isset( $preset[0] ) || empty( $preset ) ) { + _wp_array_set( $this->theme_json, $path, array( $origin => $preset ) ); + } + } + } + } + } + + /** + * Enables some opt-in settings if theme declared support. + * + * @param array $theme_json A theme.json structure to modify. + * @return array The modified theme.json structure. + */ + protected static function maybe_opt_in_into_settings( $theme_json ) { + $new_theme_json = $theme_json; + + if ( + isset( $new_theme_json['settings']['appearanceTools'] ) && + true === $new_theme_json['settings']['appearanceTools'] + ) { + static::do_opt_in_into_settings( $new_theme_json['settings'] ); + } + + if ( isset( $new_theme_json['settings']['blocks'] ) && is_array( $new_theme_json['settings']['blocks'] ) ) { + foreach ( $new_theme_json['settings']['blocks'] as &$block ) { + if ( isset( $block['appearanceTools'] ) && ( true === $block['appearanceTools'] ) ) { + static::do_opt_in_into_settings( $block ); + } + } + } + + return $new_theme_json; + } + + /** + * Enables some settings. + * + * @param array $context The context to which the settings belong. + */ + protected static function do_opt_in_into_settings( &$context ) { + $to_opt_in = array( + array( 'border', 'color' ), + array( 'border', 'radius' ), + array( 'border', 'style' ), + array( 'border', 'width' ), + array( 'color', 'link' ), + array( 'spacing', 'blockGap' ), + array( 'spacing', 'margin' ), + array( 'spacing', 'padding' ), + array( 'typography', 'lineHeight' ), + ); + + foreach ( $to_opt_in as $path ) { + // Use "unset prop" as a marker instead of "null" because + // "null" can be a valid value for some props (e.g. blockGap). + if ( 'unset prop' === _wp_array_get( $context, $path, 'unset prop' ) ) { + _wp_array_set( $context, $path, true ); + } + } + + unset( $context['appearanceTools'] ); + } + + /** + * Sanitizes the input according to the schemas. + * + * @param array $input Structure to sanitize. + * @param array $valid_block_names List of valid block names. + * @param array $valid_element_names List of valid element names. + * @return array The sanitized output. + */ + protected static function sanitize( $input, $valid_block_names, $valid_element_names ) { + $output = array(); + + if ( ! is_array( $input ) ) { + return $output; + } + + $output = array_intersect_key( $input, array_flip( static::VALID_TOP_LEVEL_KEYS ) ); + + // Some styles are only meant to be available at the top-level (e.g.: blockGap), + // hence, the schema for blocks & elements should not have them. + $styles_non_top_level = static::VALID_STYLES; + foreach ( array_keys( $styles_non_top_level ) as $section ) { + foreach ( array_keys( $styles_non_top_level[ $section ] ) as $prop ) { + if ( 'top' === $styles_non_top_level[ $section ][ $prop ] ) { + unset( $styles_non_top_level[ $section ][ $prop ] ); + } + } + } + + // Build the schema based on valid block & element names. + $schema = array(); + $schema_styles_elements = array(); + foreach ( $valid_element_names as $element ) { + $schema_styles_elements[ $element ] = $styles_non_top_level; + } + $schema_styles_blocks = array(); + $schema_settings_blocks = array(); + foreach ( $valid_block_names as $block ) { + $schema_settings_blocks[ $block ] = static::VALID_SETTINGS; + $schema_styles_blocks[ $block ] = $styles_non_top_level; + $schema_styles_blocks[ $block ]['elements'] = $schema_styles_elements; + } + $schema['styles'] = static::VALID_STYLES; + $schema['styles']['blocks'] = $schema_styles_blocks; + $schema['styles']['elements'] = $schema_styles_elements; + $schema['settings'] = static::VALID_SETTINGS; + $schema['settings']['blocks'] = $schema_settings_blocks; + + // Remove anything that's not present in the schema. + foreach ( array( 'styles', 'settings' ) as $subtree ) { + if ( ! isset( $input[ $subtree ] ) ) { + continue; + } + + if ( ! is_array( $input[ $subtree ] ) ) { + unset( $output[ $subtree ] ); + continue; + } + + $result = static::remove_keys_not_in_schema( $input[ $subtree ], $schema[ $subtree ] ); + + if ( empty( $result ) ) { + unset( $output[ $subtree ] ); + } else { + $output[ $subtree ] = $result; + } + } + + return $output; + } + + /** + * Returns the metadata for each block. + * + * Example: + * + * { + * 'core/paragraph': { + * 'selector': 'p', + * 'elements': { + * 'link' => 'link selector', + * 'etc' => 'element selector' + * } + * }, + * 'core/heading': { + * 'selector': 'h1', + * 'elements': {} + * }, + * 'core/image': { + * 'selector': '.wp-block-image', + * 'duotone': 'img', + * 'elements': {} + * } + * } + * + * @return array Block metadata. + */ + protected static function get_blocks_metadata() { + if ( null !== static::$blocks_metadata ) { + return static::$blocks_metadata; + } + + static::$blocks_metadata = array(); + + $registry = WP_Block_Type_Registry::get_instance(); + $blocks = $registry->get_all_registered(); + foreach ( $blocks as $block_name => $block_type ) { + if ( + isset( $block_type->supports['__experimentalSelector'] ) && + is_string( $block_type->supports['__experimentalSelector'] ) + ) { + static::$blocks_metadata[ $block_name ]['selector'] = $block_type->supports['__experimentalSelector']; + } else { + static::$blocks_metadata[ $block_name ]['selector'] = '.wp-block-' . str_replace( '/', '-', str_replace( 'core/', '', $block_name ) ); + } + + if ( + isset( $block_type->supports['color']['__experimentalDuotone'] ) && + is_string( $block_type->supports['color']['__experimentalDuotone'] ) + ) { + static::$blocks_metadata[ $block_name ]['duotone'] = $block_type->supports['color']['__experimentalDuotone']; + } + + // Assign defaults, then overwrite those that the block sets by itself. + // If the block selector is compounded, will append the element to each + // individual block selector. + $block_selectors = explode( ',', static::$blocks_metadata[ $block_name ]['selector'] ); + foreach ( static::ELEMENTS as $el_name => $el_selector ) { + $element_selector = array(); + foreach ( $block_selectors as $selector ) { + if ( $selector === $el_selector ) { + $element_selector = array( $el_selector ); + break; + } + + $element_selector[] = $selector . ' ' . $el_selector; + } + static::$blocks_metadata[ $block_name ]['elements'][ $el_name ] = implode( ',', $element_selector ); + } + } + + return static::$blocks_metadata; + } + + /** + * Given a tree, removes the keys that are not present in the schema. + * + * It is recursive and modifies the input in-place. + * + * @param array $tree Input to process. + * @param array $schema Schema to adhere to. + * @return array Returns the modified $tree. + */ + protected static function remove_keys_not_in_schema( $tree, $schema ) { + $tree = array_intersect_key( $tree, $schema ); + + foreach ( $schema as $key => $data ) { + if ( ! isset( $tree[ $key ] ) ) { + continue; + } + + if ( is_array( $schema[ $key ] ) && is_array( $tree[ $key ] ) ) { + $tree[ $key ] = static::remove_keys_not_in_schema( $tree[ $key ], $schema[ $key ] ); + + if ( empty( $tree[ $key ] ) ) { + unset( $tree[ $key ] ); + } + } elseif ( is_array( $schema[ $key ] ) && ! is_array( $tree[ $key ] ) ) { + unset( $tree[ $key ] ); + } + } + + return $tree; + } + + /** + * Returns the existing settings for each block. + * + * Example: + * + * { + * 'root': { + * 'color': { + * 'custom': true + * } + * }, + * 'core/paragraph': { + * 'spacing': { + * 'customPadding': true + * } + * } + * } + * + * @return array Settings per block. + */ + public function get_settings() { + if ( ! isset( $this->theme_json['settings'] ) ) { + return array(); + } else { + return $this->theme_json['settings']; + } + } + + /** + * Returns the stylesheet that results of processing + * the theme.json structure this object represents. + * + * @param array $types Types of styles to load. Will load all by default. It accepts: + * 'variables': only the CSS Custom Properties for presets & custom ones. + * 'styles': only the styles section in theme.json. + * 'presets': only the classes for the presets. + * @param array $origins A list of origins to include. By default it includes VALID_ORIGINS. + * @return string Stylesheet. + */ + public function get_stylesheet( $types = array( 'variables', 'styles', 'presets' ), $origins = null ) { + if ( null === $origins ) { + $origins = static::VALID_ORIGINS; + } + + if ( is_string( $types ) ) { + // Dispatch error and map old arguments to new ones. + _deprecated_argument( __FUNCTION__, '5.9' ); + if ( 'block_styles' === $types ) { + $types = array( 'styles', 'presets' ); + } elseif ( 'css_variables' === $types ) { + $types = array( 'variables' ); + } else { + $types = array( 'variables', 'styles', 'presets' ); + } + } + + $blocks_metadata = static::get_blocks_metadata(); + $style_nodes = static::get_style_nodes( $this->theme_json, $blocks_metadata ); + $setting_nodes = static::get_setting_nodes( $this->theme_json, $blocks_metadata ); + + $stylesheet = ''; + + if ( in_array( 'variables', $types, true ) ) { + $stylesheet .= $this->get_css_variables( $setting_nodes, $origins ); + } + + if ( in_array( 'styles', $types, true ) ) { + $stylesheet .= $this->get_block_classes( $style_nodes ); + } + + if ( in_array( 'presets', $types, true ) ) { + $stylesheet .= $this->get_preset_classes( $setting_nodes, $origins ); + } + + return $stylesheet; + } + + /** + * Returns the page templates of the current theme. + * + * @return array + */ + public function get_custom_templates() { + $custom_templates = array(); + if ( ! isset( $this->theme_json['customTemplates'] ) || ! is_array( $this->theme_json['customTemplates'] ) ) { + return $custom_templates; + } + + foreach ( $this->theme_json['customTemplates'] as $item ) { + if ( isset( $item['name'] ) ) { + $custom_templates[ $item['name'] ] = array( + 'title' => isset( $item['title'] ) ? $item['title'] : '', + 'postTypes' => isset( $item['postTypes'] ) ? $item['postTypes'] : array( 'page' ), + ); + } + } + return $custom_templates; + } + + /** + * Returns the template part data of current theme. + * + * @return array + */ + public function get_template_parts() { + $template_parts = array(); + if ( ! isset( $this->theme_json['templateParts'] ) || ! is_array( $this->theme_json['templateParts'] ) ) { + return $template_parts; + } + + foreach ( $this->theme_json['templateParts'] as $item ) { + if ( isset( $item['name'] ) ) { + $template_parts[ $item['name'] ] = array( + 'title' => isset( $item['title'] ) ? $item['title'] : '', + 'area' => isset( $item['area'] ) ? $item['area'] : '', + ); + } + } + return $template_parts; + } + + /** + * Converts each style section into a list of rulesets + * containing the block styles to be appended to the stylesheet. + * + * See glossary at https://developer.mozilla.org/en-US/docs/Web/CSS/Syntax + * + * For each section this creates a new ruleset such as: + * + * block-selector { + * style-property-one: value; + * } + * + * @param array $style_nodes Nodes with styles. + * @return string The new stylesheet. + */ + protected function get_block_classes( $style_nodes ) { + $block_rules = ''; + + foreach ( $style_nodes as $metadata ) { + if ( null === $metadata['selector'] ) { + continue; + } + + $node = _wp_array_get( $this->theme_json, $metadata['path'], array() ); + $selector = $metadata['selector']; + $settings = _wp_array_get( $this->theme_json, array( 'settings' ) ); + $declarations = static::compute_style_properties( $node, $settings ); + + // 1. Separate the ones who use the general selector + // and the ones who use the duotone selector. + $declarations_duotone = array(); + foreach ( $declarations as $index => $declaration ) { + if ( 'filter' === $declaration['name'] ) { + unset( $declarations[ $index ] ); + $declarations_duotone[] = $declaration; + } + } + + /* + * Reset default browser margin on the root body element. + * This is set on the root selector **before** generating the ruleset + * from the `theme.json`. This is to ensure that if the `theme.json` declares + * `margin` in its `spacing` declaration for the `body` element then these + * user-generated values take precedence in the CSS cascade. + * @link https://github.com/WordPress/gutenberg/issues/36147. + */ + if ( static::ROOT_BLOCK_SELECTOR === $selector ) { + $block_rules .= 'body { margin: 0; }'; + } + + // 2. Generate the rules that use the general selector. + $block_rules .= static::to_ruleset( $selector, $declarations ); + + // 3. Generate the rules that use the duotone selector. + if ( isset( $metadata['duotone'] ) && ! empty( $declarations_duotone ) ) { + $selector_duotone = static::scope_selector( $metadata['selector'], $metadata['duotone'] ); + $block_rules .= static::to_ruleset( $selector_duotone, $declarations_duotone ); + } + + if ( static::ROOT_BLOCK_SELECTOR === $selector ) { + $block_rules .= '.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }'; + $block_rules .= '.wp-site-blocks > .alignright { float: right; margin-left: 2em; }'; + $block_rules .= '.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }'; + + $has_block_gap_support = _wp_array_get( $this->theme_json, array( 'settings', 'spacing', 'blockGap' ) ) !== null; + if ( $has_block_gap_support ) { + $block_rules .= '.wp-site-blocks > * { margin-top: 0; margin-bottom: 0; }'; + $block_rules .= '.wp-site-blocks > * + * { margin-top: var( --wp--style--block-gap ); }'; + } + } + } + + return $block_rules; + } + + /** + * Creates new rulesets as classes for each preset value such as: + * + * .has-value-color { + * color: value; + * } + * + * .has-value-background-color { + * background-color: value; + * } + * + * .has-value-font-size { + * font-size: value; + * } + * + * .has-value-gradient-background { + * background: value; + * } + * + * p.has-value-gradient-background { + * background: value; + * } + * + * @param array $setting_nodes Nodes with settings. + * @param array $origins List of origins to process presets from. + * @return string The new stylesheet. + */ + protected function get_preset_classes( $setting_nodes, $origins ) { + $preset_rules = ''; + + foreach ( $setting_nodes as $metadata ) { + if ( null === $metadata['selector'] ) { + continue; + } + + $selector = $metadata['selector']; + $node = _wp_array_get( $this->theme_json, $metadata['path'], array() ); + $preset_rules .= static::compute_preset_classes( $node, $selector, $origins ); + } + + return $preset_rules; + } + + /** + * Converts each styles section into a list of rulesets + * to be appended to the stylesheet. + * These rulesets contain all the css variables (custom variables and preset variables). + * + * See glossary at https://developer.mozilla.org/en-US/docs/Web/CSS/Syntax + * + * For each section this creates a new ruleset such as: + * + * block-selector { + * --wp--preset--category--slug: value; + * --wp--custom--variable: value; + * } + * + * @param array $nodes Nodes with settings. + * @param array $origins List of origins to process. + * @return string The new stylesheet. + */ + protected function get_css_variables( $nodes, $origins ) { + $stylesheet = ''; + foreach ( $nodes as $metadata ) { + if ( null === $metadata['selector'] ) { + continue; + } + + $selector = $metadata['selector']; + + $node = _wp_array_get( $this->theme_json, $metadata['path'], array() ); + $declarations = array_merge( static::compute_preset_vars( $node, $origins ), static::compute_theme_vars( $node ) ); + + $stylesheet .= static::to_ruleset( $selector, $declarations ); + } + + return $stylesheet; + } + + /** + * Given a selector and a declaration list, + * creates the corresponding ruleset. + * + * To help debugging, will add some space + * if SCRIPT_DEBUG is defined and true. + * + * @param string $selector CSS selector. + * @param array $declarations List of declarations. + * + * @return string CSS ruleset. + */ + protected static function to_ruleset( $selector, $declarations ) { + if ( empty( $declarations ) ) { + return ''; + } + $ruleset = ''; + + if ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) { + $declaration_block = array_reduce( + $declarations, + function ( $carry, $element ) { + return $carry .= "\t" . $element['name'] . ': ' . $element['value'] . ";\n"; }, + '' + ); + $ruleset .= $selector . " {\n" . $declaration_block . "}\n"; + } else { + $declaration_block = array_reduce( + $declarations, + function ( $carry, $element ) { + return $carry .= $element['name'] . ': ' . $element['value'] . ';'; }, + '' + ); + $ruleset .= $selector . '{' . $declaration_block . '}'; + } + + return $ruleset; + } + + /** + * Function that appends a sub-selector to a existing one. + * + * Given the compounded $selector "h1, h2, h3" + * and the $to_append selector ".some-class" the result will be + * "h1.some-class, h2.some-class, h3.some-class". + * + * @param string $selector Original selector. + * @param string $to_append Selector to append. + * @return string + */ + protected static function append_to_selector( $selector, $to_append ) { + $new_selectors = array(); + $selectors = explode( ',', $selector ); + foreach ( $selectors as $sel ) { + $new_selectors[] = $sel . $to_append; + } + + return implode( ',', $new_selectors ); + } + + /** + * Given a settings array, it returns the generated rulesets + * for the preset classes. + * + * @param array $settings Settings to process. + * @param string $selector Selector wrapping the classes. + * @param array $origins List of origins to process. + * @return string The result of processing the presets. + */ + protected static function compute_preset_classes( $settings, $selector, $origins ) { + if ( static::ROOT_BLOCK_SELECTOR === $selector ) { + // Classes at the global level do not need any CSS prefixed, + // and we don't want to increase its specificity. + $selector = ''; + } + + $stylesheet = ''; + foreach ( static::PRESETS_METADATA as $preset_metadata ) { + $slugs = static::get_settings_slugs( $settings, $preset_metadata, $origins ); + foreach ( $preset_metadata['classes'] as $class => $property ) { + foreach ( $slugs as $slug ) { + $css_var = static::replace_slug_in_string( $preset_metadata['css_vars'], $slug ); + $class_name = static::replace_slug_in_string( $class, $slug ); + $stylesheet .= static::to_ruleset( + static::append_to_selector( $selector, $class_name ), + array( + array( + 'name' => $property, + 'value' => 'var(' . $css_var . ') !important', + ), + ) + ); + } + } + } + + return $stylesheet; + } + + /** + * Function that scopes a selector with another one. This works a bit like + * SCSS nesting except the `&` operator isn't supported. + * + * + * $scope = '.a, .b .c'; + * $selector = '> .x, .y'; + * $merged = scope_selector( $scope, $selector ); + * // $merged is '.a > .x, .a .y, .b .c > .x, .b .c .y' + * + * + * @param string $scope Selector to scope to. + * @param string $selector Original selector. + * + * @return string Scoped selector. + */ + protected static function scope_selector( $scope, $selector ) { + $scopes = explode( ',', $scope ); + $selectors = explode( ',', $selector ); + + $selectors_scoped = array(); + foreach ( $scopes as $outer ) { + foreach ( $selectors as $inner ) { + $selectors_scoped[] = trim( $outer ) . ' ' . trim( $inner ); + } + } + + return implode( ', ', $selectors_scoped ); + } + + /** + * Gets preset values keyed by slugs based on settings and metadata. + * + * + * $settings = array( + * 'typography' => array( + * 'fontFamilies' => array( + * array( + * 'slug' => 'sansSerif', + * 'fontFamily' => '"Helvetica Neue", sans-serif', + * ), + * array( + * 'slug' => 'serif', + * 'colors' => 'Georgia, serif', + * ) + * ), + * ), + * ); + * $meta = array( + * 'path' => array( 'typography', 'fontFamilies' ), + * 'value_key' => 'fontFamily', + * ); + * $values_by_slug = get_settings_values_by_slug(); + * // $values_by_slug === array( + * // 'sans-serif' => '"Helvetica Neue", sans-serif', + * // 'serif' => 'Georgia, serif', + * // ); + * + * + * @param array $settings Settings to process. + * @param array $preset_metadata One of the PRESETS_METADATA values. + * @param array $origins List of origins to process. + * @return array Array of presets where each key is a slug and each value is the preset value. + */ + protected static function get_settings_values_by_slug( $settings, $preset_metadata, $origins ) { + $preset_per_origin = _wp_array_get( $settings, $preset_metadata['path'], array() ); + + $result = array(); + foreach ( $origins as $origin ) { + if ( ! isset( $preset_per_origin[ $origin ] ) ) { + continue; + } + foreach ( $preset_per_origin[ $origin ] as $preset ) { + $slug = _wp_to_kebab_case( $preset['slug'] ); + + $value = ''; + if ( isset( $preset_metadata['value_key'], $preset[ $preset_metadata['value_key'] ] ) ) { + $value_key = $preset_metadata['value_key']; + $value = $preset[ $value_key ]; + } elseif ( + isset( $preset_metadata['value_func'] ) && + is_callable( $preset_metadata['value_func'] ) + ) { + $value_func = $preset_metadata['value_func']; + $value = call_user_func( $value_func, $preset ); + } else { + // If we don't have a value, then don't add it to the result. + continue; + } + + $result[ $slug ] = $value; + } + } + return $result; + } + + /** + * Similar to get_settings_values_by_slug, but doesn't compute the value. + * + * @param array $settings Settings to process. + * @param array $preset_metadata One of the PRESETS_METADATA values. + * @param array $origins List of origins to process. + * @return array Array of presets where the key and value are both the slug. + */ + protected static function get_settings_slugs( $settings, $preset_metadata, $origins = null ) { + if ( null === $origins ) { + $origins = static::VALID_ORIGINS; + } + + $preset_per_origin = _wp_array_get( $settings, $preset_metadata['path'], array() ); + + $result = array(); + foreach ( $origins as $origin ) { + if ( ! isset( $preset_per_origin[ $origin ] ) ) { + continue; + } + foreach ( $preset_per_origin[ $origin ] as $preset ) { + $slug = _wp_to_kebab_case( $preset['slug'] ); + + // Use the array as a set so we don't get duplicates. + $result[ $slug ] = $slug; + } + } + return $result; + } + + /** + * Transform a slug into a CSS Custom Property. + * + * @param string $input String to replace. + * @param string $slug The slug value to use to generate the custom property. + * @return string The CSS Custom Property. Something along the lines of --wp--preset--color--black. + */ + protected static function replace_slug_in_string( $input, $slug ) { + return strtr( $input, array( '$slug' => $slug ) ); + } + + /** + * Given the block settings, it extracts the CSS Custom Properties + * for the presets and adds them to the $declarations array + * following the format: + * + * ```php + * array( + * 'name' => 'property_name', + * 'value' => 'property_value, + * ) + * ``` + * + * @param array $settings Settings to process. + * @param array $origins List of origins to process. + * @return array Returns the modified $declarations. + */ + protected static function compute_preset_vars( $settings, $origins ) { + $declarations = array(); + foreach ( static::PRESETS_METADATA as $preset_metadata ) { + $values_by_slug = static::get_settings_values_by_slug( $settings, $preset_metadata, $origins ); + foreach ( $values_by_slug as $slug => $value ) { + $declarations[] = array( + 'name' => static::replace_slug_in_string( $preset_metadata['css_vars'], $slug ), + 'value' => $value, + ); + } + } + + return $declarations; + } + + /** + * Given an array of settings, it extracts the CSS Custom Properties + * for the custom values and adds them to the $declarations + * array following the format: + * + * ```php + * array( + * 'name' => 'property_name', + * 'value' => 'property_value, + * ) + * ``` + * + * @param array $settings Settings to process. + * @return array Returns the modified $declarations. + */ + protected static function compute_theme_vars( $settings ) { + $declarations = array(); + $custom_values = _wp_array_get( $settings, array( 'custom' ), array() ); + $css_vars = static::flatten_tree( $custom_values ); + foreach ( $css_vars as $key => $value ) { + $declarations[] = array( + 'name' => '--wp--custom--' . $key, + 'value' => $value, + ); + } + + return $declarations; + } + + /** + * Given a tree, it creates a flattened one + * by merging the keys and binding the leaf values + * to the new keys. + * + * It also transforms camelCase names into kebab-case + * and substitutes '/' by '-'. + * + * This is thought to be useful to generate + * CSS Custom Properties from a tree, + * although there's nothing in the implementation + * of this function that requires that format. + * + * For example, assuming the given prefix is '--wp' + * and the token is '--', for this input tree: + * + * { + * 'some/property': 'value', + * 'nestedProperty': { + * 'sub-property': 'value' + * } + * } + * + * it'll return this output: + * + * { + * '--wp--some-property': 'value', + * '--wp--nested-property--sub-property': 'value' + * } + * + * @param array $tree Input tree to process. + * @param string $prefix Optional. Prefix to prepend to each variable. Default empty string. + * @param string $token Optional. Token to use between levels. Default '--'. + * @return array The flattened tree. + */ + protected static function flatten_tree( $tree, $prefix = '', $token = '--' ) { + $result = array(); + foreach ( $tree as $property => $value ) { + $new_key = $prefix . str_replace( + '/', + '-', + strtolower( _wp_to_kebab_case( $property ) ) + ); + + if ( is_array( $value ) ) { + $new_prefix = $new_key . $token; + $result = array_merge( + $result, + static::flatten_tree( $value, $new_prefix, $token ) + ); + } else { + $result[ $new_key ] = $value; + } + } + return $result; + } + + /** + * Given a styles array, it extracts the style properties + * and adds them to the $declarations array following the format: + * + * ```php + * array( + * 'name' => 'property_name', + * 'value' => 'property_value, + * ) + * ``` + * + * @param array $styles Styles to process. + * @param array $settings Theme settings. + * @param array $properties Properties metadata. + * @return array Returns the modified $declarations. + */ + protected static function compute_style_properties( $styles, $settings = array(), $properties = null ) { + if ( null === $properties ) { + $properties = static::PROPERTIES_METADATA; + } + + $declarations = array(); + if ( empty( $styles ) ) { + return $declarations; + } + + foreach ( $properties as $css_property => $value_path ) { + $value = static::get_property_value( $styles, $value_path ); + + // Look up protected properties, keyed by value path. + // Skip protected properties that are explicitly set to `null`. + if ( is_array( $value_path ) ) { + $path_string = implode( '.', $value_path ); + if ( + array_key_exists( $path_string, static::PROTECTED_PROPERTIES ) && + _wp_array_get( $settings, static::PROTECTED_PROPERTIES[ $path_string ], null ) === null + ) { + continue; + } + } + + // Skip if empty and not "0" or value represents array of longhand values. + $has_missing_value = empty( $value ) && ! is_numeric( $value ); + if ( $has_missing_value || is_array( $value ) ) { + continue; + } + + $declarations[] = array( + 'name' => $css_property, + 'value' => $value, + ); + } + + return $declarations; + } + + /** + * Returns the style property for the given path. + * + * It also converts CSS Custom Property stored as + * "var:preset|color|secondary" to the form + * "--wp--preset--color--secondary". + * + * @param array $styles Styles subtree. + * @param array $path Which property to process. + * @return string Style property value. + */ + protected static function get_property_value( $styles, $path ) { + $value = _wp_array_get( $styles, $path, '' ); + + if ( '' === $value || is_array( $value ) ) { + return $value; + } + + $prefix = 'var:'; + $prefix_len = strlen( $prefix ); + $token_in = '|'; + $token_out = '--'; + if ( 0 === strncmp( $value, $prefix, $prefix_len ) ) { + $unwrapped_name = str_replace( + $token_in, + $token_out, + substr( $value, $prefix_len ) + ); + $value = "var(--wp--$unwrapped_name)"; + } + + return $value; + } + + /** + * Builds metadata for the setting nodes, which returns in the form of: + * + * [ + * [ + * 'path' => ['path', 'to', 'some', 'node' ], + * 'selector' => 'CSS selector for some node' + * ], + * [ + * 'path' => [ 'path', 'to', 'other', 'node' ], + * 'selector' => 'CSS selector for other node' + * ], + * ] + * + * @param array $theme_json The tree to extract setting nodes from. + * @param array $selectors List of selectors per block. + * @return array + */ + protected static function get_setting_nodes( $theme_json, $selectors = array() ) { + $nodes = array(); + if ( ! isset( $theme_json['settings'] ) ) { + return $nodes; + } + + // Top-level. + $nodes[] = array( + 'path' => array( 'settings' ), + 'selector' => static::ROOT_BLOCK_SELECTOR, + ); + + // Calculate paths for blocks. + if ( ! isset( $theme_json['settings']['blocks'] ) ) { + return $nodes; + } + + foreach ( $theme_json['settings']['blocks'] as $name => $node ) { + $selector = null; + if ( isset( $selectors[ $name ]['selector'] ) ) { + $selector = $selectors[ $name ]['selector']; + } + + $nodes[] = array( + 'path' => array( 'settings', 'blocks', $name ), + 'selector' => $selector, + ); + } + + return $nodes; + } + + /** + * Builds metadata for the style nodes, which returns in the form of: + * + * [ + * [ + * 'path' => [ 'path', 'to', 'some', 'node' ], + * 'selector' => 'CSS selector for some node', + * 'duotone' => 'CSS selector for duotone for some node' + * ], + * [ + * 'path' => ['path', 'to', 'other', 'node' ], + * 'selector' => 'CSS selector for other node', + * 'duotone' => null + * ], + * ] + * + * @param array $theme_json The tree to extract style nodes from. + * @param array $selectors List of selectors per block. + * @return array + */ + protected static function get_style_nodes( $theme_json, $selectors = array() ) { + $nodes = array(); + if ( ! isset( $theme_json['styles'] ) ) { + return $nodes; + } + + // Top-level. + $nodes[] = array( + 'path' => array( 'styles' ), + 'selector' => static::ROOT_BLOCK_SELECTOR, + ); + + if ( isset( $theme_json['styles']['elements'] ) ) { + foreach ( $theme_json['styles']['elements'] as $element => $node ) { + $nodes[] = array( + 'path' => array( 'styles', 'elements', $element ), + 'selector' => static::ELEMENTS[ $element ], + ); + } + } + + // Blocks. + if ( ! isset( $theme_json['styles']['blocks'] ) ) { + return $nodes; + } + + foreach ( $theme_json['styles']['blocks'] as $name => $node ) { + $selector = null; + if ( isset( $selectors[ $name ]['selector'] ) ) { + $selector = $selectors[ $name ]['selector']; + } + + $duotone_selector = null; + if ( isset( $selectors[ $name ]['duotone'] ) ) { + $duotone_selector = $selectors[ $name ]['duotone']; + } + + $nodes[] = array( + 'path' => array( 'styles', 'blocks', $name ), + 'selector' => $selector, + 'duotone' => $duotone_selector, + ); + + if ( isset( $theme_json['styles']['blocks'][ $name ]['elements'] ) ) { + foreach ( $theme_json['styles']['blocks'][ $name ]['elements'] as $element => $node ) { + $nodes[] = array( + 'path' => array( 'styles', 'blocks', $name, 'elements', $element ), + 'selector' => $selectors[ $name ]['elements'][ $element ], + ); + } + } + } + + return $nodes; + } + + /** + * Merge new incoming data. + * + * @param WP_Theme_JSON $incoming Data to merge. + */ + public function merge( $incoming ) { + $incoming_data = $incoming->get_raw_data(); + $this->theme_json = array_replace_recursive( $this->theme_json, $incoming_data ); + + /* + * The array_replace_recursive algorithm merges at the leaf level, + * but we don't want leaf arrays to be merged, so we overwrite it. + * + * For leaf values that are sequential arrays it will use the numeric indexes for replacement. + * We rather replace the existing with the incoming value, if it exists. + * This is the case of spacing.units. + * + * For leaf values that are associative arrays it will merge them as expected. + * This is also not the behavior we want for the current associative arrays (presets). + * We rather replace the existing with the incoming value, if it exists. + * This happens, for example, when we merge data from theme.json upon existing + * theme supports or when we merge anything coming from the same source twice. + * This is the case of color.palette, color.gradients, color.duotone, + * typography.fontSizes, or typography.fontFamilies. + * + * Additionally, for some preset types, we also want to make sure the + * values they introduce don't conflict with default values. We do so + * by checking the incoming slugs for theme presets and compare them + * with the equivalent default presets: if a slug is present as a default + * we remove it from the theme presets. + */ + $nodes = static::get_setting_nodes( $incoming_data ); + $slugs_global = static::get_default_slugs( $this->theme_json, array( 'settings' ) ); + foreach ( $nodes as $node ) { + $slugs_node = static::get_default_slugs( $this->theme_json, $node['path'] ); + $slugs = array_merge_recursive( $slugs_global, $slugs_node ); + + // Replace the spacing.units. + $path = array_merge( $node['path'], array( 'spacing', 'units' ) ); + $content = _wp_array_get( $incoming_data, $path, null ); + if ( isset( $content ) ) { + _wp_array_set( $this->theme_json, $path, $content ); + } + + // Replace the presets. + foreach ( static::PRESETS_METADATA as $preset ) { + $override_preset = static::should_override_preset( $this->theme_json, $node['path'], $preset['override'] ); + + foreach ( static::VALID_ORIGINS as $origin ) { + $base_path = array_merge( $node['path'], $preset['path'] ); + $path = array_merge( $base_path, array( $origin ) ); + $content = _wp_array_get( $incoming_data, $path, null ); + if ( ! isset( $content ) ) { + continue; + } + + if ( 'theme' === $origin && $preset['use_default_names'] ) { + foreach ( $content as &$item ) { + if ( ! array_key_exists( 'name', $item ) ) { + $name = static::get_name_from_defaults( $item['slug'], $base_path ); + if ( null !== $name ) { + $item['name'] = $name; + } + } + } + } + + if ( + ( 'theme' !== $origin ) || + ( 'theme' === $origin && $override_preset ) + ) { + _wp_array_set( $this->theme_json, $path, $content ); + } else { + $slugs_for_preset = _wp_array_get( $slugs, $preset['path'], array() ); + $content = static::filter_slugs( $content, $slugs_for_preset ); + _wp_array_set( $this->theme_json, $path, $content ); + } + } + } + } + } + + /** + * Converts all filter (duotone) presets into SVGs. + * + * @param array $origins List of origins to process. + * + * @return string SVG filters. + */ + public function get_svg_filters( $origins ) { + $blocks_metadata = static::get_blocks_metadata(); + $setting_nodes = static::get_setting_nodes( $this->theme_json, $blocks_metadata ); + + $filters = ''; + foreach ( $setting_nodes as $metadata ) { + $node = _wp_array_get( $this->theme_json, $metadata['path'], array() ); + if ( empty( $node['color']['duotone'] ) ) { + continue; + } + + $duotone_presets = $node['color']['duotone']; + + foreach ( $origins as $origin ) { + if ( ! isset( $duotone_presets[ $origin ] ) ) { + continue; + } + foreach ( $duotone_presets[ $origin ] as $duotone_preset ) { + $filters .= gutenberg_get_duotone_filter_svg( $duotone_preset ); + } + } + } + + return $filters; + } + + /** + * Returns whether a presets should be overriden or not. + * + * @param array $theme_json The theme.json like structure to inspect. + * @param array $path Path to inspect. + * @param bool|array $override Data to compute whether to override the preset. + * @return boolean + */ + protected static function should_override_preset( $theme_json, $path, $override ) { + if ( is_bool( $override ) ) { + return $override; + } + + // The relationship between whether to override the defaults + // and whether the defaults are enabled is inverse: + // + // - If defaults are enabled => theme presets should not be overriden + // - If defaults are disabled => theme presets should be overriden + // + // For example, a theme sets defaultPalette to false, + // making the default palette hidden from the user. + // In that case, we want all the theme presets to be present, + // so they should override the defaults. + if ( is_array( $override ) ) { + $value = _wp_array_get( $theme_json, array_merge( $path, $override ) ); + if ( isset( $value ) ) { + return ! $value; + } + + // Search the top-level key if none was found for this node. + $value = _wp_array_get( $theme_json, array_merge( array( 'settings' ), $override ) ); + if ( isset( $value ) ) { + return ! $value; + } + + return true; + } + } + + /** + * Returns the default slugs for all the presets in an associative array + * whose keys are the preset paths and the leafs is the list of slugs. + * + * For example: + * + * array( + * 'color' => array( + * 'palette' => array( 'slug-1', 'slug-2' ), + * 'gradients' => array( 'slug-3', 'slug-4' ), + * ), + * ) + * + * @param array $data A theme.json like structure. + * @param array $node_path The path to inspect. It's 'settings' by default. + * + * @return array + */ + protected static function get_default_slugs( $data, $node_path ) { + $slugs = array(); + + foreach ( static::PRESETS_METADATA as $metadata ) { + $path = array_merge( $node_path, $metadata['path'], array( 'default' ) ); + $preset = _wp_array_get( $data, $path, null ); + if ( ! isset( $preset ) ) { + continue; + } + + $slugs_for_preset = array(); + $slugs_for_preset = array_map( + function( $value ) { + return isset( $value['slug'] ) ? $value['slug'] : null; + }, + $preset + ); + _wp_array_set( $slugs, $metadata['path'], $slugs_for_preset ); + } + + return $slugs; + } + + /** + * Get a `default`'s preset name by a provided slug. + * + * @param string $slug The slug we want to find a match from default presets. + * @param array $base_path The path to inspect. It's 'settings' by default. + * + * @return string|null + */ + protected function get_name_from_defaults( $slug, $base_path ) { + $path = array_merge( $base_path, array( 'default' ) ); + $default_content = _wp_array_get( $this->theme_json, $path, null ); + if ( ! $default_content ) { + return null; + } + foreach ( $default_content as $item ) { + if ( $slug === $item['slug'] ) { + return $item['name']; + } + } + return null; + } + + /** + * Removes the preset values whose slug is equal to any of given slugs. + * + * @param array $node The node with the presets to validate. + * @param array $slugs The slugs that should not be overriden. + * + * @return array The new node + */ + protected static function filter_slugs( $node, $slugs ) { + if ( empty( $slugs ) ) { + return $node; + } + + $new_node = array(); + foreach ( $node as $value ) { + if ( isset( $value['slug'] ) && ! in_array( $value['slug'], $slugs, true ) ) { + $new_node[] = $value; + } + } + + return $new_node; + } + + /** + * Removes insecure data from theme.json. + * + * @param array $theme_json Structure to sanitize. + * @return array Sanitized structure. + */ + public static function remove_insecure_properties( $theme_json ) { + $sanitized = array(); + + $theme_json = WP_Theme_JSON_Schema_Gutenberg::migrate( $theme_json ); + + $valid_block_names = array_keys( static::get_blocks_metadata() ); + $valid_element_names = array_keys( static::ELEMENTS ); + $theme_json = static::sanitize( $theme_json, $valid_block_names, $valid_element_names ); + + $blocks_metadata = static::get_blocks_metadata(); + $style_nodes = static::get_style_nodes( $theme_json, $blocks_metadata ); + foreach ( $style_nodes as $metadata ) { + $input = _wp_array_get( $theme_json, $metadata['path'], array() ); + if ( empty( $input ) ) { + continue; + } + + $output = static::remove_insecure_styles( $input ); + if ( ! empty( $output ) ) { + _wp_array_set( $sanitized, $metadata['path'], $output ); + } + } + + $setting_nodes = static::get_setting_nodes( $theme_json ); + foreach ( $setting_nodes as $metadata ) { + $input = _wp_array_get( $theme_json, $metadata['path'], array() ); + if ( empty( $input ) ) { + continue; + } + + $output = static::remove_insecure_settings( $input ); + if ( ! empty( $output ) ) { + _wp_array_set( $sanitized, $metadata['path'], $output ); + } + } + + if ( empty( $sanitized['styles'] ) ) { + unset( $theme_json['styles'] ); + } else { + $theme_json['styles'] = $sanitized['styles']; + } + + if ( empty( $sanitized['settings'] ) ) { + unset( $theme_json['settings'] ); + } else { + $theme_json['settings'] = $sanitized['settings']; + } + + return $theme_json; + } + + /** + * Processes a setting node and returns the same node + * without the insecure settings. + * + * @param array $input Node to process. + * @return array + */ + protected static function remove_insecure_settings( $input ) { + $output = array(); + foreach ( static::PRESETS_METADATA as $preset_metadata ) { + foreach ( static::VALID_ORIGINS as $origin ) { + $path_with_origin = array_merge( $preset_metadata['path'], array( $origin ) ); + $presets = _wp_array_get( $input, $path_with_origin, null ); + if ( null === $presets ) { + continue; + } + + $escaped_preset = array(); + foreach ( $presets as $preset ) { + if ( + esc_attr( esc_html( $preset['name'] ) ) === $preset['name'] && + sanitize_html_class( $preset['slug'] ) === $preset['slug'] + ) { + $value = null; + if ( isset( $preset_metadata['value_key'], $preset[ $preset_metadata['value_key'] ] ) ) { + $value = $preset[ $preset_metadata['value_key'] ]; + } elseif ( + isset( $preset_metadata['value_func'] ) && + is_callable( $preset_metadata['value_func'] ) + ) { + $value = call_user_func( $preset_metadata['value_func'], $preset ); + } + + $preset_is_valid = true; + foreach ( $preset_metadata['properties'] as $property ) { + if ( ! static::is_safe_css_declaration( $property, $value ) ) { + $preset_is_valid = false; + break; + } + } + + if ( $preset_is_valid ) { + $escaped_preset[] = $preset; + } + } + } + + if ( ! empty( $escaped_preset ) ) { + _wp_array_set( $output, $path_with_origin, $escaped_preset ); + } + } + } + return $output; + } + + /** + * Processes a style node and returns the same node + * without the insecure styles. + * + * @param array $input Node to process. + * @return array + */ + protected static function remove_insecure_styles( $input ) { + $output = array(); + $declarations = static::compute_style_properties( $input ); + + foreach ( $declarations as $declaration ) { + if ( static::is_safe_css_declaration( $declaration['name'], $declaration['value'] ) ) { + $path = static::PROPERTIES_METADATA[ $declaration['name'] ]; + + // Check the value isn't an array before adding so as to not + // double up shorthand and longhand styles. + $value = _wp_array_get( $input, $path, array() ); + if ( ! is_array( $value ) ) { + _wp_array_set( $output, $path, $value ); + } + } + } + return $output; + } + + /** + * Checks that a declaration provided by the user is safe. + * + * @param string $property_name Property name in a CSS declaration, i.e. the `color` in `color: red`. + * @param string $property_value Value in a CSS declaration, i.e. the `red` in `color: red`. + * @return boolean + */ + protected static function is_safe_css_declaration( $property_name, $property_value ) { + $style_to_validate = $property_name . ': ' . $property_value; + $filtered = esc_html( safecss_filter_attr( $style_to_validate ) ); + return ! empty( trim( $filtered ) ); + } + + /** + * Returns the raw data. + * + * @return array Raw data. + */ + public function get_raw_data() { + return $this->theme_json; + } + + /** + * Transforms the given editor settings according the + * add_theme_support format to the theme.json format. + * + * @param array $settings Existing editor settings. + * @return array Config that adheres to the theme.json schema. + */ + public static function get_from_editor_settings( $settings ) { + $theme_settings = array( + 'version' => static::LATEST_SCHEMA, + 'settings' => array(), + ); + + // Deprecated theme supports. + if ( isset( $settings['disableCustomColors'] ) ) { + if ( ! isset( $theme_settings['settings']['color'] ) ) { + $theme_settings['settings']['color'] = array(); + } + $theme_settings['settings']['color']['custom'] = ! $settings['disableCustomColors']; + } + + if ( isset( $settings['disableCustomGradients'] ) ) { + if ( ! isset( $theme_settings['settings']['color'] ) ) { + $theme_settings['settings']['color'] = array(); + } + $theme_settings['settings']['color']['customGradient'] = ! $settings['disableCustomGradients']; + } + + if ( isset( $settings['disableCustomFontSizes'] ) ) { + if ( ! isset( $theme_settings['settings']['typography'] ) ) { + $theme_settings['settings']['typography'] = array(); + } + $theme_settings['settings']['typography']['customFontSize'] = ! $settings['disableCustomFontSizes']; + } + + if ( isset( $settings['enableCustomLineHeight'] ) ) { + if ( ! isset( $theme_settings['settings']['typography'] ) ) { + $theme_settings['settings']['typography'] = array(); + } + $theme_settings['settings']['typography']['lineHeight'] = $settings['enableCustomLineHeight']; + } + + if ( isset( $settings['enableCustomUnits'] ) ) { + if ( ! isset( $theme_settings['settings']['spacing'] ) ) { + $theme_settings['settings']['spacing'] = array(); + } + $theme_settings['settings']['spacing']['units'] = ( true === $settings['enableCustomUnits'] ) ? + array( 'px', 'em', 'rem', 'vh', 'vw', '%' ) : + $settings['enableCustomUnits']; + } + + if ( isset( $settings['colors'] ) ) { + if ( ! isset( $theme_settings['settings']['color'] ) ) { + $theme_settings['settings']['color'] = array(); + } + $theme_settings['settings']['color']['palette'] = $settings['colors']; + } + + if ( isset( $settings['gradients'] ) ) { + if ( ! isset( $theme_settings['settings']['color'] ) ) { + $theme_settings['settings']['color'] = array(); + } + $theme_settings['settings']['color']['gradients'] = $settings['gradients']; + } + + if ( isset( $settings['fontSizes'] ) ) { + $font_sizes = $settings['fontSizes']; + // Back-compatibility for presets without units. + foreach ( $font_sizes as $key => $font_size ) { + if ( is_numeric( $font_size['size'] ) ) { + $font_sizes[ $key ]['size'] = $font_size['size'] . 'px'; + } + } + if ( ! isset( $theme_settings['settings']['typography'] ) ) { + $theme_settings['settings']['typography'] = array(); + } + $theme_settings['settings']['typography']['fontSizes'] = $font_sizes; + } + + // This allows to make the plugin work with WordPress 5.7 beta + // as well as lower versions. The second check can be removed + // as soon as the minimum WordPress version for the plugin + // is bumped to 5.7. + if ( isset( $settings['enableCustomSpacing'] ) ) { + if ( ! isset( $theme_settings['settings']['spacing'] ) ) { + $theme_settings['settings']['spacing'] = array(); + } + $theme_settings['settings']['spacing']['padding'] = $settings['enableCustomSpacing']; + } + + // Things that didn't land in core yet, so didn't have a setting assigned. + // This should be removed when the plugin minimum WordPress version + // is bumped to 5.9. + // + // Since WordPress 5.9, the CSS Custom Properties are enqueued for all themes, + // so we no longer need to detect theme support for this. + // Removing this code will have the effect of making link color + // not visible for classic themes that opted-in and depended on the plugin + // to show the UI control for link color to users. + // + // Do not port this to WordPress core. + if ( current( (array) get_theme_support( 'experimental-link-color' ) ) ) { + if ( ! isset( $theme_settings['settings']['color'] ) ) { + $theme_settings['settings']['color'] = array(); + } + $theme_settings['settings']['color']['link'] = true; + } + + return $theme_settings; + } + +} diff --git a/lib/compat/wordpress-5.9/class-wp-theme-json-resolver-5-9.php b/lib/compat/wordpress-5.9/class-wp-theme-json-resolver-5-9.php new file mode 100644 index 0000000000000..b00c6e708c763 --- /dev/null +++ b/lib/compat/wordpress-5.9/class-wp-theme-json-resolver-5-9.php @@ -0,0 +1,416 @@ + true ) ); + if ( is_array( $decoded_file ) ) { + $config = $decoded_file; + } + } + return $config; + } + + /** + * Returns a data structure used in theme.json translation. + * + * @deprecated + * @return array An array of theme.json fields that are translatable and the keys that are translatable + */ + public static function get_fields_to_translate() { + _deprecated_function( __METHOD__, '5.9.0' ); + return array(); + } + + /** + * Given a theme.json structure modifies it in place + * to update certain values by its translated strings + * according to the language set by the user. + * + * @param array $theme_json The theme.json to translate. + * @param string $domain Optional. Text domain. Unique identifier for retrieving translated strings. + * Default 'default'. + * @return array Returns the modified $theme_json_structure. + */ + protected static function translate( $theme_json, $domain = 'default' ) { + if ( null === static::$i18n_schema ) { + $i18n_schema = wp_json_file_decode( __DIR__ . '/theme-i18n.json' ); + static::$i18n_schema = null === $i18n_schema ? array() : $i18n_schema; + } + + return translate_settings_using_i18n_schema( static::$i18n_schema, $theme_json, $domain ); + } + + /** + * Return core's origin config. + * + * @return WP_Theme_JSON_Gutenberg Entity that holds core data. + */ + public static function get_core_data() { + if ( null !== static::$core ) { + return static::$core; + } + + $config = static::read_json_file( __DIR__ . '/theme.json' ); + $config = static::translate( $config ); + static::$core = new WP_Theme_JSON_Gutenberg( $config, 'default' ); + + return static::$core; + } + + /** + * Returns the theme's data. + * + * Data from theme.json will be backfilled from existing + * theme supports, if any. Note that if the same data + * is present in theme.json and in theme supports, + * the theme.json takes precedence. + * + * @param array $deprecated Deprecated argument. + * @return WP_Theme_JSON_Gutenberg Entity that holds theme data. + */ + public static function get_theme_data( $deprecated = array() ) { + if ( ! empty( $deprecated ) ) { + _deprecated_argument( __METHOD__, '5.9' ); + } + if ( null === static::$theme ) { + $theme_json_data = static::read_json_file( static::get_file_path_from_theme( 'theme.json' ) ); + $theme_json_data = static::translate( $theme_json_data, wp_get_theme()->get( 'TextDomain' ) ); + static::$theme = new WP_Theme_JSON_Gutenberg( $theme_json_data ); + + if ( wp_get_theme()->parent() ) { + // Get parent theme.json. + $parent_theme_json_data = static::read_json_file( static::get_file_path_from_theme( 'theme.json', true ) ); + $parent_theme_json_data = static::translate( $parent_theme_json_data, wp_get_theme()->parent()->get( 'TextDomain' ) ); + $parent_theme = new WP_Theme_JSON_Gutenberg( $parent_theme_json_data ); + + // Merge the child theme.json into the parent theme.json. + // The child theme takes precedence over the parent. + $parent_theme->merge( static::$theme ); + static::$theme = $parent_theme; + } + } + + /* + * We want the presets and settings declared in theme.json + * to override the ones declared via theme supports. + * So we take theme supports, transform it to theme.json shape + * and merge the static::$theme upon that. + */ + $theme_support_data = WP_Theme_JSON_Gutenberg::get_from_editor_settings( get_default_block_editor_settings() ); + if ( ! static::theme_has_support() ) { + if ( ! isset( $theme_support_data['settings']['color'] ) ) { + $theme_support_data['settings']['color'] = array(); + } + + $default_palette = false; + if ( current_theme_supports( 'default-color-palette' ) ) { + $default_palette = true; + } + if ( ! isset( $theme_support_data['settings']['color']['palette'] ) ) { + // If the theme does not have any palette, we still want to show the core one. + $default_palette = true; + } + $theme_support_data['settings']['color']['defaultPalette'] = $default_palette; + + $default_gradients = false; + if ( current_theme_supports( 'default-gradient-presets' ) ) { + $default_gradients = true; + } + if ( ! isset( $theme_support_data['settings']['color']['gradients'] ) ) { + // If the theme does not have any gradients, we still want to show the core ones. + $default_gradients = true; + } + $theme_support_data['settings']['color']['defaultGradients'] = $default_gradients; + } + $with_theme_supports = new WP_Theme_JSON_Gutenberg( $theme_support_data ); + $with_theme_supports->merge( static::$theme ); + + return $with_theme_supports; + } + + /** + * Returns the custom post type that contains the user's origin config + * for the current theme or a void array if none are found. + * + * This can also create and return a new draft custom post type. + * + * @param WP_Theme $theme The theme object. If empty, it + * defaults to the current theme. + * @param bool $create_post Optional. Whether a new custom post + * type should be created if none are + * found. False by default. + * @param array $post_status_filter Filter Optional. custom post type by + * post status. ['publish'] by default, + * so it only fetches published posts. + * @return array Custom Post Type for the user's origin config. + */ + public static function get_user_data_from_wp_global_styles( $theme, $create_post = false, $post_status_filter = array( 'publish' ) ) { + if ( ! $theme instanceof WP_Theme ) { + $theme = wp_get_theme(); + } + $user_cpt = array(); + $post_type_filter = 'wp_global_styles'; + $args = array( + 'numberposts' => 1, + 'orderby' => 'date', + 'order' => 'desc', + 'post_type' => $post_type_filter, + 'post_status' => $post_status_filter, + 'tax_query' => array( + array( + 'taxonomy' => 'wp_theme', + 'field' => 'name', + 'terms' => $theme->get_stylesheet(), + ), + ), + ); + + $cache_key = sprintf( 'wp_global_styles_%s', md5( serialize( $args ) ) ); + $post_id = wp_cache_get( $cache_key ); + + if ( (int) $post_id > 0 ) { + return get_post( $post_id, ARRAY_A ); + } + + // Special case: '-1' is a results not found. + if ( -1 === $post_id && ! $create_post ) { + return $user_cpt; + } + + $recent_posts = wp_get_recent_posts( $args ); + if ( is_array( $recent_posts ) && ( count( $recent_posts ) === 1 ) ) { + $user_cpt = $recent_posts[0]; + } elseif ( $create_post ) { + $cpt_post_id = wp_insert_post( + array( + 'post_content' => '{"version": ' . WP_Theme_JSON_Gutenberg::LATEST_SCHEMA . ', "isGlobalStylesUserThemeJSON": true }', + 'post_status' => 'publish', + 'post_title' => __( 'Custom Styles', 'default' ), + 'post_type' => $post_type_filter, + 'post_name' => 'wp-global-styles-' . urlencode( wp_get_theme()->get_stylesheet() ), + 'tax_input' => array( + 'wp_theme' => array( wp_get_theme()->get_stylesheet() ), + ), + ), + true + ); + $user_cpt = get_post( $cpt_post_id, ARRAY_A ); + } + $cache_expiration = $user_cpt ? DAY_IN_SECONDS : HOUR_IN_SECONDS; + wp_cache_set( $cache_key, $user_cpt ? $user_cpt['ID'] : -1, '', $cache_expiration ); + + return $user_cpt; + } + + /** + * Returns the user's origin config. + * + * @return WP_Theme_JSON_Gutenberg Entity that holds styles for user data. + */ + public static function get_user_data() { + if ( null !== static::$user ) { + return static::$user; + } + + $config = array(); + $user_cpt = static::get_user_data_from_wp_global_styles( wp_get_theme() ); + + if ( array_key_exists( 'post_content', $user_cpt ) ) { + $decoded_data = json_decode( $user_cpt['post_content'], true ); + + $json_decoding_error = json_last_error(); + if ( JSON_ERROR_NONE !== $json_decoding_error ) { + trigger_error( 'Error when decoding a theme.json schema for user data. ' . json_last_error_msg() ); + return new WP_Theme_JSON_Gutenberg( $config, 'custom' ); + } + + // Very important to verify if the flag isGlobalStylesUserThemeJSON is true. + // If is not true the content was not escaped and is not safe. + if ( + is_array( $decoded_data ) && + isset( $decoded_data['isGlobalStylesUserThemeJSON'] ) && + $decoded_data['isGlobalStylesUserThemeJSON'] + ) { + unset( $decoded_data['isGlobalStylesUserThemeJSON'] ); + $config = $decoded_data; + } + } + static::$user = new WP_Theme_JSON_Gutenberg( $config, 'custom' ); + + return static::$user; + } + + /** + * There are three sources of data (origins) for a site: + * default, theme, and custom. The custom's has higher priority + * than the theme's, and the theme's higher than defaults's. + * + * Unlike the getters {@link get_core_data}, + * {@link get_theme_data}, and {@link get_user_data}, + * this method returns data after it has been merged + * with the previous origins. This means that if the same piece of data + * is declared in different origins (user, theme, and core), + * the last origin overrides the previous. + * + * For example, if the user has set a background color + * for the paragraph block, and the theme has done it as well, + * the user preference wins. + * + * @param string $origin Optional. To what level should we merge data. + * Valid values are 'theme' or 'custom'. + * Default is 'custom'. + * @return WP_Theme_JSON_Gutenberg + */ + public static function get_merged_data( $origin = 'custom' ) { + if ( is_array( $origin ) ) { + _deprecated_argument( __FUNCTION__, '5.9' ); + } + + $result = new WP_Theme_JSON_Gutenberg(); + $result->merge( static::get_core_data() ); + $result->merge( static::get_theme_data() ); + + if ( 'custom' === $origin ) { + $result->merge( static::get_user_data() ); + } + + return $result; + } + + /** + * Returns the ID of the custom post type + * that stores user data. + * + * @return integer|null + */ + public static function get_user_global_styles_post_id() { + if ( null !== static::$user_custom_post_type_id ) { + return static::$user_custom_post_type_id; + } + + $user_cpt = static::get_user_data_from_wp_global_styles( wp_get_theme(), true ); + + if ( array_key_exists( 'ID', $user_cpt ) ) { + static::$user_custom_post_type_id = $user_cpt['ID']; + } + + return static::$user_custom_post_type_id; + } + + /** + * Whether the current theme has a theme.json file. + * + * @return bool + */ + public static function theme_has_support() { + if ( ! isset( static::$theme_has_support ) ) { + static::$theme_has_support = ( + is_readable( static::get_file_path_from_theme( 'theme.json' ) ) || + is_readable( static::get_file_path_from_theme( 'theme.json', true ) ) + ); + } + + return static::$theme_has_support; + } + + /** + * Builds the path to the given file and checks that it is readable. + * + * If it isn't, returns an empty string, otherwise returns the whole file path. + * + * @param string $file_name Name of the file. + * @param bool $template Optional. Use template theme directory. Default false. + * @return string The whole file path or empty if the file doesn't exist. + */ + protected static function get_file_path_from_theme( $file_name, $template = false ) { + $path = $template ? get_template_directory() : get_stylesheet_directory(); + $candidate = $path . '/' . $file_name; + + return is_readable( $candidate ) ? $candidate : ''; + } + + /** + * Cleans the cached data so it can be recalculated. + */ + public static function clean_cached_data() { + static::$core = null; + static::$theme = null; + static::$user = null; + static::$user_custom_post_type_id = null; + static::$theme_has_support = null; + static::$i18n_schema = null; + } + +} + +add_action( 'switch_theme', array( 'WP_Theme_JSON_Resolver_Gutenberg', 'clean_cached_data' ) ); +add_action( 'start_previewing_theme', array( 'WP_Theme_JSON_Resolver_Gutenberg', 'clean_cached_data' ) ); diff --git a/lib/compat/wordpress-5.9/class-wp-theme-json-schema-gutenberg.php b/lib/compat/wordpress-5.9/class-wp-theme-json-schema-gutenberg.php new file mode 100644 index 0000000000000..0fa833c68072c --- /dev/null +++ b/lib/compat/wordpress-5.9/class-wp-theme-json-schema-gutenberg.php @@ -0,0 +1,489 @@ + 'border.color', + 'border.customStyle' => 'border.style', + 'border.customWidth' => 'border.width', + 'typography.customFontStyle' => 'typography.fontStyle', + 'typography.customFontWeight' => 'typography.fontWeight', + 'typography.customLetterSpacing' => 'typography.letterSpacing', + 'typography.customTextDecorations' => 'typography.textDecoration', + 'typography.customTextTransforms' => 'typography.textTransform', + ); + + /** + * Maps old properties to their new location within the schema's settings. + * This will be applied at both the defaults and individual block levels. + */ + const V1_TO_V2_RENAMED_PATHS = array( + 'border.customRadius' => 'border.radius', + 'spacing.customMargin' => 'spacing.margin', + 'spacing.customPadding' => 'spacing.padding', + 'typography.customLineHeight' => 'typography.lineHeight', + ); + + /** + * Function that migrates a given theme.json structure to the last version. + * + * @param array $theme_json The structure to migrate. + * + * @return array The structure in the last version. + */ + public static function migrate( $theme_json ) { + // Can be removed when the plugin minimum required version is WordPress 5.8. + // This doesn't need to land in WordPress core. + if ( ! isset( $theme_json['version'] ) || 0 === $theme_json['version'] ) { + $theme_json = self::migrate_v0_to_v1( $theme_json ); + } + + // Provide backwards compatibility for settings that did not land in 5.8 + // and have had their `custom` prefixed removed since. + // Can be removed when the plugin minimum required version is WordPress 5.9. + // This doesn't need to land in WordPress core. + if ( 1 === $theme_json['version'] ) { + $theme_json = self::migrate_v1_remove_custom_prefixes( $theme_json ); + } + + if ( 1 === $theme_json['version'] ) { + $theme_json = self::migrate_v1_to_v2( $theme_json ); + } + + return $theme_json; + } + + /** + * Converts a v0 data structure into a v1 one. + * + * It expects input data to come in v0 form: + * + * { + * 'root': { + * 'settings': { ... }, + * 'styles': { ... } + * } + * 'core/paragraph': { + * 'styles': { ... }, + * 'settings': { ... } + * }, + * 'core/heading/h1': { + * 'settings': { ... } + * 'styles': { ... } + * }, + * 'core/heading/h2': { + * 'settings': { ... } + * 'styles': { ... } + * }, + * } + * + * And it will return v1 form: + * + * { + * 'settings': { + * 'border': { ... } + * 'color': { ... }, + * 'typography': { ... }, + * 'spacing': { ... }, + * 'custom': { ... }, + * 'blocks': { + * 'core/paragraph': { ... } + * } + * }, + * styles: { + * border: { ... } + * color: { ... }, + * typography: { ... }, + * spacing: { ... }, + * custom: { ... }, + * blocks: { + * core/paragraph: { ... } + * core/heading: { + * elements: { + * h1: { ... }, + * h2: { ... } + * } + * } + * } + * } + * } + * + * @param array $old Data in v0 schema. + * + * @return array Data in v1 schema. + */ + private static function migrate_v0_to_v1( $old ) { + // Copy everything. + $new = $old; + + // Overwrite the things that change. + if ( isset( $old['settings'] ) ) { + $new['settings'] = self::migrate_v0_to_v1_process_settings( $old['settings'] ); + } + if ( isset( $old['styles'] ) ) { + $new['styles'] = self::migrate_v0_to_v1_process_styles( $old['styles'] ); + } + + $new['version'] = 1; + + return $new; + } + + /** + * Processes the settings subtree. + * + * @param array $settings Array to process. + * + * @return array The settings in the new format. + */ + private static function migrate_v0_to_v1_process_settings( $settings ) { + $new = array(); + $blocks_to_consolidate = array( + 'core/heading/h1' => 'core/heading', + 'core/heading/h2' => 'core/heading', + 'core/heading/h3' => 'core/heading', + 'core/heading/h4' => 'core/heading', + 'core/heading/h5' => 'core/heading', + 'core/heading/h6' => 'core/heading', + 'core/post-title/h1' => 'core/post-title', + 'core/post-title/h2' => 'core/post-title', + 'core/post-title/h3' => 'core/post-title', + 'core/post-title/h4' => 'core/post-title', + 'core/post-title/h5' => 'core/post-title', + 'core/post-title/h6' => 'core/post-title', + 'core/query-title/h1' => 'core/query-title', + 'core/query-title/h2' => 'core/query-title', + 'core/query-title/h3' => 'core/query-title', + 'core/query-title/h4' => 'core/query-title', + 'core/query-title/h5' => 'core/query-title', + 'core/query-title/h6' => 'core/query-title', + ); + + $paths_to_override = array( + array( 'color', 'palette' ), + array( 'color', 'gradients' ), + array( 'spacing', 'units' ), + array( 'typography', 'fontSizes' ), + array( 'typography', 'fontFamilies' ), + array( 'custom' ), + ); + + // 'defaults' settings become top-level. + if ( isset( $settings[ self::V0_ALL_BLOCKS_NAME ] ) ) { + $new = $settings[ self::V0_ALL_BLOCKS_NAME ]; + unset( $settings[ self::V0_ALL_BLOCKS_NAME ] ); + } + + // 'root' settings override 'defaults'. + if ( isset( $settings[ self::V0_ROOT_BLOCK_NAME ] ) ) { + $new = array_replace_recursive( $new, $settings[ self::V0_ROOT_BLOCK_NAME ] ); + + // The array_replace_recursive algorithm merges at the leaf level. + // This means that when a leaf value is an array, + // the incoming array won't replace the existing, + // but the numeric indexes are used for replacement. + // + // These cases we hold into $paths_to_override + // and need to replace them with the new data. + foreach ( $paths_to_override as $path ) { + $root_value = _wp_array_get( + $settings, + array_merge( array( self::V0_ROOT_BLOCK_NAME ), $path ), + null + ); + if ( null !== $root_value ) { + _wp_array_set( $new, $path, $root_value ); + } + } + + unset( $settings[ self::V0_ROOT_BLOCK_NAME ] ); + } + + if ( empty( $settings ) ) { + return $new; + } + + /* + * At this point, it only contains block's data. + * However, some block data we need to consolidate + * into a different section, as it's the case for: + * + * - core/heading/h1, core/heading/h2, ... => core/heading + * - core/post-title/h1, core/post-title/h2, ... => core/post-title + * - core/query-title/h1, core/query-title/h2, ... => core/query-title + * + */ + $new['blocks'] = $settings; + foreach ( $blocks_to_consolidate as $old_name => $new_name ) { + // Unset the $old_name. + unset( $new[ $old_name ] ); + + // Consolidate the $new value. + $block_settings = _wp_array_get( $settings, array( $old_name ), null ); + if ( null !== $block_settings ) { + $new_path = array( 'blocks', $new_name ); + $new_settings = array(); + _wp_array_set( $new_settings, $new_path, $block_settings ); + + $new = array_replace_recursive( $new, $new_settings ); + foreach ( $paths_to_override as $path ) { + $block_value = _wp_array_get( $block_settings, $path, null ); + if ( null !== $block_value ) { + _wp_array_set( $new, array_merge( $new_path, $path ), $block_value ); + } + } + } + } + + return $new; + } + + /** + * Processes the styles subtree. + * + * @param array $styles Array to process. + * + * @return array The styles in the new format. + */ + private static function migrate_v0_to_v1_process_styles( $styles ) { + $new = array(); + $block_heading = array( + 'core/heading/h1' => 'h1', + 'core/heading/h2' => 'h2', + 'core/heading/h3' => 'h3', + 'core/heading/h4' => 'h4', + 'core/heading/h5' => 'h5', + 'core/heading/h6' => 'h6', + ); + $blocks_to_consolidate = array( + 'core/post-title/h1' => 'core/post-title', + 'core/post-title/h2' => 'core/post-title', + 'core/post-title/h3' => 'core/post-title', + 'core/post-title/h4' => 'core/post-title', + 'core/post-title/h5' => 'core/post-title', + 'core/post-title/h6' => 'core/post-title', + 'core/query-title/h1' => 'core/query-title', + 'core/query-title/h2' => 'core/query-title', + 'core/query-title/h3' => 'core/query-title', + 'core/query-title/h4' => 'core/query-title', + 'core/query-title/h5' => 'core/query-title', + 'core/query-title/h6' => 'core/query-title', + ); + + // Styles within root become top-level. + if ( isset( $styles[ self::V0_ROOT_BLOCK_NAME ] ) ) { + $new = $styles[ self::V0_ROOT_BLOCK_NAME ]; + unset( $styles[ self::V0_ROOT_BLOCK_NAME ] ); + + // Transform root.styles.color.link into elements.link.color.text. + if ( isset( $new['color']['link'] ) ) { + $new['elements']['link']['color']['text'] = $new['color']['link']; + unset( $new['color']['link'] ); + } + } + + if ( empty( $styles ) ) { + return $new; + } + + /* + * At this point, it only contains block's data. + * However, we still need to consolidate a few things: + * + * - link element => transform from link color property + * - heading elements => consolidate multiple blocks (core/heading/h1, core/heading/h2) + * into a single one (core/heading). + */ + $new['blocks'] = $styles; + + // link elements. + foreach ( $new['blocks'] as $block_name => $metadata ) { + if ( isset( $metadata['color']['link'] ) ) { + $new['blocks'][ $block_name ]['elements']['link']['color']['text'] = $metadata['color']['link']; + unset( $new['blocks'][ $block_name ]['color']['link'] ); + } + } + + /* + * The heading block needs a special treatment: + * + * - if it has a link color => it needs to be moved to the blocks.core/heading + * - the rest is consolidated into the corresponding element + * + */ + foreach ( $block_heading as $old_name => $new_name ) { + if ( ! isset( $new['blocks'][ $old_name ] ) ) { + continue; + } + + _wp_array_set( $new, array( 'elements', $new_name ), $new['blocks'][ $old_name ] ); + + if ( isset( $new['blocks'][ $old_name ]['elements'] ) ) { + _wp_array_set( $new, array( 'blocks', 'core/heading', 'elements' ), $new['blocks'][ $old_name ]['elements'] ); + } + + unset( $new['blocks'][ $old_name ] ); + + } + + /* + * Port the styles from the old blocks to the new, + * overriding the previous values. + */ + foreach ( $blocks_to_consolidate as $old_name => $new_name ) { + if ( ! isset( $new['blocks'][ $old_name ] ) ) { + continue; + } + + _wp_array_set( $new, array( 'blocks', $new_name ), $new['blocks'][ $old_name ] ); + unset( $new['blocks'][ $old_name ] ); + + } + + return $new; + } + + /** + * Removes the custom prefixes for a few properties that only worked in the plugin: + * + * 'border.customColor' => 'border.color', + * 'border.customStyle' => 'border.style', + * 'border.customWidth' => 'border.width', + * 'typography.customFontStyle' => 'typography.fontStyle', + * 'typography.customFontWeight' => 'typography.fontWeight', + * 'typography.customLetterSpacing' => 'typography.letterSpacing', + * 'typography.customTextDecorations' => 'typography.textDecoration', + * 'typography.customTextTransforms' => 'typography.textTransform', + * + * @param array $old Data to migrate. + * + * @return array Data without the custom prefixes. + */ + private static function migrate_v1_remove_custom_prefixes( $old ) { + // Copy everything. + $new = $old; + + // Overwrite the things that change. + if ( isset( $old['settings'] ) ) { + $new['settings'] = self::rename_paths( $old['settings'], self::V1_RENAMED_PATHS ); + } + + return $new; + } + + /** + * Removes the custom prefixes for a few properties + * that were part of v1: + * + * 'border.customRadius' => 'border.radius', + * 'spacing.customMargin' => 'spacing.margin', + * 'spacing.customPadding' => 'spacing.padding', + * 'typography.customLineHeight' => 'typography.lineHeight', + * + * @param array $old Data to migrate. + * + * @return array Data without the custom prefixes. + */ + private static function migrate_v1_to_v2( $old ) { + // Copy everything. + $new = $old; + + // Overwrite the things that changed. + if ( isset( $old['settings'] ) ) { + $new['settings'] = self::rename_paths( $old['settings'], self::V1_TO_V2_RENAMED_PATHS ); + } + + // Set the new version. + $new['version'] = 2; + + return $new; + } + + /** + * Processes the settings subtree. + * + * @param array $settings Array to process. + * @param array $paths_to_rename Paths to rename. + * + * @return array The settings in the new format. + */ + private static function rename_paths( $settings, $paths_to_rename ) { + $new_settings = $settings; + + // Process any renamed/moved paths within default settings. + self::rename_settings( $new_settings, $paths_to_rename ); + + // Process individual block settings. + if ( isset( $new_settings['blocks'] ) && is_array( $new_settings['blocks'] ) ) { + foreach ( $new_settings['blocks'] as &$block_settings ) { + self::rename_settings( $block_settings, $paths_to_rename ); + } + } + + return $new_settings; + } + + /** + * Processes a settings array, renaming or moving properties. + * + * @param array $settings Reference to settings either defaults or an individual block's. + * @param array $paths_to_rename Paths to rename. + */ + private static function rename_settings( &$settings, $paths_to_rename ) { + foreach ( $paths_to_rename as $original => $renamed ) { + $original_path = explode( '.', $original ); + $renamed_path = explode( '.', $renamed ); + $current_value = _wp_array_get( $settings, $original_path, null ); + + if ( null !== $current_value ) { + _wp_array_set( $settings, $renamed_path, $current_value ); + self::unset_setting_by_path( $settings, $original_path ); + } + } + } + + /** + * Removes a property from within the provided settings by its path. + * + * @param array $settings Reference to the current settings array. + * @param array $path Path to the property to be removed. + * + * @return void + */ + private static function unset_setting_by_path( &$settings, $path ) { + $tmp_settings = &$settings; // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable + $last_key = array_pop( $path ); + foreach ( $path as $key ) { + $tmp_settings = &$tmp_settings[ $key ]; + } + + unset( $tmp_settings[ $last_key ] ); + } +} diff --git a/lib/compat/wordpress-5.9/default-editor-styles.php b/lib/compat/wordpress-5.9/default-editor-styles.php new file mode 100644 index 0000000000000..ff796b53c02a7 --- /dev/null +++ b/lib/compat/wordpress-5.9/default-editor-styles.php @@ -0,0 +1,41 @@ + file_get_contents( $default_editor_styles_file ), + ), + ); + + // Remove the default font addition from Core Code. + $styles_without_core_styles = array(); + if ( isset( $settings['styles'] ) ) { + foreach ( $settings['styles'] as $style ) { + if ( + ! isset( $style['__unstableType'] ) || + 'core' !== $style['__unstableType'] + ) { + $styles_without_core_styles[] = $style; + } + } + } + $settings['styles'] = $styles_without_core_styles; + + return $settings; +} +add_filter( 'block_editor_settings_all', 'gutenberg_extend_block_editor_settings_with_default_editor_styles' ); diff --git a/lib/compat/wordpress-5.9/default-theme-supports.php b/lib/compat/wordpress-5.9/default-theme-supports.php new file mode 100644 index 0000000000000..0c204b46d0a5e --- /dev/null +++ b/lib/compat/wordpress-5.9/default-theme-supports.php @@ -0,0 +1,23 @@ + +
+
+ wp_remote_retrieve_body( $response ), + ); + } + } else { + $file = get_theme_file_path( $style ); + if ( is_file( $file ) ) { + $styles[] = array( + 'css' => file_get_contents( $file ), + 'baseURL' => get_theme_file_uri( $style ), + ); + } + } + } + } + + return $styles; +} + +/** + * Initialize the Gutenberg Site Editor. + * + * @since 7.2.0 + * + * @param string $hook Page. + */ +function gutenberg_edit_site_init( $hook ) { + global $current_screen, $post, $editor_styles; + + if ( ! gutenberg_is_edit_site_page( $hook ) ) { + return; + } + + if ( gutenberg_is_edit_site_list_page() ) { + $post_type = get_post_type_object( $_GET['postType'] ); + + if ( ! $post_type ) { + wp_die( __( 'Invalid post type.', 'gutenberg' ) ); + } + } + + // Default to is-fullscreen-mode to avoid rendering wp-admin navigation menu while loading and + // having jumps in the UI. + add_filter( + 'admin_body_class', + static function( $classes ) { + return "$classes is-fullscreen-mode"; + } + ); + + $indexed_template_types = array(); + foreach ( get_default_block_template_types() as $slug => $template_type ) { + $template_type['slug'] = (string) $slug; + $indexed_template_types[] = $template_type; + } + + $custom_settings = array( + 'siteUrl' => site_url(), + 'postsPerPage' => get_option( 'posts_per_page' ), + 'styles' => gutenberg_get_editor_styles(), + 'defaultTemplateTypes' => $indexed_template_types, + 'defaultTemplatePartAreas' => get_allowed_block_template_part_areas(), + '__unstableHomeTemplate' => gutenberg_resolve_home_template(), + ); + + // Add additional back-compat patterns registered by `current_screen` et al. + $custom_settings['__experimentalAdditionalBlockPatterns'] = WP_Block_Patterns_Registry::get_instance()->get_all_registered( true ); + $custom_settings['__experimentalAdditionalBlockPatternCategories'] = WP_Block_Pattern_Categories_Registry::get_instance()->get_all_registered( true ); + + /** + * Make the WP Screen object aware that this is a block editor page. + * Since custom blocks check whether the screen is_block_editor, + * this is required for custom blocks to be loaded. + * See wp_enqueue_registered_block_scripts_and_styles in wp-includes/script-loader.php + */ + $current_screen->is_block_editor( true ); + + $site_editor_context = new WP_Block_Editor_Context( array( 'name' => 'core/edit-site' ) ); + $settings = get_block_editor_settings( $custom_settings, $site_editor_context ); + $active_global_styles_id = WP_Theme_JSON_Resolver_Gutenberg::get_user_global_styles_post_id(); + $active_theme = wp_get_theme()->get_stylesheet(); + gutenberg_initialize_editor( + 'edit_site_editor', + 'edit-site', + array( + 'preload_paths' => array_merge( + array( + array( '/wp/v2/media', 'OPTIONS' ), + '/wp/v2/types?context=view', + '/wp/v2/types/wp_template?context=edit', + '/wp/v2/types/wp_template-part?context=edit', + '/wp/v2/taxonomies?context=view', + '/wp/v2/pages?context=edit', + '/wp/v2/categories?context=edit', + '/wp/v2/posts?context=edit', + '/wp/v2/tags?context=edit', + '/wp/v2/templates?context=edit&per_page=-1', + '/wp/v2/template-parts?context=edit&per_page=-1', + '/wp/v2/settings', + '/wp/v2/themes?context=edit&status=active', + '/wp/v2/global-styles/' . $active_global_styles_id . '?context=edit', + '/wp/v2/global-styles/' . $active_global_styles_id, + '/wp/v2/global-styles/themes/' . $active_theme, + ) + ), + 'initializer_name' => 'initializeEditor', + 'editor_settings' => $settings, + ) + ); + + wp_add_inline_script( + 'wp-blocks', + sprintf( 'wp.blocks.setCategories( %s );', wp_json_encode( get_block_categories( $post ) ) ), + 'after' + ); + + wp_enqueue_script( 'wp-edit-site' ); + wp_enqueue_script( 'wp-format-library' ); + wp_enqueue_style( 'wp-edit-site' ); + wp_enqueue_style( 'wp-format-library' ); + wp_enqueue_media(); + + if ( + current_theme_supports( 'wp-block-styles' ) || + ( ! is_array( $editor_styles ) || count( $editor_styles ) === 0 ) + ) { + wp_enqueue_style( 'wp-block-library-theme' ); + } + + /** + * Fires after block assets have been enqueued for the editing interface. + * + * Call `add_action` on any hook before 'admin_enqueue_scripts'. + * + * In the function call you supply, simply use `wp_enqueue_script` and + * `wp_enqueue_style` to add your functionality to the block editor. + * + * @since 5.0.0 + */ + + do_action( 'enqueue_block_editor_assets' ); + +} +add_action( 'admin_enqueue_scripts', 'gutenberg_edit_site_init' ); + +/** + * Register a core site setting for front page information. + */ +function register_site_editor_homepage_settings() { + register_setting( + 'reading', + 'show_on_front', + array( + 'show_in_rest' => true, + 'type' => 'string', + 'description' => __( 'What to show on the front page', 'gutenberg' ), + ) + ); + + register_setting( + 'reading', + 'page_on_front', + array( + 'show_in_rest' => true, + 'type' => 'number', + 'description' => __( 'The ID of the page that should be displayed on the front page', 'gutenberg' ), + ) + ); + + register_setting( + 'reading', + 'page_for_posts', + array( + 'show_in_rest' => true, + 'type' => 'number', + 'description' => __( 'The ID of the page that should display the latest posts', 'gutenberg' ), + ) + ); +} +add_action( 'init', 'register_site_editor_homepage_settings', 10 ); + +/** + * Tells the script loader to load the scripts and styles of custom block on site editor screen. + * + * @param bool $is_block_editor_screen Current decision about loading block assets. + * @return bool Filtered decision about loading block assets. + */ +function gutenberg_site_editor_load_block_editor_scripts_and_styles( $is_block_editor_screen ) { + return ( is_callable( 'get_current_screen' ) && get_current_screen() && 'appearance_page_gutenberg-edit-site' === get_current_screen()->base ) + ? true + : $is_block_editor_screen; +} +add_filter( 'should_load_block_editor_scripts_and_styles', 'gutenberg_site_editor_load_block_editor_scripts_and_styles' ); + +/** + * Do a server-side redirection if missing `postType` and `postId` + * query args when visiting site editor. + * + * Note: The `site-editor.php` should handle redirection when migrated into the WP core. + * + * @return void + */ +function gutenberg_maybe_redirect_to_homepage() { + if ( empty( $_GET['postType'] ) && empty( $_GET['postId'] ) ) { + $template = gutenberg_resolve_home_template(); + if ( ! $template ) { + return; + } + + $redirect_url = add_query_arg( + $template, + admin_url( 'themes.php?page=gutenberg-edit-site' ) + ); + wp_safe_redirect( $redirect_url ); + } +} +add_action( 'load-appearance_page_gutenberg-edit-site', 'gutenberg_maybe_redirect_to_homepage' ); diff --git a/lib/compat/wordpress-5.9/global-styles-css-custom-properties.php b/lib/compat/wordpress-5.9/global-styles-css-custom-properties.php new file mode 100644 index 0000000000000..bcc30c1411700 --- /dev/null +++ b/lib/compat/wordpress-5.9/global-styles-css-custom-properties.php @@ -0,0 +1,20 @@ + false ) ); + $decoded_file = json_decode( file_get_contents( $filename ), $options['associative'] ); + + if ( JSON_ERROR_NONE !== json_last_error() ) { + trigger_error( + sprintf( + /* translators: 1: Path to the JSON file, 2: Error message. */ + __( 'Error when decoding a JSON file at path %1$s: %2$s', 'gutenberg' ), + $filename, + json_last_error_msg() + ) + ); + return $result; + } + + return $decoded_file; + } +} diff --git a/lib/compat/wordpress-5.9/kses.php b/lib/compat/wordpress-5.9/kses.php new file mode 100644 index 0000000000000..648718d6facd2 --- /dev/null +++ b/lib/compat/wordpress-5.9/kses.php @@ -0,0 +1,82 @@ + __( 'Navigation Menus', 'gutenberg' ), + 'singular_name' => __( 'Navigation Menu', 'gutenberg' ), + 'menu_name' => _x( 'Navigation Menus', 'Admin Menu text', 'gutenberg' ), + 'add_new' => _x( 'Add New', 'Navigation Menu', 'gutenberg' ), + 'add_new_item' => __( 'Add New Navigation Menu', 'gutenberg' ), + 'new_item' => __( 'New Navigation Menu', 'gutenberg' ), + 'edit_item' => __( 'Edit Navigation Menu', 'gutenberg' ), + 'view_item' => __( 'View Navigation Menu', 'gutenberg' ), + 'all_items' => __( 'All Navigation Menus', 'gutenberg' ), + 'search_items' => __( 'Search Navigation Menus', 'gutenberg' ), + 'parent_item_colon' => __( 'Parent Navigation Menu:', 'gutenberg' ), + 'not_found' => __( 'No Navigation Menu found.', 'gutenberg' ), + 'not_found_in_trash' => __( 'No Navigation Menu found in Trash.', 'gutenberg' ), + 'archives' => __( 'Navigation Menu archives', 'gutenberg' ), + 'insert_into_item' => __( 'Insert into Navigation Menu', 'gutenberg' ), + 'uploaded_to_this_item' => __( 'Uploaded to this Navigation Menu', 'gutenberg' ), + // Some of these are a bit weird, what are they for? + 'filter_items_list' => __( 'Filter Navigation Menu list', 'gutenberg' ), + 'items_list_navigation' => __( 'Navigation Menus list navigation', 'gutenberg' ), + 'items_list' => __( 'Navigation Menus list', 'gutenberg' ), + ); + + $args = array( + 'labels' => $labels, + 'description' => __( 'Navigation menus.', 'gutenberg' ), + 'public' => false, + 'has_archive' => false, + 'show_ui' => true, + 'show_in_menu' => false, + 'show_in_admin_bar' => false, + 'show_in_rest' => true, + 'map_meta_cap' => true, + 'rest_base' => 'navigation', + 'rest_controller_class' => WP_REST_Posts_Controller::class, + 'supports' => array( + 'title', + 'editor', + 'revisions', + ), + 'capabilities' => array( + 'edit_others_posts' => 'edit_theme_options', + 'delete_posts' => 'edit_theme_options', + 'publish_posts' => 'edit_theme_options', + 'create_posts' => 'edit_theme_options', + 'read_private_posts' => 'edit_theme_options', + 'delete_private_posts' => 'edit_theme_options', + 'delete_published_posts' => 'edit_theme_options', + 'delete_others_posts' => 'edit_theme_options', + 'edit_private_posts' => 'edit_theme_options', + 'edit_published_posts' => 'edit_theme_options', + ), + ); + + register_post_type( 'wp_navigation', $args ); +} +add_action( 'init', 'gutenberg_register_navigation_post_type' ); + +/** + * Disable "Post Attributes" for wp_navigation post type. + * + * The attributes are also conditionally enabled when a site has custom templates. + * Block Theme templates can be available for every post type. + */ +add_filter( 'theme_wp_navigation_templates', '__return_empty_array' ); + +/** + * Disable block editor for wp_navigation type posts so they can be managed via the UI. + * + * @param bool $value Whether the CPT supports block editor or not. + * @param string $post_type Post type. + * + * @return bool + */ +function gutenberg_disable_block_editor_for_navigation_post_type( $value, $post_type ) { + if ( 'wp_navigation' === $post_type ) { + return false; + } + + return $value; +} + +add_filter( 'use_block_editor_for_post_type', 'gutenberg_disable_block_editor_for_navigation_post_type', 10, 2 ); + +/** + * This callback disables the content editor for wp_navigation type posts. + * Content editor cannot handle wp_navigation type posts correctly. + * We cannot disable the "editor" feature in the wp_navigation's CPT definition + * because it disables the ability to save navigation blocks via REST API. + * + * @param WP_Post $post An instance of WP_Post class. + */ +function gutenberg_disable_content_editor_for_navigation_post_type( $post ) { + $post_type = get_post_type( $post ); + if ( 'wp_navigation' !== $post_type ) { + return; + } + + remove_post_type_support( $post_type, 'editor' ); +} + +add_action( 'edit_form_after_title', 'gutenberg_disable_content_editor_for_navigation_post_type', 10, 1 ); + +/** + * This callback enables content editor for wp_navigation type posts. + * We need to enable it back because we disable it to hide + * the content editor for wp_navigation type posts. + * + * @see gutenberg_disable_content_editor_for_navigation_post_type + * + * @param WP_Post $post An instance of WP_Post class. + */ +function gutenberg_enable_content_editor_for_navigation_post_type( $post ) { + $post_type = get_post_type( $post ); + if ( 'wp_navigation' !== $post_type ) { + return; + } + + add_post_type_support( $post_type, 'editor' ); +} + +add_action( 'edit_form_after_editor', 'gutenberg_enable_content_editor_for_navigation_post_type', 10, 1 ); + +/** + * Rename the menu title from "All Navigation Menus" to "Navigation Menus". + */ +function gutenberg_rename_navigation_post_type_admin_menu_entry() { + global $submenu; + if ( ! isset( $submenu['themes.php'] ) ) { + return; + } + + $post_type = get_post_type_object( 'wp_navigation' ); + if ( ! $post_type ) { + return; + } + + $menu_title_index = 0; + foreach ( $submenu['themes.php'] as $key => $menu_item ) { + if ( $post_type->labels->all_items === $menu_item[ $menu_title_index ] ) { + $submenu['themes.php'][ $key ][ $menu_title_index ] = $post_type->labels->menu_name; // phpcs:ignore WordPress.WP.GlobalVariablesOverride + return; + } + } +} + +add_action( 'admin_menu', 'gutenberg_rename_navigation_post_type_admin_menu_entry' ); + +/** + * Registers the navigation areas supported by the current theme. The expected + * shape of the argument is: + * array( + * 'primary' => 'Primary', + * 'secondary' => 'Secondary', + * 'tertiary' => 'Tertiary', + * ) + * + * @param array $new_areas Supported navigation areas. + */ +function gutenberg_register_navigation_areas( $new_areas ) { + global $gutenberg_navigation_areas; + $gutenberg_navigation_areas = $new_areas; +} + +// Register the default navigation areas. +gutenberg_register_navigation_areas( + array( + 'primary' => 'Primary', + 'secondary' => 'Secondary', + 'tertiary' => 'Tertiary', + ) +); + +/** + * Returns the available navigation areas. + * + * @return array Registered navigation areas. + */ +function gutenberg_get_navigation_areas() { + global $gutenberg_navigation_areas; + return $gutenberg_navigation_areas; +} + +/** + * Retrieves navigation areas. + * + * @return array Navigation areas. + */ +function gutenberg_get_navigation_areas_menus() { + $areas = get_option( 'wp_navigation_areas', array() ); + if ( ! $areas ) { + // Original key used `fse` prefix but Core options should use `wp`. + // We fallback to the legacy option to catch sites with values in the + // original location. + $legacy_option_key = 'fse_navigation_areas'; + $areas = get_option( $legacy_option_key, array() ); + } + return $areas; +} + +/** + * Shim that hides ability to edit visibility and status for wp_navigation type posts. + * When merged to Core, the CSS below should be moved to wp-admin/css/edit.css. + * + * This shim can be removed when the Gutenberg plugin requires a WordPress + * version that has the ticket below. + * + * @see https://core.trac.wordpress.org/ticket/54407 + * + * @param string $hook The current admin page. + */ +function gutenberg_hide_visibility_and_status_for_navigation_posts( $hook ) { + $allowed_hooks = array( 'post.php', 'post-new.php' ); + if ( ! in_array( $hook, $allowed_hooks, true ) ) { + return; + } + + /** + * HACK: We're hiding the description field using CSS because this + * cannot be done using a filter or an action. + */ + + $css = << __( 'Global Styles', 'gutenberg' ), + 'description' => 'Global styles to include in themes.', + 'public' => false, + 'show_ui' => false, + 'show_in_rest' => false, + 'rewrite' => false, + 'capabilities' => array( + 'read' => 'edit_theme_options', + 'create_posts' => 'edit_theme_options', + 'edit_posts' => 'edit_theme_options', + 'edit_published_posts' => 'edit_theme_options', + 'delete_published_posts' => 'edit_theme_options', + 'edit_others_posts' => 'edit_theme_options', + 'delete_others_posts' => 'edit_theme_options', + ), + 'map_meta_cap' => true, + 'supports' => array( + 'title', + 'editor', + 'revisions', + ), + ); + register_post_type( 'wp_global_styles', $args ); + } + + add_action( 'init', 'register_global_styles_custom_post_type' ); +} diff --git a/lib/compat/wordpress-5.9/rest-active-global-styles.php b/lib/compat/wordpress-5.9/rest-active-global-styles.php new file mode 100644 index 0000000000000..af7f789110f66 --- /dev/null +++ b/lib/compat/wordpress-5.9/rest-active-global-styles.php @@ -0,0 +1,33 @@ +get_stylesheet() === wp_get_theme()->get_stylesheet() ) { + // This creates a record for the current theme if not existent. + $id = WP_Theme_JSON_Resolver_Gutenberg::get_user_global_styles_post_id(); + } else { + $user_cpt = WP_Theme_JSON_Resolver_Gutenberg::get_user_data_from_wp_global_styles( $theme ); + $id = isset( $user_cpt['ID'] ) ? $user_cpt['ID'] : null; + } + + if ( $id ) { + $response->add_link( + 'https://api.w.org/user-global-styles', + rest_url( 'wp/v2/global-styles/' . $id ) + ); + } + + return $response; +} + +add_filter( 'rest_prepare_theme', 'gutenberg_add_active_global_styles_link', 10, 2 ); diff --git a/lib/compat/wordpress-5.9/rest-api.php b/lib/compat/wordpress-5.9/rest-api.php new file mode 100644 index 0000000000000..8414f9e514d15 --- /dev/null +++ b/lib/compat/wordpress-5.9/rest-api.php @@ -0,0 +1,148 @@ +register_routes(); +} +add_action( 'rest_api_init', 'gutenberg_register_url_details_routes' ); + +/** + * Registers the menu locations REST API routes. + */ +function gutenberg_register_rest_menu_location() { + $nav_menu_location = new WP_REST_Menu_Locations_Controller(); + $nav_menu_location->register_routes(); +} +add_action( 'rest_api_init', 'gutenberg_register_rest_menu_location' ); + +/** + * Hook in to the nav menu item post type and enable a post type rest endpoint. + * + * @param array $args Current registered post type args. + * @param string $post_type Name of post type. + * + * @return array + */ +function gutenberg_api_nav_menus_post_type_args( $args, $post_type ) { + if ( 'nav_menu_item' === $post_type ) { + $args['show_in_rest'] = true; + $args['rest_base'] = 'menu-items'; + $args['rest_controller_class'] = 'WP_REST_Menu_Items_Controller'; + } + + return $args; +} +add_filter( 'register_post_type_args', 'gutenberg_api_nav_menus_post_type_args', 10, 2 ); + +/** + * Hook in to the nav_menu taxonomy and enable a taxonomy rest endpoint. + * + * @param array $args Current registered taxonomy args. + * @param string $taxonomy Name of taxonomy. + * + * @return array + */ +function gutenberg_api_nav_menus_taxonomy_args( $args, $taxonomy ) { + if ( 'nav_menu' === $taxonomy ) { + $args['show_in_rest'] = true; + $args['rest_base'] = 'menus'; + $args['rest_controller_class'] = 'WP_REST_Menus_Controller'; + } + + return $args; +} +add_filter( 'register_taxonomy_args', 'gutenberg_api_nav_menus_taxonomy_args', 10, 2 ); + +/** + * Exposes the site icon url to the Gutenberg editor through the WordPress REST + * API. The site icon url should instead be fetched from the wp/v2/settings + * endpoint when https://github.com/WordPress/gutenberg/pull/19967 is complete. + * + * @param WP_REST_Response $response Response data served by the WordPress REST index endpoint. + * @return WP_REST_Response + */ +function gutenberg_register_site_icon_url( $response ) { + $data = $response->data; + $data['site_icon_url'] = get_site_icon_url(); + $response->set_data( $data ); + return $response; +} + +add_filter( 'rest_index', 'gutenberg_register_site_icon_url' ); + +/** + * Exposes the site logo to the Gutenberg editor through the WordPress REST + * API. This is used for fetching this information when user has no rights + * to update settings. + * + * @param WP_REST_Response $response Response data served by the WordPress REST index endpoint. + * @return WP_REST_Response + */ +function gutenberg_register_site_logo_to_rest_index( $response ) { + $site_logo_id = get_theme_mod( 'custom_logo' ); + $response->data['site_logo'] = $site_logo_id; + if ( $site_logo_id ) { + $response->add_link( + 'https://api.w.org/featuredmedia', + rest_url( 'wp/v2/media/' . $site_logo_id ), + array( + 'embeddable' => true, + ) + ); + } + return $response; +} + +add_filter( 'rest_index', 'gutenberg_register_site_logo_to_rest_index' ); + +/** + * Filters WP_User_Query arguments when querying users via the REST API. + * + * Allow using the has_published_post argument. + * + * @param array $prepared_args Array of arguments for WP_User_Query. + * @param WP_REST_Request $request The REST API request. + * + * @return array Returns modified $prepared_args. + */ +function gutenberg_rest_user_query_has_published_posts( $prepared_args, $request ) { + if ( ! empty( $request['has_published_posts'] ) ) { + $prepared_args['has_published_posts'] = ( true === $request['has_published_posts'] ) + ? get_post_types( array( 'show_in_rest' => true ), 'names' ) + : (array) $request['has_published_posts']; + } + return $prepared_args; +} +add_filter( 'rest_user_query', 'gutenberg_rest_user_query_has_published_posts', 10, 2 ); + +/** + * Filters REST API collection parameters for the users controller. + * + * @param array $query_params JSON Schema-formatted collection parameters. + * + * @return array Returns the $query_params with "has_published_posts". + */ +function gutenberg_rest_user_collection_params_has_published_posts( $query_params ) { + $query_params['has_published_posts'] = array( + 'description' => __( 'Limit result set to users who have published posts.', 'gutenberg' ), + 'type' => array( 'boolean', 'array' ), + 'items' => array( + 'type' => 'string', + 'enum' => get_post_types( array( 'show_in_rest' => true ), 'names' ), + ), + ); + return $query_params; +} +add_filter( 'rest_user_collection_params', 'gutenberg_rest_user_collection_params_has_published_posts' ); diff --git a/lib/compat/wordpress-5.9/script-loader.php b/lib/compat/wordpress-5.9/script-loader.php new file mode 100644 index 0000000000000..fc3eb95454e99 --- /dev/null +++ b/lib/compat/wordpress-5.9/script-loader.php @@ -0,0 +1,74 @@ +registered['global-styles'] ) ) { + // There's a GS stylesheet (theme has theme.json), so we overwrite it. + wp_styles()->registered['global-styles']->extra['after'][0] = $stylesheet; + } else { + // No GS stylesheet (theme has no theme.json), so we enqueue a new one. + wp_register_style( 'global-styles', false, array(), true, true ); + wp_add_inline_style( 'global-styles', $stylesheet ); + wp_enqueue_style( 'global-styles' ); + } +} +add_action( 'wp_enqueue_scripts', 'gutenberg_enqueue_global_styles_assets' ); +add_action( 'wp_footer', 'gutenberg_enqueue_global_styles_assets' ); + +/** + * This function takes care of adding inline styles + * in the proper place, depending on the theme in use. + * + * For block themes, it's loaded in the head. + * For classic ones, it's loaded in the body + * because the wp_head action happens before + * the render_block. + * + * @link https://core.trac.wordpress.org/ticket/53494. + * + * @param string $style String containing the CSS styles to be added. + */ +function gutenberg_enqueue_block_support_styles( $style ) { + $action_hook_name = 'wp_footer'; + if ( wp_is_block_theme() ) { + $action_hook_name = 'wp_head'; + } + add_action( + $action_hook_name, + static function () use ( $style ) { + echo "\n"; + } + ); +} diff --git a/lib/template-canvas.php b/lib/compat/wordpress-5.9/template-canvas.php similarity index 96% rename from lib/template-canvas.php rename to lib/compat/wordpress-5.9/template-canvas.php index 4d29113dbf8e0..66805be797dcd 100644 --- a/lib/template-canvas.php +++ b/lib/compat/wordpress-5.9/template-canvas.php @@ -10,8 +10,7 @@ * This needs to run before so that blocks can add scripts and styles in wp_head(). */ $template_html = gutenberg_get_the_template_html(); -?> - +?> > diff --git a/lib/compat/wordpress-5.9/template-parts.php b/lib/compat/wordpress-5.9/template-parts.php new file mode 100644 index 0000000000000..102c9275be408 --- /dev/null +++ b/lib/compat/wordpress-5.9/template-parts.php @@ -0,0 +1,129 @@ + __( 'Template Parts', 'gutenberg' ), + 'singular_name' => __( 'Template Part', 'gutenberg' ), + 'menu_name' => _x( 'Template Parts', 'Admin Menu text', 'gutenberg' ), + 'add_new' => _x( 'Add New', 'Template Part', 'gutenberg' ), + 'add_new_item' => __( 'Add New Template Part', 'gutenberg' ), + 'new_item' => __( 'New Template Part', 'gutenberg' ), + 'edit_item' => __( 'Edit Template Part', 'gutenberg' ), + 'view_item' => __( 'View Template Part', 'gutenberg' ), + 'view_items' => __( 'View Template Parts', 'gutenberg' ), + 'all_items' => __( 'All Template Parts', 'gutenberg' ), + 'search_items' => __( 'Search Template Parts', 'gutenberg' ), + 'parent_item_colon' => __( 'Parent Template Part:', 'gutenberg' ), + 'not_found' => __( 'No template parts found.', 'gutenberg' ), + 'not_found_in_trash' => __( 'No template parts found in Trash.', 'gutenberg' ), + 'archives' => __( 'Template part archives', 'gutenberg' ), + 'insert_into_item' => __( 'Insert into template part', 'gutenberg' ), + 'uploaded_to_this_item' => __( 'Uploaded to this template part', 'gutenberg' ), + 'filter_items_list' => __( 'Filter template parts list', 'gutenberg' ), + 'items_list_navigation' => __( 'Template parts list navigation', 'gutenberg' ), + 'items_list' => __( 'Template parts list', 'gutenberg' ), + ); + + $args = array( + 'labels' => $labels, + 'description' => __( 'Template parts to include in your templates.', 'gutenberg' ), + 'public' => false, + 'has_archive' => false, + 'show_ui' => true, + 'show_in_menu' => false, + 'show_in_admin_bar' => false, + 'show_in_rest' => true, + 'rest_base' => 'template-parts', + 'rest_controller_class' => 'Gutenberg_REST_Templates_Controller', + 'map_meta_cap' => true, + 'supports' => array( + 'title', + 'slug', + 'excerpt', + 'editor', + 'revisions', + 'author', + ), + ); + + register_post_type( 'wp_template_part', $args ); + } + add_action( 'init', 'gutenberg_register_template_part_post_type' ); + + /** + * Registers the 'wp_template_part_area' taxonomy. + */ + function gutenberg_register_wp_template_part_area_taxonomy() { + register_taxonomy( + 'wp_template_part_area', + array( 'wp_template_part' ), + array( + 'public' => false, + 'hierarchical' => false, + 'labels' => array( + 'name' => __( 'Template Part Areas', 'gutenberg' ), + 'singular_name' => __( 'Template Part Area', 'gutenberg' ), + ), + 'query_var' => false, + 'rewrite' => false, + 'show_ui' => false, + '_builtin' => true, + 'show_in_nav_menus' => false, + 'show_in_rest' => false, + ) + ); + } + add_action( 'init', 'gutenberg_register_wp_template_part_area_taxonomy' ); + + /** + * Sets a custom slug when creating auto-draft template parts. + * This is only needed for auto-drafts created by the regular WP editor. + * If this page is to be removed, this won't be necessary. + * + * @param int $post_id Post ID. + */ + function gutenberg_set_unique_slug_on_create_template_part( $post_id ) { + // This is the core function with the same functionality. + if ( function_exists( 'wp_set_unique_slug_on_create_template_part' ) ) { + return; + } + + $post = get_post( $post_id ); + if ( 'auto-draft' !== $post->post_status ) { + return; + } + + if ( ! $post->post_name ) { + wp_update_post( + array( + 'ID' => $post_id, + 'post_name' => 'custom_slug_' . uniqid(), + ) + ); + } + + $terms = get_the_terms( $post_id, 'wp_theme' ); + if ( ! $terms || ! count( $terms ) ) { + wp_set_post_terms( $post_id, wp_get_theme()->get_stylesheet(), 'wp_theme' ); + } + } + + add_action( 'save_post_wp_template_part', 'gutenberg_set_unique_slug_on_create_template_part' ); +} diff --git a/lib/compat/wordpress-5.9/templates.php b/lib/compat/wordpress-5.9/templates.php new file mode 100644 index 0000000000000..d5bdf1c55c486 --- /dev/null +++ b/lib/compat/wordpress-5.9/templates.php @@ -0,0 +1,255 @@ + __( 'Templates', 'gutenberg' ), + 'singular_name' => __( 'Template', 'gutenberg' ), + 'menu_name' => _x( 'Templates', 'Admin Menu text', 'gutenberg' ), + 'add_new' => _x( 'Add New', 'Template', 'gutenberg' ), + 'add_new_item' => __( 'Add New Template', 'gutenberg' ), + 'new_item' => __( 'New Template', 'gutenberg' ), + 'edit_item' => __( 'Edit Template', 'gutenberg' ), + 'view_item' => __( 'View Template', 'gutenberg' ), + 'view_items' => __( 'View Templates', 'gutenberg' ), + 'all_items' => __( 'All Templates', 'gutenberg' ), + 'search_items' => __( 'Search Templates', 'gutenberg' ), + 'parent_item_colon' => __( 'Parent Template:', 'gutenberg' ), + 'not_found' => __( 'No templates found.', 'gutenberg' ), + 'not_found_in_trash' => __( 'No templates found in Trash.', 'gutenberg' ), + 'archives' => __( 'Template archives', 'gutenberg' ), + 'insert_into_item' => __( 'Insert into template', 'gutenberg' ), + 'uploaded_to_this_item' => __( 'Uploaded to this template', 'gutenberg' ), + 'filter_items_list' => __( 'Filter templates list', 'gutenberg' ), + 'items_list_navigation' => __( 'Templates list navigation', 'gutenberg' ), + 'items_list' => __( 'Templates list', 'gutenberg' ), + ); + + $args = array( + 'labels' => $labels, + 'description' => __( 'Templates to include in your theme.', 'gutenberg' ), + 'public' => false, + 'has_archive' => false, + 'show_ui' => true, + 'show_in_menu' => false, + 'show_in_admin_bar' => false, + 'show_in_rest' => true, + 'rest_base' => 'templates', + 'rest_controller_class' => 'Gutenberg_REST_Templates_Controller', + 'capability_type' => array( 'template', 'templates' ), + 'map_meta_cap' => true, + 'supports' => array( + 'title', + 'slug', + 'excerpt', + 'editor', + 'revisions', + 'author', + ), + ); + + register_post_type( 'wp_template', $args ); + } + add_action( 'init', 'gutenberg_register_template_post_type' ); + + /** + * Registers block editor 'wp_theme' taxonomy. + */ + function gutenberg_register_wp_theme_taxonomy() { + register_taxonomy( + 'wp_theme', + array( 'wp_template', 'wp_template_part', 'wp_global_styles' ), + array( + 'public' => false, + 'hierarchical' => false, + 'labels' => array( + 'name' => __( 'Themes', 'gutenberg' ), + 'singular_name' => __( 'Theme', 'gutenberg' ), + ), + 'query_var' => false, + 'rewrite' => false, + 'show_ui' => false, + '_builtin' => true, + 'show_in_nav_menus' => false, + 'show_in_rest' => false, + ) + ); + } + add_action( 'init', 'gutenberg_register_wp_theme_taxonomy' ); + + /** + * Filters the capabilities of a user to conditionally grant them capabilities for managing 'wp_template' posts. + * + * Any user who can 'edit_theme_options' will have access. + * + * @param array $allcaps A user's capabilities. + * @return array Filtered $allcaps. + */ + function gutenberg_grant_template_caps( array $allcaps ) { + if ( isset( $allcaps['edit_theme_options'] ) ) { + $allcaps['edit_templates'] = $allcaps['edit_theme_options']; + $allcaps['edit_others_templates'] = $allcaps['edit_theme_options']; + $allcaps['edit_published_templates'] = $allcaps['edit_theme_options']; + $allcaps['edit_private_templates'] = $allcaps['edit_theme_options']; + $allcaps['delete_templates'] = $allcaps['edit_theme_options']; + $allcaps['delete_others_templates'] = $allcaps['edit_theme_options']; + $allcaps['delete_published_templates'] = $allcaps['edit_theme_options']; + $allcaps['delete_private_templates'] = $allcaps['edit_theme_options']; + $allcaps['publish_templates'] = $allcaps['edit_theme_options']; + $allcaps['read_private_templates'] = $allcaps['edit_theme_options']; + } + + return $allcaps; + } + add_filter( 'user_has_cap', 'gutenberg_grant_template_caps' ); + + /** + * Sets a custom slug when creating auto-draft templates. + * This is only needed for auto-drafts created by the regular WP editor. + * If this page is to be removed, this won't be necessary. + * + * @param int $post_id Post ID. + */ + function set_unique_slug_on_create_template( $post_id ) { + $post = get_post( $post_id ); + if ( 'auto-draft' !== $post->post_status ) { + return; + } + + if ( ! $post->post_name ) { + wp_update_post( + array( + 'ID' => $post_id, + 'post_name' => 'custom_slug_' . uniqid(), + ) + ); + } + + $terms = get_the_terms( $post_id, 'wp_theme' ); + if ( ! $terms || ! count( $terms ) ) { + wp_set_post_terms( $post_id, wp_get_theme()->get_stylesheet(), 'wp_theme' ); + } + } + add_action( 'save_post_wp_template', 'set_unique_slug_on_create_template' ); + + /** + * Print the skip-link script & styles. + * + * @todo Remove this when WP 5.8 is the minimum required version. + * + * @return void + */ + function gutenberg_the_skip_link() { + // Early exit if not a block theme. + if ( ! current_theme_supports( 'block-templates' ) ) { + return; + } + + // Early exit if not a block template. + global $_wp_current_template_content; + if ( ! $_wp_current_template_content ) { + return; + } + ?> + + + + + + get_stylesheet(); + $terms = get_the_terms( $post_ID, 'wp_theme' ); + if ( $terms && ! is_wp_error( $terms ) ) { + $theme = $terms[0]->name; + } + + $check_query_args = array( + 'post_name__in' => array( $override_slug ), + 'post_type' => $post_type, + 'posts_per_page' => 1, + 'no_found_rows' => true, + 'post__not_in' => array( $post_ID ), + 'tax_query' => array( + array( + 'taxonomy' => 'wp_theme', + 'field' => 'name', + 'terms' => $theme, + ), + ), + ); + $check_query = new WP_Query( $check_query_args ); + $posts = $check_query->posts; + + if ( count( $posts ) > 0 ) { + $suffix = 2; + do { + $query_args = $check_query_args; + $alt_post_name = _truncate_post_slug( $override_slug, 200 - ( strlen( $suffix ) + 1 ) ) . "-$suffix"; + $query_args['post_name__in'] = array( $alt_post_name ); + $query = new WP_Query( $query_args ); + $suffix++; + } while ( count( $query->posts ) > 0 ); + $override_slug = $alt_post_name; + } + + return $override_slug; +} + +// Remove 5.8 filter if it exists. +remove_filter( 'pre_wp_unique_post_slug', 'wp_filter_wp_template_unique_post_slug' ); +add_filter( 'pre_wp_unique_post_slug', 'gutenberg_filter_wp_template_unique_post_slug', 10, 5 ); + +/** + * Enable block templates (editor mode) for themes with theme.json. + */ +function gutenberg_enable_block_templates() { + if ( wp_is_block_theme() || WP_Theme_JSON_Resolver_Gutenberg::theme_has_support() ) { + add_theme_support( 'block-templates' ); + } +} + +// Remove 5.8 filter if it exists. +remove_action( 'setup_theme', 'wp_enable_block_templates' ); +add_action( 'setup_theme', 'gutenberg_enable_block_templates' ); diff --git a/lib/compat/wordpress-5.9/theme.php b/lib/compat/wordpress-5.9/theme.php new file mode 100644 index 0000000000000..7bfe11f604c5b --- /dev/null +++ b/lib/compat/wordpress-5.9/theme.php @@ -0,0 +1,28 @@ + $value ) { + if ( isset( $i18n_schema->$key ) ) { + $translated_settings[ $key ] = translate_settings_using_i18n_schema( $i18n_schema->$key, $value, $textdomain ); + } elseif ( isset( $i18n_schema->$group_key ) ) { + $translated_settings[ $key ] = translate_settings_using_i18n_schema( $i18n_schema->$group_key, $value, $textdomain ); + } else { + $translated_settings[ $key ] = $value; + } + } + return $translated_settings; + } + return $settings; + } +} diff --git a/lib/compat/wordpress-5.9/widget-render-api-endpoint/class-gb-rest-widget-render-endpoint-polyfill.php b/lib/compat/wordpress-5.9/widget-render-api-endpoint/class-gb-rest-widget-render-endpoint-polyfill.php new file mode 100644 index 0000000000000..6c8f2ee2a51e3 --- /dev/null +++ b/lib/compat/wordpress-5.9/widget-render-api-endpoint/class-gb-rest-widget-render-endpoint-polyfill.php @@ -0,0 +1,121 @@ +rest_base . '/(?P[a-zA-Z0-9_-]+)/render'; + + // Don't override if already registered. + $registered_routes = rest_get_server()->get_routes( 'wp/v2' ); + if ( array_key_exists( $route, $registered_routes ) ) { + return; + } + + register_rest_route( + $this->namespace, + $route, + array( + array( + 'methods' => WP_REST_Server::CREATABLE, + 'permission_callback' => array( $this, 'get_item_permissions_check' ), + 'callback' => array( $this, 'render' ), + 'args' => array( + 'id' => array( + 'description' => __( 'The widget type id.', 'default' ), + 'type' => 'string', + 'required' => true, + ), + 'instance' => array( + 'description' => __( 'Current instance settings of the widget.', 'default' ), + 'type' => 'object', + ), + ), + ), + ) + ); + } + + /** + * Renders a single Legacy Widget and wraps it in a JSON-encodable array. + * + * @param WP_REST_Request $request Full details about the request. + * + * @return array An array with rendered Legacy Widget HTML. + */ + public function render( $request ) { + return array( + 'preview' => $this->render_legacy_widget_preview_iframe( + $request['id'], + isset( $request['instance'] ) ? $request['instance'] : null + ), + ); + } + + /** + * Renders a page containing a preview of the requested Legacy Widget block. + * + * @param string $id_base The id base of the requested widget. + * @param array $instance The widget instance attributes. + * + * @return string Rendered Legacy Widget block preview. + */ + private function render_legacy_widget_preview_iframe( $id_base, $instance ) { + if ( ! defined( 'IFRAME_REQUEST' ) ) { + define( 'IFRAME_REQUEST', true ); + } + + ob_start(); + ?> + + > + + + + + + + + > +
+
+ get_registered( 'core/legacy-widget' ); + echo $block->render( + array( + 'idBase' => $id_base, + 'instance' => $instance, + ) + ); + ?> +
+
+ + + + /render endpoint in WP versions where it's missing + * + * @package gutenberg + */ + +// Load the polyfill class. +require_once __DIR__ . '/class-gb-rest-widget-render-endpoint-polyfill.php'; + +/** + * Registers routes from the GB_REST_Widget_Render_Endpoint_Polyfill class. + */ +function setup_widget_render_api_endpoint_polyfill() { + $polyfill = new GB_REST_Widget_Render_Endpoint_Polyfill(); + $polyfill->register_routes(); +} + +// Priority should be larger than 99 which is the one used for registering the core routes. +add_action( 'rest_api_init', 'setup_widget_render_api_endpoint_polyfill', 100 ); + + diff --git a/lib/compat/wordpress-5.9/wp-theme-get-post-templates.php b/lib/compat/wordpress-5.9/wp-theme-get-post-templates.php new file mode 100644 index 0000000000000..0eb37f47ddf59 --- /dev/null +++ b/lib/compat/wordpress-5.9/wp-theme-get-post-templates.php @@ -0,0 +1,33 @@ + $post_type ), 'wp_template' ); + foreach ( $block_templates as $template ) { + $templates[ $template->slug ] = $template->title; + } + + return $templates; + } + add_filter( 'theme_templates', 'gutenberg_load_block_page_templates', 10, 4 ); +} diff --git a/lib/compat/wordpress-6.0/block-editor-settings.php b/lib/compat/wordpress-6.0/block-editor-settings.php new file mode 100644 index 0000000000000..9030998aed250 --- /dev/null +++ b/lib/compat/wordpress-6.0/block-editor-settings.php @@ -0,0 +1,195 @@ + .alignleft { float: left; margin-right: 2em; }'; + $root_styles .= '.wp-site-blocks > .alignright { float: right; margin-left: 2em; }'; + $root_styles .= '.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }'; + + if ( + ( isset( $style['__unstableType'] ) && ( 'presets' === $style['__unstableType'] ) ) || + ( isset( $style['__unstableType'] ) && ( 'theme' === $style['__unstableType'] ) && str_contains( $style['css'], $root_styles ) ) + ) { + return true; + } + + return false; +} + +/** + * Adds styles and __experimentalFeatures to the block editor settings. + * + * @param array $settings Existing block editor settings. + * + * @return array New block editor settings. + */ +function gutenberg_get_block_editor_settings( $settings ) { + // Set what is the context for this data request. + $context = 'other'; + if ( + defined( 'REST_REQUEST' ) && + REST_REQUEST && + isset( $_GET['context'] ) && + 'mobile' === $_GET['context'] + ) { + $context = 'mobile'; + } + + if ( 'other' === $context ) { + global $wp_version; + $is_wp_5_8 = version_compare( $wp_version, '5.8', '>=' ) && version_compare( $wp_version, '5.9', '<' ); + $is_wp_5_9 = version_compare( $wp_version, '5.9', '>=' ) && version_compare( $wp_version, '6.0-beta1', '<' ); + $is_wp_6_0 = version_compare( $wp_version, '6.0-beta1', '>=' ); + + // Make sure the styles array exists. + // In some contexts, like the navigation editor, it doesn't. + if ( ! isset( $settings['styles'] ) ) { + $settings['styles'] = array(); + } + + // Remove existing global styles provided by core. + $styles_without_existing_global_styles = array(); + foreach ( $settings['styles'] as $style ) { + if ( + ( $is_wp_5_8 && ! gutenberg_is_global_styles_in_5_8( $style ) ) || // Can be removed when plugin minimum version is 5.9. + ( $is_wp_5_9 && ! gutenberg_is_global_styles_in_5_9( $style ) ) || // Can be removed when plugin minimum version is 6.0. + ( $is_wp_6_0 && ( ! isset( $style['isGlobalStyles'] ) || ! $style['isGlobalStyles'] ) ) + ) { + $styles_without_existing_global_styles[] = $style; + } + } + + // Recreate global styles. + $new_global_styles = array(); + $presets = array( + array( + 'css' => 'variables', + '__unstableType' => 'presets', + 'isGlobalStyles' => true, + ), + array( + 'css' => 'presets', + '__unstableType' => 'presets', + 'isGlobalStyles' => true, + ), + ); + foreach ( $presets as $preset_style ) { + $actual_css = gutenberg_get_global_stylesheet( array( $preset_style['css'] ) ); + if ( '' !== $actual_css ) { + $preset_style['css'] = $actual_css; + $new_global_styles[] = $preset_style; + } + } + + if ( WP_Theme_JSON_Resolver::theme_has_support() ) { + $block_classes = array( + 'css' => 'styles', + '__unstableType' => 'theme', + 'isGlobalStyles' => true, + ); + $actual_css = gutenberg_get_global_stylesheet( array( $block_classes['css'] ) ); + if ( '' !== $actual_css ) { + $block_classes['css'] = $actual_css; + $new_global_styles[] = $block_classes; + } + } + + $settings['styles'] = array_merge( $new_global_styles, $styles_without_existing_global_styles ); + } + + // Copied from get_block_editor_settings() at wordpress-develop/block-editor.php. + $settings['__experimentalFeatures'] = gutenberg_get_global_settings(); + + if ( isset( $settings['__experimentalFeatures']['color']['palette'] ) ) { + $colors_by_origin = $settings['__experimentalFeatures']['color']['palette']; + $settings['colors'] = isset( $colors_by_origin['custom'] ) ? + $colors_by_origin['custom'] : ( + isset( $colors_by_origin['theme'] ) ? + $colors_by_origin['theme'] : + $colors_by_origin['default'] + ); + } + + if ( isset( $settings['__experimentalFeatures']['color']['gradients'] ) ) { + $gradients_by_origin = $settings['__experimentalFeatures']['color']['gradients']; + $settings['gradients'] = isset( $gradients_by_origin['custom'] ) ? + $gradients_by_origin['custom'] : ( + isset( $gradients_by_origin['theme'] ) ? + $gradients_by_origin['theme'] : + $gradients_by_origin['default'] + ); + } + + if ( isset( $settings['__experimentalFeatures']['typography']['fontSizes'] ) ) { + $font_sizes_by_origin = $settings['__experimentalFeatures']['typography']['fontSizes']; + $settings['fontSizes'] = isset( $font_sizes_by_origin['custom'] ) ? + $font_sizes_by_origin['custom'] : ( + isset( $font_sizes_by_origin['theme'] ) ? + $font_sizes_by_origin['theme'] : + $font_sizes_by_origin['default'] + ); + } + + if ( isset( $settings['__experimentalFeatures']['color']['custom'] ) ) { + $settings['disableCustomColors'] = ! $settings['__experimentalFeatures']['color']['custom']; + unset( $settings['__experimentalFeatures']['color']['custom'] ); + } + if ( isset( $settings['__experimentalFeatures']['color']['customGradient'] ) ) { + $settings['disableCustomGradients'] = ! $settings['__experimentalFeatures']['color']['customGradient']; + unset( $settings['__experimentalFeatures']['color']['customGradient'] ); + } + if ( isset( $settings['__experimentalFeatures']['typography']['customFontSize'] ) ) { + $settings['disableCustomFontSizes'] = ! $settings['__experimentalFeatures']['typography']['customFontSize']; + unset( $settings['__experimentalFeatures']['typography']['customFontSize'] ); + } + if ( isset( $settings['__experimentalFeatures']['typography']['lineHeight'] ) ) { + $settings['enableCustomLineHeight'] = $settings['__experimentalFeatures']['typography']['lineHeight']; + unset( $settings['__experimentalFeatures']['typography']['lineHeight'] ); + } + if ( isset( $settings['__experimentalFeatures']['spacing']['units'] ) ) { + $settings['enableCustomUnits'] = $settings['__experimentalFeatures']['spacing']['units']; + unset( $settings['__experimentalFeatures']['spacing']['units'] ); + } + if ( isset( $settings['__experimentalFeatures']['spacing']['padding'] ) ) { + $settings['enableCustomSpacing'] = $settings['__experimentalFeatures']['spacing']['padding']; + unset( $settings['__experimentalFeatures']['spacing']['padding'] ); + } + + $settings['localAutosaveInterval'] = 15; + + return $settings; +} + +add_filter( 'block_editor_settings_all', 'gutenberg_get_block_editor_settings', PHP_INT_MAX ); diff --git a/lib/compat/wordpress-6.0/block-patterns-update.php b/lib/compat/wordpress-6.0/block-patterns-update.php new file mode 100644 index 0000000000000..c17a65be2ae22 --- /dev/null +++ b/lib/compat/wordpress-6.0/block-patterns-update.php @@ -0,0 +1,217 @@ +is_registered( 'query' ) ) { + register_block_pattern_category( 'query', array( 'label' => __( 'Query', 'gutenberg' ) ) ); + } + + if ( ! $pattern_category_registry->is_registered( 'featured' ) ) { + register_block_pattern_category( 'featured', array( 'label' => __( 'Featured', 'gutenberg' ) ) ); + } + + $patterns = array( + 'query-standard-posts' => array( + 'title' => _x( 'Standard', 'Block pattern title', 'gutenberg' ), + 'blockTypes' => array( 'core/query' ), + 'categories' => array( 'query' ), + 'content' => ' +
+ + + + + +
+ + + +
+ ', + ), + 'query-medium-posts' => array( + 'title' => _x( 'Image at left', 'Block pattern title', 'gutenberg' ), + 'blockTypes' => array( 'core/query' ), + 'categories' => array( 'query' ), + 'content' => ' +
+ + +
+
+ + +
+
+
+ + +
+ ', + ), + 'query-small-posts' => array( + 'title' => _x( 'Small image and title', 'Block pattern title', 'gutenberg' ), + 'blockTypes' => array( 'core/query' ), + 'categories' => array( 'query' ), + 'content' => ' +
+ + +
+
+ + +
+
+ + +
+ ', + ), + 'query-grid-posts' => array( + 'title' => _x( 'Grid', 'Block pattern title', 'gutenberg' ), + 'blockTypes' => array( 'core/query' ), + 'categories' => array( 'query' ), + 'content' => ' +
+ + +
+ +
+ + +
+ ', + ), + 'query-large-title-posts' => array( + 'title' => _x( 'Large title', 'Block pattern title', 'gutenberg' ), + 'blockTypes' => array( 'core/query' ), + 'categories' => array( 'query' ), + 'content' => ' +
+
+ +
+ + + +
+
+ + + +
+
+ +
+
+ ', + ), + 'query-offset-posts' => array( + 'title' => _x( 'Offset', 'Block pattern title', 'gutenberg' ), + 'blockTypes' => array( 'core/query' ), + 'categories' => array( 'query' ), + 'content' => ' +
+
+
+
+ + + + + + +
+
+ + +
+
+ + + + + + +
+
+
+
+ ', + ), + // Initial block pattern to be used with block transformations with patterns. + 'social-links-shared-background-color' => array( + 'title' => _x( 'Social links with a shared background color', 'Block pattern title', 'gutenberg' ), + 'categories' => array( 'buttons' ), + 'blockTypes' => array( 'core/social-links' ), + 'viewportWidth' => 500, + 'content' => ' + + ', + ), + ); + + foreach ( $patterns as $name => $pattern ) { + $pattern_name = 'core/' . $name; + if ( ! WP_Block_Patterns_Registry::get_instance()->is_registered( $pattern_name ) ) { + register_block_pattern( $pattern_name, $pattern ); + } + } +} + +/** + * Deactivate the legacy patterns bundled with WordPress. + */ +function gutenberg_remove_core_patterns() { + $core_block_patterns = array( + 'text-two-columns', + 'two-buttons', + 'two-images', + 'text-two-columns-with-images', + 'text-three-columns-buttons', + 'large-header', + 'large-header-button', + 'three-buttons', + 'heading-paragraph', + 'quote', + 'query-standard-posts', + 'query-medium-posts', + 'query-small-posts', + 'query-grid-posts', + 'query-large-title-posts', + 'query-offset-posts', + 'social-links-shared-background-color', + ); + + foreach ( $core_block_patterns as $core_block_pattern ) { + $name = 'core/' . $core_block_pattern; + if ( WP_Block_Patterns_Registry::get_instance()->is_registered( $name ) ) { + unregister_block_pattern( $name ); + } + } +} + +add_action( + 'init', + function() { + if ( ! get_theme_support( 'core-block-patterns' ) || ! function_exists( 'unregister_block_pattern' ) ) { + return; + } + gutenberg_remove_core_patterns(); + gutenberg_register_gutenberg_patterns(); + } +); diff --git a/lib/compat/wordpress-6.0/block-patterns.php b/lib/compat/wordpress-6.0/block-patterns.php new file mode 100644 index 0000000000000..0992f8b08964e --- /dev/null +++ b/lib/compat/wordpress-6.0/block-patterns.php @@ -0,0 +1,211 @@ +get_patterns(); + if ( empty( $pattern_settings ) ) { + return; + } + + $request = new WP_REST_Request( 'GET', '/wp/v2/pattern-directory/patterns' ); + $request['slug'] = implode( ',', $pattern_settings ); + $response = rest_do_request( $request ); + if ( $response->is_error() ) { + return; + } + $patterns = $response->get_data(); + $patterns_registry = WP_Block_Patterns_Registry::get_instance(); + foreach ( $patterns as $pattern ) { + $pattern_name = sanitize_title( $pattern['title'] ); + // Some patterns might be already registered as core patterns with the `core` prefix. + $is_registered = $patterns_registry->is_registered( $pattern_name ) || $patterns_registry->is_registered( "core/$pattern_name" ); + if ( ! $is_registered ) { + register_block_pattern( $pattern_name, (array) $pattern ); + } + } +} + +/** + * Register any patterns that the active theme may provide under its + * `./patterns/` directory. Each pattern is defined as a PHP file and defines + * its metadata using plugin-style headers. The minimum required definition is: + * + * /** + * * Title: My Pattern + * * Slug: my-theme/my-pattern + * * + * + * The output of the PHP source corresponds to the content of the pattern, e.g.: + * + *

+ * + * If applicable, this will collect from both parent and child theme. + * + * Other settable fields include: + * + * - Description + * - Viewport Width + * - Categories (comma-separated values) + * - Keywords (comma-separated values) + * - Block Types (comma-separated values) + * - Inserter (yes/no) + * + * @since 6.0.0 + * @access private + * @internal + */ +function gutenberg_register_theme_block_patterns() { + $default_headers = array( + 'title' => 'Title', + 'slug' => 'Slug', + 'description' => 'Description', + 'viewportWidth' => 'Viewport Width', + 'categories' => 'Categories', + 'keywords' => 'Keywords', + 'blockTypes' => 'Block Types', + 'inserter' => 'Inserter', + ); + + // Register patterns for the active theme. If the theme is a child theme, + // let it override any patterns from the parent theme that shares the same slug. + $themes = array(); + $stylesheet = get_stylesheet(); + $template = get_template(); + if ( $stylesheet !== $template ) { + $themes[] = wp_get_theme( $stylesheet ); + } + $themes[] = wp_get_theme( $template ); + + foreach ( $themes as $theme ) { + $dirpath = $theme->get_stylesheet_directory() . '/patterns/'; + if ( ! is_dir( $dirpath ) || ! is_readable( $dirpath ) ) { + continue; + } + $files = glob( $dirpath . '*.php' ); + if ( $files ) { + foreach ( $files as $file ) { + $pattern_data = get_file_data( $file, $default_headers ); + + if ( empty( $pattern_data['slug'] ) ) { + _doing_it_wrong( + '_register_theme_block_patterns', + sprintf( + /* translators: %s: file name. */ + __( 'Could not register file "%s" as a block pattern ("Slug" field missing)', 'gutenberg' ), + $file + ), + '6.0.0' + ); + continue; + } + + if ( ! preg_match( '/^[A-z0-9\/_-]+$/', $pattern_data['slug'] ) ) { + _doing_it_wrong( + '_register_theme_block_patterns', + sprintf( + /* translators: %1s: file name; %2s: slug value found. */ + __( 'Could not register file "%1$s" as a block pattern (invalid slug "%2$s")', 'gutenberg' ), + $file, + $pattern_data['slug'] + ), + '6.0.0' + ); + } + + if ( WP_Block_Patterns_Registry::get_instance()->is_registered( $pattern_data['slug'] ) ) { + continue; + } + + // Title is a required property. + if ( ! $pattern_data['title'] ) { + _doing_it_wrong( + '_register_theme_block_patterns', + sprintf( + /* translators: %1s: file name; %2s: slug value found. */ + __( 'Could not register file "%s" as a block pattern ("Title" field missing)', 'gutenberg' ), + $file + ), + '6.0.0' + ); + continue; + } + + // For properties of type array, parse data as comma-separated. + foreach ( array( 'categories', 'keywords', 'blockTypes' ) as $property ) { + if ( ! empty( $pattern_data[ $property ] ) ) { + $pattern_data[ $property ] = array_filter( + preg_split( + '/[\s,]+/', + (string) $pattern_data[ $property ] + ) + ); + } else { + unset( $pattern_data[ $property ] ); + } + } + + // Parse properties of type int. + foreach ( array( 'viewportWidth' ) as $property ) { + if ( ! empty( $pattern_data[ $property ] ) ) { + $pattern_data[ $property ] = (int) $pattern_data[ $property ]; + } else { + unset( $pattern_data[ $property ] ); + } + } + + // Parse properties of type bool. + foreach ( array( 'inserter' ) as $property ) { + if ( ! empty( $pattern_data[ $property ] ) ) { + $pattern_data[ $property ] = in_array( + strtolower( $pattern_data[ $property ] ), + array( 'yes', 'true' ), + true + ); + } else { + unset( $pattern_data[ $property ] ); + } + } + + // Translate the pattern metadata. + $text_domain = $theme->get( 'TextDomain' ); + //phpcs:ignore WordPress.WP.I18n.NonSingularStringLiteralText, WordPress.WP.I18n.NonSingularStringLiteralContext, WordPress.WP.I18n.NonSingularStringLiteralDomain, WordPress.WP.I18n.LowLevelTranslationFunction + $pattern_data['title'] = translate_with_gettext_context( $pattern_data['title'], 'Pattern title', $text_domain ); + if ( ! empty( $pattern_data['description'] ) ) { + //phpcs:ignore WordPress.WP.I18n.NonSingularStringLiteralText, WordPress.WP.I18n.NonSingularStringLiteralContext, WordPress.WP.I18n.NonSingularStringLiteralDomain, WordPress.WP.I18n.LowLevelTranslationFunction + $pattern_data['description'] = translate_with_gettext_context( $pattern_data['description'], 'Pattern description', $text_domain ); + } + + // The actual pattern content is the output of the file. + ob_start(); + include $file; + $pattern_data['content'] = ob_get_clean(); + if ( ! $pattern_data['content'] ) { + continue; + } + + register_block_pattern( $pattern_data['slug'], $pattern_data ); + } + } + } +} +add_action( 'init', 'gutenberg_register_theme_block_patterns' ); diff --git a/lib/compat/wordpress-6.0/block-template-utils.php b/lib/compat/wordpress-6.0/block-template-utils.php new file mode 100644 index 0000000000000..c03a559af5f31 --- /dev/null +++ b/lib/compat/wordpress-6.0/block-template-utils.php @@ -0,0 +1,132 @@ +get( 'TextDomain' ); + $filename = get_temp_dir() . $theme_name . $obscura . '.zip'; + + $zip = new ZipArchive(); + if ( true !== $zip->open( $filename, ZipArchive::CREATE | ZipArchive::OVERWRITE ) ) { + return new WP_Error( 'unable_to_create_zip', __( 'Unable to open export file (archive) for writing.', 'gutenberg' ) ); + } + + $zip->addEmptyDir( 'templates' ); + $zip->addEmptyDir( 'parts' ); + + // Get path of the theme. + $theme_path = wp_normalize_path( get_stylesheet_directory() ); + + // Create recursive directory iterator. + $theme_files = new RecursiveIteratorIterator( + new RecursiveDirectoryIterator( $theme_path ), + RecursiveIteratorIterator::LEAVES_ONLY + ); + + // Make a copy of the current theme. + foreach ( $theme_files as $file ) { + // Skip directories as they are added automatically. + if ( ! $file->isDir() ) { + // Get real and relative path for current file. + $file_path = wp_normalize_path( $file ); + $relative_path = substr( $file_path, strlen( $theme_path ) + 1 ); + + if ( ! gutenberg_is_theme_directory_ignored( $relative_path ) ) { + $zip->addFile( $file_path, $relative_path ); + } + } + } + + // Load templates into the zip file. + $templates = gutenberg_get_block_templates(); + foreach ( $templates as $template ) { + $template->content = _remove_theme_attribute_in_block_template_content( $template->content ); + + $zip->addFromString( + 'templates/' . $template->slug . '.html', + $template->content + ); + } + + // Load template parts into the zip file. + $template_parts = gutenberg_get_block_templates( array(), 'wp_template_part' ); + foreach ( $template_parts as $template_part ) { + $zip->addFromString( + 'parts/' . $template_part->slug . '.html', + $template_part->content + ); + } + + // Load theme.json into the zip file. + $tree = WP_Theme_JSON_Resolver_Gutenberg::get_theme_data( array(), array( 'with_supports' => false ) ); + // Merge with user data. + $tree->merge( WP_Theme_JSON_Resolver_Gutenberg::get_user_data() ); + + $theme_json_raw = $tree->get_data(); + // If a version is defined, add a schema. + if ( $theme_json_raw['version'] ) { + global $wp_version; + $theme_json_version = 'wp/' . substr( $wp_version, 0, 3 ); + if ( defined( 'IS_GUTENBERG_PLUGIN' ) ) { + $theme_json_version = 'trunk'; + } + $schema = array( '$schema' => 'https://schemas.wp.org/' . $theme_json_version . '/theme.json' ); + $theme_json_raw = array_merge( $schema, $theme_json_raw ); + } + + // Convert to a string. + $theme_json_encoded = wp_json_encode( $theme_json_raw, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE ); + + // Replace 4 spaces with a tab. + $theme_json_tabbed = preg_replace( '~(?:^|\G)\h{4}~m', "\t", $theme_json_encoded ); + + // Add the theme.json file to the zip. + $zip->addFromString( + 'theme.json', + $theme_json_tabbed + ); + + // Save changes to the zip file. + $zip->close(); + + return $filename; +} diff --git a/lib/compat/wordpress-6.0/block-template.php b/lib/compat/wordpress-6.0/block-template.php new file mode 100644 index 0000000000000..770bf3bd436d6 --- /dev/null +++ b/lib/compat/wordpress-6.0/block-template.php @@ -0,0 +1,38 @@ + 'page', + 'postId' => $front_page_id, + ); + } + + $hierarchy = array( 'front-page', 'home', 'index' ); + $template = gutenberg_resolve_template( 'home', $hierarchy, '' ); + + if ( ! $template ) { + return null; + } + + return array( + 'postType' => 'wp_template', + 'postId' => $template->id, + ); +} diff --git a/lib/compat/wordpress-6.0/blocks.php b/lib/compat/wordpress-6.0/blocks.php new file mode 100644 index 0000000000000..be2d739329d02 --- /dev/null +++ b/lib/compat/wordpress-6.0/blocks.php @@ -0,0 +1,315 @@ + 'post', + 'order' => 'DESC', + 'orderby' => 'date', + 'post__not_in' => array(), + ); + + if ( isset( $block->context['query'] ) ) { + if ( ! empty( $block->context['query']['postType'] ) ) { + $post_type_param = $block->context['query']['postType']; + if ( is_post_type_viewable( $post_type_param ) ) { + $query['post_type'] = $post_type_param; + } + } + if ( isset( $block->context['query']['sticky'] ) && ! empty( $block->context['query']['sticky'] ) ) { + $sticky = get_option( 'sticky_posts' ); + if ( 'only' === $block->context['query']['sticky'] ) { + /** + * Passing an empty array to post__in will return have_posts() as true (and all posts will be returned). + * Logic should be used before hand to determine if WP_Query should be used in the event that the array + * being passed to post__in is empty. + * + * @see https://core.trac.wordpress.org/ticket/28099 + */ + $query['post__in'] = ! empty( $sticky ) ? $sticky : array( 0 ); + $query['ignore_sticky_posts'] = 1; + } else { + $query['post__not_in'] = array_merge( $query['post__not_in'], $sticky ); + } + } + if ( ! empty( $block->context['query']['exclude'] ) ) { + $excluded_post_ids = array_map( 'intval', $block->context['query']['exclude'] ); + $excluded_post_ids = array_filter( $excluded_post_ids ); + $query['post__not_in'] = array_merge( $query['post__not_in'], $excluded_post_ids ); + } + if ( + isset( $block->context['query']['perPage'] ) && + is_numeric( $block->context['query']['perPage'] ) + ) { + $per_page = absint( $block->context['query']['perPage'] ); + $offset = 0; + + if ( + isset( $block->context['query']['offset'] ) && + is_numeric( $block->context['query']['offset'] ) + ) { + $offset = absint( $block->context['query']['offset'] ); + } + + $query['offset'] = ( $per_page * ( $page - 1 ) ) + $offset; + $query['posts_per_page'] = $per_page; + } + + // We need to migrate `categoryIds` and `tagIds` to `tax_query` for backwards compatibility. + if ( ! empty( $block->context['query']['categoryIds'] ) || ! empty( $block->context['query']['tagIds'] ) ) { + $tax_query = array(); + if ( ! empty( $block->context['query']['categoryIds'] ) ) { + $tax_query[] = array( + 'taxonomy' => 'category', + 'terms' => array_filter( array_map( 'intval', $block->context['query']['categoryIds'] ) ), + 'include_children' => false, + ); + } + if ( ! empty( $block->context['query']['tagIds'] ) ) { + $tax_query[] = array( + 'taxonomy' => 'post_tag', + 'terms' => array_filter( array_map( 'intval', $block->context['query']['tagIds'] ) ), + 'include_children' => false, + ); + } + $query['tax_query'] = $tax_query; + } + if ( ! empty( $block->context['query']['taxQuery'] ) ) { + $query['tax_query'] = array(); + foreach ( $block->context['query']['taxQuery'] as $taxonomy => $terms ) { + if ( is_taxonomy_viewable( $taxonomy ) && ! empty( $terms ) ) { + $query['tax_query'][] = array( + 'taxonomy' => $taxonomy, + 'terms' => array_filter( array_map( 'intval', $terms ) ), + 'include_children' => false, + ); + } + } + } + if ( + isset( $block->context['query']['order'] ) && + in_array( strtoupper( $block->context['query']['order'] ), array( 'ASC', 'DESC' ), true ) + ) { + $query['order'] = strtoupper( $block->context['query']['order'] ); + } + if ( isset( $block->context['query']['orderBy'] ) ) { + $query['orderby'] = $block->context['query']['orderBy']; + } + if ( ! empty( $block->context['query']['author'] ) ) { + $query['author'] = $block->context['query']['author']; + } + if ( ! empty( $block->context['query']['search'] ) ) { + $query['s'] = $block->context['query']['search']; + } + if ( ! empty( $block->context['query']['parents'] ) && is_post_type_hierarchical( $query['post_type'] ) ) { + $query['post_parent__in'] = array_filter( array_map( 'intval', $block->context['query']['parents'] ) ); + } + } + return $query; +} + +if ( ! function_exists( 'build_comment_query_vars_from_block' ) ) { + /** + * Helper function that constructs a comment query vars array from the passed block properties. + * + * It's used with the Comment Query Loop inner blocks. + * + * @since 6.0.0 + * + * @param WP_Block $block Block instance. + * + * @return array Returns the comment query parameters to use with the WP_Comment_Query constructor. + */ + function build_comment_query_vars_from_block( $block ) { + + $comment_args = array( + 'orderby' => 'comment_date_gmt', + 'order' => 'ASC', + 'status' => 'approve', + 'no_found_rows' => false, + ); + + if ( is_user_logged_in() ) { + $comment_args['include_unapproved'] = array( get_current_user_id() ); + } else { + $unapproved_email = wp_get_unapproved_comment_author_email(); + + if ( $unapproved_email ) { + $comment_args['include_unapproved'] = array( $unapproved_email ); + } + } + + if ( ! empty( $block->context['postId'] ) ) { + $comment_args['post_id'] = (int) $block->context['postId']; + } + + if ( get_option( 'thread_comments' ) ) { + $comment_args['hierarchical'] = 'threaded'; + } else { + $comment_args['hierarchical'] = false; + } + + if ( get_option( 'page_comments' ) === '1' || get_option( 'page_comments' ) === true ) { + $per_page = get_option( 'comments_per_page' ); + $default_page = get_option( 'default_comments_page' ); + if ( $per_page > 0 ) { + $comment_args['number'] = $per_page; + + $page = (int) get_query_var( 'cpage' ); + if ( $page ) { + $comment_args['paged'] = $page; + } elseif ( 'oldest' === $default_page ) { + $comment_args['paged'] = 1; + } elseif ( 'newest' === $default_page ) { + $max_num_pages = (int) ( new WP_Comment_Query( $comment_args ) )->max_num_pages; + if ( 0 !== $max_num_pages ) { + $comment_args['paged'] = $max_num_pages; + } + } + // Set the `cpage` query var to ensure the previous and next pagination links are correct + // when inheriting the Discussion Settings. + if ( 0 === $page && isset( $comment_args['paged'] ) && $comment_args['paged'] > 0 ) { + set_query_var( 'cpage', $comment_args['paged'] ); + } + } + } + + return $comment_args; + } +} + +if ( ! function_exists( 'get_comments_pagination_arrow' ) ) { + /** + * Helper function that returns the proper pagination arrow html for + * `CommentsPaginationNext` and `CommentsPaginationPrevious` blocks based + * on the provided `paginationArrow` from `CommentsPagination` context. + * + * It's used in CommentsPaginationNext and CommentsPaginationPrevious blocks. + * + * @since 6.0.0 + * + * @param WP_Block $block Block instance. + * @param string $pagination_type Type of the arrow we will be rendering. Default 'next'. Accepts 'next' or 'previous'. + * + * @return string|null Returns the constructed WP_Query arguments. + */ + function get_comments_pagination_arrow( $block, $pagination_type = 'next' ) { + $arrow_map = array( + 'none' => '', + 'arrow' => array( + 'next' => '→', + 'previous' => '←', + ), + 'chevron' => array( + 'next' => '»', + 'previous' => '«', + ), + ); + if ( ! empty( $block->context['comments/paginationArrow'] ) && ! empty( $arrow_map[ $block->context['comments/paginationArrow'] ][ $pagination_type ] ) ) { + $arrow_attribute = $block->context['comments/paginationArrow']; + $arrow = $arrow_map[ $block->context['comments/paginationArrow'] ][ $pagination_type ]; + $arrow_classes = "wp-block-comments-pagination-$pagination_type-arrow is-arrow-$arrow_attribute"; + return "$arrow"; + } + return null; + } +} + +/** + * Workaround for getting discussion settings as block editor settings + * so any user can access to them without needing to be an admin. + * + * @param array $settings Default editor settings. + * + * @return array Filtered editor settings. + */ +function gutenberg_extend_block_editor_settings_with_discussion_settings( $settings ) { + + $settings['__experimentalDiscussionSettings'] = array( + 'commentOrder' => get_option( 'comment_order' ), + 'commentsPerPage' => get_option( 'comments_per_page' ), + 'defaultCommentsPage' => get_option( 'default_comments_page' ), + 'pageComments' => get_option( 'page_comments' ), + 'threadComments' => get_option( 'thread_comments' ), + 'threadCommentsDepth' => get_option( 'thread_comments_depth' ), + 'defaultCommentStatus' => get_option( 'default_comment_status' ), + 'avatarURL' => get_avatar_url( + '', + array( + 'size' => 96, + 'force_default' => true, + 'default' => get_option( 'avatar_default' ), + ) + ), + ); + + return $settings; +} +add_filter( 'block_editor_settings_all', 'gutenberg_extend_block_editor_settings_with_discussion_settings' ); + +/** + * Mark the `children` attr of comments as embeddable so they can be included in + * REST API responses without additional requests. + * + * @return void + */ +function gutenberg_rest_comment_set_children_as_embeddable() { + add_filter( + 'rest_prepare_comment', + function ( $response ) { + $links = $response->get_links(); + if ( isset( $links['children'] ) ) { + $href = $links['children'][0]['href']; + $response->remove_link( 'children', $href ); + $response->add_link( 'children', $href, array( 'embeddable' => true ) ); + } + return $response; + } + ); +} +add_action( 'rest_api_init', 'gutenberg_rest_comment_set_children_as_embeddable' ); + +/** + * Registers the lock block attribute for block types. + * + * Once 6.0 is the minimum supported WordPress version for the Gutenberg + * plugin, this shim can be removed + * + * Doesn't need to be backported into Core. + * + * @param array $args Array of arguments for registering a block type. + * @return array $args + */ +function gutenberg_register_lock_attribute( $args ) { + // Setup attributes if needed. + if ( ! isset( $args['attributes'] ) || ! is_array( $args['attributes'] ) ) { + $args['attributes'] = array(); + } + + if ( ! array_key_exists( 'lock', $args['attributes'] ) ) { + $args['attributes']['lock'] = array( + 'type' => 'object', + ); + } + + return $args; +} +add_filter( 'register_block_type_args', 'gutenberg_register_lock_attribute' ); diff --git a/lib/compat/wordpress-6.0/class-gutenberg-rest-edit-site-export-controller.php b/lib/compat/wordpress-6.0/class-gutenberg-rest-edit-site-export-controller.php new file mode 100644 index 0000000000000..e4cffb2bff268 --- /dev/null +++ b/lib/compat/wordpress-6.0/class-gutenberg-rest-edit-site-export-controller.php @@ -0,0 +1,89 @@ +namespace = 'wp-block-editor/v1'; + $this->rest_base = 'export'; + } + + /** + * Registers the necessary REST API routes. + */ + public function register_routes() { + register_rest_route( + $this->namespace, + '/' . $this->rest_base, + array( + array( + 'methods' => WP_REST_Server::READABLE, + 'callback' => array( $this, 'export' ), + 'permission_callback' => array( $this, 'permissions_check' ), + ), + ), + true // Override core route if already exists (WP 5.9). + ); + } + + /** + * Checks whether a given request has permission to export. + * + * @return WP_Error|bool True if the request has access, or WP_Error object. + */ + public function permissions_check() { + if ( current_user_can( 'edit_theme_options' ) ) { + return true; + } + + return new WP_Error( + 'rest_cannot_export_templates', + __( 'Sorry, you are not allowed to export templates and template parts.', 'gutenberg' ), + array( 'status' => rest_authorization_required_code() ) + ); + } + + /** + * Output a ZIP file with an export of the current templates + * template parts, theme.json and index.php from the site editor, + * and close the connection. + * + * @return WP_Error|void + */ + public function export() { + // Generate the export file. + $filename = gutenberg_generate_block_templates_export_file(); + + if ( is_wp_error( $filename ) ) { + $filename->add_data( array( 'status' => 500 ) ); + + return $filename; + } + + $theme_name = basename( get_stylesheet() ); + + header( 'Content-Type: application/zip' ); + header( 'Content-Disposition: attachment; filename=' . $theme_name . '.zip' ); + header( 'Content-Length: ' . filesize( $filename ) ); + flush(); + readfile( $filename ); + unlink( $filename ); + exit; + } +} diff --git a/lib/compat/wordpress-6.0/class-gutenberg-rest-global-styles-controller.php b/lib/compat/wordpress-6.0/class-gutenberg-rest-global-styles-controller.php new file mode 100644 index 0000000000000..2a50e9684c093 --- /dev/null +++ b/lib/compat/wordpress-6.0/class-gutenberg-rest-global-styles-controller.php @@ -0,0 +1,231 @@ +namespace, + '/' . $this->rest_base . '/themes/(?P[\/\s%\w\.\(\)\[\]\@_\-]+)/variations', + array( + array( + 'methods' => WP_REST_Server::READABLE, + 'callback' => array( $this, 'get_theme_items' ), + 'permission_callback' => array( $this, 'get_theme_items_permissions_check' ), + 'args' => array( + 'stylesheet' => array( + 'description' => __( 'The theme identifier', 'gutenberg' ), + 'type' => 'string', + ), + ), + ), + ) + ); + + parent::register_routes(); + } + + /** + * Checks if a given request has access to read a single theme global styles config. + * + * @param WP_REST_Request $request Full details about the request. + * @return true|WP_Error True if the request has read access for the item, WP_Error object otherwise. + */ + public function get_theme_items_permissions_check( $request ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable + // Verify if the current user has edit_theme_options capability. + // This capability is required to edit/view/delete templates. + if ( ! current_user_can( 'edit_theme_options' ) ) { + return new WP_Error( + 'rest_cannot_manage_global_styles', + __( 'Sorry, you are not allowed to access the global styles on this site.', 'gutenberg' ), + array( + 'status' => rest_authorization_required_code(), + ) + ); + } + + return true; + } + + /** + * Prepares a single global styles config for update. + * + * @since 5.9.0 + * + * @param WP_REST_Request $request Request object. + * @return stdClass Changes to pass to wp_update_post. + */ + protected function prepare_item_for_database( $request ) { + $changes = new stdClass(); + $changes->ID = $request['id']; + $post = get_post( $request['id'] ); + $existing_config = array(); + if ( $post ) { + $existing_config = json_decode( $post->post_content, true ); + $json_decoding_error = json_last_error(); + if ( JSON_ERROR_NONE !== $json_decoding_error || ! isset( $existing_config['isGlobalStylesUserThemeJSON'] ) || + ! $existing_config['isGlobalStylesUserThemeJSON'] ) { + $existing_config = array(); + } + } + if ( isset( $request['styles'] ) || isset( $request['settings'] ) ) { + $config = array(); + if ( isset( $request['styles'] ) ) { + $config['styles'] = $request['styles']; + } elseif ( isset( $existing_config['styles'] ) ) { + $config['styles'] = $existing_config['styles']; + } + if ( isset( $request['settings'] ) ) { + $config['settings'] = $request['settings']; + } elseif ( isset( $existing_config['settings'] ) ) { + $config['settings'] = $existing_config['settings']; + } + $config['isGlobalStylesUserThemeJSON'] = true; + $config['version'] = WP_Theme_JSON_Gutenberg::LATEST_SCHEMA; + $changes->post_content = wp_json_encode( $config ); + } + // Post title. + if ( isset( $request['title'] ) ) { + if ( is_string( $request['title'] ) ) { + $changes->post_title = $request['title']; + } elseif ( ! empty( $request['title']['raw'] ) ) { + $changes->post_title = $request['title']['raw']; + } + } + return $changes; + } + + /** + * Prepare a global styles config output for response. + * + * @since 5.9.0 + * + * @param WP_Post $post Global Styles post object. + * @param WP_REST_Request $request Request object. + * @return WP_REST_Response Response object. + */ + public function prepare_item_for_response( $post, $request ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable + $raw_config = json_decode( $post->post_content, true ); + $is_global_styles_user_theme_json = isset( $raw_config['isGlobalStylesUserThemeJSON'] ) && true === $raw_config['isGlobalStylesUserThemeJSON']; + $config = array(); + if ( $is_global_styles_user_theme_json ) { + $config = ( new WP_Theme_JSON_Gutenberg( $raw_config, 'custom' ) )->get_raw_data(); + } + // Base fields for every post. + $data = array(); + $fields = $this->get_fields_for_response( $request ); + if ( rest_is_field_included( 'id', $fields ) ) { + $data['id'] = $post->ID; + } + if ( rest_is_field_included( 'title', $fields ) ) { + $data['title'] = array(); + } + if ( rest_is_field_included( 'title.raw', $fields ) ) { + $data['title']['raw'] = $post->post_title; + } + if ( rest_is_field_included( 'title.rendered', $fields ) ) { + add_filter( 'protected_title_format', array( $this, 'protected_title_format' ) ); + $data['title']['rendered'] = get_the_title( $post->ID ); + remove_filter( 'protected_title_format', array( $this, 'protected_title_format' ) ); + } + if ( rest_is_field_included( 'settings', $fields ) ) { + $data['settings'] = ! empty( $config['settings'] ) && $is_global_styles_user_theme_json ? $config['settings'] : new stdClass(); + } + if ( rest_is_field_included( 'styles', $fields ) ) { + $data['styles'] = ! empty( $config['styles'] ) && $is_global_styles_user_theme_json ? $config['styles'] : new stdClass(); + } + $context = ! empty( $request['context'] ) ? $request['context'] : 'view'; + $data = $this->add_additional_fields_to_object( $data, $request ); + $data = $this->filter_response_by_context( $data, $context ); + // Wrap the data in a response object. + $response = rest_ensure_response( $data ); + $links = $this->prepare_links( $post->ID ); + $response->add_links( $links ); + if ( ! empty( $links['self']['href'] ) ) { + $actions = $this->get_available_actions(); + $self = $links['self']['href']; + foreach ( $actions as $rel ) { + $response->add_link( $rel, $self ); + } + } + return $response; + } + + /** + * Returns the given theme global styles config. + * + * @since 5.9.0 + * + * @param WP_REST_Request $request The request instance. + * @return WP_REST_Response|WP_Error + */ + public function get_theme_item( $request ) { + if ( wp_get_theme()->get_stylesheet() !== $request['stylesheet'] ) { + // This endpoint only supports the active theme for now. + return new WP_Error( + 'rest_theme_not_found', + __( 'Theme not found.', 'gutenberg' ), + array( 'status' => 404 ) + ); + } + $theme = WP_Theme_JSON_Resolver_Gutenberg::get_merged_data( 'theme' ); + $data = array(); + $fields = $this->get_fields_for_response( $request ); + if ( rest_is_field_included( 'settings', $fields ) ) { + $data['settings'] = $theme->get_settings(); + } + if ( rest_is_field_included( 'styles', $fields ) ) { + $raw_data = $theme->get_raw_data(); + $data['styles'] = isset( $raw_data['styles'] ) ? $raw_data['styles'] : array(); + } + $context = ! empty( $request['context'] ) ? $request['context'] : 'view'; + $data = $this->add_additional_fields_to_object( $data, $request ); + $data = $this->filter_response_by_context( $data, $context ); + $response = rest_ensure_response( $data ); + $links = array( + 'self' => array( + 'href' => rest_url( sprintf( '%s/%s/themes/%s', $this->namespace, $this->rest_base, $request['stylesheet'] ) ), + ), + ); + $response->add_links( $links ); + return $response; + } + + + /** + * Returns the given theme global styles variations. + * + * @param WP_REST_Request $request The request instance. + * + * @return WP_REST_Response|WP_Error + */ + public function get_theme_items( $request ) { + if ( wp_get_theme()->get_stylesheet() !== $request['stylesheet'] ) { + // This endpoint only supports the active theme for now. + return new WP_Error( + 'rest_theme_not_found', + __( 'Theme not found.', 'gutenberg' ), + array( 'status' => 404 ) + ); + } + + $variations = WP_Theme_JSON_Resolver_Gutenberg::get_style_variations(); + $response = rest_ensure_response( $variations ); + + return $response; + } + +} diff --git a/lib/compat/wordpress-6.0/class-gutenberg-rest-pattern-directory-controller.php b/lib/compat/wordpress-6.0/class-gutenberg-rest-pattern-directory-controller.php new file mode 100644 index 0000000000000..5f639bd62baa5 --- /dev/null +++ b/lib/compat/wordpress-6.0/class-gutenberg-rest-pattern-directory-controller.php @@ -0,0 +1,141 @@ + get_user_locale(), + 'wp-version' => $wp_version, // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UndefinedVariable -- it's defined in `version.php` above. + 'gutenberg-version' => $gutenberg_data['Version'], + ); + + $category_id = $request['category']; + $keyword_id = $request['keyword']; + $search_term = $request['search']; + $slug = $request['slug']; + + if ( $category_id ) { + $query_args['pattern-categories'] = $category_id; + } + + if ( $keyword_id ) { + $query_args['pattern-keywords'] = $keyword_id; + } + + if ( $search_term ) { + $query_args['search'] = $search_term; + } + + if ( $slug ) { + $query_args['slug'] = $slug; + } + + /** + * Include a hash of the query args, so that different requests are stored in + * separate caches. + * + * MD5 is chosen for its speed, low-collision rate, universal availability, and to stay + * under the character limit for `_site_transient_timeout_{...}` keys. + * + * @link https://stackoverflow.com/questions/3665247/fastest-hash-for-non-cryptographic-uses + */ + $transient_key = 'wp_remote_block_patterns_' . md5( implode( '-', $query_args ) ); + + /** + * Use network-wide transient to improve performance. The locale is the only site + * configuration that affects the response, and it's included in the transient key. + */ + $raw_patterns = get_site_transient( $transient_key ); + + if ( ! $raw_patterns ) { + $api_url = add_query_arg( + array_map( 'rawurlencode', $query_args ), + 'http://api.wordpress.org/patterns/1.0/' + ); + + if ( wp_http_supports( array( 'ssl' ) ) ) { + $api_url = set_url_scheme( $api_url, 'https' ); + } + + /** + * Default to a short TTL, to mitigate cache stampedes on high-traffic sites. + * This assumes that most errors will be short-lived, e.g., packet loss that causes the + * first request to fail, but a follow-up one will succeed. The value should be high + * enough to avoid stampedes, but low enough to not interfere with users manually + * re-trying a failed request. + */ + $cache_ttl = 5; + $wporg_response = wp_remote_get( $api_url ); + $raw_patterns = json_decode( wp_remote_retrieve_body( $wporg_response ) ); + + if ( is_wp_error( $wporg_response ) ) { + $raw_patterns = $wporg_response; + + } elseif ( ! is_array( $raw_patterns ) ) { + // HTTP request succeeded, but response data is invalid. + $raw_patterns = new WP_Error( + 'pattern_api_failed', + sprintf( + /* translators: %s: Support forums URL. */ + __( 'An unexpected error occurred. Something may be wrong with WordPress.org or this server’s configuration. If you continue to have problems, please try the support forums.', 'gutenberg' ), + __( 'https://wordpress.org/support/forums/', 'gutenberg' ) + ), + array( + 'response' => wp_remote_retrieve_body( $wporg_response ), + ) + ); + + } else { + // Response has valid data. + $cache_ttl = HOUR_IN_SECONDS; + } + + set_site_transient( $transient_key, $raw_patterns, $cache_ttl ); + } + + if ( is_wp_error( $raw_patterns ) ) { + $raw_patterns->add_data( array( 'status' => 500 ) ); + + return $raw_patterns; + } + + $response = array(); + + if ( $raw_patterns ) { + foreach ( $raw_patterns as $pattern ) { + $response[] = $this->prepare_response_for_collection( + $this->prepare_item_for_response( $pattern, $request ) + ); + } + } + + return new WP_REST_Response( $response ); + } +} diff --git a/lib/compat/wordpress-6.0/class-wp-rest-block-pattern-categories-controller.php b/lib/compat/wordpress-6.0/class-wp-rest-block-pattern-categories-controller.php new file mode 100644 index 0000000000000..0f60781dae106 --- /dev/null +++ b/lib/compat/wordpress-6.0/class-wp-rest-block-pattern-categories-controller.php @@ -0,0 +1,152 @@ +namespace = 'wp/v2'; + $this->rest_base = 'block-patterns/categories'; + } + + /** + * Registers the routes for the objects of the controller. + * + * @see register_rest_route() + * + * @since 6.0.0 + */ + public function register_routes() { + register_rest_route( + $this->namespace, + '/' . $this->rest_base, + array( + array( + 'methods' => WP_REST_Server::READABLE, + 'callback' => array( $this, 'get_items' ), + 'permission_callback' => array( $this, 'get_items_permissions_check' ), + ), + 'schema' => array( $this, 'get_public_item_schema' ), + ) + ); + } + + /** + * Checks whether a given request has permission to read block patterns. + * + * @since 6.0.0 + * + * @param WP_REST_Request $request Full details about the request. + * + * @return WP_Error|bool True if the request has read access, WP_Error object otherwise. + */ + public function get_items_permissions_check( $request ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable + if ( current_user_can( 'edit_posts' ) ) { + return true; + } + + foreach ( get_post_types( array( 'show_in_rest' => true ), 'objects' ) as $post_type ) { + if ( current_user_can( $post_type->cap->edit_posts ) ) { + return true; + } + } + + return new WP_Error( + 'rest_cannot_view', + __( 'Sorry, you are not allowed to view the registered block pattern categories.', 'gutenberg' ), + array( 'status' => rest_authorization_required_code() ) + ); + } + + /** + * Retrieves all block pattern categories. + * + * @since 6.0.0 + * + * @param WP_REST_Request $request Full details about the request. + * + * @return WP_Error|WP_REST_Response Response object on success, or WP_Error object on failure. + */ + public function get_items( $request ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable + $response = array(); + $categories = WP_Block_Pattern_Categories_Registry::get_instance()->get_all_registered(); + foreach ( $categories as $category ) { + $prepared_category = $this->prepare_item_for_response( $category, $request ); + $response[] = $this->prepare_response_for_collection( $prepared_category ); + } + return rest_ensure_response( $response ); + } + + /** + * Prepare a raw block pattern category before it gets output in a REST API response. + * + * @since 6.0.0 + * + * @param object $item Raw category as registered, before any changes. + * @param WP_REST_Request $request Request object. + * @return WP_REST_Response + */ + public function prepare_item_for_response( $item, $request ) { + $fields = $this->get_fields_for_response( $request ); + $keys = array( 'name', 'label' ); + $data = array(); + foreach ( $keys as $key ) { + if ( rest_is_field_included( $key, $fields ) ) { + $data[ $key ] = $item[ $key ]; + } + } + + $context = ! empty( $request['context'] ) ? $request['context'] : 'view'; + $data = $this->add_additional_fields_to_object( $data, $request ); + $data = $this->filter_response_by_context( $data, $context ); + return rest_ensure_response( $data ); + } + + /** + * Retrieves the block pattern category schema, conforming to JSON Schema. + * + * @since 6.0.0 + * + * @return array Item schema data. + */ + public function get_item_schema() { + $schema = array( + '$schema' => 'http://json-schema.org/draft-04/schema#', + 'title' => 'block-pattern-category', + 'type' => 'object', + 'properties' => array( + 'name' => array( + 'description' => __( 'The category name.', 'gutenberg' ), + 'type' => 'string', + 'readonly' => true, + 'context' => array( 'view', 'edit', 'embed' ), + ), + 'label' => array( + 'description' => __( 'The category label, in human readable format.', 'gutenberg' ), + 'type' => 'string', + 'readonly' => true, + 'context' => array( 'view', 'edit', 'embed' ), + ), + ), + ); + + return $this->add_additional_fields_schema( $schema ); + } +} diff --git a/lib/compat/wordpress-6.0/class-wp-rest-block-patterns-controller.php b/lib/compat/wordpress-6.0/class-wp-rest-block-patterns-controller.php new file mode 100644 index 0000000000000..eab15de13657f --- /dev/null +++ b/lib/compat/wordpress-6.0/class-wp-rest-block-patterns-controller.php @@ -0,0 +1,207 @@ +namespace = 'wp/v2'; + $this->rest_base = 'block-patterns/patterns'; + } + + /** + * Registers the routes for the objects of the controller. + * + * @see register_rest_route() + * + * @since 6.0.0 + */ + public function register_routes() { + register_rest_route( + $this->namespace, + '/' . $this->rest_base, + array( + array( + 'methods' => WP_REST_Server::READABLE, + 'callback' => array( $this, 'get_items' ), + 'permission_callback' => array( $this, 'get_items_permissions_check' ), + ), + 'schema' => array( $this, 'get_public_item_schema' ), + ) + ); + } + + /** + * Checks whether a given request has permission to read block patterns. + * + * @since 6.0.0 + * + * @param WP_REST_Request $request Full details about the request. + * + * @return WP_Error|bool True if the request has read access, WP_Error object otherwise. + */ + public function get_items_permissions_check( $request ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable + if ( current_user_can( 'edit_posts' ) ) { + return true; + } + + foreach ( get_post_types( array( 'show_in_rest' => true ), 'objects' ) as $post_type ) { + if ( current_user_can( $post_type->cap->edit_posts ) ) { + return true; + } + } + + return new WP_Error( + 'rest_cannot_view', + __( 'Sorry, you are not allowed to view the registered block patterns.', 'gutenberg' ), + array( 'status' => rest_authorization_required_code() ) + ); + } + + /** + * Retrieves all block patterns. + * + * @since 6.0.0 + * + * @param WP_REST_Request $request Full details about the request. + * + * @return WP_Error|WP_REST_Response Response object on success, or WP_Error object on failure. + */ + public function get_items( $request ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable + // Load block patterns from w.org. + _load_remote_block_patterns(); // Patterns with the `core` keyword. + _load_remote_featured_patterns(); // Patterns in the `featured` category. + gutenberg_register_remote_theme_patterns(); // Patterns requested by current theme. + + $response = array(); + $patterns = WP_Block_Patterns_Registry::get_instance()->get_all_registered(); + foreach ( $patterns as $pattern ) { + $prepared_pattern = $this->prepare_item_for_response( $pattern, $request ); + $response[] = $this->prepare_response_for_collection( $prepared_pattern ); + } + return rest_ensure_response( $response ); + } + + /** + * Prepare a raw block pattern before it gets output in a REST API response. + * + * @since 6.0.0 + * + * @param object $item Raw pattern as registered, before any changes. + * @param WP_REST_Request $request Request object. + * @return WP_REST_Response + */ + public function prepare_item_for_response( $item, $request ) { + $fields = $this->get_fields_for_response( $request ); + $keys = array( + 'name' => 'name', + 'title' => 'title', + 'description' => 'description', + 'viewportWidth' => 'viewport_width', + 'blockTypes' => 'block_types', + 'categories' => 'categories', + 'keywords' => 'keywords', + 'content' => 'content', + 'inserter' => 'inserter', + ); + $data = array(); + foreach ( $keys as $item_key => $rest_key ) { + if ( isset( $item[ $item_key ] ) && rest_is_field_included( $rest_key, $fields ) ) { + $data[ $rest_key ] = $item[ $item_key ]; + } + } + + $context = ! empty( $request['context'] ) ? $request['context'] : 'view'; + $data = $this->add_additional_fields_to_object( $data, $request ); + $data = $this->filter_response_by_context( $data, $context ); + return rest_ensure_response( $data ); + } + + /** + * Retrieves the block pattern schema, conforming to JSON Schema. + * + * @since 6.0.0 + * + * @return array Item schema data. + */ + public function get_item_schema() { + $schema = array( + '$schema' => 'http://json-schema.org/draft-04/schema#', + 'title' => 'block-pattern', + 'type' => 'object', + 'properties' => array( + 'name' => array( + 'description' => __( 'The pattern name.', 'gutenberg' ), + 'type' => 'string', + 'readonly' => true, + 'context' => array( 'view', 'edit', 'embed' ), + ), + 'title' => array( + 'description' => __( 'The pattern title, in human readable format.', 'gutenberg' ), + 'type' => 'string', + 'readonly' => true, + 'context' => array( 'view', 'edit', 'embed' ), + ), + 'description' => array( + 'description' => __( 'The pattern detailed description.', 'gutenberg' ), + 'type' => 'string', + 'readonly' => true, + 'context' => array( 'view', 'edit', 'embed' ), + ), + 'viewport_width' => array( + 'description' => __( 'The pattern viewport width for inserter preview.', 'gutenberg' ), + 'type' => 'number', + 'readonly' => true, + 'context' => array( 'view', 'edit', 'embed' ), + ), + 'block_types' => array( + 'description' => __( 'Block types that the pattern is intended to be used with.', 'gutenberg' ), + 'type' => 'array', + 'readonly' => true, + 'context' => array( 'view', 'edit', 'embed' ), + ), + 'categories' => array( + 'description' => __( 'The pattern category slugs.', 'gutenberg' ), + 'type' => 'array', + 'readonly' => true, + 'context' => array( 'view', 'edit', 'embed' ), + ), + 'keywords' => array( + 'description' => __( 'The pattern keywords.', 'gutenberg' ), + 'type' => 'array', + 'readonly' => true, + 'context' => array( 'view', 'edit', 'embed' ), + ), + 'content' => array( + 'description' => __( 'The pattern content.', 'gutenberg' ), + 'type' => 'string', + 'readonly' => true, + 'context' => array( 'view', 'edit', 'embed' ), + ), + 'inserter' => array( + 'description' => __( 'Determines whether the pattern is visible in inserter.', 'gutenberg' ), + 'type' => 'boolean', + 'readonly' => true, + 'context' => array( 'view', 'edit', 'embed' ), + ), + ), + ); + + return $this->add_additional_fields_schema( $schema ); + } +} diff --git a/lib/compat/wordpress-6.0/class-wp-theme-json-6-0.php b/lib/compat/wordpress-6.0/class-wp-theme-json-6-0.php new file mode 100644 index 0000000000000..77d731b9d4544 --- /dev/null +++ b/lib/compat/wordpress-6.0/class-wp-theme-json-6-0.php @@ -0,0 +1,680 @@ + array( 'color', 'gradient' ), + 'background-color' => array( 'color', 'background' ), + 'border-radius' => array( 'border', 'radius' ), + 'border-top-left-radius' => array( 'border', 'radius', 'topLeft' ), + 'border-top-right-radius' => array( 'border', 'radius', 'topRight' ), + 'border-bottom-left-radius' => array( 'border', 'radius', 'bottomLeft' ), + 'border-bottom-right-radius' => array( 'border', 'radius', 'bottomRight' ), + 'border-color' => array( 'border', 'color' ), + 'border-width' => array( 'border', 'width' ), + 'border-style' => array( 'border', 'style' ), + 'border-top-color' => array( 'border', 'top', 'color' ), + 'border-top-width' => array( 'border', 'top', 'width' ), + 'border-top-style' => array( 'border', 'top', 'style' ), + 'border-right-color' => array( 'border', 'right', 'color' ), + 'border-right-width' => array( 'border', 'right', 'width' ), + 'border-right-style' => array( 'border', 'right', 'style' ), + 'border-bottom-color' => array( 'border', 'bottom', 'color' ), + 'border-bottom-width' => array( 'border', 'bottom', 'width' ), + 'border-bottom-style' => array( 'border', 'bottom', 'style' ), + 'border-left-color' => array( 'border', 'left', 'color' ), + 'border-left-width' => array( 'border', 'left', 'width' ), + 'border-left-style' => array( 'border', 'left', 'style' ), + 'color' => array( 'color', 'text' ), + 'font-family' => array( 'typography', 'fontFamily' ), + 'font-size' => array( 'typography', 'fontSize' ), + 'font-style' => array( 'typography', 'fontStyle' ), + 'font-weight' => array( 'typography', 'fontWeight' ), + 'letter-spacing' => array( 'typography', 'letterSpacing' ), + 'line-height' => array( 'typography', 'lineHeight' ), + 'margin' => array( 'spacing', 'margin' ), + 'margin-top' => array( 'spacing', 'margin', 'top' ), + 'margin-right' => array( 'spacing', 'margin', 'right' ), + 'margin-bottom' => array( 'spacing', 'margin', 'bottom' ), + 'margin-left' => array( 'spacing', 'margin', 'left' ), + 'padding' => array( 'spacing', 'padding' ), + 'padding-top' => array( 'spacing', 'padding', 'top' ), + 'padding-right' => array( 'spacing', 'padding', 'right' ), + 'padding-bottom' => array( 'spacing', 'padding', 'bottom' ), + 'padding-left' => array( 'spacing', 'padding', 'left' ), + '--wp--style--block-gap' => array( 'spacing', 'blockGap' ), + 'text-decoration' => array( 'typography', 'textDecoration' ), + 'text-transform' => array( 'typography', 'textTransform' ), + 'filter' => array( 'filter', 'duotone' ), + ); + + /** + * Presets are a set of values that serve + * to bootstrap some styles: colors, font sizes, etc. + * + * They are a unkeyed array of values such as: + * + * ```php + * array( + * array( + * 'slug' => 'unique-name-within-the-set', + * 'name' => 'Name for the UI', + * => 'value' + * ), + * ) + * ``` + * + * This contains the necessary metadata to process them: + * + * - path => Where to find the preset within the settings section. + * - prevent_override => Disables override of default presets by theme presets. + * The relationship between whether to override the defaults + * and whether the defaults are enabled is inverse: + * - If defaults are enabled => theme presets should not be overriden + * - If defaults are disabled => theme presets should be overriden + * For example, a theme sets defaultPalette to false, + * making the default palette hidden from the user. + * In that case, we want all the theme presets to be present, + * so they should override the defaults by setting this false. + * - use_default_names => whether to use the default names + * - value_key => the key that represents the value + * - value_func => optionally, instead of value_key, a function to generate + * the value that takes a preset as an argument + * (either value_key or value_func should be present) + * - css_vars => template string to use in generating the CSS Custom Property. + * Example output: "--wp--preset--duotone--blue: " will generate as many CSS Custom Properties as presets defined + * substituting the $slug for the slug's value for each preset value. + * - classes => array containing a structure with the classes to + * generate for the presets, where for each array item + * the key is the class name and the value the property name. + * The "$slug" substring will be replaced by the slug of each preset. + * For example: + * 'classes' => array( + * '.has-$slug-color' => 'color', + * '.has-$slug-background-color' => 'background-color', + * '.has-$slug-border-color' => 'border-color', + * ) + * - properties => array of CSS properties to be used by kses to + * validate the content of each preset + * by means of the remove_insecure_properties method. + */ + const PRESETS_METADATA = array( + array( + 'path' => array( 'color', 'palette' ), + 'prevent_override' => array( 'color', 'defaultPalette' ), + 'use_default_names' => false, + 'value_key' => 'color', + 'css_vars' => '--wp--preset--color--$slug', + 'classes' => array( + '.has-$slug-color' => 'color', + '.has-$slug-background-color' => 'background-color', + '.has-$slug-border-color' => 'border-color', + ), + 'properties' => array( 'color', 'background-color', 'border-color' ), + ), + array( + 'path' => array( 'color', 'gradients' ), + 'prevent_override' => array( 'color', 'defaultGradients' ), + 'use_default_names' => false, + 'value_key' => 'gradient', + 'css_vars' => '--wp--preset--gradient--$slug', + 'classes' => array( '.has-$slug-gradient-background' => 'background' ), + 'properties' => array( 'background' ), + ), + array( + 'path' => array( 'color', 'duotone' ), + 'prevent_override' => array( 'color', 'defaultDuotone' ), + 'use_default_names' => false, + 'value_func' => 'gutenberg_get_duotone_filter_property', + 'css_vars' => '--wp--preset--duotone--$slug', + 'classes' => array(), + 'properties' => array( 'filter' ), + ), + array( + 'path' => array( 'typography', 'fontSizes' ), + 'prevent_override' => false, + 'use_default_names' => true, + 'value_key' => 'size', + 'css_vars' => '--wp--preset--font-size--$slug', + 'classes' => array( '.has-$slug-font-size' => 'font-size' ), + 'properties' => array( 'font-size' ), + ), + array( + 'path' => array( 'typography', 'fontFamilies' ), + 'prevent_override' => false, + 'use_default_names' => false, + 'value_key' => 'fontFamily', + 'css_vars' => '--wp--preset--font-family--$slug', + 'classes' => array( '.has-$slug-font-family' => 'font-family' ), + 'properties' => array( 'font-family' ), + ), + ); + + /** + * The top-level keys a theme.json can have. + * + * @var string[] + */ + const VALID_TOP_LEVEL_KEYS = array( + 'customTemplates', + 'patterns', + 'settings', + 'styles', + 'templateParts', + 'version', + 'title', + ); + + const APPEARANCE_TOOLS_OPT_INS = array( + array( 'border', 'color' ), + array( 'border', 'radius' ), + array( 'border', 'style' ), + array( 'border', 'width' ), + array( 'color', 'link' ), + array( 'spacing', 'blockGap' ), + array( 'spacing', 'margin' ), + array( 'spacing', 'padding' ), + array( 'typography', 'lineHeight' ), + ); + + /** + * The valid properties under the settings key. + * + * @var array + */ + const VALID_SETTINGS = array( + 'appearanceTools' => null, + 'border' => array( + 'color' => null, + 'radius' => null, + 'style' => null, + 'width' => null, + ), + 'color' => array( + 'background' => null, + 'custom' => null, + 'customDuotone' => null, + 'customGradient' => null, + 'defaultDuotone' => null, + 'defaultGradients' => null, + 'defaultPalette' => null, + 'duotone' => null, + 'gradients' => null, + 'link' => null, + 'palette' => null, + 'text' => null, + ), + 'custom' => null, + 'layout' => array( + 'contentSize' => null, + 'wideSize' => null, + ), + 'spacing' => array( + 'blockGap' => null, + 'margin' => null, + 'padding' => null, + 'units' => null, + ), + 'typography' => array( + 'customFontSize' => null, + 'dropCap' => null, + 'fontFamilies' => null, + 'fontSizes' => null, + 'fontStyle' => null, + 'fontWeight' => null, + 'letterSpacing' => null, + 'lineHeight' => null, + 'textDecoration' => null, + 'textTransform' => null, + ), + ); + + /** + * The valid properties under the styles key. + * + * @var array + */ + const VALID_STYLES = array( + 'border' => array( + 'color' => null, + 'radius' => null, + 'style' => null, + 'width' => null, + 'top' => null, + 'right' => null, + 'bottom' => null, + 'left' => null, + ), + 'color' => array( + 'background' => null, + 'gradient' => null, + 'text' => null, + ), + 'filter' => array( + 'duotone' => null, + ), + 'spacing' => array( + 'margin' => null, + 'padding' => null, + 'blockGap' => 'top', + ), + 'typography' => array( + 'fontFamily' => null, + 'fontSize' => null, + 'fontStyle' => null, + 'fontWeight' => null, + 'letterSpacing' => null, + 'lineHeight' => null, + 'textDecoration' => null, + 'textTransform' => null, + ), + ); + + /** + * Returns the current theme's wanted patterns(slugs) to be + * registered from Pattern Directory. + * + * @return array + */ + public function get_patterns() { + if ( isset( $this->theme_json['patterns'] ) && is_array( $this->theme_json['patterns'] ) ) { + return $this->theme_json['patterns']; + } + return array(); + } + + /** + * Converts each style section into a list of rulesets + * containing the block styles to be appended to the stylesheet. + * + * See glossary at https://developer.mozilla.org/en-US/docs/Web/CSS/Syntax + * + * For each section this creates a new ruleset such as: + * + * block-selector { + * style-property-one: value; + * } + * + * @param array $style_nodes Nodes with styles. + * @return string The new stylesheet. + */ + protected function get_block_classes( $style_nodes ) { + $block_rules = ''; + + foreach ( $style_nodes as $metadata ) { + if ( null === $metadata['selector'] ) { + continue; + } + + $node = _wp_array_get( $this->theme_json, $metadata['path'], array() ); + $selector = $metadata['selector']; + $settings = _wp_array_get( $this->theme_json, array( 'settings' ) ); + $declarations = static::compute_style_properties( $node, $settings ); + + // 1. Separate the ones who use the general selector + // and the ones who use the duotone selector. + $declarations_duotone = array(); + foreach ( $declarations as $index => $declaration ) { + if ( 'filter' === $declaration['name'] ) { + unset( $declarations[ $index ] ); + $declarations_duotone[] = $declaration; + } + } + + /* + * Reset default browser margin on the root body element. + * This is set on the root selector **before** generating the ruleset + * from the `theme.json`. This is to ensure that if the `theme.json` declares + * `margin` in its `spacing` declaration for the `body` element then these + * user-generated values take precedence in the CSS cascade. + * @link https://github.com/WordPress/gutenberg/issues/36147. + */ + if ( static::ROOT_BLOCK_SELECTOR === $selector ) { + $block_rules .= 'body { margin: 0; }'; + } + + // 2. Generate the rules that use the general selector. + $block_rules .= static::to_ruleset( $selector, $declarations ); + + // 3. Generate the rules that use the duotone selector. + if ( isset( $metadata['duotone'] ) && ! empty( $declarations_duotone ) ) { + $selector_duotone = static::scope_selector( $metadata['selector'], $metadata['duotone'] ); + $block_rules .= static::to_ruleset( $selector_duotone, $declarations_duotone ); + } + + if ( static::ROOT_BLOCK_SELECTOR === $selector ) { + $block_rules .= '.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }'; + $block_rules .= '.wp-site-blocks > .alignright { float: right; margin-left: 2em; }'; + $block_rules .= '.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }'; + + $has_block_gap_support = _wp_array_get( $this->theme_json, array( 'settings', 'spacing', 'blockGap' ) ) !== null; + if ( $has_block_gap_support ) { + $block_rules .= '.wp-site-blocks > * { margin-block-start: 0; margin-block-end: 0; }'; + $block_rules .= '.wp-site-blocks > * + * { margin-block-start: var( --wp--style--block-gap ); }'; + } + } + } + + return $block_rules; + } + + /** + * Merge new incoming data. + * + * @param WP_Theme_JSON $incoming Data to merge. + */ + public function merge( $incoming ) { + $incoming_data = $incoming->get_raw_data(); + $this->theme_json = array_replace_recursive( $this->theme_json, $incoming_data ); + + /* + * The array_replace_recursive algorithm merges at the leaf level, + * but we don't want leaf arrays to be merged, so we overwrite it. + * + * For leaf values that are sequential arrays it will use the numeric indexes for replacement. + * We rather replace the existing with the incoming value, if it exists. + * This is the case of spacing.units. + * + * For leaf values that are associative arrays it will merge them as expected. + * This is also not the behavior we want for the current associative arrays (presets). + * We rather replace the existing with the incoming value, if it exists. + * This happens, for example, when we merge data from theme.json upon existing + * theme supports or when we merge anything coming from the same source twice. + * This is the case of color.palette, color.gradients, color.duotone, + * typography.fontSizes, or typography.fontFamilies. + * + * Additionally, for some preset types, we also want to make sure the + * values they introduce don't conflict with default values. We do so + * by checking the incoming slugs for theme presets and compare them + * with the equivalent default presets: if a slug is present as a default + * we remove it from the theme presets. + */ + $nodes = static::get_setting_nodes( $incoming_data ); + $slugs_global = static::get_default_slugs( $this->theme_json, array( 'settings' ) ); + foreach ( $nodes as $node ) { + $slugs_node = static::get_default_slugs( $this->theme_json, $node['path'] ); + $slugs = array_merge_recursive( $slugs_global, $slugs_node ); + + // Replace the spacing.units. + $path = array_merge( $node['path'], array( 'spacing', 'units' ) ); + $content = _wp_array_get( $incoming_data, $path, null ); + if ( isset( $content ) ) { + _wp_array_set( $this->theme_json, $path, $content ); + } + + // Replace the presets. + foreach ( static::PRESETS_METADATA as $preset ) { + $override_preset = ! static::get_metadata_boolean( $this->theme_json['settings'], $preset['prevent_override'], true ); + + foreach ( static::VALID_ORIGINS as $origin ) { + $base_path = array_merge( $node['path'], $preset['path'] ); + $path = array_merge( $base_path, array( $origin ) ); + $content = _wp_array_get( $incoming_data, $path, null ); + if ( ! isset( $content ) ) { + continue; + } + + if ( 'theme' === $origin && $preset['use_default_names'] ) { + foreach ( $content as &$item ) { + if ( ! array_key_exists( 'name', $item ) ) { + $name = static::get_name_from_defaults( $item['slug'], $base_path ); + if ( null !== $name ) { + $item['name'] = $name; + } + } + } + } + + if ( + ( 'theme' !== $origin ) || + ( 'theme' === $origin && $override_preset ) + ) { + _wp_array_set( $this->theme_json, $path, $content ); + } else { + $slugs_for_preset = _wp_array_get( $slugs, $preset['path'], array() ); + $content = static::filter_slugs( $content, $slugs_for_preset ); + _wp_array_set( $this->theme_json, $path, $content ); + } + } + } + } + } + + /** + * Converts all filter (duotone) presets into SVGs. + * + * @param array $origins List of origins to process. + * + * @return string SVG filters. + */ + public function get_svg_filters( $origins ) { + $blocks_metadata = static::get_blocks_metadata(); + $setting_nodes = static::get_setting_nodes( $this->theme_json, $blocks_metadata ); + + $filters = ''; + foreach ( $setting_nodes as $metadata ) { + $node = _wp_array_get( $this->theme_json, $metadata['path'], array() ); + if ( empty( $node['color']['duotone'] ) ) { + continue; + } + + $duotone_presets = $node['color']['duotone']; + + foreach ( $origins as $origin ) { + if ( ! isset( $duotone_presets[ $origin ] ) ) { + continue; + } + foreach ( $duotone_presets[ $origin ] as $duotone_preset ) { + $filters .= gutenberg_get_duotone_filter_svg( $duotone_preset ); + } + } + } + + return $filters; + } + + /** + * For metadata values that can either be booleans or paths to booleans, gets the value. + * + * ```php + * $data = array( + * 'color' => array( + * 'defaultPalette' => true + * ) + * ); + * + * static::get_metadata_boolean( $data, false ); + * // => false + * + * static::get_metadata_boolean( $data, array( 'color', 'defaultPalette' ) ); + * // => true + * ``` + * + * @param array $data The data to inspect. + * @param bool|array $path Boolean or path to a boolean. + * @param bool $default Default value if the referenced path is missing. + * @return boolean + */ + protected static function get_metadata_boolean( $data, $path, $default = false ) { + if ( is_bool( $path ) ) { + return $path; + } + + if ( is_array( $path ) ) { + $value = _wp_array_get( $data, $path ); + if ( null !== $value ) { + return $value; + } + } + + return $default; + } + + /** + * Returns a valid theme.json as provided by a theme. + * + * Unlike get_raw_data() this returns the presets flattened, as provided by a theme. + * This also uses appearanceTools instead of their opt-ins if all of them are true. + * + * @return string[] + */ + public function get_data() { + $output = $this->theme_json; + $nodes = static::get_setting_nodes( $output ); + + /** + * Flatten the theme & custom origins into a single one. + * + * For example, the following: + * + * { + * "settings": { + * "color": { + * "palette": { + * "theme": [ {} ], + * "custom": [ {} ] + * } + * } + * } + * } + * + * will be converted to: + * + * { + * "settings": { + * "color": { + * "palette": [ {} ] + * } + * } + * } + */ + foreach ( $nodes as $node ) { + foreach ( static::PRESETS_METADATA as $preset_metadata ) { + $path = array_merge( $node['path'], $preset_metadata['path'] ); + $preset = _wp_array_get( $output, $path, null ); + if ( null === $preset ) { + continue; + } + + $items = array(); + if ( isset( $preset['theme'] ) ) { + foreach ( $preset['theme'] as $item ) { + $slug = $item['slug']; + unset( $item['slug'] ); + $items[ $slug ] = $item; + } + } + if ( isset( $preset['custom'] ) ) { + foreach ( $preset['custom'] as $item ) { + $slug = $item['slug']; + unset( $item['slug'] ); + $items[ $slug ] = $item; + } + } + $flattened_preset = array(); + foreach ( $items as $slug => $value ) { + $flattened_preset[] = array_merge( array( 'slug' => $slug ), $value ); + } + _wp_array_set( $output, $path, $flattened_preset ); + } + } + + // If all of the static::APPEARANCE_TOOLS_OPT_INS are true, + // this code unsets them and sets 'appearanceTools' instead. + foreach ( $nodes as $node ) { + $all_opt_ins_are_set = true; + foreach ( static::APPEARANCE_TOOLS_OPT_INS as $opt_in_path ) { + $full_path = array_merge( $node['path'], $opt_in_path ); + // Use "unset prop" as a marker instead of "null" because + // "null" can be a valid value for some props (e.g. blockGap). + $opt_in_value = _wp_array_get( $output, $full_path, 'unset prop' ); + if ( 'unset prop' === $opt_in_value ) { + $all_opt_ins_are_set = false; + break; + } + } + + if ( $all_opt_ins_are_set ) { + _wp_array_set( $output, array_merge( $node['path'], array( 'appearanceTools' ) ), true ); + foreach ( static::APPEARANCE_TOOLS_OPT_INS as $opt_in_path ) { + $full_path = array_merge( $node['path'], $opt_in_path ); + // Use "unset prop" as a marker instead of "null" because + // "null" can be a valid value for some props (e.g. blockGap). + $opt_in_value = _wp_array_get( $output, $full_path, 'unset prop' ); + if ( true !== $opt_in_value ) { + continue; + } + + // The following could be improved to be path independent. + // At the moment it relies on a couple of assumptions: + // + // - all opt-ins having a path of size 2. + // - there's two sources of settings: the top-level and the block-level. + if ( + ( 1 === count( $node['path'] ) ) && + ( 'settings' === $node['path'][0] ) + ) { + // Top-level settings. + unset( $output['settings'][ $opt_in_path[0] ][ $opt_in_path[1] ] ); + if ( empty( $output['settings'][ $opt_in_path[0] ] ) ) { + unset( $output['settings'][ $opt_in_path[0] ] ); + } + } elseif ( + ( 3 === count( $node['path'] ) ) && + ( 'settings' === $node['path'][0] ) && + ( 'blocks' === $node['path'][1] ) + ) { + // Block-level settings. + $block_name = $node['path'][2]; + unset( $output['settings']['blocks'][ $block_name ][ $opt_in_path[0] ][ $opt_in_path[1] ] ); + if ( empty( $output['settings']['blocks'][ $block_name ][ $opt_in_path[0] ] ) ) { + unset( $output['settings']['blocks'][ $block_name ][ $opt_in_path[0] ] ); + } + } + } + } + } + + wp_recursive_ksort( $output ); + + return $output; + } + + /** + * Enables some settings. + * + * @since 5.9.0 + * + * @param array $context The context to which the settings belong. + */ + protected static function do_opt_in_into_settings( &$context ) { + foreach ( static::APPEARANCE_TOOLS_OPT_INS as $path ) { + // Use "unset prop" as a marker instead of "null" because + // "null" can be a valid value for some props (e.g. blockGap). + if ( 'unset prop' === _wp_array_get( $context, $path, 'unset prop' ) ) { + _wp_array_set( $context, $path, true ); + } + } + + unset( $context['appearanceTools'] ); + } +} diff --git a/lib/compat/wordpress-6.0/class-wp-theme-json-resolver-6-0.php b/lib/compat/wordpress-6.0/class-wp-theme-json-resolver-6-0.php new file mode 100644 index 0000000000000..cc6aa688493de --- /dev/null +++ b/lib/compat/wordpress-6.0/class-wp-theme-json-resolver-6-0.php @@ -0,0 +1,162 @@ + true ) ); + + if ( null === static::$theme ) { + $theme_json_data = static::read_json_file( static::get_file_path_from_theme( 'theme.json' ) ); + $theme_json_data = static::translate( $theme_json_data, wp_get_theme()->get( 'TextDomain' ) ); + static::$theme = new WP_Theme_JSON_Gutenberg( $theme_json_data ); + + if ( wp_get_theme()->parent() ) { + // Get parent theme.json. + $parent_theme_json_data = static::read_json_file( static::get_file_path_from_theme( 'theme.json', true ) ); + $parent_theme_json_data = static::translate( $parent_theme_json_data, wp_get_theme()->parent()->get( 'TextDomain' ) ); + $parent_theme = new WP_Theme_JSON_Gutenberg( $parent_theme_json_data ); + + // Merge the child theme.json into the parent theme.json. + // The child theme takes precedence over the parent. + $parent_theme->merge( static::$theme ); + static::$theme = $parent_theme; + } + } + + if ( ! $options['with_supports'] ) { + return static::$theme; + } + + /* + * We want the presets and settings declared in theme.json + * to override the ones declared via theme supports. + * So we take theme supports, transform it to theme.json shape + * and merge the static::$theme upon that. + */ + $theme_support_data = WP_Theme_JSON_Gutenberg::get_from_editor_settings( get_default_block_editor_settings() ); + if ( ! static::theme_has_support() ) { + if ( ! isset( $theme_support_data['settings']['color'] ) ) { + $theme_support_data['settings']['color'] = array(); + } + + $default_palette = false; + if ( current_theme_supports( 'default-color-palette' ) ) { + $default_palette = true; + } + if ( ! isset( $theme_support_data['settings']['color']['palette'] ) ) { + // If the theme does not have any palette, we still want to show the core one. + $default_palette = true; + } + $theme_support_data['settings']['color']['defaultPalette'] = $default_palette; + + $default_gradients = false; + if ( current_theme_supports( 'default-gradient-presets' ) ) { + $default_gradients = true; + } + if ( ! isset( $theme_support_data['settings']['color']['gradients'] ) ) { + // If the theme does not have any gradients, we still want to show the core ones. + $default_gradients = true; + } + $theme_support_data['settings']['color']['defaultGradients'] = $default_gradients; + + // Classic themes without a theme.json don't support global duotone. + $theme_support_data['settings']['color']['defaultDuotone'] = false; + } + $with_theme_supports = new WP_Theme_JSON_Gutenberg( $theme_support_data ); + $with_theme_supports->merge( static::$theme ); + + return $with_theme_supports; + } + /** + * Returns the style variations defined by the theme. + * + * @return array + */ + public static function get_style_variations() { + $variations = array(); + $base_directory = get_stylesheet_directory() . '/styles'; + if ( is_dir( $base_directory ) ) { + $nested_files = new RecursiveIteratorIterator( new RecursiveDirectoryIterator( $base_directory ) ); + $nested_html_files = iterator_to_array( new RegexIterator( $nested_files, '/^.+\.json$/i', RecursiveRegexIterator::GET_MATCH ) ); + ksort( $nested_html_files ); + foreach ( $nested_html_files as $path => $file ) { + $decoded_file = wp_json_file_decode( $path, array( 'associative' => true ) ); + if ( is_array( $decoded_file ) ) { + $translated = static::translate( $decoded_file, wp_get_theme()->get( 'TextDomain' ) ); + $variation = ( new WP_Theme_JSON_Gutenberg( $translated ) )->get_raw_data(); + if ( empty( $variation['title'] ) ) { + $variation['title'] = basename( $path, '.json' ); + } + $variations[] = $variation; + } + } + } + return $variations; + } +} diff --git a/lib/compat/wordpress-6.0/client-assets.php b/lib/compat/wordpress-6.0/client-assets.php new file mode 100644 index 0000000000000..0c5697817a94a --- /dev/null +++ b/lib/compat/wordpress-6.0/client-assets.php @@ -0,0 +1,112 @@ +get_all_registered() as $block_type ) { + if ( ! empty( $block_type->style ) ) { + $style_handles[] = $block_type->style; + } + + if ( ! empty( $block_type->editor_style ) ) { + $style_handles[] = $block_type->editor_style; + } + + if ( ! empty( $block_type->script ) ) { + $script_handles[] = $block_type->script; + } + } + + $style_handles = array_unique( $style_handles ); + $done = wp_styles()->done; + + ob_start(); + + // We do not need reset styles for the iframed editor. + wp_styles()->done = array( 'wp-reset-editor-styles' ); + wp_styles()->do_items( $style_handles ); + wp_styles()->done = $done; + + $styles = ob_get_clean(); + + $script_handles = array_unique( $script_handles ); + $done = wp_scripts()->done; + + ob_start(); + + wp_scripts()->done = array(); + wp_scripts()->do_items( $script_handles ); + wp_scripts()->done = $done; + + $scripts = ob_get_clean(); + + return array( + 'styles' => $styles, + 'scripts' => $scripts, + ); +} + +add_filter( + 'block_editor_settings_all', + function( $settings ) { + // In the future we can allow WP Dependency handles to be passed. + $settings['__unstableResolvedAssets'] = gutenberg_resolve_assets(); + return $settings; + } +); diff --git a/lib/compat/wordpress-6.0/edit-form-blocks.php b/lib/compat/wordpress-6.0/edit-form-blocks.php new file mode 100644 index 0000000000000..490ebd5a38ead --- /dev/null +++ b/lib/compat/wordpress-6.0/edit-form-blocks.php @@ -0,0 +1,66 @@ + $user_path ) { + if ( is_string( $user_path ) && 0 === strpos( $user_path, '/wp/v2/users/me' ) ) { + $preload_paths[ $user_index ] = '/wp/v2/users/me'; + break; + } + } + + return $preload_paths; +} +add_filter( 'block_editor_rest_api_preload_paths', 'gutenberg_optimize_preload_paths' ); + +/** + * Disables loading remote block patterns from REST while initializing the editor. + * Nowadays these loads are done in the `block-patterns/patterns` REST endpoint, and + * are undesired when initializing the block editor page, both in post and site editor. + * + * @param WP_Screen $current_screen WordPress current screen object. + */ +function gutenberg_disable_load_remote_patterns( $current_screen ) { + $is_site_editor = ( function_exists( 'gutenberg_is_edit_site_page' ) && gutenberg_is_edit_site_page( $current_screen->id ) ); + if ( $is_site_editor || $current_screen->is_block_editor() ) { + add_filter( 'should_load_remote_block_patterns', '__return_false' ); + } +} +add_action( 'current_screen', 'gutenberg_disable_load_remote_patterns' ); diff --git a/lib/compat/wordpress-6.0/functions.php b/lib/compat/wordpress-6.0/functions.php new file mode 100644 index 0000000000000..9368b211b0599 --- /dev/null +++ b/lib/compat/wordpress-6.0/functions.php @@ -0,0 +1,27 @@ +get_settings(); + return _wp_array_get( $settings, $path, $settings ); +} + +/** + * Function to get the styles resulting of merging core, theme, and user data. + * + * @param array $path Path to the specific style to retrieve. Optional. + * If empty, will return all styles. + * @param array $context { + * Metadata to know where to retrieve the $path from. Optional. + * + * @type string $block_name Which block to retrieve the styles from. + * If empty, it'll return the styles for the global context. + * @type string $origin Which origin to take data from. + * Valid values are 'all' (core, theme, and user) or 'base' (core and theme). + * If empty or unknown, 'all' is used. + * } + * + * @return array The styles to retrieve. + */ +function gutenberg_get_global_styles( $path = array(), $context = array() ) { + if ( ! empty( $context['block_name'] ) ) { + $path = array_merge( array( 'blocks', $context['block_name'] ), $path ); + } + $origin = 'custom'; + if ( isset( $context['origin'] ) && 'base' === $context['origin'] ) { + $origin = 'theme'; + } + $styles = WP_Theme_JSON_Resolver_Gutenberg::get_merged_data( $origin )->get_raw_data()['styles']; + return _wp_array_get( $styles, $path, $styles ); +} + +/** + * Returns the stylesheet resulting of merging core, theme, and user data. + * + * @param array $types Types of styles to load. Optional. + * It accepts 'variables', 'styles', 'presets' as values. + * If empty, it'll load all for themes with theme.json support + * and only [ 'variables', 'presets' ] for themes without theme.json support. + * + * @return string Stylesheet. + */ +function gutenberg_get_global_stylesheet( $types = array() ) { + // Return cached value if it can be used and exists. + // It's cached by theme to make sure that theme switching clears the cache. + $can_use_cached = ( + ( empty( $types ) ) && + ( ! defined( 'WP_DEBUG' ) || ! WP_DEBUG ) && + ( ! defined( 'SCRIPT_DEBUG' ) || ! SCRIPT_DEBUG ) && + ( ! defined( 'REST_REQUEST' ) || ! REST_REQUEST ) && + ! is_admin() + ); + $transient_name = 'gutenberg_global_styles_' . get_stylesheet(); + if ( $can_use_cached ) { + $cached = get_transient( $transient_name ); + if ( $cached ) { + return $cached; + } + } + $tree = WP_Theme_JSON_Resolver_Gutenberg::get_merged_data(); + $supports_theme_json = WP_Theme_JSON_Resolver_Gutenberg::theme_has_support(); + if ( empty( $types ) && ! $supports_theme_json ) { + $types = array( 'variables', 'presets' ); + } elseif ( empty( $types ) ) { + $types = array( 'variables', 'styles', 'presets' ); + } + + /* + * If variables are part of the stylesheet, + * we add them for all origins (default, theme, user). + * This is so themes without a theme.json still work as before 5.9: + * they can override the default presets. + * See https://core.trac.wordpress.org/ticket/54782 + */ + $styles_variables = ''; + if ( in_array( 'variables', $types, true ) ) { + $styles_variables = $tree->get_stylesheet( array( 'variables' ) ); + $types = array_diff( $types, array( 'variables' ) ); + } + + /* + * For the remaining types (presets, styles), we do consider origins: + * + * - themes without theme.json: only the classes for the presets defined by core + * - themes with theme.json: the presets and styles classes, both from core and the theme + */ + $styles_rest = ''; + if ( ! empty( $types ) ) { + $origins = array( 'default', 'theme', 'custom' ); + if ( ! $supports_theme_json ) { + $origins = array( 'default' ); + } + $styles_rest = $tree->get_stylesheet( $types, $origins ); + } + $stylesheet = $styles_variables . $styles_rest; + if ( $can_use_cached ) { + // Cache for a minute. + // This cache doesn't need to be any longer, we only want to avoid spikes on high-traffic sites. + set_transient( $transient_name, $stylesheet, MINUTE_IN_SECONDS ); + } + return $stylesheet; +} + +/** + * Returns a string containing the SVGs to be referenced as filters (duotone). + * + * @return string + */ +function gutenberg_get_global_styles_svg_filters() { + // Return cached value if it can be used and exists. + // It's cached by theme to make sure that theme switching clears the cache. + $transient_name = 'gutenberg_global_styles_svg_filters_' . get_stylesheet(); + $can_use_cached = ( + ( ! defined( 'WP_DEBUG' ) || ! WP_DEBUG ) && + ( ! defined( 'SCRIPT_DEBUG' ) || ! SCRIPT_DEBUG ) && + ( ! defined( 'REST_REQUEST' ) || ! REST_REQUEST ) && + ! is_admin() + ); + if ( $can_use_cached ) { + $cached = get_transient( $transient_name ); + if ( $cached ) { + return $cached; + } + } + + $supports_theme_json = WP_Theme_JSON_Resolver_Gutenberg::theme_has_support(); + + $origins = array( 'default', 'theme', 'custom' ); + if ( ! $supports_theme_json ) { + $origins = array( 'default' ); + } + + $tree = WP_Theme_JSON_Resolver_Gutenberg::get_merged_data(); + $svgs = $tree->get_svg_filters( $origins ); + + if ( $can_use_cached ) { + // Cache for a minute, same as gutenberg_get_global_stylesheet. + set_transient( $transient_name, $svgs, MINUTE_IN_SECONDS ); + } + + return $svgs; +} diff --git a/lib/compat/wordpress-6.0/post-lock.php b/lib/compat/wordpress-6.0/post-lock.php new file mode 100644 index 0000000000000..e36cdff3e7a22 --- /dev/null +++ b/lib/compat/wordpress-6.0/post-lock.php @@ -0,0 +1,67 @@ +display_name; + } + } + + return $response; +} +add_filter( 'heartbeat_received', 'gutenberg_refresh_post_lock', 20, 2 ); + +/** + * Updates post editor settings and adds avatar to the `postLock` user details. + * + * @param array $settings Default editor settings. + * @param WP_Block_Editor_Context $block_editor_context The current block editor context. + * + * @return array Filtered editor settings. + */ +function gutenberg_update_post_lock_details( $settings, $block_editor_context ) { + if ( empty( $block_editor_context->post ) ) { + return $settings; + } + + if ( ! isset( $settings['postLock']['user'] ) ) { + return $settings; + } + + $user_id = wp_check_post_lock( $block_editor_context->post->ID ); + if ( $user_id ) { + $settings['postLock']['user']['avatar'] = get_avatar_url( $user_id, array( 'size' => 128 ) ); + } + + return $settings; +} +add_filter( 'block_editor_settings_all', 'gutenberg_update_post_lock_details', 10, 2 ); diff --git a/lib/compat/wordpress-6.0/render-svg-filters.php b/lib/compat/wordpress-6.0/render-svg-filters.php new file mode 100644 index 0000000000000..f13502b867fe9 --- /dev/null +++ b/lib/compat/wordpress-6.0/render-svg-filters.php @@ -0,0 +1,38 @@ +is_block_editor() + ) { + return; + } + + $filters = gutenberg_get_global_styles_svg_filters(); + if ( ! empty( $filters ) ) { + echo $filters; + } +} + +// Override actions introduced in 5.9.1 if they exist. +remove_action( 'wp_body_open', 'wp_global_styles_render_svg_filters' ); +remove_action( 'in_admin_header', 'wp_global_styles_render_svg_filters' ); +add_action( 'wp_body_open', 'gutenberg_global_styles_render_svg_filters' ); +add_action( 'in_admin_header', 'gutenberg_global_styles_render_svg_filters' ); diff --git a/lib/compat/wordpress-6.0/rest-api.php b/lib/compat/wordpress-6.0/rest-api.php new file mode 100644 index 0000000000000..13e64dcf0ff13 --- /dev/null +++ b/lib/compat/wordpress-6.0/rest-api.php @@ -0,0 +1,54 @@ +register_routes(); +} +add_action( 'rest_api_init', 'gutenberg_register_global_styles_endpoints' ); + + +/** + * Registers the block pattern directory. + */ +function gutenberg_register_rest_pattern_directory() { + $pattern_directory_controller = new Gutenberg_REST_Pattern_Directory_Controller(); + $pattern_directory_controller->register_routes(); +} +add_action( 'rest_api_init', 'gutenberg_register_rest_pattern_directory' ); + +/** + * Registers the Edit Site's Export REST API routes. + * + * @return void + */ +function gutenberg_register_edit_site_export_endpoint() { + $editor_settings = new Gutenberg_REST_Edit_Site_Export_Controller(); + $editor_settings->register_routes(); +} +add_action( 'rest_api_init', 'gutenberg_register_edit_site_export_endpoint' ); + +/** + * Registers the block patterns REST API routes. + */ +function gutenberg_register_rest_block_patterns() { + $block_patterns = new WP_REST_Block_Patterns_Controller(); + $block_patterns->register_routes(); +} +add_action( 'rest_api_init', 'gutenberg_register_rest_block_patterns' ); + +/** + * Registers the block pattern categories REST API routes. + */ +function gutenberg_register_rest_block_pattern_categories() { + $block_patterns = new WP_REST_Block_Pattern_Categories_Controller(); + $block_patterns->register_routes(); +} +add_action( 'rest_api_init', 'gutenberg_register_rest_block_pattern_categories' ); diff --git a/lib/compat/wordpress-6.0/theme-i18n.json b/lib/compat/wordpress-6.0/theme-i18n.json new file mode 100644 index 0000000000000..282e520c338b4 --- /dev/null +++ b/lib/compat/wordpress-6.0/theme-i18n.json @@ -0,0 +1,72 @@ +{ + "title": "Style variation name", + "settings": { + "typography": { + "fontSizes": [ + { + "name": "Font size name" + } + ], + "fontFamilies": [ + { + "name": "Font family name" + } + ] + }, + "color": { + "palette": [ + { + "name": "Color name" + } + ], + "gradients": [ + { + "name": "Gradient name" + } + ], + "duotone": [ + { + "name": "Duotone name" + } + ] + }, + "blocks": { + "*": { + "typography": { + "fontSizes": [ + { + "name": "Font size name" + } + ], + "fontFamilies": [ + { + "name": "Font family name" + } + ] + }, + "color": { + "palette": [ + { + "name": "Color name" + } + ], + "gradients": [ + { + "name": "Gradient name" + } + ] + } + } + } + }, + "customTemplates": [ + { + "title": "Custom template name" + } + ], + "templateParts": [ + { + "title": "Template part name" + } + ] +} diff --git a/lib/compat/wordpress-6.0/theme.json b/lib/compat/wordpress-6.0/theme.json new file mode 100644 index 0000000000000..7691aa4a64e6a --- /dev/null +++ b/lib/compat/wordpress-6.0/theme.json @@ -0,0 +1,245 @@ +{ + "version": 2, + "settings": { + "appearanceTools": false, + "border": { + "color": false, + "radius": false, + "style": false, + "width": false + }, + "color": { + "background": true, + "custom": true, + "customDuotone": true, + "customGradient": true, + "defaultDuotone": true, + "defaultGradients": true, + "defaultPalette": true, + "duotone": [ + { + "name": "Dark grayscale", + "colors": [ "#000000", "#7f7f7f" ], + "slug": "dark-grayscale" + }, + { + "name": "Grayscale", + "colors": [ "#000000", "#ffffff" ], + "slug": "grayscale" + }, + { + "name": "Purple and yellow", + "colors": [ "#8c00b7", "#fcff41" ], + "slug": "purple-yellow" + }, + { + "name": "Blue and red", + "colors": [ "#000097", "#ff4747" ], + "slug": "blue-red" + }, + { + "name": "Midnight", + "colors": [ "#000000", "#00a5ff" ], + "slug": "midnight" + }, + { + "name": "Magenta and yellow", + "colors": [ "#c7005a", "#fff278" ], + "slug": "magenta-yellow" + }, + { + "name": "Purple and green", + "colors": [ "#a60072", "#67ff66" ], + "slug": "purple-green" + }, + { + "name": "Blue and orange", + "colors": [ "#1900d8", "#ffa96b" ], + "slug": "blue-orange" + } + ], + "gradients": [ + { + "name": "Vivid cyan blue to vivid purple", + "gradient": "linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%)", + "slug": "vivid-cyan-blue-to-vivid-purple" + }, + { + "name": "Light green cyan to vivid green cyan", + "gradient": "linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%)", + "slug": "light-green-cyan-to-vivid-green-cyan" + }, + { + "name": "Luminous vivid amber to luminous vivid orange", + "gradient": "linear-gradient(135deg,rgba(252,185,0,1) 0%,rgba(255,105,0,1) 100%)", + "slug": "luminous-vivid-amber-to-luminous-vivid-orange" + }, + { + "name": "Luminous vivid orange to vivid red", + "gradient": "linear-gradient(135deg,rgba(255,105,0,1) 0%,rgb(207,46,46) 100%)", + "slug": "luminous-vivid-orange-to-vivid-red" + }, + { + "name": "Very light gray to cyan bluish gray", + "gradient": "linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%)", + "slug": "very-light-gray-to-cyan-bluish-gray" + }, + { + "name": "Cool to warm spectrum", + "gradient": "linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%)", + "slug": "cool-to-warm-spectrum" + }, + { + "name": "Blush light purple", + "gradient": "linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%)", + "slug": "blush-light-purple" + }, + { + "name": "Blush bordeaux", + "gradient": "linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%)", + "slug": "blush-bordeaux" + }, + { + "name": "Luminous dusk", + "gradient": "linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%)", + "slug": "luminous-dusk" + }, + { + "name": "Pale ocean", + "gradient": "linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%)", + "slug": "pale-ocean" + }, + { + "name": "Electric grass", + "gradient": "linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%)", + "slug": "electric-grass" + }, + { + "name": "Midnight", + "gradient": "linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%)", + "slug": "midnight" + } + ], + "link": false, + "palette": [ + { + "name": "Black", + "slug": "black", + "color": "#000000" + }, + { + "name": "Cyan bluish gray", + "slug": "cyan-bluish-gray", + "color": "#abb8c3" + }, + { + "name": "White", + "slug": "white", + "color": "#ffffff" + }, + { + "name": "Pale pink", + "slug": "pale-pink", + "color": "#f78da7" + }, + { + "name": "Vivid red", + "slug": "vivid-red", + "color": "#cf2e2e" + }, + { + "name": "Luminous vivid orange", + "slug": "luminous-vivid-orange", + "color": "#ff6900" + }, + { + "name": "Luminous vivid amber", + "slug": "luminous-vivid-amber", + "color": "#fcb900" + }, + { + "name": "Light green cyan", + "slug": "light-green-cyan", + "color": "#7bdcb5" + }, + { + "name": "Vivid green cyan", + "slug": "vivid-green-cyan", + "color": "#00d084" + }, + { + "name": "Pale cyan blue", + "slug": "pale-cyan-blue", + "color": "#8ed1fc" + }, + { + "name": "Vivid cyan blue", + "slug": "vivid-cyan-blue", + "color": "#0693e3" + }, + { + "name": "Vivid purple", + "slug": "vivid-purple", + "color": "#9b51e0" + } + ], + "text": true + }, + "spacing": { + "blockGap": null, + "margin": false, + "padding": false, + "units": [ "px", "em", "rem", "vh", "vw", "%" ] + }, + "typography": { + "customFontSize": true, + "dropCap": true, + "fontSizes": [ + { + "name": "Small", + "slug": "small", + "size": "13px" + }, + { + "name": "Medium", + "slug": "medium", + "size": "20px" + }, + { + "name": "Large", + "slug": "large", + "size": "36px" + }, + { + "name": "Extra Large", + "slug": "x-large", + "size": "42px" + } + ], + "fontStyle": true, + "fontWeight": true, + "letterSpacing": true, + "lineHeight": false, + "textDecoration": true, + "textTransform": true + }, + "blocks": { + "core/button": { + "border": { + "radius": true + } + }, + "core/pullquote": { + "border": { + "color": true, + "radius": true, + "style": true, + "width": true + } + } + } + }, + "styles": { + "spacing": { "blockGap": "24px" } + } +} diff --git a/lib/compat/wordpress-6.1/blocks.php b/lib/compat/wordpress-6.1/blocks.php new file mode 100644 index 0000000000000..85e124306161a --- /dev/null +++ b/lib/compat/wordpress-6.1/blocks.php @@ -0,0 +1,160 @@ + '', + 'src' => '', + 'deps' => array(), + 'ver' => false, + 'in_footer' => false, + + // Additional args to allow translations for the script's textdomain. + 'textdomain' => '', + ) + ); + + /** + * Callback function to register and enqueue scripts. + * + * @param string $content When the callback is used for the render_block filter, + * the content needs to be returned so the function parameter + * is to ensure the content exists. + * @return string Block content. + */ + $callback = static function( $content, $block ) use ( $args, $block_name ) { + + // Sanity check. + if ( empty( $block['blockName'] ) || $block_name !== $block['blockName'] ) { + return $content; + } + + // Register the stylesheet. + if ( ! empty( $args['src'] ) ) { + wp_register_script( $args['handle'], $args['src'], $args['deps'], $args['ver'], $args['in_footer'] ); + } + + // Enqueue the stylesheet. + wp_enqueue_script( $args['handle'] ); + + // If a textdomain is defined, use it to set the script translations. + if ( ! empty( $args['textdomain'] ) && in_array( 'wp-i18n', $args['deps'], true ) ) { + wp_set_script_translations( $args['handle'], $args['textdomain'], $args['domainpath'] ); + } + + return $content; + }; + + /* + * The filter's callback here is an anonymous function because + * using a named function in this case is not possible. + * + * The function cannot be unhooked, however, users are still able + * to dequeue the script registered/enqueued by the callback + * which is why in this case, using an anonymous function + * was deemed acceptable. + */ + add_filter( 'render_block', $callback, 10, 2 ); + } +} + +/** + * Allow multiple view scripts per block. + * + * Filters the metadata provided for registering a block type. + * + * @since 6.1.0 + * + * @param array $metadata Metadata for registering a block type. + * + * @return array + */ +function gutenberg_block_type_metadata_multiple_view_scripts( $metadata ) { + + // Early return if viewScript is empty, or not an array. + if ( ! isset( $metadata['viewScript'] ) || ! is_array( $metadata['viewScript'] ) ) { + return $metadata; + } + + // Register all viewScript items. + foreach ( $metadata['viewScript'] as $view_script ) { + $item_metadata = $metadata; + $item_metadata['viewScript'] = $view_script; + gutenberg_block_type_metadata_view_script( array(), $item_metadata ); + } + + // Proceed with the default behavior. + $metadata['viewScript'] = $metadata['viewScript'][0]; + return $metadata; +} +add_filter( 'block_type_metadata', 'gutenberg_block_type_metadata_multiple_view_scripts' ); diff --git a/lib/compat/wordpress-6.1/class-wp-theme-json-6-1.php b/lib/compat/wordpress-6.1/class-wp-theme-json-6-1.php new file mode 100644 index 0000000000000..0331616fb1b9e --- /dev/null +++ b/lib/compat/wordpress-6.1/class-wp-theme-json-6-1.php @@ -0,0 +1,232 @@ + 'a', + 'h1' => 'h1', + 'h2' => 'h2', + 'h3' => 'h3', + 'h4' => 'h4', + 'h5' => 'h5', + 'h6' => 'h6', + 'button' => '.wp-element-button, .wp-block-button__link', // We have the .wp-block-button__link class so that this will target older buttons that have been serialized. + ); + /** + * Returns the metadata for each block. + * + * Example: + * + * { + * 'core/paragraph': { + * 'selector': 'p', + * 'elements': { + * 'link' => 'link selector', + * 'etc' => 'element selector' + * } + * }, + * 'core/heading': { + * 'selector': 'h1', + * 'elements': {} + * }, + * 'core/image': { + * 'selector': '.wp-block-image', + * 'duotone': 'img', + * 'elements': {} + * } + * } + * + * @return array Block metadata. + */ + protected static function get_blocks_metadata() { + if ( null !== static::$blocks_metadata ) { + return static::$blocks_metadata; + } + + static::$blocks_metadata = array(); + + $registry = WP_Block_Type_Registry::get_instance(); + $blocks = $registry->get_all_registered(); + foreach ( $blocks as $block_name => $block_type ) { + if ( + isset( $block_type->supports['__experimentalSelector'] ) && + is_string( $block_type->supports['__experimentalSelector'] ) + ) { + static::$blocks_metadata[ $block_name ]['selector'] = $block_type->supports['__experimentalSelector']; + } else { + static::$blocks_metadata[ $block_name ]['selector'] = '.wp-block-' . str_replace( '/', '-', str_replace( 'core/', '', $block_name ) ); + } + + if ( + isset( $block_type->supports['color']['__experimentalDuotone'] ) && + is_string( $block_type->supports['color']['__experimentalDuotone'] ) + ) { + static::$blocks_metadata[ $block_name ]['duotone'] = $block_type->supports['color']['__experimentalDuotone']; + } + + // Assign defaults, then overwrite those that the block sets by itself. + // If the block selector is compounded, will append the element to each + // individual block selector. + $block_selectors = explode( ',', static::$blocks_metadata[ $block_name ]['selector'] ); + foreach ( static::ELEMENTS as $el_name => $el_selector ) { + $element_selector = array(); + foreach ( $block_selectors as $selector ) { + if ( $selector === $el_selector ) { + $element_selector = array( $el_selector ); + break; + } + + $element_selector[] = $selector . ' ' . $el_selector; + } + static::$blocks_metadata[ $block_name ]['elements'][ $el_name ] = implode( ',', $element_selector ); + } + } + + return static::$blocks_metadata; + } + + /** + * Builds metadata for the style nodes, which returns in the form of: + * + * [ + * [ + * 'path' => [ 'path', 'to', 'some', 'node' ], + * 'selector' => 'CSS selector for some node', + * 'duotone' => 'CSS selector for duotone for some node' + * ], + * [ + * 'path' => ['path', 'to', 'other', 'node' ], + * 'selector' => 'CSS selector for other node', + * 'duotone' => null + * ], + * ] + * + * @since 5.8.0 + * + * @param array $theme_json The tree to extract style nodes from. + * @param array $selectors List of selectors per block. + * @return array + */ + protected static function get_style_nodes( $theme_json, $selectors = array() ) { + $nodes = array(); + if ( ! isset( $theme_json['styles'] ) ) { + return $nodes; + } + + // Top-level. + $nodes[] = array( + 'path' => array( 'styles' ), + 'selector' => static::ROOT_BLOCK_SELECTOR, + ); + + if ( isset( $theme_json['styles']['elements'] ) ) { + foreach ( $theme_json['styles']['elements'] as $element => $node ) { + $nodes[] = array( + 'path' => array( 'styles', 'elements', $element ), + 'selector' => static::ELEMENTS[ $element ], + ); + } + } + + // Blocks. + if ( ! isset( $theme_json['styles']['blocks'] ) ) { + return $nodes; + } + + $nodes = array_merge( $nodes, static::get_block_nodes( $theme_json, $selectors ) ); + + // This filter allows us to modify the output of WP_Theme_JSON so that we can do things like loading block CSS independently. + return apply_filters( 'gutenberg_get_style_nodes', $nodes ); + } + + /** + * A public helper to get the block nodes from a theme.json file. + * + * @return array The block nodes in theme.json. + */ + public function get_styles_block_nodes() { + return static::get_block_nodes( $this->theme_json ); + } + + /** + * An internal method to get the block nodes from a theme.json file. + * + * @param array $theme_json The theme.json converted to an array. + * @param array $selectors Optional list of selectors per block. + * + * @return array The block nodes in theme.json. + */ + private static function get_block_nodes( $theme_json, $selectors = array() ) { + $selectors = empty( $selectors ) ? static::get_blocks_metadata() : $selectors; + $nodes = array(); + if ( ! isset( $theme_json['styles'] ) ) { + return $nodes; + } + + // Blocks. + if ( ! isset( $theme_json['styles']['blocks'] ) ) { + return $nodes; + } + + foreach ( $theme_json['styles']['blocks'] as $name => $node ) { + $selector = null; + if ( isset( $selectors[ $name ]['selector'] ) ) { + $selector = $selectors[ $name ]['selector']; + } + + $duotone_selector = null; + if ( isset( $selectors[ $name ]['duotone'] ) ) { + $duotone_selector = $selectors[ $name ]['duotone']; + } + + $nodes[] = array( + 'name' => $name, + 'path' => array( 'styles', 'blocks', $name ), + 'selector' => $selector, + 'duotone' => $duotone_selector, + ); + + if ( isset( $theme_json['styles']['blocks'][ $name ]['elements'] ) ) { + foreach ( $theme_json['styles']['blocks'][ $name ]['elements'] as $element => $node ) { + $nodes[] = array( + 'path' => array( 'styles', 'blocks', $name, 'elements', $element ), + 'selector' => $selectors[ $name ]['elements'][ $element ], + ); + } + } + } + + return $nodes; + } + + /** + * Gets the CSS rules for a particular block from theme.json. + * + * @param array $block_metadata Metadata about the block to get styles for. + * + * @return string Styles for the block. + */ + public function get_styles_for_block( $block_metadata ) { + $node = _wp_array_get( $this->theme_json, $block_metadata['path'], array() ); + $selector = $block_metadata['selector']; + $settings = _wp_array_get( $this->theme_json, array( 'settings' ) ); + $declarations = static::compute_style_properties( $node, $settings ); + $block_rules = static::to_ruleset( $selector, $declarations ); + return $block_rules; + } +} diff --git a/lib/compat/wordpress-6.1/get-global-styles-and-settings.php b/lib/compat/wordpress-6.1/get-global-styles-and-settings.php new file mode 100644 index 0000000000000..64d6a1050791b --- /dev/null +++ b/lib/compat/wordpress-6.1/get-global-styles-and-settings.php @@ -0,0 +1,23 @@ +get_styles_block_nodes(); + foreach ( $block_nodes as $metadata ) { + $block_css = $tree->get_styles_for_block( $metadata ); + $block_name = str_replace( 'core/', '', $metadata['name'] ); + // These block styles are added on block_render. + // This hooks inline CSS to them so that they are loaded conditionally + // based on whether or not the block is used on the page. + wp_add_inline_style( 'wp-block-' . $block_name, $block_css ); + } +} diff --git a/lib/compat/wordpress-6.1/persisted-preferences.php b/lib/compat/wordpress-6.1/persisted-preferences.php new file mode 100644 index 0000000000000..2a5211e12596a --- /dev/null +++ b/lib/compat/wordpress-6.1/persisted-preferences.php @@ -0,0 +1,105 @@ +get_blog_prefix() . 'persisted_preferences'; + + register_meta( + 'user', + $meta_key, + array( + 'type' => 'object', + 'single' => true, + 'show_in_rest' => array( + 'name' => 'persisted_preferences', + 'type' => 'object', + 'context' => array( 'edit' ), + 'schema' => array( + 'type' => 'object', + 'properties' => array( + '_modified' => array( + 'description' => __( 'The date and time the preferences were updated.', 'default' ), + 'type' => 'string', + 'format' => 'date-time', + 'readonly' => false, + ), + ), + 'additionalProperties' => true, + ), + ), + ) + ); +} + +add_action( 'init', 'gutenberg_register_persisted_preferences_meta' ); + +/** + * Configures the preferences package to use user meta persistence. + */ +function gutenberg_configure_persisted_preferences() { + $user_id = get_current_user_id(); + if ( empty( $user_id ) ) { + return; + } + + global $wpdb; + $meta_key = $wpdb->get_blog_prefix() . 'persisted_preferences'; + + $preload_data = get_user_meta( $user_id, $meta_key, true ); + + wp_add_inline_script( + 'wp-preferences', + sprintf( + '( function() { + var serverData = %s; + var userId = "%s"; + var persistenceLayer = wp.preferencesPersistence.__unstableCreatePersistenceLayer( serverData, userId ); + var preferencesStore = wp.preferences.store; + wp.data.dispatch( preferencesStore ).setPersistenceLayer( persistenceLayer ); + } ) ();', + wp_json_encode( $preload_data ), + $user_id + ), + 'after' + ); + +} + +add_action( 'admin_init', 'gutenberg_configure_persisted_preferences' ); + +/** + * Register dependencies for the inline script that configures the persistence layer. + * + * Note: When porting this to core update the code here: + * https://github.com/WordPress/wordpress-develop/blob/d2ab3d183740c3d1252cb921b18005495007e022/src/wp-includes/script-loader.php#L251-L258 + * + * And make the same update to the gutenberg client assets file here: + * https://github.com/WordPress/gutenberg/blob/3f3c8df23c70a37b7ac4dddebc82030362133593/lib/client-assets.php#L242-L254 + * + * The update should be adding a new case like this like this: + * ``` + * case 'wp-preferences': + * array_push( $dependencies, 'wp-preferences-persistence' ); + * break; + * ``` + * + * @param WP_Scripts $scripts An instance of WP_Scripts. + */ +function gutenberg_update_preferences_persistence_deps( $scripts ) { + $persistence_script = $scripts->query( 'wp-preferences', 'registered' ); + if ( isset( $persistence_script->deps ) ) { + array_push( $persistence_script->deps, 'wp-preferences-persistence' ); + } +} + +add_action( 'wp_default_scripts', 'gutenberg_update_preferences_persistence_deps', 11 ); diff --git a/lib/compat/wordpress-6.1/script-loader.php b/lib/compat/wordpress-6.1/script-loader.php new file mode 100644 index 0000000000000..d45a3a9344053 --- /dev/null +++ b/lib/compat/wordpress-6.1/script-loader.php @@ -0,0 +1,83 @@ + array(), - 'initializer_name' => 'initialize', - 'editor_settings' => array(), - ); - - $settings = wp_parse_args( $settings, $defaults ); - - /** - * Preload common data by specifying an array of REST API paths that will be preloaded. - * - * Filters the array of paths that will be preloaded. - * - * @param string[] $preload_paths Array of paths to preload. - */ - $preload_paths = apply_filters( "{$editor_name}_preload_paths", $settings['preload_paths'] ); - - $preload_data = array_reduce( - $preload_paths, - 'rest_preload_api_request', - array() - ); - wp_add_inline_script( - 'wp-api-fetch', - sprintf( - 'wp.apiFetch.use( wp.apiFetch.createPreloadingMiddleware( %s ) );', - wp_json_encode( $preload_data ) - ), - 'after' - ); - wp_add_inline_script( - "wp-{$editor_script_handle}", - sprintf( - 'wp.domReady( function() { - wp.%s.%s( "%s", %s ); - } );', - lcfirst( str_replace( '-', '', ucwords( $editor_script_handle, '-' ) ) ), - $settings['initializer_name'], - str_replace( '_', '-', $editor_name ), - wp_json_encode( $settings['editor_settings'] ) - ) - ); - - // Preload server-registered block schemas. - wp_add_inline_script( - 'wp-blocks', - 'wp.blocks.unstable__bootstrapServerSideBlockDefinitions(' . wp_json_encode( get_block_editor_server_block_settings() ) . ');' - ); - -} diff --git a/lib/experimental-default-theme.json b/lib/experimental-default-theme.json deleted file mode 100644 index 9e751dc939118..0000000000000 --- a/lib/experimental-default-theme.json +++ /dev/null @@ -1,240 +0,0 @@ -{ - "version": 1, - "settings": { - "color": { - "palette": [ - { - "name": "Black", - "slug": "black", - "color": "#000000" - }, - { - "name": "Cyan bluish gray", - "slug": "cyan-bluish-gray", - "color": "#abb8c3" - }, - { - "name": "White", - "slug": "white", - "color": "#ffffff" - }, - { - "name": "Pale pink", - "slug": "pale-pink", - "color": "#f78da7" - }, - { - "name": "Vivid red", - "slug": "vivid-red", - "color": "#cf2e2e" - }, - { - "name": "Luminous vivid orange", - "slug": "luminous-vivid-orange", - "color": "#ff6900" - }, - { - "name": "Luminous vivid amber", - "slug": "luminous-vivid-amber", - "color": "#fcb900" - }, - { - "name": "Light green cyan", - "slug": "light-green-cyan", - "color": "#7bdcb5" - }, - { - "name": "Vivid green cyan", - "slug": "vivid-green-cyan", - "color": "#00d084" - }, - { - "name": "Pale cyan blue", - "slug": "pale-cyan-blue", - "color": "#8ed1fc" - }, - { - "name": "Vivid cyan blue", - "slug": "vivid-cyan-blue", - "color": "#0693e3" - }, - { - "name": "Vivid purple", - "slug": "vivid-purple", - "color": "#9b51e0" - } - ], - "gradients": [ - { - "name": "Vivid cyan blue to vivid purple", - "gradient": "linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%)", - "slug": "vivid-cyan-blue-to-vivid-purple" - }, - { - "name": "Light green cyan to vivid green cyan", - "gradient": "linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%)", - "slug": "light-green-cyan-to-vivid-green-cyan" - }, - { - "name": "Luminous vivid amber to luminous vivid orange", - "gradient": "linear-gradient(135deg,rgba(252,185,0,1) 0%,rgba(255,105,0,1) 100%)", - "slug": "luminous-vivid-amber-to-luminous-vivid-orange" - }, - { - "name": "Luminous vivid orange to vivid red", - "gradient": "linear-gradient(135deg,rgba(255,105,0,1) 0%,rgb(207,46,46) 100%)", - "slug": "luminous-vivid-orange-to-vivid-red" - }, - { - "name": "Very light gray to cyan bluish gray", - "gradient": "linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%)", - "slug": "very-light-gray-to-cyan-bluish-gray" - }, - { - "name": "Cool to warm spectrum", - "gradient": "linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%)", - "slug": "cool-to-warm-spectrum" - }, - { - "name": "Blush light purple", - "gradient": "linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%)", - "slug": "blush-light-purple" - }, - { - "name": "Blush bordeaux", - "gradient": "linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%)", - "slug": "blush-bordeaux" - }, - { - "name": "Luminous dusk", - "gradient": "linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%)", - "slug": "luminous-dusk" - }, - { - "name": "Pale ocean", - "gradient": "linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%)", - "slug": "pale-ocean" - }, - { - "name": "Electric grass", - "gradient": "linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%)", - "slug": "electric-grass" - }, - { - "name": "Midnight", - "gradient": "linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%)", - "slug": "midnight" - } - ], - "duotone": [ - { - "name": "Dark grayscale" , - "colors": [ "#000000", "#7f7f7f" ], - "slug": "dark-grayscale" - }, - { - "name": "Grayscale" , - "colors": [ "#000000", "#ffffff" ], - "slug": "grayscale" - }, - { - "name": "Purple and yellow" , - "colors": [ "#8c00b7", "#fcff41" ], - "slug": "purple-yellow" - }, - { - "name": "Blue and red" , - "colors": [ "#000097", "#ff4747" ], - "slug": "blue-red" - }, - { - "name": "Midnight" , - "colors": [ "#000000", "#00a5ff" ], - "slug": "midnight" - }, - { - "name": "Magenta and yellow" , - "colors": [ "#c7005a", "#fff278" ], - "slug": "magenta-yellow" - }, - { - "name": "Purple and green" , - "colors": [ "#a60072", "#67ff66" ], - "slug": "purple-green" - }, - { - "name": "Blue and orange" , - "colors": [ "#1900d8", "#ffa96b" ], - "slug": "blue-orange" - } - ], - "custom": true, - "customDuotone": true, - "customGradient": true, - "link": false - }, - "typography": { - "dropCap": true, - "customFontSize": true, - "customLineHeight": false, - "customFontStyle": true, - "customFontWeight": true, - "customTextTransforms": true, - "customTextDecorations": true, - "customLetterSpacing": true, - "fontSizes": [ - { - "name": "Small", - "slug": "small", - "size": "13px" - }, - { - "name": "Normal", - "slug": "normal", - "size": "16px" - }, - { - "name": "Medium", - "slug": "medium", - "size": "20px" - }, - { - "name": "Large", - "slug": "large", - "size": "36px" - }, - { - "name": "Huge", - "slug": "huge", - "size": "42px" - } - ] - }, - "spacing": { - "customMargin": false, - "customPadding": false, - "units": [ "px", "em", "rem", "vh", "vw", "%" ] - }, - "border": { - "customColor": false, - "customRadius": false, - "customStyle": false, - "customWidth": false - }, - "blocks": { - "core/button": { - "border": { - "customRadius": true - } - }, - "core/pullquote": { - "border": { - "customColor": true, - "customRadius": true, - "customStyle": true, - "customWidth": true - } - } - } - } -} diff --git a/lib/experimental-i18n-theme.json b/lib/experimental-i18n-theme.json deleted file mode 100644 index 24c55c17cd665..0000000000000 --- a/lib/experimental-i18n-theme.json +++ /dev/null @@ -1,106 +0,0 @@ -{ - "settings": { - "typography": { - "fontSizes": [ - { - "name": "Font size name" - } - ], - "fontStyles": [ - { - "name": "Font style name" - } - ], - "fontWeights": [ - { - "name": "Font weight name" - } - ], - "fontFamilies": [ - { - "name": "Font family name" - } - ], - "textTransforms": [ - { - "name": "Text transform name" - } - ], - "textDecorations": [ - { - "name": "Text decoration name" - } - ] - }, - "color": { - "palette": [ - { - "name": "Color name" - } - ], - "gradients": [ - { - "name": "Gradient name" - } - ], - "duotone": [ - { - "name": "Duotone name" - } - ] - }, - "blocks": { - "*": { - "typography": { - "fontSizes": [ - { - "name": "Font size name" - } - ], - "fontStyles": [ - { - "name": "Font style name" - } - ], - "fontWeights": [ - { - "name": "Font weight name" - } - ], - "fontFamilies": [ - { - "name": "Font family name" - } - ], - "textTransforms": [ - { - "name": "Text transform name" - } - ], - "textDecorations": [ - { - "name": "Text decoration name" - } - ] - }, - "color": { - "palette": [ - { - "name": "Color name" - } - ], - "gradients": [ - { - "name": "Gradient name" - } - ] - } - } - } - }, - "customTemplates": [ - { - "title": "Custom template name" - } - ] -} diff --git a/lib/experimental/block-editor-settings-mobile.php b/lib/experimental/block-editor-settings-mobile.php new file mode 100644 index 0000000000000..bd05e24e4acc9 --- /dev/null +++ b/lib/experimental/block-editor-settings-mobile.php @@ -0,0 +1,37 @@ + $editor_context_name ) ); + $settings = get_block_editor_settings( array(), $editor_context ); return rest_ensure_response( $settings ); } @@ -134,24 +150,18 @@ public function get_item_schema() { 'context' => array( 'post-editor', 'site-editor', 'widgets-editor', 'mobile' ), ), - '__experimentalGlobalStylesUserEntityId' => array( - 'description' => __( 'Global styles user entity ID.', 'gutenberg' ), - 'type' => 'integer', - 'context' => array( 'site-editor' ), - ), - - '__experimentalGlobalStylesBaseStyles' => array( - 'description' => __( 'Global styles settings.', 'gutenberg' ), - 'type' => 'object', - 'context' => array( 'site-editor' ), - ), - '__experimentalStyles' => array( 'description' => __( 'Styles consolidated from core, theme, and user origins.', 'gutenberg' ), 'type' => 'object', 'context' => array( 'mobile' ), ), + '__experimentalEnableQuoteBlockV2' => array( + 'description' => __( 'Whether the V2 of the quote block that uses inner blocks should be enabled.', 'gutenberg' ), + 'type' => 'boolean', + 'context' => array( 'mobile' ), + ), + 'alignWide' => array( 'description' => __( 'Enable/Disable Wide/Full Alignments.', 'gutenberg' ), 'type' => 'boolean', diff --git a/lib/class-wp-rest-customizer-nonces.php b/lib/experimental/class-wp-rest-customizer-nonces.php similarity index 100% rename from lib/class-wp-rest-customizer-nonces.php rename to lib/experimental/class-wp-rest-customizer-nonces.php diff --git a/lib/experimental/class-wp-theme-json-gutenberg.php b/lib/experimental/class-wp-theme-json-gutenberg.php new file mode 100644 index 0000000000000..3d6bf949e7f83 --- /dev/null +++ b/lib/experimental/class-wp-theme-json-gutenberg.php @@ -0,0 +1,19 @@ + true ) ) { + if ( ! empty( $deprecated ) ) { + _deprecated_argument( __METHOD__, '5.9' ); + } + + if ( null === static::$theme ) { + $theme_json_data = static::read_json_file( static::get_file_path_from_theme( 'theme.json' ) ); + $theme_json_data = static::translate( $theme_json_data, wp_get_theme()->get( 'TextDomain' ) ); + $theme_json_data = gutenberg_add_registered_webfonts_to_theme_json( $theme_json_data ); + static::$theme = new WP_Theme_JSON_Gutenberg( $theme_json_data ); + + if ( wp_get_theme()->parent() ) { + // Get parent theme.json. + $parent_theme_json_data = static::read_json_file( static::get_file_path_from_theme( 'theme.json', true ) ); + $parent_theme_json_data = static::translate( $parent_theme_json_data, wp_get_theme()->parent()->get( 'TextDomain' ) ); + $parent_theme_json_data = gutenberg_add_registered_webfonts_to_theme_json( $parent_theme_json_data ); + $parent_theme = new WP_Theme_JSON_Gutenberg( $parent_theme_json_data ); + + // Merge the child theme.json into the parent theme.json. + // The child theme takes precedence over the parent. + $parent_theme->merge( static::$theme ); + static::$theme = $parent_theme; + } + } + + if ( ! $settings['with_supports'] ) { + return static::$theme; + } + + /* + * We want the presets and settings declared in theme.json + * to override the ones declared via theme supports. + * So we take theme supports, transform it to theme.json shape + * and merge the static::$theme upon that. + */ + $theme_support_data = WP_Theme_JSON_Gutenberg::get_from_editor_settings( get_default_block_editor_settings() ); + if ( ! static::theme_has_support() ) { + if ( ! isset( $theme_support_data['settings']['color'] ) ) { + $theme_support_data['settings']['color'] = array(); + } + + $default_palette = false; + if ( current_theme_supports( 'default-color-palette' ) ) { + $default_palette = true; + } + if ( ! isset( $theme_support_data['settings']['color']['palette'] ) ) { + // If the theme does not have any palette, we still want to show the core one. + $default_palette = true; + } + $theme_support_data['settings']['color']['defaultPalette'] = $default_palette; + + $default_gradients = false; + if ( current_theme_supports( 'default-gradient-presets' ) ) { + $default_gradients = true; + } + if ( ! isset( $theme_support_data['settings']['color']['gradients'] ) ) { + // If the theme does not have any gradients, we still want to show the core ones. + $default_gradients = true; + } + $theme_support_data['settings']['color']['defaultGradients'] = $default_gradients; + + // Classic themes without a theme.json don't support global duotone. + $theme_support_data['settings']['color']['defaultDuotone'] = false; + } + $with_theme_supports = new WP_Theme_JSON_Gutenberg( $theme_support_data ); + $with_theme_supports->merge( static::$theme ); + + return $with_theme_supports; + } + +} diff --git a/lib/experimental/class-wp-webfonts-provider-local.php b/lib/experimental/class-wp-webfonts-provider-local.php new file mode 100644 index 0000000000000..f96b18ea69863 --- /dev/null +++ b/lib/experimental/class-wp-webfonts-provider-local.php @@ -0,0 +1,263 @@ + + * array( + * 'source-serif-pro.normal.200 900' => array( + * 'provider' => 'local', + * 'font_family' => 'Source Serif Pro', + * 'font_weight' => '200 900', + * 'font_style' => 'normal', + * 'src' => 'https://example.com/wp-content/themes/twentytwentytwo/assets/fonts/source-serif-pro/SourceSerif4Variable-Roman.ttf.woff2' ), + * ), + * 'source-serif-pro.italic.400 900' => array( + * 'provider' => 'local', + * 'font_family' => 'Source Serif Pro', + * 'font_weight' => '200 900', + * 'font_style' => 'italic', + * 'src' => 'https://example.com/wp-content/themes/twentytwentytwo/assets/fonts/source-serif-pro/SourceSerif4Variable-Italic.ttf.woff2' ), + * ), + * ) + * + * + * the following `@font-face` styles are generated and returned: + * + * + * @font-face{ + * font-family:"Source Serif Pro"; + * font-style:normal; + * font-weight:200 900; + * font-stretch:normal; + * src:local("Source Serif Pro"), url('/assets/fonts/source-serif-pro/SourceSerif4Variable-Roman.ttf.woff2') format('woff2'); + * } + * @font-face{ + * font-family:"Source Serif Pro"; + * font-style:italic; + * font-weight:200 900; + * font-stretch:normal; + * src:local("Source Serif Pro"), url('/assets/fonts/source-serif-pro/SourceSerif4Variable-Italic.ttf.woff2') format('woff2'); + * } + * + * + * @since 6.0.0 + * + * @return string The `@font-face` CSS. + */ + public function get_css() { + $css = ''; + + foreach ( $this->webfonts as $webfont ) { + // Order the webfont's `src` items to optimize for browser support. + $webfont = $this->order_src( $webfont ); + + // Build the @font-face CSS for this webfont. + $css .= '@font-face{' . $this->build_font_face_css( $webfont ) . '}'; + } + + return $css; + } + + /** + * Order `src` items to optimize for browser support. + * + * @since 6.0.0 + * + * @param array $webfont Webfont to process. + * @return array + */ + private function order_src( array $webfont ) { + if ( ! is_array( $webfont['src'] ) ) { + $webfont['src'] = (array) $webfont['src']; + } + + $src = array(); + $src_ordered = array(); + + foreach ( $webfont['src'] as $url ) { + // Add data URIs first. + if ( 0 === strpos( trim( $url ), 'data:' ) ) { + $src_ordered[] = array( + 'url' => $url, + 'format' => 'data', + ); + continue; + } + $format = pathinfo( $url, PATHINFO_EXTENSION ); + $src[ $format ] = $url; + } + + // Add woff2. + if ( ! empty( $src['woff2'] ) ) { + $src_ordered[] = array( + 'url' => $src['woff2'], + 'format' => 'woff2', + ); + } + + // Add woff. + if ( ! empty( $src['woff'] ) ) { + $src_ordered[] = array( + 'url' => $src['woff'], + 'format' => 'woff', + ); + } + + // Add ttf. + if ( ! empty( $src['ttf'] ) ) { + $src_ordered[] = array( + 'url' => $src['ttf'], + 'format' => 'truetype', + ); + } + + // Add eot. + if ( ! empty( $src['eot'] ) ) { + $src_ordered[] = array( + 'url' => $src['eot'], + 'format' => 'embedded-opentype', + ); + } + + // Add otf. + if ( ! empty( $src['otf'] ) ) { + $src_ordered[] = array( + 'url' => $src['otf'], + 'format' => 'opentype', + ); + } + $webfont['src'] = $src_ordered; + + return $webfont; + } + + /** + * Builds the font-family's CSS. + * + * @since 6.0.0 + * + * @param array $webfont Webfont to process. + * @return string This font-family's CSS. + */ + private function build_font_face_css( array $webfont ) { + $css = ''; + + // Wrap font-family in quotes if it contains spaces. + if ( + false !== strpos( $webfont['font-family'], ' ' ) && + false === strpos( $webfont['font-family'], '"' ) && + false === strpos( $webfont['font-family'], "'" ) + ) { + $webfont['font-family'] = '"' . $webfont['font-family'] . '"'; + } + + foreach ( $webfont as $key => $value ) { + + // Skip "provider", since it's for internal API use, + // and not a valid CSS property. + if ( 'provider' === $key ) { + continue; + } + + // Compile the "src" parameter. + if ( 'src' === $key ) { + $value = $this->compile_src( $webfont['font-family'], $value ); + } + + // If font-variation-settings is an array, convert it to a string. + if ( 'font-variation-settings' === $key && is_array( $value ) ) { + $value = $this->compile_variations( $value ); + } + + if ( ! empty( $value ) ) { + $css .= "$key:$value;"; + } + } + + return $css; + } + + /** + * Compiles the `src` into valid CSS. + * + * @since 6.0.0 + * + * @param string $font_family Font family. + * @param array $value Value to process. + * @return string The CSS. + */ + private function compile_src( $font_family, array $value ) { + $src = "local($font_family)"; + + foreach ( $value as $item ) { + + if ( 0 === strpos( $item['url'], get_site_url() ) ) { + $item['url'] = wp_make_link_relative( $item['url'] ); + } + + $src .= ( 'data' === $item['format'] ) + ? ", url({$item['url']})" + : ", url('{$item['url']}') format('{$item['format']}')"; + } + return $src; + } + + /** + * Compiles the font variation settings. + * + * @since 6.0.0 + * + * @param array $font_variation_settings Array of font variation settings. + * @return string The CSS. + */ + private function compile_variations( array $font_variation_settings ) { + $variations = ''; + + foreach ( $font_variation_settings as $key => $value ) { + $variations .= "$key $value"; + } + + return $variations; + } +} diff --git a/lib/experimental/class-wp-webfonts-provider.php b/lib/experimental/class-wp-webfonts-provider.php new file mode 100644 index 0000000000000..a49b8a324b7f5 --- /dev/null +++ b/lib/experimental/class-wp-webfonts-provider.php @@ -0,0 +1,72 @@ +webfonts = $webfonts; + } + + /** + * Gets the `@font-face` CSS for the provider's webfonts. + * + * This method is where the provider does it processing to build the + * needed `@font-face` CSS for all of its webfonts. Specifics of how + * this processing is done is contained in each provider. + * + * @since 6.0.0 + * + * @return string The `@font-face` CSS. + */ + abstract public function get_css(); +} diff --git a/lib/experimental/class-wp-webfonts.php b/lib/experimental/class-wp-webfonts.php new file mode 100644 index 0000000000000..e422f51658bef --- /dev/null +++ b/lib/experimental/class-wp-webfonts.php @@ -0,0 +1,417 @@ +register_provider( 'local', 'WP_Webfonts_Provider_Local' ); + + // Register callback to generate and enqueue styles. + if ( did_action( 'wp_enqueue_scripts' ) ) { + $this->stylesheet_handle = 'webfonts-footer'; + $hook = 'wp_print_footer_scripts'; + } else { + $this->stylesheet_handle = 'webfonts'; + $hook = 'wp_enqueue_scripts'; + } + add_action( $hook, array( $this, 'generate_and_enqueue_styles' ) ); + + // Enqueue webfonts in the block editor. + add_action( 'admin_init', array( $this, 'generate_and_enqueue_editor_styles' ) ); + } + + /** + * Get the list of registered fonts. + * + * @since 6.0.0 + * + * @return array[] + */ + public function get_registered_webfonts() { + return $this->registered_webfonts; + } + + /** + * Get the list of enqueued fonts. + * + * @return array[] + */ + public function get_enqueued_webfonts() { + return $this->enqueued_webfonts; + } + + /** + * Get the list of all fonts. + * + * @return array[] + */ + public function get_all_webfonts() { + return array_merge( $this->get_registered_webfonts(), $this->get_enqueued_webfonts() ); + } + + /** + * Get the list of providers. + * + * @since 6.0.0 + * + * @return WP_Webfonts_Provider[] All registered providers, each keyed by their unique ID. + */ + public function get_providers() { + return $this->providers; + } + + /** + * Register a webfont. + * + * @since 6.0.0 + * + * @param array $webfont Webfont to be registered. + * @return string|false The font family slug if successfully registered, else false. + */ + public function register_webfont( array $webfont ) { + $webfont = $this->validate_webfont( $webfont ); + + // If not valid, bail out. + if ( ! $webfont ) { + return false; + } + + $slug = $this->get_font_slug( $webfont ); + + // Initialize a new font-family collection. + if ( ! isset( $this->registered_webfonts[ $slug ] ) ) { + $this->registered_webfonts[ $slug ] = array(); + } + + $this->registered_webfonts[ $slug ][] = $webfont; + return $slug; + } + + /** + * Enqueue a font-family that has been already registered. + * + * @param string $font_family_name The font family name to be enqueued. + * @return bool True if successfully enqueued, else false. + */ + public function enqueue_webfont( $font_family_name ) { + $slug = $this->get_font_slug( $font_family_name ); + + if ( isset( $this->enqueued_webfonts[ $slug ] ) ) { + return true; + } + + if ( ! isset( $this->registered_webfonts[ $slug ] ) ) { + /* translators: %s unique slug to identify the font family of the webfont */ + _doing_it_wrong( __METHOD__, sprintf( __( 'The "%s" font family is not registered.', 'gutenberg' ), $slug ), '6.0.0' ); + + return false; + } + + $this->enqueued_webfonts[ $slug ] = $this->registered_webfonts[ $slug ]; + unset( $this->registered_webfonts[ $slug ] ); + return true; + } + + /** + * Get the font slug. + * + * @since 6.0.0 + * + * @param array|string $to_convert The value to convert into a slug. Expected as the web font's array + * or a font-family as a string. + * @return string|false The font slug on success, or false if the font-family cannot be determined. + */ + public static function get_font_slug( $to_convert ) { + if ( is_array( $to_convert ) ) { + if ( isset( $to_convert['font-family'] ) ) { + $to_convert = $to_convert['font-family']; + } elseif ( isset( $to_convert['fontFamily'] ) ) { + $to_convert = $to_convert['fontFamily']; + } else { + _doing_it_wrong( __METHOD__, __( 'Could not determine the font family name.', 'gutenberg' ), '6.0.0' ); + return false; + } + } + + return sanitize_title( $to_convert ); + } + + /** + * Validate a webfont. + * + * @since 6.0.0 + * + * @param array $webfont The webfont arguments. + * + * @return array|false The validated webfont arguments, or false if the webfont is invalid. + */ + public function validate_webfont( $webfont ) { + $webfont = wp_parse_args( + $webfont, + array( + 'provider' => 'local', + 'font-family' => '', + 'font-style' => 'normal', + 'font-weight' => '400', + 'font-display' => 'fallback', + ) + ); + + // Check the font-family. + if ( empty( $webfont['font-family'] ) || ! is_string( $webfont['font-family'] ) ) { + trigger_error( __( 'Webfont font family must be a non-empty string.', 'gutenberg' ) ); + return false; + } + + // Local fonts need a "src". + if ( 'local' === $webfont['provider'] ) { + // Make sure that local fonts have 'src' defined. + if ( empty( $webfont['src'] ) || ( ! is_string( $webfont['src'] ) && ! is_array( $webfont['src'] ) ) ) { + trigger_error( __( 'Webfont src must be a non-empty string or an array of strings.', 'gutenberg' ) ); + return false; + } + } + + // Validate the 'src' property. + if ( ! empty( $webfont['src'] ) ) { + foreach ( (array) $webfont['src'] as $src ) { + if ( empty( $src ) || ! is_string( $src ) ) { + trigger_error( __( 'Each webfont src must be a non-empty string.', 'gutenberg' ) ); + return false; + } + } + } + + // Check the font-weight. + if ( ! is_string( $webfont['font-weight'] ) && ! is_int( $webfont['font-weight'] ) ) { + trigger_error( __( 'Webfont font weight must be a properly formatted string or integer.', 'gutenberg' ) ); + return false; + } + + // Check the font-display. + if ( ! in_array( $webfont['font-display'], array( 'auto', 'block', 'fallback', 'swap' ), true ) ) { + $webfont['font-display'] = 'fallback'; + } + + $valid_props = array( + 'ascend-override', + 'descend-override', + 'font-display', + 'font-family', + 'font-stretch', + 'font-style', + 'font-weight', + 'font-variant', + 'font-feature-settings', + 'font-variation-settings', + 'line-gap-override', + 'size-adjust', + 'src', + 'unicode-range', + + // Exceptions. + 'provider', + ); + + foreach ( $webfont as $prop => $value ) { + if ( ! in_array( $prop, $valid_props, true ) ) { + unset( $webfont[ $prop ] ); + } + } + + return $webfont; + } + + /** + * Register a provider. + * + * @since 6.0.0 + * + * @param string $provider The provider name. + * @param string $class The provider class name. + * @return bool True if successfully registered, else false. + */ + public function register_provider( $provider, $class ) { + if ( empty( $provider ) || empty( $class ) ) { + return false; + } + $this->providers[ $provider ] = $class; + return true; + } + + /** + * Generate and enqueue webfonts styles. + * + * @since 6.0.0 + */ + public function generate_and_enqueue_styles() { + // Generate the styles. + $webfonts = $this->get_webfonts_by_provider( $this->get_enqueued_webfonts() ); + $styles = $this->generate_styles( $webfonts ); + + // Bail out if there are no styles to enqueue. + if ( '' === $styles ) { + return; + } + + // Enqueue the stylesheet. + wp_register_style( $this->stylesheet_handle, '' ); + wp_enqueue_style( $this->stylesheet_handle ); + + // Add the styles to the stylesheet. + wp_add_inline_style( $this->stylesheet_handle, $styles ); + } + + /** + * Generate and enqueue editor styles. + * + * @since 6.0.0 + */ + public function generate_and_enqueue_editor_styles() { + // Generate the styles. + $webfonts = $this->get_webfonts_by_provider( $this->get_all_webfonts() ); + $styles = $this->generate_styles( $webfonts ); + + // Bail out if there are no styles to enqueue. + if ( '' === $styles ) { + return; + } + + wp_enqueue_style( 'wp-block-library' ); + wp_add_inline_style( 'wp-block-library', $styles ); + } + + /** + * Generate styles for webfonts. + * + * @since 6.0.0 + * + * @param array[] $webfonts_by_provider Webfonts organized by provider. + * @return string $styles Generated styles. + */ + private function generate_styles( array $webfonts_by_provider ) { + $styles = ''; + $providers = $this->get_providers(); + + /* + * Loop through each of the providers to get the CSS for their respective webfonts + * to incrementally generate the collective styles for all of them. + */ + foreach ( $providers as $provider_id => $provider_class ) { + + // Bail out if the provider class does not exist. + if ( ! class_exists( $provider_class ) ) { + /* translators: %s is the provider name. */ + trigger_error( sprintf( __( 'Webfont provider "%s" is not registered.', 'gutenberg' ), $provider_id ) ); + continue; + } + + $provider_webfonts = isset( $webfonts_by_provider[ $provider_id ] ) + ? $webfonts_by_provider[ $provider_id ] + : array(); + + // If there are no registered webfonts for this provider, skip it. + if ( empty( $provider_webfonts ) ) { + continue; + } + + /* + * Process the webfonts by first passing them to the provider via `set_webfonts()` + * and then getting the CSS from the provider. + */ + $provider = new $provider_class(); + $provider->set_webfonts( $provider_webfonts ); + $styles .= $provider->get_css(); + } + + return $styles; + } + + + /** + * Reorganizes webfonts grouped by font-family into grouped by provider. + * + * @param array[] $font_families Font families and each of their webfonts. + * @return array[] Webfonts organized by providers. + */ + private function get_webfonts_by_provider( array $font_families ) { + $providers = $this->get_providers(); + $webfonts_by_provider = array(); + + foreach ( $font_families as $webfonts ) { + foreach ( $webfonts as $webfont ) { + $provider = $webfont['provider']; + + // Skip if the provider is not registered. + if ( ! isset( $providers[ $provider ] ) ) { + /* translators: %s is the provider name. */ + trigger_error( sprintf( __( 'Webfont provider "%s" is not registered.', 'gutenberg' ), $provider ) ); + continue; + } + + // Initialize a new provider collection. + if ( ! isset( $webfonts_by_provider[ $provider ] ) ) { + $webfonts_by_provider[ $provider ] = array(); + } + $webfonts_by_provider[ $provider ][] = $webfont; + } + } + + return $webfonts_by_provider; + } +} diff --git a/lib/experimental/editor-settings.php b/lib/experimental/editor-settings.php new file mode 100644 index 0000000000000..143d5690b76e9 --- /dev/null +++ b/lib/experimental/editor-settings.php @@ -0,0 +1,74 @@ + array(), + 'initializer_name' => 'initialize', + 'editor_settings' => array(), + ); + + $settings = wp_parse_args( $settings, $defaults ); + + /** + * Preload common data by specifying an array of REST API paths that will be preloaded. + * + * Filters the array of paths that will be preloaded. + * + * @param string[] $preload_paths Array of paths to preload. + */ + $preload_paths = apply_filters( "{$editor_name}_preload_paths", $settings['preload_paths'] ); + + $preload_data = array_reduce( + $preload_paths, + 'rest_preload_api_request', + array() + ); + + wp_add_inline_script( + 'wp-api-fetch', + sprintf( + 'wp.apiFetch.use( wp.apiFetch.createPreloadingMiddleware( %s ) );', + wp_json_encode( $preload_data ) + ), + 'after' + ); + wp_add_inline_script( + "wp-{$editor_script_handle}", + sprintf( + 'wp.domReady( function() { + wp.%s.%s( "%s", %s ); + } );', + lcfirst( str_replace( '-', '', ucwords( $editor_script_handle, '-' ) ) ), + $settings['initializer_name'], + str_replace( '_', '-', $editor_name ), + wp_json_encode( $settings['editor_settings'] ) + ) + ); + + // Preload server-registered block schemas. + wp_add_inline_script( + 'wp-blocks', + 'wp.blocks.unstable__bootstrapServerSideBlockDefinitions(' . wp_json_encode( get_block_editor_server_block_settings() ) . ');' + ); + +} diff --git a/lib/experimental/navigation-page.php b/lib/experimental/navigation-page.php new file mode 100644 index 0000000000000..77949d76aee53 --- /dev/null +++ b/lib/experimental/navigation-page.php @@ -0,0 +1,173 @@ + + + $results_per_page, + 'context' => 'edit', + '_locale' => 'user', + ) + ); +} + +/** + * This function returns an url for the /wp/v2/menu-items endpoint + * + * @since 11.8.0 + * + * @param int $menu_id Menu ID. + * @param int $results_per_page Results per page. + * @return string + */ +function gutenberg_navigation_get_menu_items_endpoint( $menu_id, $results_per_page = 100 ) { + return '/wp/v2/menu-items?' . build_query( + array( + 'context' => 'edit', + 'menus' => $menu_id, + 'per_page' => $results_per_page, + '_locale' => 'user', + ) + ); +} + +/** + * This function returns an url for the /wp/v2/types endpoint + * + * @since 11.8.0 + * + * @return string + */ +function gutenberg_navigation_get_types_endpoint() { + return '/wp/v2/types?' . build_query( + array( + 'context' => 'edit', + ) + ); +} + +/** + * Initialize the Gutenberg Navigation page. + * + * @param string $hook Page. + * @since 7.8.0 + */ +function gutenberg_navigation_init( $hook ) { + if ( 'gutenberg_page_gutenberg-navigation' !== $hook ) { + return; + } + + $menus = wp_get_nav_menus(); + $first_menu_id = ! empty( $menus ) ? $menus[0]->term_id : null; + + $preload_paths = array( + '/wp/v2/menu-locations', + array( '/wp/v2/pages', 'OPTIONS' ), + array( '/wp/v2/posts', 'OPTIONS' ), + gutenberg_navigation_get_types_endpoint(), + ); + + if ( $first_menu_id ) { + $preload_paths[] = gutenberg_navigation_get_menu_items_endpoint( $first_menu_id ); + } + + $custom_settings = array( + 'blockNavMenus' => false, + // We should uncomment the line below when the block-nav-menus feature becomes stable. + // @see https://github.com/WordPress/gutenberg/issues/34265. + /*'blockNavMenus' => get_theme_support( 'block-nav-menus' ),*/ + ); + + $context = new WP_Block_Editor_Context( array( 'name' => 'core/edit-navigation' ) ); + $settings = get_block_editor_settings( $custom_settings, $context ); + gutenberg_initialize_editor( + 'navigation_editor', + 'edit-navigation', + array( + 'initializer_name' => 'initialize', + 'editor_settings' => $settings, + 'preload_paths' => $preload_paths, + ) + ); + + gutenberg_navigation_editor_preload_menus(); + + wp_enqueue_script( 'wp-edit-navigation' ); + wp_enqueue_style( 'wp-edit-navigation' ); + wp_enqueue_script( 'wp-format-library' ); + wp_enqueue_style( 'wp-format-library' ); + do_action( 'enqueue_block_editor_assets' ); +} +add_action( 'admin_enqueue_scripts', 'gutenberg_navigation_init' ); + +/** + * Tells the script loader to load the scripts and styles of custom block on navigation editor screen. + * + * @param bool $is_block_editor_screen Current decision about loading block assets. + * @return bool Filtered decision about loading block assets. + */ +function gutenberg_navigation_editor_load_block_editor_scripts_and_styles( $is_block_editor_screen ) { + if ( is_callable( 'get_current_screen' ) && get_current_screen() && 'gutenberg_page_gutenberg-navigation' === get_current_screen()->base ) { + return true; + } + + return $is_block_editor_screen; +} + +add_filter( 'should_load_block_editor_scripts_and_styles', 'gutenberg_navigation_editor_load_block_editor_scripts_and_styles' ); + +/** + * This function calls createMenuPreloadingMiddleware middleware because + * we need to use custom preloading logic for menus. + * + * @return void + */ +function gutenberg_navigation_editor_preload_menus() { + $menus_data = array_reduce( + array( + gutenberg_navigation_get_menus_endpoint(), + ), + 'rest_preload_api_request', + array() + ); + + if ( ! $menus_data ) { + return; + } + + wp_add_inline_script( + 'wp-edit-navigation', + sprintf( + 'wp.apiFetch.use( wp.editNavigation.__unstableCreateMenuPreloadingMiddleware( %s ) );', + wp_json_encode( $menus_data ) + ), + 'after' + ); +} diff --git a/lib/experimental/navigation-theme-opt-in.php b/lib/experimental/navigation-theme-opt-in.php new file mode 100644 index 0000000000000..7efed9794d0cc --- /dev/null +++ b/lib/experimental/navigation-theme-opt-in.php @@ -0,0 +1,386 @@ +unsanitized_post_values(); + if ( isset( $values[ "nav_menu_item[$menu_item_db_id]" ]['content'] ) ) { + if ( is_string( $values[ "nav_menu_item[$menu_item_db_id]" ]['content'] ) ) { + $args['menu-item-content'] = $values[ "nav_menu_item[$menu_item_db_id]" ]['content']; + } elseif ( isset( $values[ "nav_menu_item[$menu_item_db_id]" ]['content']['raw'] ) ) { + $args['menu-item-content'] = $values[ "nav_menu_item[$menu_item_db_id]" ]['content']['raw']; + } + } + } + + // Everything else belongs in `wp_update_nav_menu_item()`. + + $defaults = array( + 'menu-item-content' => '', + ); + + $args = wp_parse_args( $args, $defaults ); + + update_post_meta( $menu_item_db_id, '_menu_item_content', wp_slash( $args['menu-item-content'] ) ); +} +add_action( 'wp_update_nav_menu_item', 'gutenberg_update_nav_menu_item_content', 10, 3 ); + +/** + * Shim that hooks into `wp_setup_nav_menu_items` and makes it so that nav menu + * items have a 'content' field. This field contains HTML and is used by nav + * menu items with `type` set to `'block'`. + * + * Specifically, this shim makes it so that the `wp_setup_nav_menu_item()` + * function sets `content` on the returned menu item. When merged to Core, this + * functionality should exist in `wp_setup_nav_menu_item()`. + * + * This shim can be removed when the Gutenberg plugin requires a WordPress + * version that has the ticket below. + * + * @see https://core.trac.wordpress.org/ticket/50544 + * + * @param object $menu_item The menu item object. + * + * @return object Updated menu item object. + */ +function gutenberg_setup_block_nav_menu_item( $menu_item ) { + if ( 'block' === $menu_item->type ) { + $menu_item->type_label = __( 'Block', 'gutenberg' ); + $menu_item->content = ! isset( $menu_item->content ) ? get_post_meta( $menu_item->db_id, '_menu_item_content', true ) : $menu_item->content; + + // Set to make the menu item display nicely in nav-menus.php. + $menu_item->object = 'block'; + $menu_item->title = __( 'Block', 'gutenberg' ); + } + + return $menu_item; +} +add_filter( 'wp_setup_nav_menu_item', 'gutenberg_setup_block_nav_menu_item' ); + +/** + * Shim that hooks into `walker_nav_menu_start_el` and makes it so that the + * default walker which renders a menu will correctly render the HTML associated + * with any navigation menu item that has `type` set to `'block`'. + * + * Specifically, this shim makes it so that `Walker_Nav_Menu::start_el()` + * renders the `content` of a nav menu item when its `type` is `'block'`. When + * merged to Core, this functionality should exist in + * `Walker_Nav_Menu::start_el()`. + * + * This shim can be removed when the Gutenberg plugin requires a WordPress + * version that has the ticket below. + * + * @see https://core.trac.wordpress.org/ticket/50544 + * + * @param string $item_output The menu item's starting HTML output. + * @param WP_Post $item Menu item data object. + * @param int $depth Depth of menu item. Used for padding. + * @param stdClass $args An object of wp_nav_menu() arguments. + * + * @return string The menu item's updated HTML output. + */ +function gutenberg_output_block_nav_menu_item( $item_output, $item, $depth, $args ) { + if ( 'block' === $item->type ) { + $item_output = $args->before; + /** This filter is documented in wp-includes/post-template.php */ + $item_output .= apply_filters( 'the_content', $item->content ); + $item_output .= $args->after; + } + + return $item_output; +} +add_filter( 'walker_nav_menu_start_el', 'gutenberg_output_block_nav_menu_item', 10, 4 ); + +/** + * Shim that prevents menu items with type `'block'` from being rendered in the + * frontend when the theme does not support block menus. + * + * Specifically, this shim makes it so that `wp_nav_menu()` will remove any menu + * items that have a `type` of `'block'` from `$sorted_menu_items`. When merged + * to Core, this functionality should exist in `wp_nav_menu()`. + * + * This shim can be removed when the Gutenberg plugin requires a WordPress + * version that has the ticket below. + * + * @see https://core.trac.wordpress.org/ticket/50544 + * + * @param array $menu_items The menu items, sorted by each menu item's menu order. + * + * @return array Updated menu items, sorted by each menu item's menu order. + */ +function gutenberg_remove_block_nav_menu_items( $menu_items ) { + // We should uncomment the line below when the block-nav-menus feature becomes stable. + // @see https://github.com/WordPress/gutenberg/issues/34265. + /*if ( current_theme_supports( 'block-nav-menus' ) ) {*/ + if ( false ) { + return $menu_items; + } + + return array_filter( + $menu_items, + function( $menu_item ) { + return 'block' !== $menu_item->type; + } + ); +} +add_filter( 'wp_nav_menu_objects', 'gutenberg_remove_block_nav_menu_items', 10 ); + +/** + * Recursively converts a list of menu items into a list of blocks. This is a + * helper function used by `gutenberg_output_block_nav_menu()`. + * + * Transformation depends on the menu item type. Link menu items are turned into + * a `core/navigation-link` block. Block menu items are simply parsed. + * + * @param array $menu_items The menu items to convert, sorted by each menu item's menu order. + * @param array $menu_items_by_parent_id All menu items, indexed by their parent's ID. + + * @return array Updated menu items, sorted by each menu item's menu order. + */ +function gutenberg_convert_menu_items_to_blocks( + $menu_items, + &$menu_items_by_parent_id +) { + if ( empty( $menu_items ) ) { + return array(); + } + + $blocks = array(); + + foreach ( $menu_items as $menu_item ) { + if ( 'block' === $menu_item->type ) { + $parsed_blocks = parse_blocks( $menu_item->content ); + + if ( count( $parsed_blocks ) ) { + $block = $parsed_blocks[0]; + } else { + $block = array( + 'blockName' => 'core/freeform', + 'attrs' => array( + 'originalContent' => $menu_item->content, + ), + ); + } + } else { + $block = array( + 'blockName' => 'core/navigation-link', + 'attrs' => array( + 'label' => $menu_item->title, + 'url' => $menu_item->url, + ), + ); + } + + $block['innerBlocks'] = gutenberg_convert_menu_items_to_blocks( + isset( $menu_items_by_parent_id[ $menu_item->ID ] ) + ? $menu_items_by_parent_id[ $menu_item->ID ] + : array(), + $menu_items_by_parent_id + ); + + $blocks[] = $block; + } + + return $blocks; +} + +/** + * Shim that causes `wp_nav_menu()` to output a Navigation block instead of a + * nav menu when the theme supports block menus. The Navigation block is + * constructed by transforming the stored tree of menu items into a tree of + * blocks. + * + * Specifically, this shim makes it so that `wp_nav_menu()` returns early when + * the theme supports block menus. When merged to Core, this functionality + * should exist in `wp_nav_menu()` after `$sorted_menu_items` is set. The + * duplicated code (marked using BEGIN and END) can be deleted. + * + * This shim can be removed when the Gutenberg plugin requires a WordPress + * version that has the ticket below. + * + * @see https://core.trac.wordpress.org/ticket/50544 + * + * @param string|null $output Nav menu output to short-circuit with. Default null. + * @param stdClass $args An object containing wp_nav_menu() arguments. + * + * @return string|null Nav menu output to short-circuit with. + */ +function gutenberg_output_block_nav_menu( $output, $args ) { + // We should uncomment the line below when the block-nav-menus feature becomes stable. + // @see https://github.com/WordPress/gutenberg/issues/34265. + /*if ( ! current_theme_supports( 'block-nav-menus' ) ) {*/ + if ( true ) { + return null; + } + + // BEGIN: Code that already exists in wp_nav_menu(). + + // Get the nav menu based on the requested menu. + $menu = wp_get_nav_menu_object( $args->menu ); + + // Get the nav menu based on the theme_location. + $locations = get_nav_menu_locations(); + if ( ! $menu && $args->theme_location && $locations && isset( $locations[ $args->theme_location ] ) ) { + $menu = wp_get_nav_menu_object( $locations[ $args->theme_location ] ); + } + + // Get the first menu that has items if we still can't find a menu. + if ( ! $menu && ! $args->theme_location ) { + $menus = wp_get_nav_menus(); + foreach ( $menus as $menu_maybe ) { + $menu_items = wp_get_nav_menu_items( $menu_maybe->term_id, array( 'update_post_term_cache' => false ) ); + if ( $menu_items ) { + $menu = $menu_maybe; + break; + } + } + } + + if ( empty( $args->menu ) ) { + $args->menu = $menu; + } + + // If the menu exists, get its items. + if ( $menu && ! is_wp_error( $menu ) && ! isset( $menu_items ) ) { + $menu_items = wp_get_nav_menu_items( $menu->term_id, array( 'update_post_term_cache' => false ) ); + } + + // Set up the $menu_item variables. + _wp_menu_item_classes_by_context( $menu_items ); + + $sorted_menu_items = array(); + foreach ( (array) $menu_items as $menu_item ) { + $sorted_menu_items[ $menu_item->menu_order ] = $menu_item; + } + + unset( $menu_items, $menu_item ); + + // END: Code that already exists in wp_nav_menu(). + + $menu_items_by_parent_id = array(); + foreach ( $sorted_menu_items as $menu_item ) { + $menu_items_by_parent_id[ $menu_item->menu_item_parent ][] = $menu_item; + } + + $block_attributes = array(); + if ( isset( $args->block_attributes ) ) { + $block_attributes = $args->block_attributes; + } + + $navigation_block = array( + 'blockName' => 'core/navigation', + 'attrs' => $block_attributes, + 'innerBlocks' => gutenberg_convert_menu_items_to_blocks( + isset( $menu_items_by_parent_id[0] ) + ? $menu_items_by_parent_id[0] + : array(), + $menu_items_by_parent_id + ), + ); + + return render_block( $navigation_block ); +} +add_filter( 'pre_wp_nav_menu', 'gutenberg_output_block_nav_menu', 10, 2 ); + +/** + * Shim that makes nav-menus.php nicely display a menu item with its `type` set to + * `'block'`. + * + * Specifically, this shim makes it so that `Walker_Nav_Menu_Edit::start_el()` + * outputs extra form fields. When merged to Core, this markup should exist in + * `Walker_Nav_Menu_Edit::start_el()`. + * + * This shim can be removed when the Gutenberg plugin requires a WordPress + * version that has the ticket below. + * + * @see https://core.trac.wordpress.org/ticket/50544 + * + * @param int $item_id Menu item ID. + * @param WP_Post $item Menu item data object. + */ +function gutenberg_output_block_menu_item_custom_fields( $item_id, $item ) { + if ( 'block' === $item->type ) { + ?> +

+ +

+ get_settings(); + + // If in the editor, add webfonts defined in variations. + if ( is_admin() || ( defined( 'REST_REQUEST' ) && REST_REQUEST ) ) { + $variations = WP_Theme_JSON_Resolver_Gutenberg::get_style_variations(); + + foreach ( $variations as $variation ) { + + // Sanity check: Skip if fontFamilies are not defined in the variation. + if ( + empty( $variation['settings'] ) || + empty( $variation['settings']['typography'] ) || + empty( $variation['settings']['typography']['fontFamilies'] ) + ) { + continue; + } + + // Merge the variation settings with the global settings. + $settings['typography'] = empty( $settings['typography'] ) ? array() : $settings['typography']; + $settings['typography']['fontFamilies'] = empty( $settings['typography']['fontFamilies'] ) ? array() : $settings['typography']['fontFamilies']; + $settings['typography']['fontFamilies']['theme'] = empty( $settings['typography']['fontFamilies'] ) ? array() : $settings['typography']['fontFamilies']['theme']; + $settings['typography']['fontFamilies']['theme'] = array_merge( $settings['typography']['fontFamilies']['theme'], $variation['settings']['typography']['fontFamilies']['theme'] ); + + // Make sure there are no duplicates. + $settings['typography']['fontFamilies'] = array_unique( $settings['typography']['fontFamilies'] ); + } + } + + // Bail out early if there are no settings for webfonts. + if ( empty( $settings['typography'] ) || empty( $settings['typography']['fontFamilies'] ) ) { + return; + } + + $webfonts = array(); + + // Look for fontFamilies. + foreach ( $settings['typography']['fontFamilies'] as $font_families ) { + foreach ( $font_families as $font_family ) { + + // Skip if fontFace is not defined. + if ( empty( $font_family['fontFace'] ) ) { + continue; + } + + $font_family['fontFace'] = (array) $font_family['fontFace']; + + foreach ( $font_family['fontFace'] as $font_face ) { + // Skip if the webfont was registered through the Webfonts API. + if ( isset( $font_face['origin'] ) && 'gutenberg_wp_webfonts_api' === $font_face['origin'] ) { + continue; + } + + // Check if webfonts have a "src" param, and if they do account for the use of "file:./". + if ( ! empty( $font_face['src'] ) ) { + $font_face['src'] = (array) $font_face['src']; + + foreach ( $font_face['src'] as $src_key => $url ) { + // Tweak the URL to be relative to the theme root. + if ( ! str_starts_with( $url, 'file:./' ) ) { + continue; + } + $font_face['src'][ $src_key ] = get_theme_file_uri( str_replace( 'file:./', '', $url ) ); + } + } + + // Convert keys to kebab-case. + foreach ( $font_face as $property => $value ) { + $kebab_case = _wp_to_kebab_case( $property ); + $font_face[ $kebab_case ] = $value; + if ( $kebab_case !== $property ) { + unset( $font_face[ $property ] ); + } + } + + $webfonts[] = $font_face; + } + } + } + foreach ( $webfonts as $webfont ) { + wp_webfonts()->register_webfont( $webfont ); + } + foreach ( $webfonts as $webfont ) { + wp_webfonts()->enqueue_webfont( $webfont['font-family'] ); + } +} + +/** + * Add missing fonts data to the global styles. + * + * @param array $data The global styles. + * @return array The global styles with missing fonts data. + */ +function gutenberg_add_registered_webfonts_to_theme_json( $data ) { + $font_families_registered = wp_webfonts()->get_all_webfonts(); + $font_families_from_theme = array(); + if ( ! empty( $data['settings'] ) && ! empty( $data['settings']['typography'] ) && ! empty( $data['settings']['typography']['fontFamilies'] ) ) { + $font_families_from_theme = $data['settings']['typography']['fontFamilies']; + } + + /** + * Helper to get an array of the font-families. + * + * @param array $families_data The font-families data. + * @return array The font-families array. + */ + $get_families = static function( $families_data ) { + $families = array(); + foreach ( $families_data as $family ) { + $families[] = WP_Webfonts::get_font_slug( $family ); + } + + // Micro-optimization: Use array_flip( array_flip( $array ) ) + // instead of array_unique( $array ) because it's faster. + // The result is the same. + return array_flip( array_flip( $families ) ); + }; + + // Diff the arrays to find the missing fonts. + $to_add = array_diff( + array_keys( $font_families_registered ), + $get_families( $font_families_from_theme ) + ); + + // Bail out early if there are no missing fonts. + if ( empty( $to_add ) ) { + return $data; + } + + // Make sure the path to settings.typography.fontFamilies.theme exists + // before adding missing fonts. + if ( empty( $data['settings'] ) ) { + $data['settings'] = array(); + } + if ( empty( $data['settings']['typography'] ) ) { + $data['settings']['typography'] = array(); + } + if ( empty( $data['settings']['typography']['fontFamilies'] ) ) { + $data['settings']['typography']['fontFamilies'] = array(); + } + + foreach ( $to_add as $slug ) { + $font_faces_for_family = $font_families_registered[ $slug ]; + $family_name = $font_faces_for_family[0]['font-family']; + $font_faces = array(); + + foreach ( $font_faces_for_family as $font_face ) { + $camel_cased = array( 'origin' => 'gutenberg_wp_webfonts_api' ); + foreach ( $font_face as $key => $value ) { + $camel_cased[ lcfirst( str_replace( '-', '', ucwords( $key, '-' ) ) ) ] = $value; + } + $font_faces[] = $camel_cased; + } + + $data['settings']['typography']['fontFamilies'][] = array( + 'fontFamily' => str_contains( $family_name, ' ' ) ? "'{$family_name}'" : $family_name, + 'name' => $family_name, + 'slug' => $slug, + 'fontFace' => $font_faces, + ); + } + + return $data; +} + +add_action( 'init', 'gutenberg_register_webfonts_from_theme_json' ); diff --git a/lib/experimental/rest-api.php b/lib/experimental/rest-api.php new file mode 100644 index 0000000000000..8ab4b1ad509fe --- /dev/null +++ b/lib/experimental/rest-api.php @@ -0,0 +1,102 @@ +register_routes(); +} +add_action( 'rest_api_init', 'gutenberg_register_rest_customizer_nonces' ); + +/** + * Registers the Block editor settings REST API routes. + */ +function gutenberg_register_block_editor_settings() { + $editor_settings = new WP_REST_Block_Editor_Settings_Controller(); + $editor_settings->register_routes(); +} +add_action( 'rest_api_init', 'gutenberg_register_block_editor_settings' ); + +/** + * Shim for get_sample_permalink() to add support for auto-draft status. + * + * This function filters the return from get_sample_permalink() and essentially + * re-runs the same logic minus the filters, but pretends a status of auto-save + * is actually publish in order to return the future permalink format. + * + * This is a temporary fix until we can patch get_sample_permalink() + * + * @see https://core.trac.wordpress.org/ticket/46266 + * + * @param array $permalink Array containing the sample permalink with placeholder for the post name, and the post name. + * @param int $id ID of the post. + * @param string $title Title of the post. + * @param string $name Slug of the post. + * @param object $post WP_Post object. + * + * @return array Array containing the sample permalink with placeholder for the post name, and the post name. + */ +function gutenberg_auto_draft_get_sample_permalink( $permalink, $id, $title, $name, $post ) { + if ( 'auto-draft' !== $post->post_status ) { + return $permalink; + } + $ptype = get_post_type_object( $post->post_type ); + + $original_status = $post->post_status; + $original_date = $post->post_date; + $original_name = $post->post_name; + + // Hack: get_permalink() would return ugly permalink for drafts, so we will fake that our post is published. + $post->post_status = 'publish'; + $post->post_name = sanitize_title( $post->post_name ? $post->post_name : $post->post_title, $post->ID ); + + // If the user wants to set a new name -- override the current one. + // Note: if empty name is supplied -- use the title instead, see #6072. + if ( ! is_null( $name ) ) { + $post->post_name = sanitize_title( $name ? $name : $title, $post->ID ); + } + + $post->post_name = wp_unique_post_slug( $post->post_name, $post->ID, $post->post_status, $post->post_type, $post->post_parent ); + + $post->filter = 'sample'; + + $permalink = get_permalink( $post, true ); + + // Replace custom post_type Token with generic pagename token for ease of use. + $permalink = str_replace( "%$post->post_type%", '%pagename%', $permalink ); + + // Handle page hierarchy. + if ( $ptype->hierarchical ) { + $uri = get_page_uri( $post ); + if ( $uri ) { + $uri = untrailingslashit( $uri ); + $uri = strrev( stristr( strrev( $uri ), '/' ) ); + $uri = untrailingslashit( $uri ); + } + + if ( ! empty( $uri ) ) { + $uri .= '/'; + } + $permalink = str_replace( '%pagename%', "{$uri}%pagename%", $permalink ); + } + + $permalink = array( $permalink, $post->post_name ); + $post->post_status = $original_status; + $post->post_date = $original_date; + $post->post_name = $original_name; + unset( $post->filter ); + + return $permalink; +} +add_filter( 'get_sample_permalink', 'gutenberg_auto_draft_get_sample_permalink', 10, 5 ); diff --git a/lib/experimental/webfonts.php b/lib/experimental/webfonts.php new file mode 100644 index 0000000000000..201101d1d7093 --- /dev/null +++ b/lib/experimental/webfonts.php @@ -0,0 +1,229 @@ +init(); + } + + return $wp_webfonts; + } +} + +if ( ! function_exists( 'wp_register_webfonts' ) ) { + /** + * Registers a collection of webfonts. + * + * Example of how to register Source Serif Pro font with font-weight range of 200-900 + * and font-style of normal and italic: + * + * If the font files are contained within the theme: + * + * wp_register_webfonts( + * array( + * array( + * 'provider' => 'local', + * 'font-family' => 'Source Serif Pro', + * 'font-weight' => '200 900', + * 'font-style' => 'normal', + * 'src' => get_theme_file_uri( 'assets/fonts/source-serif-pro/SourceSerif4Variable-Roman.ttf.woff2' ), + * ), + * array( + * 'provider' => 'local', + * 'font-family' => 'Source Serif Pro', + * 'font-weight' => '200 900', + * 'font-style' => 'italic', + * 'src' => get_theme_file_uri( 'assets/fonts/source-serif-pro/SourceSerif4Variable-Italic.ttf.woff2' ), + * ), + * ) + * ); + * + * + * Webfonts should be registered in the `after_setup_theme` hook. + * + * @since 6.0.0 + * + * @param array[] $webfonts Webfonts to be registered. + * This contains an array of webfonts to be registered. + * Each webfont is an array. + * @return string[] The font family slug of the registered webfonts. + */ + function wp_register_webfonts( array $webfonts ) { + $registered_webfont_slugs = array(); + + foreach ( $webfonts as $webfont ) { + $slug = wp_register_webfont( $webfont ); + + if ( is_string( $slug ) ) { + $registered_webfont_slugs[ $slug ] = true; + } + } + + return array_keys( $registered_webfont_slugs ); + } +} + +if ( ! function_exists( 'wp_register_webfont' ) ) { + /** + * Registers a single webfont. + * + * Example of how to register Source Serif Pro font with font-weight range of 200-900: + * + * If the font file is contained within the theme: + * + * + * wp_register_webfont( + * array( + * 'provider' => 'local', + * 'font-family' => 'Source Serif Pro', + * 'font-weight' => '200 900', + * 'font-style' => 'normal', + * 'src' => get_theme_file_uri( 'assets/fonts/source-serif-pro/SourceSerif4Variable-Roman.ttf.woff2' ), + * ) + * ); + * + * + * @since 6.0.0 + * + * @param array $webfont Webfont to be registered. + * @return string|false The font family slug if successfully registered, else false. + */ + function wp_register_webfont( array $webfont ) { + return wp_webfonts()->register_webfont( $webfont ); + } +} + +if ( ! function_exists( 'wp_enqueue_webfonts' ) ) { + /** + * Enqueues a collection of font families. + * + * Example of how to enqueue Source Serif Pro and Roboto font families, both registered beforehand. + * + * + * wp_enqueue_webfonts( + * 'Roboto', + * 'Sans Serif Pro' + * ); + * + * + * Font families should be enqueued from the `init` hook or later. + * + * @since 6.0.0 + * + * @param string[] $webfonts Font families to be enqueued. + */ + function wp_enqueue_webfonts( array $webfonts ) { + foreach ( $webfonts as $webfont ) { + wp_enqueue_webfont( $webfont ); + } + } +} + +if ( ! function_exists( 'wp_enqueue_webfont' ) ) { + /** + * Enqueue a single font family that has been registered beforehand. + * + * Example of how to enqueue Source Serif Pro font: + * + * + * wp_enqueue_webfont( 'Source Serif Pro' ); + * + * + * Font families should be enqueued from the `init` hook or later. + * + * @since 6.0.0 + * + * @param string $font_family_name The font family name to be enqueued. + * @return bool True if successfully enqueued, else false. + */ + function wp_enqueue_webfont( $font_family_name ) { + return wp_webfonts()->enqueue_webfont( $font_family_name ); + } +} + +if ( ! function_exists( 'wp_register_webfont_provider' ) ) { + /** + * Registers a custom font service provider. + * + * A webfont provider contains the business logic for how to + * interact with a remote font service and how to generate + * the `@font-face` styles for that remote service. + * + * How to register a custom font service provider: + * 1. Load its class file into memory before registration. + * 2. Pass the class' name to this function. + * + * For example, for a class named `My_Custom_Font_Service_Provider`: + * ``` + * wp_register_webfont_provider( My_Custom_Font_Service_Provider::class ); + * ``` + * + * @since 6.0.0 + * + * @param string $name The provider's name. + * @param string $classname The provider's class name. + * The class should be a child of `WP_Webfonts_Provider`. + * See {@see WP_Webfonts_Provider}. + * + * @return bool True if successfully registered, else false. + */ + function wp_register_webfont_provider( $name, $classname ) { + return wp_webfonts()->register_provider( $name, $classname ); + } +} + +if ( ! function_exists( 'wp_get_webfont_providers' ) ) { + /** + * Gets all registered providers. + * + * Return an array of providers, each keyed by their unique + * ID (i.e. the `$id` property in the provider's object) with + * an instance of the provider (object): + * ID => provider instance + * + * Each provider contains the business logic for how to + * process its specific font service (i.e. local or remote) + * and how to generate the `@font-face` styles for its service. + * + * @since 6.0.0 + * + * @return WP_Webfonts_Provider[] All registered providers, each keyed by their unique ID. + */ + function wp_get_webfont_providers() { + return wp_webfonts()->get_providers(); + } +} + +/** + * Add webfonts mime types. + */ +add_filter( + 'mime_types', + function( $mime_types ) { + // Webfonts formats. + $mime_types['woff2'] = 'font/woff2'; + $mime_types['woff'] = 'font/woff'; + $mime_types['ttf'] = 'font/ttf'; + $mime_types['eot'] = 'application/vnd.ms-fontobject'; + $mime_types['otf'] = 'application/x-font-opentype'; + + return $mime_types; + } +); diff --git a/lib/experiments-page.php b/lib/experiments-page.php index 1d06f48e9ed80..0c9e8eba38d72 100644 --- a/lib/experiments-page.php +++ b/lib/experiments-page.php @@ -40,15 +40,27 @@ function gutenberg_initialize_experiments_settings() { 'gutenberg_display_experiment_section', 'gutenberg-experiments' ); + + add_settings_field( + 'gutenberg-list-v2', + __( 'List block v2', 'gutenberg' ), + 'gutenberg_display_experiment_field', + 'gutenberg-experiments', + 'gutenberg_experiments_section', + array( + 'label' => __( 'Test a new list block that uses nested list item blocks (Warning: The new block is not ready. You may experience content loss, avoid using it on production sites)', 'gutenberg' ), + 'id' => 'gutenberg-list-v2', + ) + ); add_settings_field( - 'gutenberg-navigation', - __( 'Navigation', 'gutenberg' ), + 'gutenberg-quote-v2', + __( 'Quote block v2', 'gutenberg' ), 'gutenberg_display_experiment_field', 'gutenberg-experiments', 'gutenberg_experiments_section', array( - 'label' => __( 'Enable Navigation screen', 'gutenberg' ), - 'id' => 'gutenberg-navigation', + 'label' => __( 'Test a new quote block that allows nested blocks (Warning: The new block is not ready. You may experience content loss, avoid using it on production sites)', 'gutenberg' ), + 'id' => 'gutenberg-quote-v2', ) ); register_setting( @@ -88,3 +100,22 @@ function gutenberg_display_experiment_section() { (int) get_option( 'use_balanceTags' ) !== 1 || is_wp_version_compatible( '5.9' ), + ); + return array_merge( $settings, $experiments_settings ); +} + +add_filter( 'block_editor_settings_all', 'gutenberg_experiments_editor_settings' ); diff --git a/lib/full-site-editing/block-templates.php b/lib/full-site-editing/block-templates.php deleted file mode 100644 index bb3da6c54bdfa..0000000000000 --- a/lib/full-site-editing/block-templates.php +++ /dev/null @@ -1,594 +0,0 @@ - $file ) { - $path_list[] = $path; - } - } - return $path_list; -} - -/** - * Retrieves the template file from the theme for a given slug. - * - * @access private - * @internal - * - * @param string $template_type wp_template or wp_template_part. - * @param string $slug template slug. - * - * @return array|null Template. - */ -function _gutenberg_get_template_file( $template_type, $slug ) { - $template_base_paths = array( - 'wp_template' => 'block-templates', - 'wp_template_part' => 'block-template-parts', - ); - $themes = array( - get_stylesheet() => get_stylesheet_directory(), - get_template() => get_template_directory(), - ); - foreach ( $themes as $theme_slug => $theme_dir ) { - $file_path = $theme_dir . '/' . $template_base_paths[ $template_type ] . '/' . $slug . '.html'; - if ( file_exists( $file_path ) ) { - $new_template_item = array( - 'slug' => $slug, - 'path' => $file_path, - 'theme' => $theme_slug, - 'type' => $template_type, - ); - - if ( 'wp_template_part' === $template_type ) { - return _gutenberg_add_template_part_area_info( $new_template_item ); - } - return $new_template_item; - } - } - - return null; -} - -/** - * Retrieves the template files from the theme. - * - * @access private - * @internal - * - * @param string $template_type wp_template or wp_template_part. - * - * @return array Template. - */ -function _gutenberg_get_template_files( $template_type ) { - $template_base_paths = array( - 'wp_template' => 'block-templates', - 'wp_template_part' => 'block-template-parts', - ); - $themes = array( - get_stylesheet() => get_stylesheet_directory(), - get_template() => get_template_directory(), - ); - - $template_files = array(); - foreach ( $themes as $theme_slug => $theme_dir ) { - $theme_template_files = _gutenberg_get_template_paths( $theme_dir . '/' . $template_base_paths[ $template_type ] ); - foreach ( $theme_template_files as $template_file ) { - $template_base_path = $template_base_paths[ $template_type ]; - $template_slug = substr( - $template_file, - // Starting position of slug. - strpos( $template_file, $template_base_path . DIRECTORY_SEPARATOR ) + 1 + strlen( $template_base_path ), - // Subtract ending '.html'. - -5 - ); - $new_template_item = array( - 'slug' => $template_slug, - 'path' => $template_file, - 'theme' => $theme_slug, - 'type' => $template_type, - ); - - if ( 'wp_template_part' === $template_type ) { - $template_files[] = _gutenberg_add_template_part_area_info( $new_template_item ); - } else { - $template_files[] = $new_template_item; - } - } - } - - return $template_files; -} - -/** - * Attempts to add the template part's area information to the input template. - * - * @param array $template_info Template to add information to (requires 'type' and 'slug' fields). - * - * @return array Template. - */ -function _gutenberg_add_template_part_area_info( $template_info ) { - if ( WP_Theme_JSON_Resolver_Gutenberg::theme_has_support() ) { - $theme_data = WP_Theme_JSON_Resolver_Gutenberg::get_theme_data()->get_template_parts(); - } - - if ( isset( $theme_data[ $template_info['slug'] ]['area'] ) ) { - $template_info['area'] = gutenberg_filter_template_part_area( $theme_data[ $template_info['slug'] ]['area'] ); - } else { - $template_info['area'] = WP_TEMPLATE_PART_AREA_UNCATEGORIZED; - } - - return $template_info; -} - -/** - * Returns an array containing the references of - * the passed blocks and their inner blocks. - * - * @param array $blocks array of blocks. - * - * @return array block references to the passed blocks and their inner blocks. - */ -function _gutenberg_flatten_blocks( &$blocks ) { - $all_blocks = array(); - $queue = array(); - foreach ( $blocks as &$block ) { - $queue[] = &$block; - } - - while ( count( $queue ) > 0 ) { - $block = &$queue[0]; - array_shift( $queue ); - $all_blocks[] = &$block; - - if ( ! empty( $block['innerBlocks'] ) ) { - foreach ( $block['innerBlocks'] as &$inner_block ) { - $queue[] = &$inner_block; - } - } - } - - return $all_blocks; -} - -/** - * Parses wp_template content and injects the current theme's - * stylesheet as a theme attribute into each wp_template_part - * - * @param string $template_content serialized wp_template content. - * - * @return string Updated wp_template content. - */ -function _gutenberg_inject_theme_attribute_in_content( $template_content ) { - $has_updated_content = false; - $new_content = ''; - $template_blocks = parse_blocks( $template_content ); - - $blocks = _gutenberg_flatten_blocks( $template_blocks ); - foreach ( $blocks as &$block ) { - if ( - 'core/template-part' === $block['blockName'] && - ! isset( $block['attrs']['theme'] ) - ) { - $block['attrs']['theme'] = wp_get_theme()->get_stylesheet(); - $has_updated_content = true; - } - } - - if ( $has_updated_content ) { - foreach ( $template_blocks as &$block ) { - $new_content .= serialize_block( $block ); - } - - return $new_content; - } - - return $template_content; -} - -/** - * Build a unified template object based on a theme file. - * - * @param array $template_file Theme file. - * @param array $template_type wp_template or wp_template_part. - * - * @return WP_Block_Template Template. - */ -function _gutenberg_build_template_result_from_file( $template_file, $template_type ) { - $default_template_types = gutenberg_get_default_template_types(); - $template_content = file_get_contents( $template_file['path'] ); - $theme = wp_get_theme()->get_stylesheet(); - - $template = new WP_Block_Template(); - $template->id = $theme . '//' . $template_file['slug']; - $template->theme = $theme; - $template->content = _gutenberg_inject_theme_attribute_in_content( $template_content ); - $template->slug = $template_file['slug']; - $template->source = 'theme'; - $template->type = $template_type; - $template->title = $template_file['slug']; - $template->status = 'publish'; - $template->has_theme_file = true; - - if ( 'wp_template' === $template_type && isset( $default_template_types[ $template_file['slug'] ] ) ) { - $template->description = $default_template_types[ $template_file['slug'] ]['description']; - $template->title = $default_template_types[ $template_file['slug'] ]['title']; - } - - if ( 'wp_template_part' === $template_type && isset( $template_file['area'] ) ) { - $template->area = $template_file['area']; - } - - return $template; -} - -/** - * Build a unified template object based a post Object. - * - * @param WP_Post $post Template post. - * - * @return WP_Block_Template|WP_Error Template. - */ -function _gutenberg_build_template_result_from_post( $post ) { - $terms = get_the_terms( $post, 'wp_theme' ); - - if ( is_wp_error( $terms ) ) { - return $terms; - } - - if ( ! $terms ) { - return new WP_Error( 'template_missing_theme', __( 'No theme is defined for this template.', 'gutenberg' ) ); - } - - $theme = $terms[0]->name; - $has_theme_file = wp_get_theme()->get_stylesheet() === $theme && - null !== _gutenberg_get_template_file( $post->post_type, $post->post_name ); - - $template = new WP_Block_Template(); - $template->wp_id = $post->ID; - $template->id = $theme . '//' . $post->post_name; - $template->theme = $theme; - $template->content = $post->post_content; - $template->slug = $post->post_name; - $template->source = 'custom'; - $template->type = $post->post_type; - $template->description = $post->post_excerpt; - $template->title = $post->post_title; - $template->status = $post->post_status; - $template->has_theme_file = $has_theme_file; - - if ( 'wp_template_part' === $post->post_type ) { - $type_terms = get_the_terms( $post, 'wp_template_part_area' ); - if ( ! is_wp_error( $type_terms ) && false !== $type_terms ) { - $template->area = $type_terms[0]->name; - } - } - - return $template; -} - -/** - * Retrieves a list of unified template objects based on a query. - * - * @param array $query { - * Optional. Arguments to retrieve templates. - * - * @type array $slug__in List of slugs to include. - * @type int $wp_id Post ID of customized template. - * @type string $area A 'wp_template_part_area' taxonomy value to filter by (for wp_template_part template type only). - * } - * @param array $template_type wp_template or wp_template_part. - * - * @return array Templates. - */ -function gutenberg_get_block_templates( $query = array(), $template_type = 'wp_template' ) { - /** - * Filters the block templates array before the query takes place. - * - * Return a non-null value to bypass the WordPress quries. - * - * @since 10.8 - * - * @param WP_Block_Template[]|null $block_templates Return an array of block templates to short-circuit the default query, - * or null to allow WP to run it's normal queries. - * @param array $query { - * Optional. Arguments to retrieve templates. - * - * @type array $slug__in List of slugs to include. - * @type int $wp_id Post ID of customized template. - * } - * @param array $template_type wp_template or wp_template_part. - */ - $templates = apply_filters( 'pre_get_block_templates', null, $query, $template_type ); - if ( ! is_null( $templates ) ) { - return $templates; - } - - $wp_query_args = array( - 'post_status' => array( 'auto-draft', 'draft', 'publish' ), - 'post_type' => $template_type, - 'posts_per_page' => -1, - 'no_found_rows' => true, - 'tax_query' => array( - array( - 'taxonomy' => 'wp_theme', - 'field' => 'name', - 'terms' => wp_get_theme()->get_stylesheet(), - ), - ), - ); - - if ( 'wp_template_part' === $template_type && isset( $query['area'] ) ) { - $wp_query_args['tax_query'][] = array( - 'taxonomy' => 'wp_template_part_area', - 'field' => 'name', - 'terms' => $query['area'], - ); - $wp_query_args['tax_query']['relation'] = 'AND'; - } - - if ( isset( $query['slug__in'] ) ) { - $wp_query_args['post_name__in'] = $query['slug__in']; - } - - // This is only needed for the regular templates/template parts CPT listing and editor. - if ( isset( $query['wp_id'] ) ) { - $wp_query_args['p'] = $query['wp_id']; - } else { - $wp_query_args['post_status'] = 'publish'; - } - - $template_query = new WP_Query( $wp_query_args ); - $query_result = array(); - foreach ( $template_query->posts as $post ) { - $template = _gutenberg_build_template_result_from_post( $post ); - - if ( ! is_wp_error( $template ) ) { - $query_result[] = $template; - } - } - - if ( ! isset( $query['wp_id'] ) ) { - $template_files = _gutenberg_get_template_files( $template_type ); - foreach ( $template_files as $template_file ) { - $is_not_custom = false === array_search( - wp_get_theme()->get_stylesheet() . '//' . $template_file['slug'], - array_column( $query_result, 'id' ), - true - ); - $fits_slug_query = - ! isset( $query['slug__in'] ) || in_array( $template_file['slug'], $query['slug__in'], true ); - $fits_area_query = - ! isset( $query['area'] ) || $template_file['area'] === $query['area']; - $should_include = $is_not_custom && $fits_slug_query && $fits_area_query; - if ( $should_include ) { - $query_result[] = _gutenberg_build_template_result_from_file( $template_file, $template_type ); - } - } - } - - /** - * Filters the array of queried block templates array after they've been fetched. - * - * @since 10.8 - * - * @param WP_Block_Template[] $query_result Array of found block templates. - * @param array $query { - * Optional. Arguments to retrieve templates. - * - * @type array $slug__in List of slugs to include. - * @type int $wp_id Post ID of customized template. - * } - * @param array $template_type wp_template or wp_template_part. - */ - return apply_filters( 'get_block_templates', $query_result, $query, $template_type ); -} - -/** - * Retrieves a single unified template object using its id. - * - * @param string $id Template unique identifier (example: theme_slug//template_slug). - * @param array $template_type wp_template or wp_template_part. - * - * @return WP_Block_Template|null Template. - */ -function gutenberg_get_block_template( $id, $template_type = 'wp_template' ) { - /** - * Filters the block templates array before the query takes place. - * - * Return a non-null value to bypass the WordPress quries. - * - * @since 10.8 - * - * @param WP_Block_Template|null $block_template Return block template object to short-circuit the default query, - * or null to allow WP to run it's normal queries. - * @param string $id Template unique identifier (example: theme_slug//template_slug). - * @param array $template_type wp_template or wp_template_part. - */ - $block_template = apply_filters( 'pre_get_block_template', null, $id, $template_type ); - if ( ! is_null( $block_template ) ) { - return $block_template; - } - - $parts = explode( '//', $id, 2 ); - if ( count( $parts ) < 2 ) { - return null; - } - list( $theme, $slug ) = $parts; - $wp_query_args = array( - 'post_name__in' => array( $slug ), - 'post_type' => $template_type, - 'post_status' => array( 'auto-draft', 'draft', 'publish', 'trash' ), - 'posts_per_page' => 1, - 'no_found_rows' => true, - 'tax_query' => array( - array( - 'taxonomy' => 'wp_theme', - 'field' => 'name', - 'terms' => $theme, - ), - ), - ); - $template_query = new WP_Query( $wp_query_args ); - $posts = $template_query->posts; - - if ( count( $posts ) > 0 ) { - $template = _gutenberg_build_template_result_from_post( $posts[0] ); - - if ( ! is_wp_error( $template ) ) { - return $template; - } - } - - $block_template = gutenberg_get_block_file_template( $id, $template_type ); - - /** - * Filters the array of queried block templates array after they've been fetched. - * - * @since 10.8 - * - * @param WP_Block_Template $block_template The found block template. - * @param string $id Template unique identifier (example: theme_slug//template_slug). - * @param array $template_type wp_template or wp_template_part. - */ - return apply_filters( 'get_block_template', $block_template, $id, $template_type ); -} - -/** - * Retrieves a single unified template object using its id. - * Retrieves the file template. - * - * @param string $id Template unique identifier (example: theme_slug//template_slug). - * @param array $template_type wp_template or wp_template_part. - * - * @return WP_Block_Template|null File template. - */ -function gutenberg_get_block_file_template( $id, $template_type = 'wp_template' ) { - /** - * Filters the block templates array before the query takes place. - * - * Return a non-null value to bypass the WordPress quries. - * - * @since 10.8 - * - * @param WP_Block_Template|null $block_template Return block template object to short-circuit the default query, - * or null to allow WP to run it's normal queries. - * @param string $id Template unique identifier (example: theme_slug//template_slug). - * @param array $template_type wp_template or wp_template_part. - */ - $block_template = apply_filters( 'pre_get_block_file_template', null, $id, $template_type ); - if ( ! is_null( $block_template ) ) { - return $block_template; - } - - $parts = explode( '//', $id, 2 ); - if ( count( $parts ) < 2 ) { - /** This filter is documented at the end of this function */ - return apply_filters( 'get_block_file_template', null, $id, $template_type ); - } - list( $theme, $slug ) = $parts; - - if ( wp_get_theme()->get_stylesheet() !== $theme ) { - /** This filter is documented at the end of this function */ - return apply_filters( 'get_block_file_template', null, $id, $template_type ); - } - - $template_file = _gutenberg_get_template_file( $template_type, $slug ); - if ( null === $template_file ) { - /** This filter is documented at the end of this function */ - return apply_filters( 'get_block_file_template', null, $id, $template_type ); - } - - $block_template = _gutenberg_build_template_result_from_file( $template_file, $template_type ); - - /** - * Filters the array of queried block templates array after they've been fetched. - * - * @since 10.8 - * - * @param null|WP_Block_Template $block_template The found block template. - * @param string $id Template unique identifier (example: theme_slug//template_slug). - * @param array $template_type wp_template or wp_template_part. - */ - return apply_filters( 'get_block_file_template', $block_template, $id, $template_type ); -} - -/** - * Generates a unique slug for templates or template parts. - * - * @param string $override_slug The filtered value of the slug (starts as `null` from apply_filter). - * @param string $slug The original/un-filtered slug (post_name). - * @param int $post_ID Post ID. - * @param string $post_status No uniqueness checks are made if the post is still draft or pending. - * @param string $post_type Post type. - * @return string The original, desired slug. - */ -function gutenberg_filter_wp_template_unique_post_slug( $override_slug, $slug, $post_ID, $post_status, $post_type ) { - if ( 'wp_template' !== $post_type && 'wp_template_part' !== $post_type ) { - return $override_slug; - } - - if ( ! $override_slug ) { - $override_slug = $slug; - } - - // Template slugs must be unique within the same theme. - // TODO - Figure out how to update this to work for a multi-theme - // environment. Unfortunately using `get_the_terms` for the 'wp-theme' - // term does not work in the case of new entities since is too early in - // the process to have been saved to the entity. So for now we use the - // currently activated theme for creation. - $theme = wp_get_theme()->get_stylesheet(); - $terms = get_the_terms( $post_ID, 'wp_theme' ); - if ( $terms && ! is_wp_error( $terms ) ) { - $theme = $terms[0]->name; - } - - $check_query_args = array( - 'post_name__in' => array( $override_slug ), - 'post_type' => $post_type, - 'posts_per_page' => 1, - 'no_found_rows' => true, - 'post__not_in' => array( $post_ID ), - 'tax_query' => array( - array( - 'taxonomy' => 'wp_theme', - 'field' => 'name', - 'terms' => $theme, - ), - ), - ); - $check_query = new WP_Query( $check_query_args ); - $posts = $check_query->posts; - - if ( count( $posts ) > 0 ) { - $suffix = 2; - do { - $query_args = $check_query_args; - $alt_post_name = _truncate_post_slug( $override_slug, 200 - ( strlen( $suffix ) + 1 ) ) . "-$suffix"; - $query_args['post_name__in'] = array( $alt_post_name ); - $query = new WP_Query( $query_args ); - $suffix++; - } while ( count( $query->posts ) > 0 ); - $override_slug = $alt_post_name; - } - - return $override_slug; -} -add_filter( 'pre_wp_unique_post_slug', 'gutenberg_filter_wp_template_unique_post_slug', 10, 5 ); diff --git a/lib/full-site-editing/class-wp-block-template.php b/lib/full-site-editing/class-wp-block-template.php deleted file mode 100644 index d8c9d5c54a2b9..0000000000000 --- a/lib/full-site-editing/class-wp-block-template.php +++ /dev/null @@ -1,90 +0,0 @@ - array( - 'title' => _x( 'Index', 'Template name', 'gutenberg' ), - 'description' => __( 'The default template used when no other template is available. This is a required template in WordPress.', 'gutenberg' ), - ), - 'home' => array( - 'title' => _x( 'Home', 'Template name', 'gutenberg' ), - 'description' => __( 'Template used for the main page that displays blog posts. This is the front page by default in WordPress. If a static front page is set, this is the template used for the page that contains the latest blog posts.', 'gutenberg' ), - ), - 'front-page' => array( - 'title' => _x( 'Front Page', 'Template name', 'gutenberg' ), - 'description' => __( 'Template used to render the front page of the site, whether it displays blog posts or a static page. The front page template takes precedence over the "Home" template.', 'gutenberg' ), - ), - 'singular' => array( - 'title' => _x( 'Singular', 'Template name', 'gutenberg' ), - 'description' => __( 'Template used for displaying single views of the content. This template is a fallback for the Single, Post, and Page templates, which take precedence when they exist.', 'gutenberg' ), - ), - 'single' => array( - 'title' => _x( 'Single Post', 'Template name', 'gutenberg' ), - 'description' => __( 'Template used to display a single blog post.', 'gutenberg' ), - ), - 'page' => array( - 'title' => _x( 'Page', 'Template name', 'gutenberg' ), - 'description' => __( 'Template used to display individual pages.', 'gutenberg' ), - ), - 'archive' => array( - 'title' => _x( 'Archive', 'Template name', 'gutenberg' ), - 'description' => __( 'The archive template displays multiple entries at once. It is used as a fallback for the Category, Author, and Date templates, which take precedence when they are available.', 'gutenberg' ), - ), - 'author' => array( - 'title' => _x( 'Author', 'Template name', 'gutenberg' ), - 'description' => __( 'Archive template used to display a list of posts from a single author.', 'gutenberg' ), - ), - 'category' => array( - 'title' => _x( 'Category', 'Template name', 'gutenberg' ), - 'description' => __( 'Archive template used to display a list of posts from the same category.', 'gutenberg' ), - ), - 'taxonomy' => array( - 'title' => _x( 'Taxonomy', 'Template name', 'gutenberg' ), - 'description' => __( 'Archive template used to display a list of posts from the same taxonomy.', 'gutenberg' ), - ), - 'date' => array( - 'title' => _x( 'Date', 'Template name', 'gutenberg' ), - 'description' => __( 'Archive template used to display a list of posts from a specific date.', 'gutenberg' ), - ), - 'tag' => array( - 'title' => _x( 'Tag', 'Template name', 'gutenberg' ), - 'description' => __( 'Archive template used to display a list of posts with a given tag.', 'gutenberg' ), - ), - 'attachment' => array( - 'title' => __( 'Media', 'gutenberg' ), - 'description' => __( 'Template used to display individual media items or attachments.', 'gutenberg' ), - ), - 'search' => array( - 'title' => _x( 'Search', 'Template name', 'gutenberg' ), - 'description' => __( 'Template used to display search results.', 'gutenberg' ), - ), - 'privacy-policy' => array( - 'title' => __( 'Privacy Policy', 'gutenberg' ), - 'description' => '', - ), - '404' => array( - 'title' => _x( '404', 'Template name', 'gutenberg' ), - 'description' => __( 'Template shown when no content is found.', 'gutenberg' ), - ), - ); - - /** - * Filters the list of template types. - * - * @param array $default_template_types An array of template types, formatted as [ slug => [ title, description ] ]. - * - * @since 5.x.x - */ - return apply_filters( 'default_template_types', $default_template_types ); -} - -/** - * Converts the default template types array from associative to indexed, - * to be used in JS, where numeric keys (e.g. '404') always appear before alphabetical - * ones, regardless of the actual order of the array. - * - * From slug-keyed associative array: - * `[ 'index' => [ 'title' => 'Index', 'description' => 'Index template' ] ]` - * - * ...to indexed array with slug as property: - * `[ [ 'slug' => 'index', 'title' => 'Index', 'description' => 'Index template' ] ]` - * - * @return array The default template types as an indexed array. - */ -function gutenberg_get_indexed_default_template_types() { - $indexed_template_types = array(); - $default_template_types = gutenberg_get_default_template_types(); - foreach ( $default_template_types as $slug => $template_type ) { - $template_type['slug'] = (string) $slug; - $indexed_template_types[] = $template_type; - } - return $indexed_template_types; -} - -/** - * Return a list of all overrideable default template type slugs. - * - * @see get_query_template - * - * @return string[] List of all overrideable default template type slugs. - */ -function gutenberg_get_template_type_slugs() { - return array_keys( gutenberg_get_default_template_types() ); -} diff --git a/lib/full-site-editing/edit-site-export.php b/lib/full-site-editing/edit-site-export.php deleted file mode 100644 index 93ca0127a41fe..0000000000000 --- a/lib/full-site-editing/edit-site-export.php +++ /dev/null @@ -1,114 +0,0 @@ - $block ) { - if ( 'core/template-part' === $block['blockName'] && isset( $block['attrs']['theme'] ) ) { - unset( $blocks[ $key ]['attrs']['theme'] ); - $has_updated_content = true; - } - } - - if ( $has_updated_content ) { - foreach ( $template_blocks as $block ) { - $new_content .= serialize_block( $block ); - } - - return $new_content; - } - - return $template_content; -} - -/** - * Creates an export of the current templates and - * template parts from the site editor at the - * specified path in a ZIP file. - * - * @param string $filename path of the ZIP file. - */ -function gutenberg_edit_site_export_create_zip( $filename ) { - if ( ! class_exists( 'ZipArchive' ) ) { - return new WP_Error( 'Zip Export not supported.' ); - } - - $zip = new ZipArchive(); - $zip->open( $filename, ZipArchive::OVERWRITE ); - $zip->addEmptyDir( 'theme' ); - $zip->addEmptyDir( 'theme/block-templates' ); - $zip->addEmptyDir( 'theme/block-template-parts' ); - - // Load templates into the zip file. - $templates = gutenberg_get_block_templates(); - foreach ( $templates as $template ) { - $template->content = _remove_theme_attribute_from_content( $template->content ); - - $zip->addFromString( - 'theme/block-templates/' . $template->slug . '.html', - $template->content - ); - } - - // Load template parts into the zip file. - $template_parts = gutenberg_get_block_templates( array(), 'wp_template_part' ); - foreach ( $template_parts as $template_part ) { - $zip->addFromString( - 'theme/block-template-parts/' . $template_part->slug . '.html', - $template_part->content - ); - } - - // Save changes to the zip file. - $zip->close(); -} - -/** - * Output a ZIP file with an export of the current templates - * and template parts from the site editor, and close the connection. - */ -function gutenberg_edit_site_export() { - // Create ZIP file in the temporary directory. - $filename = tempnam( get_temp_dir(), 'edit-site-export' ); - gutenberg_edit_site_export_create_zip( $filename ); - - header( 'Content-Type: application/zip' ); - header( 'Content-Disposition: attachment; filename=edit-site-export.zip' ); - header( 'Content-Length: ' . filesize( $filename ) ); - flush(); - echo readfile( $filename ); - die(); -} - -add_action( - 'rest_api_init', - function () { - register_rest_route( - '__experimental/edit-site/v1', - '/export', - array( - 'methods' => 'GET', - 'callback' => 'gutenberg_edit_site_export', - 'permission_callback' => function () { - return current_user_can( 'edit_theme_options' ); - }, - ) - ); - } -); diff --git a/lib/full-site-editing/edit-site-page.php b/lib/full-site-editing/edit-site-page.php deleted file mode 100644 index 5963b243ceec2..0000000000000 --- a/lib/full-site-editing/edit-site-page.php +++ /dev/null @@ -1,182 +0,0 @@ - -
-
- wp_remote_retrieve_body( $response ), - ); - } - } else { - $file = get_theme_file_path( $style ); - if ( is_file( $file ) ) { - $styles[] = array( - 'css' => file_get_contents( $file ), - 'baseURL' => get_theme_file_uri( $style ), - ); - } - } - } - } - - return $styles; -} - -/** - * Initialize the Gutenberg Edit Site Page. - * - * @since 7.2.0 - * - * @param string $hook Page. - */ -function gutenberg_edit_site_init( $hook ) { - global $current_screen, $post, $editor_styles; - - if ( ! gutenberg_is_edit_site_page( $hook ) ) { - return; - } - - /** - * Make the WP Screen object aware that this is a block editor page. - * Since custom blocks check whether the screen is_block_editor, - * this is required for custom blocks to be loaded. - * See wp_enqueue_registered_block_scripts_and_styles in wp-includes/script-loader.php - */ - $current_screen->is_block_editor( true ); - - $settings = array_merge( - gutenberg_get_default_block_editor_settings(), - array( - 'siteUrl' => site_url(), - 'postsPerPage' => get_option( 'posts_per_page' ), - 'styles' => gutenberg_get_editor_styles(), - 'defaultTemplateTypes' => gutenberg_get_indexed_default_template_types(), - 'defaultTemplatePartAreas' => gutenberg_get_allowed_template_part_areas(), - '__experimentalBlockPatterns' => WP_Block_Patterns_Registry::get_instance()->get_all_registered(), - '__experimentalBlockPatternCategories' => WP_Block_Pattern_Categories_Registry::get_instance()->get_all_registered(), - ) - ); - $settings = gutenberg_experimental_global_styles_settings( $settings ); - - gutenberg_initialize_editor( - 'edit_site_editor', - 'edit-site', - array( - 'preload_paths' => array( - array( '/wp/v2/media', 'OPTIONS' ), - '/', - '/wp/v2/types?context=edit', - '/wp/v2/taxonomies?context=edit', - '/wp/v2/pages?context=edit', - '/wp/v2/themes?status=active', - ), - 'initializer_name' => 'initialize', - 'editor_settings' => $settings, - ) - ); - - wp_add_inline_script( - 'wp-blocks', - sprintf( 'wp.blocks.setCategories( %s );', wp_json_encode( get_block_categories( $post ) ) ), - 'after' - ); - - wp_enqueue_script( 'wp-edit-site' ); - wp_enqueue_script( 'wp-format-library' ); - wp_enqueue_style( 'wp-edit-site' ); - wp_enqueue_style( 'wp-format-library' ); - wp_enqueue_media(); - - if ( - current_theme_supports( 'wp-block-styles' ) || - ( ! is_array( $editor_styles ) || count( $editor_styles ) === 0 ) - ) { - wp_enqueue_style( 'wp-block-library-theme' ); - } - - /** - * Fires after block assets have been enqueued for the editing interface. - * - * Call `add_action` on any hook before 'admin_enqueue_scripts'. - * - * In the function call you supply, simply use `wp_enqueue_script` and - * `wp_enqueue_style` to add your functionality to the block editor. - * - * @since 5.0.0 - */ - - do_action( 'enqueue_block_editor_assets' ); - -} -add_action( 'admin_enqueue_scripts', 'gutenberg_edit_site_init' ); - -/** - * Register a core site setting for front page information. - */ -function register_site_editor_homepage_settings() { - register_setting( - 'reading', - 'show_on_front', - array( - 'show_in_rest' => true, - 'type' => 'string', - 'description' => __( 'What to show on the front page', 'gutenberg' ), - ) - ); - - register_setting( - 'reading', - 'page_on_front', - array( - 'show_in_rest' => true, - 'type' => 'number', - 'description' => __( 'The ID of the page that should be displayed on the front page', 'gutenberg' ), - ) - ); -} -add_action( 'init', 'register_site_editor_homepage_settings', 10 ); diff --git a/lib/full-site-editing/full-site-editing.php b/lib/full-site-editing/full-site-editing.php deleted file mode 100644 index 0d00847b6b7d2..0000000000000 --- a/lib/full-site-editing/full-site-editing.php +++ /dev/null @@ -1,145 +0,0 @@ - -
-

-
- $menu_item ) { - if ( - false !== strpos( $menu_item[2], 'customize.php' ) || - false !== strpos( $menu_item[2], 'gutenberg-widgets' ) - ) { - $indexes_to_remove[] = $index; - } - } - - foreach ( $indexes_to_remove as $index ) { - unset( $submenu['themes.php'][ $index ] ); - } - } -} - -add_action( 'admin_menu', 'gutenberg_remove_legacy_pages' ); - -/** - * Removes legacy adminbar items from FSE themes. - * - * @param WP_Admin_Bar $wp_admin_bar The admin-bar instance. - */ -function gutenberg_adminbar_items( $wp_admin_bar ) { - - // Early exit if not an FSE theme. - if ( ! gutenberg_is_fse_theme() ) { - return; - } - - // Remove customizer link. - $wp_admin_bar->remove_node( 'customize' ); - $wp_admin_bar->remove_node( 'customize-background' ); - $wp_admin_bar->remove_node( 'customize-header' ); - $wp_admin_bar->remove_node( 'widgets' ); - - // Add site-editor link. - if ( ! is_admin() && current_user_can( 'edit_theme_options' ) ) { - $wp_admin_bar->add_node( - array( - 'id' => 'site-editor', - 'title' => __( 'Edit site', 'gutenberg' ), - 'href' => admin_url( 'admin.php?page=gutenberg-edit-site' ), - ) - ); - } -} - -add_action( 'admin_bar_menu', 'gutenberg_adminbar_items', 50 ); - -/** - * Activates the 'menu_order' filter and then hooks into 'menu_order' - */ -add_filter( 'custom_menu_order', '__return_true' ); -add_filter( 'menu_order', 'gutenberg_menu_order' ); - -/** - * Filters WordPress default menu order - * - * @param array $menu_order Menu Order. - */ -function gutenberg_menu_order( $menu_order ) { - if ( ! gutenberg_is_fse_theme() ) { - return $menu_order; - } - - $new_positions = array( - // Position the site editor before the appearance menu. - 'gutenberg-edit-site' => array_search( 'themes.php', $menu_order, true ), - ); - - // Traverse through the new positions and move - // the items if found in the original menu_positions. - foreach ( $new_positions as $value => $new_index ) { - $current_index = array_search( $value, $menu_order, true ); - if ( $current_index ) { - $out = array_splice( $menu_order, $current_index, 1 ); - array_splice( $menu_order, $new_index, 0, $out ); - } - } - return $menu_order; -} - -/** - * Tells the script loader to load the scripts and styles of custom block on site editor screen. - * - * @param bool $is_block_editor_screen Current decision about loading block assets. - * @return bool Filtered decision about loading block assets. - */ -function gutenberg_site_editor_load_block_editor_scripts_and_styles( $is_block_editor_screen ) { - return ( is_callable( 'get_current_screen' ) && get_current_screen() && 'toplevel_page_gutenberg-edit-site' === get_current_screen()->base ) - ? true - : $is_block_editor_screen; -} -add_filter( 'should_load_block_editor_scripts_and_styles', 'gutenberg_site_editor_load_block_editor_scripts_and_styles' ); diff --git a/lib/full-site-editing/page-templates.php b/lib/full-site-editing/page-templates.php deleted file mode 100644 index caac07dc98481..0000000000000 --- a/lib/full-site-editing/page-templates.php +++ /dev/null @@ -1,27 +0,0 @@ -slug ] = $template->title; - } - - return $templates; -} -add_filter( 'theme_templates', 'gutenberg_load_block_page_templates' ); diff --git a/lib/full-site-editing/template-loader.php b/lib/full-site-editing/template-loader.php deleted file mode 100644 index 431ed938f9f9a..0000000000000 --- a/lib/full-site-editing/template-loader.php +++ /dev/null @@ -1,270 +0,0 @@ -content ) && is_user_logged_in() ) { - $_wp_current_template_content = - sprintf( - /* translators: %s: Template title */ - __( 'Empty template: %s', 'gutenberg' ), - $block_template->title - ); - } elseif ( ! empty( $block_template->content ) ) { - $_wp_current_template_content = $block_template->content; - } - if ( isset( $_GET['_wp-find-template'] ) ) { - wp_send_json_success( $block_template ); - } - } else { - if ( $template ) { - return $template; - } - - if ( 'index' === $type ) { - if ( isset( $_GET['_wp-find-template'] ) ) { - wp_send_json_error( array( 'message' => __( 'No matching template found.', 'gutenberg' ) ) ); - } - } else { - return false; // So that the template loader keeps looking for templates. - } - } - - // Add hooks for template canvas. - // Add viewport meta tag. - add_action( 'wp_head', 'gutenberg_viewport_meta_tag', 0 ); - - // Render title tag with content, regardless of whether theme has title-tag support. - remove_action( 'wp_head', '_wp_render_title_tag', 1 ); // Remove conditional title tag rendering... - add_action( 'wp_head', 'gutenberg_render_title_tag', 1 ); // ...and make it unconditional. - - // This file will be included instead of the theme's template file. - return gutenberg_dir_path() . 'lib/template-canvas.php'; -} - -/** - * Return the correct 'wp_template' to render for the request template type. - * - * Accepts an optional $template_hierarchy argument as a hint. - * - * @param string $template_type The current template type. - * @param string[] $template_hierarchy (optional) The current template hierarchy, ordered by priority. - * @return null|array { - * @type WP_Post|null template_post A template post object, or null if none could be found. - * @type int[] A list of template parts IDs for the template. - * } - */ -function gutenberg_resolve_template( $template_type, $template_hierarchy ) { - if ( ! $template_type ) { - return null; - } - - if ( empty( $template_hierarchy ) ) { - $template_hierarchy = array( $template_type ); - } - - $slugs = array_map( - 'gutenberg_strip_php_suffix', - $template_hierarchy - ); - - // Find all potential templates 'wp_template' post matching the hierarchy. - $query = array( - 'theme' => wp_get_theme()->get_stylesheet(), - 'slug__in' => $slugs, - ); - $templates = gutenberg_get_block_templates( $query ); - - // Order these templates per slug priority. - // Build map of template slugs to their priority in the current hierarchy. - $slug_priorities = array_flip( $slugs ); - - usort( - $templates, - function ( $template_a, $template_b ) use ( $slug_priorities ) { - return $slug_priorities[ $template_a->slug ] - $slug_priorities[ $template_b->slug ]; - } - ); - - return count( $templates ) ? $templates[0] : null; -} - -/** - * Displays title tag with content, regardless of whether theme has title-tag support. - * - * @see _wp_render_title_tag() - */ -function gutenberg_render_title_tag() { - echo '' . wp_get_document_title() . '' . "\n"; -} - -/** - * Returns the markup for the current template. - */ -function gutenberg_get_the_template_html() { - global $_wp_current_template_content; - global $wp_embed; - - if ( ! $_wp_current_template_content ) { - if ( is_user_logged_in() ) { - return '

' . esc_html__( 'No matching template found', 'gutenberg' ) . '

'; - } - return; - } - - $content = $wp_embed->run_shortcode( $_wp_current_template_content ); - $content = $wp_embed->autoembed( $content ); - $content = do_blocks( $content ); - $content = wptexturize( $content ); - $content = wp_filter_content_tags( $content ); - $content = str_replace( ']]>', ']]>', $content ); - - // Wrap block template in .wp-site-blocks to allow for specific descendant styles - // (e.g. `.wp-site-blocks > *`). - return '
' . $content . '
'; -} - -/** - * Renders the markup for the current template. - */ -function gutenberg_render_the_template() { - echo gutenberg_get_the_template_html(); // phpcs:ignore WordPress.Security.EscapeOutput -} - -/** - * Renders a 'viewport' meta tag. - * - * This is hooked into {@see 'wp_head'} to decouple its output from the default template canvas. - */ -function gutenberg_viewport_meta_tag() { - echo '' . "\n"; -} - -/** - * Strips .php suffix from template file names. - * - * @access private - * - * @param string $template_file Template file name. - * @return string Template file name without extension. - */ -function gutenberg_strip_php_suffix( $template_file ) { - return preg_replace( '/\.(php|html)$/', '', $template_file ); -} - -/** - * Removes post details from block context when rendering a block template. - * - * @param array $context Default context. - * - * @return array Filtered context. - */ -function gutenberg_template_render_without_post_block_context( $context ) { - /* - * When loading a template or template part directly and not through a page - * that resolves it, the top-level post ID and type context get set to that - * of the template part. Templates are just the structure of a site, and - * they should not be available as post context because blocks like Post - * Content would recurse infinitely. - */ - if ( isset( $context['postType'] ) && - ( 'wp_template' === $context['postType'] || 'wp_template_part' === $context['postType'] ) ) { - unset( $context['postId'] ); - unset( $context['postType'] ); - } - - return $context; -} -add_filter( 'render_block_context', 'gutenberg_template_render_without_post_block_context' ); - - -/** - * Sets the current WP_Query to return auto-draft posts. - * - * The auto-draft status indicates a new post, so allow the the WP_Query instance to - * return an auto-draft post for template resolution when editing a new post. - * - * @param WP_Query $wp_query Current WP_Query instance, passed by reference. - * @return void - */ -function gutenberg_resolve_template_for_new_post( $wp_query ) { - remove_filter( 'pre_get_posts', 'gutenberg_resolve_template_for_new_post' ); - - // Pages. - $page_id = isset( $wp_query->query['page_id'] ) ? $wp_query->query['page_id'] : null; - - // Posts, including custom post types. - $p = isset( $wp_query->query['p'] ) ? $wp_query->query['p'] : null; - - $post_id = $page_id ? $page_id : $p; - $post = get_post( $post_id ); - - if ( - $post && - 'auto-draft' === $post->post_status && - current_user_can( 'edit_post', $post->ID ) - ) { - $wp_query->set( 'post_status', 'auto-draft' ); - } -} diff --git a/lib/full-site-editing/template-parts.php b/lib/full-site-editing/template-parts.php deleted file mode 100644 index 2693821d03ace..0000000000000 --- a/lib/full-site-editing/template-parts.php +++ /dev/null @@ -1,268 +0,0 @@ - __( 'Template Parts', 'gutenberg' ), - 'singular_name' => __( 'Template Part', 'gutenberg' ), - 'menu_name' => _x( 'Template Parts', 'Admin Menu text', 'gutenberg' ), - 'add_new' => _x( 'Add New', 'Template Part', 'gutenberg' ), - 'add_new_item' => __( 'Add New Template Part', 'gutenberg' ), - 'new_item' => __( 'New Template Part', 'gutenberg' ), - 'edit_item' => __( 'Edit Template Part', 'gutenberg' ), - 'view_item' => __( 'View Template Part', 'gutenberg' ), - 'all_items' => __( 'All Template Parts', 'gutenberg' ), - 'search_items' => __( 'Search Template Parts', 'gutenberg' ), - 'parent_item_colon' => __( 'Parent Template Part:', 'gutenberg' ), - 'not_found' => __( 'No template parts found.', 'gutenberg' ), - 'not_found_in_trash' => __( 'No template parts found in Trash.', 'gutenberg' ), - 'archives' => __( 'Template part archives', 'gutenberg' ), - 'insert_into_item' => __( 'Insert into template part', 'gutenberg' ), - 'uploaded_to_this_item' => __( 'Uploaded to this template part', 'gutenberg' ), - 'filter_items_list' => __( 'Filter template parts list', 'gutenberg' ), - 'items_list_navigation' => __( 'Template parts list navigation', 'gutenberg' ), - 'items_list' => __( 'Template parts list', 'gutenberg' ), - ); - - $args = array( - 'labels' => $labels, - 'description' => __( 'Template parts to include in your templates.', 'gutenberg' ), - 'public' => false, - 'has_archive' => false, - 'show_ui' => true, - 'show_in_menu' => 'themes.php', - 'show_in_admin_bar' => false, - 'show_in_rest' => true, - 'rest_base' => 'template-parts', - 'rest_controller_class' => 'Gutenberg_REST_Templates_Controller', - 'map_meta_cap' => true, - 'supports' => array( - 'title', - 'slug', - 'excerpt', - 'editor', - 'revisions', - ), - ); - - register_post_type( 'wp_template_part', $args ); -} -add_action( 'init', 'gutenberg_register_template_part_post_type' ); - -/** - * Registers the 'wp_template_part_area' taxonomy. - */ -function gutenberg_register_wp_template_part_area_taxonomy() { - if ( ! gutenberg_supports_block_templates() ) { - return; - } - - register_taxonomy( - 'wp_template_part_area', - array( 'wp_template_part' ), - array( - 'public' => false, - 'hierarchical' => false, - 'labels' => array( - 'name' => __( 'Template Part Areas', 'gutenberg' ), - 'singular_name' => __( 'Template Part Area', 'gutenberg' ), - ), - 'query_var' => false, - 'rewrite' => false, - 'show_ui' => false, - '_builtin' => true, - 'show_in_nav_menus' => false, - 'show_in_rest' => false, - ) - ); -} -add_action( 'init', 'gutenberg_register_wp_template_part_area_taxonomy' ); - -// Define constants for supported wp_template_part_area taxonomy. -if ( ! defined( 'WP_TEMPLATE_PART_AREA_HEADER' ) ) { - define( 'WP_TEMPLATE_PART_AREA_HEADER', 'header' ); -} -if ( ! defined( 'WP_TEMPLATE_PART_AREA_FOOTER' ) ) { - define( 'WP_TEMPLATE_PART_AREA_FOOTER', 'footer' ); -} -if ( ! defined( 'WP_TEMPLATE_PART_AREA_SIDEBAR' ) ) { - define( 'WP_TEMPLATE_PART_AREA_SIDEBAR', 'sidebar' ); -} -if ( ! defined( 'WP_TEMPLATE_PART_AREA_UNCATEGORIZED' ) ) { - define( 'WP_TEMPLATE_PART_AREA_UNCATEGORIZED', 'uncategorized' ); -} - -/** - * Fixes the label of the 'wp_template_part' admin menu entry. - */ -function gutenberg_fix_template_part_admin_menu_entry() { - if ( ! gutenberg_supports_block_templates() ) { - return; - } - - global $submenu; - if ( ! isset( $submenu['themes.php'] ) ) { - return; - } - $post_type = get_post_type_object( 'wp_template_part' ); - if ( ! $post_type ) { - return; - } - foreach ( $submenu['themes.php'] as $key => $submenu_entry ) { - if ( $post_type->labels->all_items === $submenu['themes.php'][ $key ][0] ) { - $submenu['themes.php'][ $key ][0] = $post_type->labels->menu_name; // phpcs:ignore WordPress.WP.GlobalVariablesOverride - break; - } - } -} -add_action( 'admin_menu', 'gutenberg_fix_template_part_admin_menu_entry' ); - -// Customize the `wp_template` admin list. -add_filter( 'manage_wp_template_part_posts_columns', 'gutenberg_templates_lists_custom_columns' ); -add_action( 'manage_wp_template_part_posts_custom_column', 'gutenberg_render_templates_lists_custom_column', 10, 2 ); -add_filter( 'views_edit-wp_template_part', 'gutenberg_filter_templates_edit_views' ); - -/** - * Sets a custom slug when creating auto-draft template parts. - * This is only needed for auto-drafts created by the regular WP editor. - * If this page is to be removed, this won't be necessary. - * - * @param int $post_id Post ID. - */ -function set_unique_slug_on_create_template_part( $post_id ) { - $post = get_post( $post_id ); - if ( 'auto-draft' !== $post->post_status ) { - return; - } - - if ( ! $post->post_name ) { - wp_update_post( - array( - 'ID' => $post_id, - 'post_name' => 'custom_slug_' . uniqid(), - ) - ); - } - - $terms = get_the_terms( $post_id, 'wp_theme' ); - if ( ! $terms || ! count( $terms ) ) { - wp_set_post_terms( $post_id, wp_get_theme()->get_stylesheet(), 'wp_theme' ); - } -} -add_action( 'save_post_wp_template_part', 'set_unique_slug_on_create_template_part' ); - -/** - * Returns a filtered list of allowed area values for template parts. - * - * @return array The supported template part area values. - */ -function gutenberg_get_allowed_template_part_areas() { - $default_area_definitions = array( - array( - 'area' => WP_TEMPLATE_PART_AREA_UNCATEGORIZED, - 'label' => __( 'General', 'gutenberg' ), - 'description' => __( - 'General templates often perform a specific role like displaying post content, and are not tied to any particular area.', - 'gutenberg' - ), - 'icon' => 'layout', - 'area_tag' => 'div', - ), - array( - 'area' => WP_TEMPLATE_PART_AREA_HEADER, - 'label' => __( 'Header', 'gutenberg' ), - 'description' => __( - 'The Header template defines a page area that typically contains a title, logo, and main navigation.', - 'gutenberg' - ), - 'icon' => 'header', - 'area_tag' => 'header', - ), - array( - 'area' => WP_TEMPLATE_PART_AREA_FOOTER, - 'label' => __( 'Footer', 'gutenberg' ), - 'description' => __( - 'The Footer template defines a page area that typically contains site credits, social links, or any other combination of blocks.', - 'gutenberg' - ), - 'icon' => 'footer', - 'area_tag' => 'footer', - ), - ); - - /** - * Filters the list of allowed template part area values. - * - * @param array $default_areas An array of supported area objects. - */ - return apply_filters( 'default_wp_template_part_areas', $default_area_definitions ); -} - -/** - * Checks whether the input 'area' is a supported value. - * Returns the input if supported, otherwise returns the 'uncategorized' value. - * - * @param string $type Template part area name. - * - * @return string Input if supported, else the uncategorized value. - */ -function gutenberg_filter_template_part_area( $type ) { - $allowed_areas = array_map( - function ( $item ) { - return $item['area']; - }, - gutenberg_get_allowed_template_part_areas() - ); - if ( in_array( $type, $allowed_areas, true ) ) { - return $type; - } - - /* translators: %1$s: Template area type, %2$s: the uncategorized template area value. */ - $warning_message = sprintf( __( '"%1$s" is not a supported wp_template_part area value and has been added as "%2$s".', 'gutenberg' ), $type, WP_TEMPLATE_PART_AREA_UNCATEGORIZED ); - trigger_error( $warning_message, E_USER_NOTICE ); - return WP_TEMPLATE_PART_AREA_UNCATEGORIZED; -} - -/** - * Print a template-part. - * - * @param string $part The template-part to print. Use "header" or "footer". - * - * @return void - */ -function gutenberg_block_template_part( $part ) { - $template_part = gutenberg_get_block_template( get_stylesheet() . '//' . $part, 'wp_template_part' ); - if ( ! $template_part || empty( $template_part->content ) ) { - return; - } - echo do_blocks( $template_part->content ); -} - -/** - * Print the header template-part. - * - * @return void - */ -function gutenberg_block_header_area() { - gutenberg_block_template_part( 'header' ); -} - -/** - * Print the footer template-part. - * - * @return void - */ -function gutenberg_block_footer_area() { - gutenberg_block_template_part( 'footer' ); -} diff --git a/lib/full-site-editing/templates-utils.php b/lib/full-site-editing/templates-utils.php deleted file mode 100644 index bc270a738d967..0000000000000 --- a/lib/full-site-editing/templates-utils.php +++ /dev/null @@ -1,113 +0,0 @@ -post_name ); - return; - } - - if ( 'description' === $column_name && has_excerpt( $post_id ) ) { - the_excerpt( $post_id ); - return; - } - - if ( 'status' === $column_name ) { - $post_status = get_post_status( $post_id ); - // The auto-draft status doesn't have localized labels. - if ( 'auto-draft' === $post_status ) { - echo esc_html_x( 'Auto-Draft', 'Post status', 'gutenberg' ); - return; - } - $post_status_object = get_post_status_object( $post_status ); - echo esc_html( $post_status_object->label ); - return; - } - - if ( 'theme' === $column_name ) { - $terms = get_the_terms( $post_id, 'wp_theme' ); - if ( empty( $terms ) || is_wp_error( $terms ) ) { - return; - } - $themes = array(); - foreach ( $terms as $term ) { - $themes[] = esc_html( wp_get_theme( $term->slug ) ); - } - echo implode( '
', $themes ); - return; - } -} - -/** - * Adds the auto-draft view to the templates and template parts admin lists. - * - * @param array $views The edit views to filter. - */ -function gutenberg_filter_templates_edit_views( $views ) { - $post_type = get_current_screen()->post_type; - $url = add_query_arg( - array( - 'post_type' => $post_type, - 'post_status' => 'auto-draft', - ), - 'edit.php' - ); - $is_auto_draft_view = isset( $_REQUEST['post_status'] ) && 'auto-draft' === $_REQUEST['post_status']; - $class_html = $is_auto_draft_view ? ' class="current"' : ''; - $aria_current = $is_auto_draft_view ? ' aria-current="page"' : ''; - $post_count = wp_count_posts( $post_type, 'readable' ); - $label = sprintf( - // The auto-draft status doesn't have localized labels. - translate_nooped_plural( - /* translators: %s: Number of auto-draft posts. */ - _nx_noop( - 'Auto-Draft (%s)', - 'Auto-Drafts (%s)', - 'Post status', - 'gutenberg' - ), - $post_count->{'auto-draft'} - ), - number_format_i18n( $post_count->{'auto-draft'} ) - ); - - $auto_draft_view = sprintf( - '%s', - esc_url( $url ), - $class_html, - $aria_current, - $label - ); - - array_splice( $views, 1, 0, array( 'auto-draft' => $auto_draft_view ) ); - - return $views; -} diff --git a/lib/full-site-editing/templates.php b/lib/full-site-editing/templates.php deleted file mode 100644 index 418b534a3eaf6..0000000000000 --- a/lib/full-site-editing/templates.php +++ /dev/null @@ -1,284 +0,0 @@ - __( 'Templates', 'gutenberg' ), - 'singular_name' => __( 'Template', 'gutenberg' ), - 'menu_name' => _x( 'Templates', 'Admin Menu text', 'gutenberg' ), - 'add_new' => _x( 'Add New', 'Template', 'gutenberg' ), - 'add_new_item' => __( 'Add New Template', 'gutenberg' ), - 'new_item' => __( 'New Template', 'gutenberg' ), - 'edit_item' => __( 'Edit Template', 'gutenberg' ), - 'view_item' => __( 'View Template', 'gutenberg' ), - 'all_items' => __( 'All Templates', 'gutenberg' ), - 'search_items' => __( 'Search Templates', 'gutenberg' ), - 'parent_item_colon' => __( 'Parent Template:', 'gutenberg' ), - 'not_found' => __( 'No templates found.', 'gutenberg' ), - 'not_found_in_trash' => __( 'No templates found in Trash.', 'gutenberg' ), - 'archives' => __( 'Template archives', 'gutenberg' ), - 'insert_into_item' => __( 'Insert into template', 'gutenberg' ), - 'uploaded_to_this_item' => __( 'Uploaded to this template', 'gutenberg' ), - 'filter_items_list' => __( 'Filter templates list', 'gutenberg' ), - 'items_list_navigation' => __( 'Templates list navigation', 'gutenberg' ), - 'items_list' => __( 'Templates list', 'gutenberg' ), - ); - - $args = array( - 'labels' => $labels, - 'description' => __( 'Templates to include in your theme.', 'gutenberg' ), - 'public' => false, - 'has_archive' => false, - 'show_ui' => true, - 'show_in_menu' => 'themes.php', - 'show_in_admin_bar' => false, - 'show_in_rest' => true, - 'rest_base' => 'templates', - 'rest_controller_class' => 'Gutenberg_REST_Templates_Controller', - 'capability_type' => array( 'template', 'templates' ), - 'map_meta_cap' => true, - 'supports' => array( - 'title', - 'slug', - 'excerpt', - 'editor', - 'revisions', - ), - ); - - register_post_type( 'wp_template', $args ); -} -add_action( 'init', 'gutenberg_register_template_post_type' ); - -/** - * Registers block editor 'wp_theme' taxonomy. - */ -function gutenberg_register_wp_theme_taxonomy() { - if ( ! gutenberg_supports_block_templates() && ! WP_Theme_JSON_Resolver_Gutenberg::theme_has_support() ) { - return; - } - - register_taxonomy( - 'wp_theme', - array( 'wp_template', 'wp_template_part', 'wp_global_styles' ), - array( - 'public' => false, - 'hierarchical' => false, - 'labels' => array( - 'name' => __( 'Themes', 'gutenberg' ), - 'singular_name' => __( 'Theme', 'gutenberg' ), - ), - 'query_var' => false, - 'rewrite' => false, - 'show_ui' => false, - '_builtin' => true, - 'show_in_nav_menus' => false, - 'show_in_rest' => false, - ) - ); -} -add_action( 'init', 'gutenberg_register_wp_theme_taxonomy' ); - -/** - * Filters the capabilities of a user to conditionally grant them capabilities for managing 'wp_template' posts. - * - * Any user who can 'edit_theme_options' will have access. - * - * @param array $allcaps A user's capabilities. - * @return array Filtered $allcaps. - */ -function gutenberg_grant_template_caps( array $allcaps ) { - if ( isset( $allcaps['edit_theme_options'] ) ) { - $allcaps['edit_templates'] = $allcaps['edit_theme_options']; - $allcaps['edit_others_templates'] = $allcaps['edit_theme_options']; - $allcaps['edit_published_templates'] = $allcaps['edit_theme_options']; - $allcaps['edit_private_templates'] = $allcaps['edit_theme_options']; - $allcaps['delete_templates'] = $allcaps['edit_theme_options']; - $allcaps['delete_others_templates'] = $allcaps['edit_theme_options']; - $allcaps['delete_published_templates'] = $allcaps['edit_theme_options']; - $allcaps['delete_private_templates'] = $allcaps['edit_theme_options']; - $allcaps['publish_templates'] = $allcaps['edit_theme_options']; - $allcaps['read_private_templates'] = $allcaps['edit_theme_options']; - } - - return $allcaps; -} -add_filter( 'user_has_cap', 'gutenberg_grant_template_caps' ); - -/** - * Fixes the label of the 'wp_template' admin menu entry. - */ -function gutenberg_fix_template_admin_menu_entry() { - if ( ! gutenberg_supports_block_templates() ) { - return; - } - global $submenu; - if ( ! isset( $submenu['themes.php'] ) ) { - return; - } - $post_type = get_post_type_object( 'wp_template' ); - if ( ! $post_type ) { - return; - } - foreach ( $submenu['themes.php'] as $key => $submenu_entry ) { - if ( $post_type->labels->all_items === $submenu['themes.php'][ $key ][0] ) { - $submenu['themes.php'][ $key ][0] = $post_type->labels->menu_name; // phpcs:ignore WordPress.WP.GlobalVariablesOverride - break; - } - } -} -add_action( 'admin_menu', 'gutenberg_fix_template_admin_menu_entry' ); - -// Customize the `wp_template` admin list. -add_filter( 'manage_wp_template_posts_columns', 'gutenberg_templates_lists_custom_columns' ); -add_action( 'manage_wp_template_posts_custom_column', 'gutenberg_render_templates_lists_custom_column', 10, 2 ); -add_filter( 'views_edit-wp_template', 'gutenberg_filter_templates_edit_views' ); - -/** - * Sets a custom slug when creating auto-draft templates. - * This is only needed for auto-drafts created by the regular WP editor. - * If this page is to be removed, this won't be necessary. - * - * @param int $post_id Post ID. - */ -function set_unique_slug_on_create_template( $post_id ) { - $post = get_post( $post_id ); - if ( 'auto-draft' !== $post->post_status ) { - return; - } - - if ( ! $post->post_name ) { - wp_update_post( - array( - 'ID' => $post_id, - 'post_name' => 'custom_slug_' . uniqid(), - ) - ); - } - - $terms = get_the_terms( $post_id, 'wp_theme' ); - if ( ! $terms || ! count( $terms ) ) { - wp_set_post_terms( $post_id, wp_get_theme()->get_stylesheet(), 'wp_theme' ); - } -} -add_action( 'save_post_wp_template', 'set_unique_slug_on_create_template' ); - -/** - * Print the skip-link script & styles. - * - * @todo Remove this when WP 5.8 is the minimum required version. - * - * @return void - */ -function gutenberg_the_skip_link() { - - // Early exit if on WP 5.8+. - if ( function_exists( 'the_block_template_skip_link' ) ) { - return; - } - - // Early exit if not a block theme. - if ( ! gutenberg_supports_block_templates() ) { - return; - } - - // Early exit if not a block template. - global $_wp_current_template_content; - if ( ! $_wp_current_template_content ) { - return; - } - ?> - - - - - - get_stylesheet( $type ); - - if ( $can_use_cached ) { - // Cache for a minute. - // This cache doesn't need to be any longer, we only want to avoid spikes on high-traffic sites. - set_transient( 'global_styles', $stylesheet, MINUTE_IN_SECONDS ); - } - - return $stylesheet; -} - -/** - * Fetches the preferences for each origin (core, theme, user) - * and enqueues the resulting stylesheet. - */ -function gutenberg_experimental_global_styles_enqueue_assets() { - if ( - ! get_theme_support( 'experimental-link-color' ) && // link color support needs the presets CSS variables regardless of the presence of theme.json file. - ! WP_Theme_JSON_Resolver_Gutenberg::theme_has_support() ) { - return; - } - - $settings = gutenberg_get_default_block_editor_settings(); - $all = WP_Theme_JSON_Resolver_Gutenberg::get_merged_data( $settings ); - - $stylesheet = gutenberg_experimental_global_styles_get_stylesheet( $all ); - if ( empty( $stylesheet ) ) { - return; - } - - if ( isset( wp_styles()->registered['global-styles'] ) ) { - wp_styles()->registered['global-styles']->extra['after'][0] = $stylesheet; - } else { - wp_register_style( 'global-styles', false, array(), true, true ); - wp_add_inline_style( 'global-styles', $stylesheet ); - wp_enqueue_style( 'global-styles' ); - } -} - -/** - * Adds the necessary settings for the Global Styles client UI. - * - * @param array $settings Existing block editor settings. - * - * @return array New block editor settings. - */ -function gutenberg_experimental_global_styles_settings( $settings ) { - // Set what is the context for this data request. - $context = 'all'; - if ( - is_callable( 'get_current_screen' ) && - function_exists( 'gutenberg_is_edit_site_page' ) && - gutenberg_is_edit_site_page( get_current_screen()->id ) && - WP_Theme_JSON_Resolver_Gutenberg::theme_has_support() && - gutenberg_supports_block_templates() - ) { - $context = 'site-editor'; - } - - if ( - defined( 'REST_REQUEST' ) && - REST_REQUEST && - isset( $_GET['context'] ) && - 'mobile' === $_GET['context'] && - WP_Theme_JSON_Resolver_Gutenberg::theme_has_support() - ) { - $context = 'mobile'; - } - - $origin = 'theme'; - if ( - WP_Theme_JSON_Resolver_Gutenberg::theme_has_support() && - gutenberg_supports_block_templates() - ) { - // Only lookup for the user data if we need it. - $origin = 'user'; - } - $consolidated = WP_Theme_JSON_Resolver_Gutenberg::get_merged_data( $settings, $origin ); - - if ( 'mobile' === $context ) { - $settings['__experimentalStyles'] = $consolidated->get_raw_data()['styles']; - } - - if ( 'site-editor' === $context ) { - $theme = WP_Theme_JSON_Resolver_Gutenberg::get_merged_data( $settings, 'theme' ); - $user_cpt_id = WP_Theme_JSON_Resolver_Gutenberg::get_user_custom_post_type_id(); - - $settings['__experimentalGlobalStylesUserEntityId'] = $user_cpt_id; - $settings['__experimentalGlobalStylesBaseStyles'] = $theme->get_raw_data(); - } - - if ( - 'site-editor' !== $context && - 'mobile' !== $context && - ( WP_Theme_JSON_Resolver_Gutenberg::theme_has_support() || get_theme_support( 'experimental-link-color' ) ) - ) { - $block_styles = array( 'css' => gutenberg_experimental_global_styles_get_stylesheet( $consolidated, 'block_styles' ) ); - $css_variables = array( - 'css' => gutenberg_experimental_global_styles_get_stylesheet( $consolidated, 'css_variables' ), - '__experimentalNoWrapper' => true, - ); - - // Make sure the styles array exists. - // In some contexts, like the navigation editor, it doesn't. - if ( ! isset( $settings['styles'] ) ) { - $settings['styles'] = array(); - } - - // Reset existing global styles. - foreach ( $settings['styles'] as $key => $style ) { - if ( isset( $style['__unstableType'] ) && 'globalStyles' === $style['__unstableType'] ) { - unset( $settings['styles'][ $key ] ); - } - } - - // Add the new ones. - $settings['styles'][] = $css_variables; - $settings['styles'][] = $block_styles; - } - - // Copied from get_block_editor_settings() at wordpress-develop/block-editor.php. - $settings['__experimentalFeatures'] = $consolidated->get_settings(); - - if ( isset( $settings['__experimentalFeatures']['color']['palette'] ) ) { - $colors_by_origin = $settings['__experimentalFeatures']['color']['palette']; - $settings['colors'] = isset( $colors_by_origin['user'] ) ? - $colors_by_origin['user'] : ( - isset( $colors_by_origin['theme'] ) ? - $colors_by_origin['theme'] : - $colors_by_origin['core'] - ); - } - - if ( isset( $settings['__experimentalFeatures']['color']['gradients'] ) ) { - $gradients_by_origin = $settings['__experimentalFeatures']['color']['gradients']; - $settings['gradients'] = isset( $gradients_by_origin['user'] ) ? - $gradients_by_origin['user'] : ( - isset( $gradients_by_origin['theme'] ) ? - $gradients_by_origin['theme'] : - $gradients_by_origin['core'] - ); - } - - if ( isset( $settings['__experimentalFeatures']['typography']['fontSizes'] ) ) { - $font_sizes_by_origin = $settings['__experimentalFeatures']['typography']['fontSizes']; - $settings['fontSizes'] = isset( $font_sizes_by_origin['user'] ) ? - $font_sizes_by_origin['user'] : ( - isset( $font_sizes_by_origin['theme'] ) ? - $font_sizes_by_origin['theme'] : - $font_sizes_by_origin['core'] - ); - } - - if ( isset( $settings['__experimentalFeatures']['color']['custom'] ) ) { - $settings['disableCustomColors'] = ! $settings['__experimentalFeatures']['color']['custom']; - unset( $settings['__experimentalFeatures']['color']['custom'] ); - } - if ( isset( $settings['__experimentalFeatures']['color']['customGradient'] ) ) { - $settings['disableCustomGradients'] = ! $settings['__experimentalFeatures']['color']['customGradient']; - unset( $settings['__experimentalFeatures']['color']['customGradient'] ); - } - if ( isset( $settings['__experimentalFeatures']['typography']['customFontSize'] ) ) { - $settings['disableCustomFontSizes'] = ! $settings['__experimentalFeatures']['typography']['customFontSize']; - unset( $settings['__experimentalFeatures']['typography']['customFontSize'] ); - } - if ( isset( $settings['__experimentalFeatures']['typography']['customLineHeight'] ) ) { - $settings['enableCustomLineHeight'] = $settings['__experimentalFeatures']['typography']['customLineHeight']; - unset( $settings['__experimentalFeatures']['typography']['customLineHeight'] ); - } - if ( isset( $settings['__experimentalFeatures']['spacing']['units'] ) ) { - $settings['enableCustomUnits'] = $settings['__experimentalFeatures']['spacing']['units']; - } - if ( isset( $settings['__experimentalFeatures']['spacing']['customPadding'] ) ) { - $settings['enableCustomSpacing'] = $settings['__experimentalFeatures']['spacing']['customPadding']; - unset( $settings['__experimentalFeatures']['spacing']['customPadding'] ); - } - - return $settings; -} - -/** - * Register CPT to store/access user data. - * - * @return array|undefined - */ -function gutenberg_experimental_global_styles_register_user_cpt() { - if ( ! WP_Theme_JSON_Resolver_Gutenberg::theme_has_support() ) { - return; - } - - WP_Theme_JSON_Resolver_Gutenberg::register_user_custom_post_type(); -} - -/** - * Sanitizes global styles user content removing unsafe rules. - * - * @param string $content Post content to filter. - * @return string Filtered post content with unsafe rules removed. - */ -function gutenberg_global_styles_filter_post( $content ) { - $decoded_data = json_decode( stripslashes( $content ), true ); - $json_decoding_error = json_last_error(); - if ( - JSON_ERROR_NONE === $json_decoding_error && - is_array( $decoded_data ) && - isset( $decoded_data['isGlobalStylesUserThemeJSON'] ) && - $decoded_data['isGlobalStylesUserThemeJSON'] - ) { - unset( $decoded_data['isGlobalStylesUserThemeJSON'] ); - - $data_to_encode = WP_Theme_JSON_Gutenberg::remove_insecure_properties( $decoded_data ); - - $data_to_encode['isGlobalStylesUserThemeJSON'] = true; - return wp_json_encode( $data_to_encode ); - } - return $content; -} - -/** - * Adds the filters to filter global styles user theme.json. - */ -function gutenberg_global_styles_kses_init_filters() { - add_filter( 'content_save_pre', 'gutenberg_global_styles_filter_post' ); -} - -/** - * Removes the filters to filter global styles user theme.json. - */ -function gutenberg_global_styles_kses_remove_filters() { - remove_filter( 'content_save_pre', 'gutenberg_global_styles_filter_post' ); -} - -/** - * Register global styles kses filters if the user does not have unfiltered_html capability. - * - * @uses render_block_core_navigation() - * @throws WP_Error An WP_Error exception parsing the block definition. - */ -function gutenberg_global_styles_kses_init() { - gutenberg_global_styles_kses_remove_filters(); - if ( ! current_user_can( 'unfiltered_html' ) ) { - gutenberg_global_styles_kses_init_filters(); - } -} - -/** - * This filter is the last being executed on force_filtered_html_on_import. - * If the input of the filter is true it means we are in an import situation and should - * enable kses, independently of the user capabilities. - * So in that case we call gutenberg_global_styles_kses_init_filters; - * - * @param string $arg Input argument of the filter. - * @return string Exactly what was passed as argument. - */ -function gutenberg_global_styles_force_filtered_html_on_import_filter( $arg ) { - // force_filtered_html_on_import is true we need to init the global styles kses filters. - if ( $arg ) { - gutenberg_global_styles_kses_init_filters(); - } - return $arg; -} - -/** - * This filter is the last being executed on force_filtered_html_on_import. - * If the input of the filter is true it means we are in an import situation and should - * enable kses, independently of the user capabilities. - * So in that case we call gutenberg_global_styles_kses_init_filters; - * - * @param bool $allow_css Whether the CSS in the test string is considered safe. - * @param bool $css_test_string The CSS string to test.. - * @return bool If $allow_css is true it returns true. - * If $allow_css is false and the CSS rule is referencing a WordPress css variable it returns true. - * Otherwise the function return false. - */ -function gutenberg_global_styles_include_support_for_wp_variables( $allow_css, $css_test_string ) { - if ( $allow_css ) { - return $allow_css; - } - $allowed_preset_attributes = array( - 'background', - 'background-color', - 'border-color', - 'color', - 'font-family', - 'font-size', - ); - $parts = explode( ':', $css_test_string, 2 ); - - if ( ! in_array( trim( $parts[0] ), $allowed_preset_attributes, true ) ) { - return $allow_css; - } - return ! ! preg_match( '/^var\(--wp-[a-zA-Z0-9\-]+\)$/', trim( $parts[1] ) ); -} - -// The else clause can be removed when plugin support requires WordPress 5.8.0+. -if ( function_exists( 'get_block_editor_settings' ) ) { - add_filter( 'block_editor_settings_all', 'gutenberg_experimental_global_styles_settings', PHP_INT_MAX ); -} else { - add_filter( 'block_editor_settings', 'gutenberg_experimental_global_styles_settings', PHP_INT_MAX ); -} - -add_action( 'init', 'gutenberg_experimental_global_styles_register_user_cpt' ); -add_action( 'wp_enqueue_scripts', 'gutenberg_experimental_global_styles_enqueue_assets' ); - -// kses actions&filters. -add_action( 'init', 'gutenberg_global_styles_kses_init' ); -add_action( 'set_current_user', 'gutenberg_global_styles_kses_init' ); -add_filter( 'force_filtered_html_on_import', 'gutenberg_global_styles_force_filtered_html_on_import_filter', 999 ); -add_filter( 'safecss_filter_attr_allow_css', 'gutenberg_global_styles_include_support_for_wp_variables', 10, 2 ); -// This filter needs to be executed last. diff --git a/lib/init.php b/lib/init.php index 744e9395015b7..9ba46a1f41fa2 100644 --- a/lib/init.php +++ b/lib/init.php @@ -30,34 +30,6 @@ function gutenberg_menu() { 'gutenberg' ); - if ( - gutenberg_use_widgets_block_editor() && - ! function_exists( 'wp_use_widgets_block_editor' ) && - current_theme_supports( 'widgets' ) - ) { - add_theme_page( - __( 'Widgets', 'gutenberg' ), - __( 'Widgets', 'gutenberg' ), - 'edit_theme_options', - 'gutenberg-widgets', - 'the_gutenberg_widgets', - 2 - ); - remove_submenu_page( 'themes.php', 'widgets.php' ); - } - - if ( get_option( 'gutenberg-experiments' ) ) { - if ( array_key_exists( 'gutenberg-navigation', get_option( 'gutenberg-experiments' ) ) ) { - add_submenu_page( - 'gutenberg', - __( 'Navigation (beta)', 'gutenberg' ), - __( 'Navigation (beta)', 'gutenberg' ), - 'edit_theme_options', - 'gutenberg-navigation', - 'gutenberg_navigation_page' - ); - } - } if ( current_user_can( 'edit_posts' ) ) { add_submenu_page( 'gutenberg', @@ -94,72 +66,22 @@ function gutenberg_menu() { * @since 9.4.0 */ function gutenberg_site_editor_menu() { - if ( gutenberg_is_fse_theme() ) { - add_menu_page( - __( 'Site Editor (beta)', 'gutenberg' ), + if ( wp_is_block_theme() ) { + add_theme_page( + __( 'Editor (beta)', 'gutenberg' ), sprintf( /* translators: %s: "beta" label. */ - __( 'Site Editor %s', 'gutenberg' ), + __( 'Editor %s', 'gutenberg' ), '' . __( 'beta', 'gutenberg' ) . '' ), 'edit_theme_options', 'gutenberg-edit-site', - 'gutenberg_edit_site_page', - 'dashicons-layout' + 'gutenberg_edit_site_page' ); } } add_action( 'admin_menu', 'gutenberg_site_editor_menu', 9 ); -/** - * Modify WP admin bar. - * - * @param WP_Admin_Bar $wp_admin_bar Core class used to implement the Toolbar API. - */ -function modify_admin_bar( $wp_admin_bar ) { - if ( - gutenberg_use_widgets_block_editor() && - ! function_exists( 'wp_use_widgets_block_editor' ) && - $wp_admin_bar->get_node( 'widgets' ) !== null - ) { - $wp_admin_bar->add_menu( - array( - 'id' => 'widgets', - 'href' => admin_url( 'themes.php?page=gutenberg-widgets' ), - ) - ); - } -} -add_action( 'admin_bar_menu', 'modify_admin_bar', 40 ); - - -remove_action( 'welcome_panel', 'wp_welcome_panel' ); -/** - * Modify Dashboard welcome panel. - * - * When widgets are merged in core this should go into `wp-admin/includes/dashboard.php` - * and replace the widgets link in the `wp_welcome_panel` checking for the same condition, - * because then `gutenberg_use_widgets_block_editor` will exist in core. - */ -function modify_welcome_panel() { - ob_start(); - wp_welcome_panel(); - $welcome_panel = ob_get_clean(); - if ( - gutenberg_use_widgets_block_editor() && - ! function_exists( 'wp_use_widgets_block_editor' ) - ) { - echo str_replace( - admin_url( 'widgets.php' ), - admin_url( 'themes.php?page=gutenberg-widgets' ), - $welcome_panel - ); - } else { - echo $welcome_panel; - } -} -add_action( 'welcome_panel', 'modify_welcome_panel', 40 ); - /** * Outputs a WP REST API nonce. */ @@ -167,63 +89,3 @@ function gutenberg_rest_nonce() { exit( wp_create_nonce( 'wp_rest' ) ); } add_action( 'wp_ajax_gutenberg_rest_nonce', 'gutenberg_rest_nonce' ); - - -/** - * Exposes the site icon url to the Gutenberg editor through the WordPress REST - * API. The site icon url should instead be fetched from the wp/v2/settings - * endpoint when https://github.com/WordPress/gutenberg/pull/19967 is complete. - * - * @since 8.2.1 - * - * @param WP_REST_Response $response Response data served by the WordPress REST index endpoint. - * @return WP_REST_Response - */ -function register_site_icon_url( $response ) { - $data = $response->data; - $data['site_icon_url'] = get_site_icon_url(); - $response->set_data( $data ); - return $response; -} - -add_filter( 'rest_index', 'register_site_icon_url' ); - -/** - * Exposes the site logo to the Gutenberg editor through the WordPress REST - * API. This is used for fetching this information when user has no rights - * to update settings. - * - * @since 10.9 - * - * @param WP_REST_Response $response Response data served by the WordPress REST index endpoint. - * @return WP_REST_Response - */ -function register_site_logo_to_rest_index( $response ) { - $site_logo_id = get_theme_mod( 'custom_logo' ); - $response->data['site_logo'] = $site_logo_id; - if ( $site_logo_id ) { - $response->add_link( - 'https://api.w.org/featuredmedia', - rest_url( 'wp/v2/media/' . $site_logo_id ), - array( - 'embeddable' => true, - ) - ); - } - return $response; -} - -add_filter( 'rest_index', 'register_site_logo_to_rest_index' ); - -add_theme_support( 'widgets-block-editor' ); - -/** - * Enable block templates (editor mode) for themes with theme.json. - */ -function gutenberg_enable_block_templates() { - if ( WP_Theme_JSON_Resolver_Gutenberg::theme_has_support() ) { - add_theme_support( 'block-templates' ); - } -} - -add_action( 'setup_theme', 'gutenberg_enable_block_templates' ); diff --git a/lib/interface-wp-theme-json-schema.php b/lib/interface-wp-theme-json-schema.php deleted file mode 100644 index 962a806df0c6a..0000000000000 --- a/lib/interface-wp-theme-json-schema.php +++ /dev/null @@ -1,23 +0,0 @@ - - - get_theme_support( 'block-nav-menus' ), - ) - ); - $settings = gutenberg_experimental_global_styles_settings( $settings ); - - gutenberg_initialize_editor( - 'navigation_editor', - 'edit-navigation', - array( - 'initializer_name' => 'initialize', - 'editor_settings' => $settings, - ) - ); - - wp_enqueue_script( 'wp-edit-navigation' ); - wp_enqueue_style( 'wp-edit-navigation' ); - wp_enqueue_script( 'wp-format-library' ); - wp_enqueue_style( 'wp-format-library' ); - do_action( 'enqueue_block_editor_assets' ); -} -add_action( 'admin_enqueue_scripts', 'gutenberg_navigation_init' ); - -/** - * Tells the script loader to load the scripts and styles of custom block on navigation editor screen. - * - * @param bool $is_block_editor_screen Current decision about loading block assets. - * @return bool Filtered decision about loading block assets. - */ -function gutenberg_navigation_editor_load_block_editor_scripts_and_styles( $is_block_editor_screen ) { - if ( is_callable( 'get_current_screen' ) && get_current_screen() && 'gutenberg_page_gutenberg-navigation' === get_current_screen()->base ) { - return true; - } - - return $is_block_editor_screen; -} - -add_filter( 'should_load_block_editor_scripts_and_styles', 'gutenberg_navigation_editor_load_block_editor_scripts_and_styles' ); diff --git a/lib/navigation.php b/lib/navigation.php deleted file mode 100644 index 7bfe3416647c6..0000000000000 --- a/lib/navigation.php +++ /dev/null @@ -1,380 +0,0 @@ -unsanitized_post_values(); - if ( isset( $values[ "nav_menu_item[$menu_item_db_id]" ]['content'] ) ) { - if ( is_string( $values[ "nav_menu_item[$menu_item_db_id]" ]['content'] ) ) { - $args['menu-item-content'] = $values[ "nav_menu_item[$menu_item_db_id]" ]['content']; - } elseif ( isset( $values[ "nav_menu_item[$menu_item_db_id]" ]['content']['raw'] ) ) { - $args['menu-item-content'] = $values[ "nav_menu_item[$menu_item_db_id]" ]['content']['raw']; - } - } - } - - // Everything else belongs in `wp_update_nav_menu_item()`. - - $defaults = array( - 'menu-item-content' => '', - ); - - $args = wp_parse_args( $args, $defaults ); - - update_post_meta( $menu_item_db_id, '_menu_item_content', wp_slash( $args['menu-item-content'] ) ); -} -add_action( 'wp_update_nav_menu_item', 'gutenberg_update_nav_menu_item_content', 10, 3 ); - -/** - * Shim that hooks into `wp_setup_nav_menu_items` and makes it so that nav menu - * items have a 'content' field. This field contains HTML and is used by nav - * menu items with `type` set to `'block'`. - * - * Specifically, this shim makes it so that the `wp_setup_nav_menu_item()` - * function sets `content` on the returned menu item. When merged to Core, this - * functionality should exist in `wp_setup_nav_menu_item()`. - * - * This shim can be removed when the Gutenberg plugin requires a WordPress - * version that has the ticket below. - * - * @see https://core.trac.wordpress.org/ticket/50544 - * - * @param object $menu_item The menu item object. - * - * @return object Updated menu item object. - */ -function gutenberg_setup_block_nav_menu_item( $menu_item ) { - if ( 'block' === $menu_item->type ) { - $menu_item->type_label = __( 'Block', 'gutenberg' ); - $menu_item->content = ! isset( $menu_item->content ) ? get_post_meta( $menu_item->db_id, '_menu_item_content', true ) : $menu_item->content; - - // Set to make the menu item display nicely in nav-menus.php. - $menu_item->object = 'block'; - $menu_item->title = __( 'Block', 'gutenberg' ); - } - - return $menu_item; -} -add_filter( 'wp_setup_nav_menu_item', 'gutenberg_setup_block_nav_menu_item' ); - -/** - * Shim that hooks into `walker_nav_menu_start_el` and makes it so that the - * default walker which renders a menu will correctly render the HTML associated - * with any navigation menu item that has `type` set to `'block`'. - * - * Specifically, this shim makes it so that `Walker_Nav_Menu::start_el()` - * renders the `content` of a nav menu item when its `type` is `'block'`. When - * merged to Core, this functionality should exist in - * `Walker_Nav_Menu::start_el()`. - * - * This shim can be removed when the Gutenberg plugin requires a WordPress - * version that has the ticket below. - * - * @see https://core.trac.wordpress.org/ticket/50544 - * - * @param string $item_output The menu item's starting HTML output. - * @param WP_Post $item Menu item data object. - * @param int $depth Depth of menu item. Used for padding. - * @param stdClass $args An object of wp_nav_menu() arguments. - * - * @return string The menu item's updated HTML output. - */ -function gutenberg_output_block_nav_menu_item( $item_output, $item, $depth, $args ) { - if ( 'block' === $item->type ) { - $item_output = $args->before; - /** This filter is documented in wp-includes/post-template.php */ - $item_output .= apply_filters( 'the_content', $item->content ); - $item_output .= $args->after; - } - - return $item_output; -} -add_filter( 'walker_nav_menu_start_el', 'gutenberg_output_block_nav_menu_item', 10, 4 ); - -/** - * Shim that prevents menu items with type `'block'` from being rendered in the - * frontend when the theme does not support block menus. - * - * Specifically, this shim makes it so that `wp_nav_menu()` will remove any menu - * items that have a `type` of `'block'` from `$sorted_menu_items`. When merged - * to Core, this functionality should exist in `wp_nav_menu()`. - * - * This shim can be removed when the Gutenberg plugin requires a WordPress - * version that has the ticket below. - * - * @see https://core.trac.wordpress.org/ticket/50544 - * - * @param array $menu_items The menu items, sorted by each menu item's menu order. - * - * @return array Updated menu items, sorted by each menu item's menu order. - */ -function gutenberg_remove_block_nav_menu_items( $menu_items ) { - if ( current_theme_supports( 'block-nav-menus' ) ) { - return $menu_items; - } - - return array_filter( - $menu_items, - function( $menu_item ) { - return 'block' !== $menu_item->type; - } - ); -} -add_filter( 'wp_nav_menu_objects', 'gutenberg_remove_block_nav_menu_items', 10 ); - -/** - * Recursively converts a list of menu items into a list of blocks. This is a - * helper function used by `gutenberg_output_block_nav_menu()`. - * - * Transformation depends on the menu item type. Link menu items are turned into - * a `core/navigation-link` block. Block menu items are simply parsed. - * - * @param array $menu_items The menu items to convert, sorted by each menu item's menu order. - * @param array $menu_items_by_parent_id All menu items, indexed by their parent's ID. - - * @return array Updated menu items, sorted by each menu item's menu order. - */ -function gutenberg_convert_menu_items_to_blocks( - $menu_items, - &$menu_items_by_parent_id -) { - if ( empty( $menu_items ) ) { - return array(); - } - - $blocks = array(); - - foreach ( $menu_items as $menu_item ) { - if ( 'block' === $menu_item->type ) { - $parsed_blocks = parse_blocks( $menu_item->content ); - - if ( count( $parsed_blocks ) ) { - $block = $parsed_blocks[0]; - } else { - $block = array( - 'blockName' => 'core/freeform', - 'attrs' => array( - 'originalContent' => $menu_item->content, - ), - ); - } - } else { - $block = array( - 'blockName' => 'core/navigation-link', - 'attrs' => array( - 'label' => $menu_item->title, - 'url' => $menu_item->url, - ), - ); - } - - $block['innerBlocks'] = gutenberg_convert_menu_items_to_blocks( - isset( $menu_items_by_parent_id[ $menu_item->ID ] ) - ? $menu_items_by_parent_id[ $menu_item->ID ] - : array(), - $menu_items_by_parent_id - ); - - $blocks[] = $block; - } - - return $blocks; -} - -/** - * Shim that causes `wp_nav_menu()` to output a Navigation block instead of a - * nav menu when the theme supports block menus. The Navigation block is - * constructed by transforming the stored tree of menu items into a tree of - * blocks. - * - * Specifically, this shim makes it so that `wp_nav_menu()` returns early when - * the theme supports block menus. When merged to Core, this functionality - * should exist in `wp_nav_menu()` after `$sorted_menu_items` is set. The - * duplicated code (marked using BEGIN and END) can be deleted. - * - * This shim can be removed when the Gutenberg plugin requires a WordPress - * version that has the ticket below. - * - * @see https://core.trac.wordpress.org/ticket/50544 - * - * @param string|null $output Nav menu output to short-circuit with. Default null. - * @param stdClass $args An object containing wp_nav_menu() arguments. - * - * @return string|null Nav menu output to short-circuit with. - */ -function gutenberg_output_block_nav_menu( $output, $args ) { - if ( ! current_theme_supports( 'block-nav-menus' ) ) { - return null; - } - - // BEGIN: Code that already exists in wp_nav_menu(). - - // Get the nav menu based on the requested menu. - $menu = wp_get_nav_menu_object( $args->menu ); - - // Get the nav menu based on the theme_location. - $locations = get_nav_menu_locations(); - if ( ! $menu && $args->theme_location && $locations && isset( $locations[ $args->theme_location ] ) ) { - $menu = wp_get_nav_menu_object( $locations[ $args->theme_location ] ); - } - - // Get the first menu that has items if we still can't find a menu. - if ( ! $menu && ! $args->theme_location ) { - $menus = wp_get_nav_menus(); - foreach ( $menus as $menu_maybe ) { - $menu_items = wp_get_nav_menu_items( $menu_maybe->term_id, array( 'update_post_term_cache' => false ) ); - if ( $menu_items ) { - $menu = $menu_maybe; - break; - } - } - } - - if ( empty( $args->menu ) ) { - $args->menu = $menu; - } - - // If the menu exists, get its items. - if ( $menu && ! is_wp_error( $menu ) && ! isset( $menu_items ) ) { - $menu_items = wp_get_nav_menu_items( $menu->term_id, array( 'update_post_term_cache' => false ) ); - } - - // Set up the $menu_item variables. - _wp_menu_item_classes_by_context( $menu_items ); - - $sorted_menu_items = array(); - foreach ( (array) $menu_items as $menu_item ) { - $sorted_menu_items[ $menu_item->menu_order ] = $menu_item; - } - - unset( $menu_items, $menu_item ); - - // END: Code that already exists in wp_nav_menu(). - - $menu_items_by_parent_id = array(); - foreach ( $sorted_menu_items as $menu_item ) { - $menu_items_by_parent_id[ $menu_item->menu_item_parent ][] = $menu_item; - } - - $block_attributes = array(); - if ( isset( $args->block_attributes ) ) { - $block_attributes = $args->block_attributes; - } - - $navigation_block = array( - 'blockName' => 'core/navigation', - 'attrs' => $block_attributes, - 'innerBlocks' => gutenberg_convert_menu_items_to_blocks( - isset( $menu_items_by_parent_id[0] ) - ? $menu_items_by_parent_id[0] - : array(), - $menu_items_by_parent_id - ), - ); - - return render_block( $navigation_block ); -} -add_filter( 'pre_wp_nav_menu', 'gutenberg_output_block_nav_menu', 10, 2 ); - -/** - * Shim that makes nav-menus.php nicely display a menu item with its `type` set to - * `'block'`. - * - * Specifically, this shim makes it so that `Walker_Nav_Menu_Edit::start_el()` - * outputs extra form fields. When merged to Core, this markup should exist in - * `Walker_Nav_Menu_Edit::start_el()`. - * - * This shim can be removed when the Gutenberg plugin requires a WordPress - * version that has the ticket below. - * - * @see https://core.trac.wordpress.org/ticket/50544 - * - * @param int $item_id Menu item ID. - * @param WP_Post $item Menu item data object. - */ -function gutenberg_output_block_menu_item_custom_fields( $item_id, $item ) { - if ( 'block' === $item->type ) { - ?> -

- -

- file_get_contents( ABSPATH . 'wp-admin/images/wordpress-logo-white.svg' ), - 'siteTitle' => get_bloginfo( 'name' ), - 'adminUrl' => admin_url(), - ); - wp_enqueue_script( 'wp-admin-manifest' ); - wp_localize_script( 'wp-admin-manifest', 'wpAdminManifestL10n', $l10n ); - } -); - -add_filter( - 'load-index.php', - function() { - if ( ! isset( $_GET['service-worker'] ) ) { - return; - } - - header( 'Content-Type: text/javascript' ); - // Must be at the admin root so the scope is correct. Move to the - // wp-admin folder when merging with core. - echo file_get_contents( __DIR__ . '/service-worker.js' ); - exit; - } -); diff --git a/lib/rest-api.php b/lib/rest-api.php deleted file mode 100644 index aa74c373f8b5b..0000000000000 --- a/lib/rest-api.php +++ /dev/null @@ -1,226 +0,0 @@ -register_routes(); -} -add_action( 'rest_api_init', 'gutenberg_register_url_details_routes' ); - -/** - * Registers the block pattern directory. - */ -function gutenberg_register_rest_pattern_directory() { - $block_directory_controller = new WP_REST_Pattern_Directory_Controller(); - $block_directory_controller->register_routes(); -} -add_filter( 'rest_api_init', 'gutenberg_register_rest_pattern_directory' ); - -/** - * Registers the menu locations area REST API routes. - */ -function gutenberg_register_rest_menu_location() { - $nav_menu_location = new WP_REST_Menu_Locations_Controller(); - $nav_menu_location->register_routes(); -} -add_action( 'rest_api_init', 'gutenberg_register_rest_menu_location' ); - -/** - * Registers the menu locations area REST API routes. - */ -function gutenberg_register_rest_customizer_nonces() { - $nav_menu_location = new WP_Rest_Customizer_Nonces(); - $nav_menu_location->register_routes(); -} -add_action( 'rest_api_init', 'gutenberg_register_rest_customizer_nonces' ); - -/** - * Registers the Sidebars & Widgets REST API routes. - */ -function gutenberg_register_sidebars_and_widgets_endpoint() { - $sidebars = new WP_REST_Sidebars_Controller(); - $sidebars->register_routes(); - - $widgets = new WP_REST_Widgets_Controller(); - $widgets->register_routes(); - - $widget_types = new WP_REST_Widget_Types_Controller(); - $widget_types->register_routes(); -} -add_action( 'rest_api_init', 'gutenberg_register_sidebars_and_widgets_endpoint' ); - -/** - * Registers the Block editor settings REST API routes. - */ -function gutenberg_register_block_editor_settings() { - $editor_settings = new WP_REST_Block_Editor_Settings_Controller(); - $editor_settings->register_routes(); -} -add_action( 'rest_api_init', 'gutenberg_register_block_editor_settings' ); - -/** - * Hook in to the nav menu item post type and enable a post type rest endpoint. - * - * @param array $args Current registered post type args. - * @param string $post_type Name of post type. - * - * @return array - */ -function wp_api_nav_menus_post_type_args( $args, $post_type ) { - if ( 'nav_menu_item' === $post_type ) { - $args['show_in_rest'] = true; - $args['rest_base'] = 'menu-items'; - $args['rest_controller_class'] = 'WP_REST_Menu_Items_Controller'; - } - - return $args; -} -add_filter( 'register_post_type_args', 'wp_api_nav_menus_post_type_args', 10, 2 ); - -/** - * Hook in to the nav_menu taxonomy and enable a taxonomy rest endpoint. - * - * @param array $args Current registered taxonomy args. - * @param string $taxonomy Name of taxonomy. - * - * @return array - */ -function wp_api_nav_menus_taxonomy_args( $args, $taxonomy ) { - if ( 'nav_menu' === $taxonomy ) { - $args['show_in_rest'] = true; - $args['rest_base'] = 'menus'; - $args['rest_controller_class'] = 'WP_REST_Menus_Controller'; - } - - return $args; -} -add_filter( 'register_taxonomy_args', 'wp_api_nav_menus_taxonomy_args', 10, 2 ); - -/** - * Shim for get_sample_permalink() to add support for auto-draft status. - * - * This function filters the return from get_sample_permalink() and essentially - * re-runs the same logic minus the filters, but pretends a status of auto-save - * is actually publish in order to return the future permalink format. - * - * This is a temporary fix until we can patch get_sample_permalink() - * - * @see https://core.trac.wordpress.org/ticket/46266 - * - * @param array $permalink Array containing the sample permalink with placeholder for the post name, and the post name. - * @param int $id ID of the post. - * @param string $title Title of the post. - * @param string $name Slug of the post. - * @param object $post WP_Post object. - * - * @return array Array containing the sample permalink with placeholder for the post name, and the post name. - */ -function gutenberg_auto_draft_get_sample_permalink( $permalink, $id, $title, $name, $post ) { - if ( 'auto-draft' !== $post->post_status ) { - return $permalink; - } - $ptype = get_post_type_object( $post->post_type ); - - $original_status = $post->post_status; - $original_date = $post->post_date; - $original_name = $post->post_name; - - // Hack: get_permalink() would return ugly permalink for drafts, so we will fake that our post is published. - $post->post_status = 'publish'; - $post->post_name = sanitize_title( $post->post_name ? $post->post_name : $post->post_title, $post->ID ); - - // If the user wants to set a new name -- override the current one. - // Note: if empty name is supplied -- use the title instead, see #6072. - if ( ! is_null( $name ) ) { - $post->post_name = sanitize_title( $name ? $name : $title, $post->ID ); - } - - $post->post_name = wp_unique_post_slug( $post->post_name, $post->ID, $post->post_status, $post->post_type, $post->post_parent ); - - $post->filter = 'sample'; - - $permalink = get_permalink( $post, true ); - - // Replace custom post_type Token with generic pagename token for ease of use. - $permalink = str_replace( "%$post->post_type%", '%pagename%', $permalink ); - - // Handle page hierarchy. - if ( $ptype->hierarchical ) { - $uri = get_page_uri( $post ); - if ( $uri ) { - $uri = untrailingslashit( $uri ); - $uri = strrev( stristr( strrev( $uri ), '/' ) ); - $uri = untrailingslashit( $uri ); - } - - if ( ! empty( $uri ) ) { - $uri .= '/'; - } - $permalink = str_replace( '%pagename%', "{$uri}%pagename%", $permalink ); - } - - $permalink = array( $permalink, $post->post_name ); - $post->post_status = $original_status; - $post->post_date = $original_date; - $post->post_name = $original_name; - unset( $post->filter ); - - return $permalink; -} -add_filter( 'get_sample_permalink', 'gutenberg_auto_draft_get_sample_permalink', 10, 5 ); - -/** - * Filters WP_User_Query arguments when querying users via the REST API. - * - * Allow using the has_published_post argument. - * - * @param array $prepared_args Array of arguments for WP_User_Query. - * @param WP_REST_Request $request The REST API request. - * - * @return array Returns modified $prepared_args. - */ -function gutenberg_rest_user_query_has_published_posts( $prepared_args, $request ) { - if ( ! empty( $request['has_published_posts'] ) ) { - $prepared_args['has_published_posts'] = ( true === $request['has_published_posts'] ) - ? get_post_types( array( 'show_in_rest' => true ), 'names' ) - : (array) $request['has_published_posts']; - } - return $prepared_args; -} -add_filter( 'rest_user_query', 'gutenberg_rest_user_query_has_published_posts', 10, 2 ); - - -/** - * Filters REST API collection parameters for the users controller. - * - * @param array $query_params JSON Schema-formatted collection parameters. - * - * @return array Returns the $query_params with "has_published_posts". - */ -function gutenberg_rest_user_collection_params_has_published_posts( $query_params ) { - $query_params['has_published_posts'] = array( - 'description' => __( 'Limit result set to users who have published posts.', 'gutenberg' ), - 'type' => array( 'boolean', 'array' ), - 'items' => array( - 'type' => 'string', - 'enum' => get_post_types( array( 'show_in_rest' => true ), 'names' ), - ), - ); - return $query_params; -} -add_filter( 'rest_user_collection_params', 'gutenberg_rest_user_collection_params_has_published_posts' ); diff --git a/lib/service-worker.js b/lib/service-worker.js deleted file mode 100644 index 15a2105a5fb47..0000000000000 --- a/lib/service-worker.js +++ /dev/null @@ -1,14 +0,0 @@ -/* global self */ - -// https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerGlobalScope/skipWaiting -self.addEventListener( 'install', function ( event ) { - event.waitUntil( self.skipWaiting() ); -} ); - -// https://developer.mozilla.org/en-US/docs/Web/API/Clients/claim -self.addEventListener( 'activate', function ( event ) { - event.waitUntil( self.clients.claim() ); -} ); - -// Necessary for Chrome to show the install button. -self.addEventListener( 'fetch', function () {} ); diff --git a/lib/upgrade.php b/lib/upgrade.php index d930999a67890..30746bc01b0cd 100644 --- a/lib/upgrade.php +++ b/lib/upgrade.php @@ -37,14 +37,14 @@ function _gutenberg_migrate_database() { */ function _gutenberg_migrate_remove_fse_drafts() { // Delete auto-draft templates and template parts. - $delete_query = new WP_QUERY( + $delete_query = new WP_Query( array( 'post_status' => array( 'auto-draft' ), 'post_type' => array( 'wp_template', 'wp_template_part' ), 'posts_per_page' => -1, ) ); - foreach ( $delete_query->get_posts() as $post ) { + foreach ( $delete_query->posts as $post ) { wp_delete_post( $post->ID, true ); } diff --git a/lib/utils.php b/lib/utils.php deleted file mode 100644 index 12ee435e88f5b..0000000000000 --- a/lib/utils.php +++ /dev/null @@ -1,139 +0,0 @@ - array( - * 'b' => array( - * 'c' => 1, - * ), - * ), - * ); - * - * @param array $array An array that we want to mutate to include a specific value in a path. - * @param array $path An array of keys describing the path that we want to mutate. - * @param mixed $value The value that will be set. - */ -function gutenberg_experimental_set( &$array, $path, $value = null ) { - // Confirm $array is valid. - if ( ! is_array( $array ) ) { - return; - } - - // Confirm $path is valid. - if ( ! is_array( $path ) ) { - return; - } - $path_length = count( $path ); - if ( 0 === $path_length ) { - return; - } - foreach ( $path as $path_element ) { - if ( - ! is_string( $path_element ) && ! is_integer( $path_element ) && - ! is_null( $path_element ) - ) { - return; - } - } - - for ( $i = 0; $i < $path_length - 1; ++$i ) { - $path_element = $path[ $i ]; - if ( - ! array_key_exists( $path_element, $array ) || - ! is_array( $array[ $path_element ] ) - ) { - $array[ $path_element ] = array(); - } - $array = &$array[ $path_element ]; // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.VariableRedeclaration - } - $array[ $path[ $i ] ] = $value; -} - -/** - * This function is trying to replicate what - * lodash's kebabCase (JS library) does in the client. - * - * The reason we need this function is that we do some processing - * in both the client and the server (e.g.: we generate - * preset classes from preset slugs) that needs to - * create the same output. - * - * We can't remove or update the client's library due to backward compatibility - * (some of the output of lodash's kebabCaseare saved in the post content). - * We have to make the server behave like the client. - * - * @link https://github.com/lodash/lodash/blob/4.17/dist/lodash.js#L14369 - * @link https://github.com/lodash/lodash/blob/4.17/dist/lodash.js#L278 - * @link https://github.com/lodash-php/lodash-php/blob/master/src/String/kebabCase.php - * @link https://github.com/lodash-php/lodash-php/blob/master/src/internal/unicodeWords.php - * - * @param string $string The string to kebab-case. - * - * @return string kebab-cased-string. - */ -function gutenberg_experimental_to_kebab_case( $string ) { - //phpcs:disable WordPress.NamingConventions.ValidVariableName.VariableNotSnakeCase - // ignore the camelCase names for variables so the names are the same as lodash - // so comparing and porting new changes is easier. - - /* - * Some notable things we've removed compared to the lodash version are: - * - * - non-alphanumeric characters: rsAstralRange, rsEmoji, etc - * - the groups that processed the apostrophe, as it's removed before passing the string to preg_match: rsApos, rsOptContrLower, and rsOptContrUpper - * - */ - - /** Used to compose unicode character classes. */ - $rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff'; - $rsNonCharRange = '\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf'; - $rsPunctuationRange = '\\x{2000}-\\x{206f}'; - $rsSpaceRange = ' \\t\\x0b\\f\\xa0\\x{feff}\\n\\r\\x{2028}\\x{2029}\\x{1680}\\x{180e}\\x{2000}\\x{2001}\\x{2002}\\x{2003}\\x{2004}\\x{2005}\\x{2006}\\x{2007}\\x{2008}\\x{2009}\\x{200a}\\x{202f}\\x{205f}\\x{3000}'; - $rsUpperRange = 'A-Z\\xc0-\\xd6\\xd8-\\xde'; - $rsBreakRange = $rsNonCharRange . $rsPunctuationRange . $rsSpaceRange; - - /** Used to compose unicode capture groups. */ - $rsBreak = '[' . $rsBreakRange . ']'; - $rsDigits = '\\d+'; // The last lodash version in GitHub uses a single digit here and expands it when in use. - $rsLower = '[' . $rsLowerRange . ']'; - $rsMisc = '[^' . $rsBreakRange . $rsDigits . $rsLowerRange . $rsUpperRange . ']'; - $rsUpper = '[' . $rsUpperRange . ']'; - - /** Used to compose unicode regexes. */ - $rsMiscLower = '(?:' . $rsLower . '|' . $rsMisc . ')'; - $rsMiscUpper = '(?:' . $rsUpper . '|' . $rsMisc . ')'; - $rsOrdLower = '\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])'; - $rsOrdUpper = '\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])'; - - $regexp = '/' . implode( - '|', - array( - $rsUpper . '?' . $rsLower . '+' . '(?=' . implode( '|', array( $rsBreak, $rsUpper, '$' ) ) . ')', - $rsMiscUpper . '+' . '(?=' . implode( '|', array( $rsBreak, $rsUpper . $rsMiscLower, '$' ) ) . ')', - $rsUpper . '?' . $rsMiscLower . '+', - $rsUpper . '+', - $rsOrdUpper, - $rsOrdLower, - $rsDigits, - ) - ) . '/u'; - - preg_match_all( $regexp, str_replace( "'", '', $string ), $matches ); - return strtolower( implode( '-', $matches[0] ) ); - //phpcs:enable WordPress.NamingConventions.ValidVariableName.VariableNotSnakeCase -} diff --git a/lib/widgets-api.php b/lib/widgets-api.php deleted file mode 100644 index f89d34fa1d304..0000000000000 --- a/lib/widgets-api.php +++ /dev/null @@ -1,269 +0,0 @@ - $widgets ) { - foreach ( $widgets as $i => $maybe_widget_id ) { - if ( $widget_id === $maybe_widget_id && $sidebar_id !== $maybe_sidebar_id ) { - unset( $sidebars[ $maybe_sidebar_id ][ $i ] ); - // We could technically break 2 here, but continue looping in case the id is duplicated. - continue 2; - } - } - } - - if ( $sidebar_id ) { - $sidebars[ $sidebar_id ][] = $widget_id; - } - - wp_set_sidebars_widgets( $sidebars ); - } -} - -if ( ! function_exists( 'wp_find_widgets_sidebar' ) ) { - /** - * Finds the sidebar that a given widget belongs to. - * - * Can be removed when minimum WordPress version is 5.8. - * - * @since 10.3.0 - * - * @param string $widget_id The widget id to look for. - * @return string|null The found sidebar's id, or null if it was not found. - */ - function wp_find_widgets_sidebar( $widget_id ) { - foreach ( wp_get_sidebars_widgets() as $sidebar_id => $widget_ids ) { - foreach ( $widget_ids as $maybe_widget_id ) { - if ( $maybe_widget_id === $widget_id ) { - return (string) $sidebar_id; - } - } - } - - return null; - } -} - -if ( ! function_exists( 'wp_parse_widget_id' ) ) { - /** - * Converts a widget ID into its id_base and number components. - * - * Can be removed when minimum WordPress version is 5.8. - * - * @since 10.2.0 - * - * @param string $id Widget ID. - * @return array Array containing a widget's id_base and number components. - */ - function wp_parse_widget_id( $id ) { - $parsed = array(); - - if ( preg_match( '/^(.+)-(\d+)$/', $id, $matches ) ) { - $parsed['id_base'] = $matches[1]; - $parsed['number'] = (int) $matches[2]; - } else { - // Likely an old single widget. - $parsed['id_base'] = $id; - } - - return $parsed; - } -} - -if ( ! function_exists( 'wp_render_widget' ) ) { - /** - * Calls the render callback of a widget and returns the output. - * - * Can be removed when minimum WordPress version is 5.8. - * - * @since 10.2.0 - * - * @param string $widget_id Widget ID. - * @param string $sidebar_id Sidebar ID. - * @return string - */ - function wp_render_widget( $widget_id, $sidebar_id ) { - global $wp_registered_widgets, $wp_registered_sidebars; - - if ( ! isset( $wp_registered_widgets[ $widget_id ] ) ) { - return ''; - } - - if ( isset( $wp_registered_sidebars[ $sidebar_id ] ) ) { - $sidebar = $wp_registered_sidebars[ $sidebar_id ]; - } elseif ( 'wp_inactive_widgets' === $sidebar_id ) { - $sidebar = array(); - } else { - return ''; - } - - $params = array_merge( - array( - array_merge( - $sidebar, - array( - 'widget_id' => $widget_id, - 'widget_name' => $wp_registered_widgets[ $widget_id ]['name'], - ) - ), - ), - (array) $wp_registered_widgets[ $widget_id ]['params'] - ); - - // Substitute HTML `id` and `class` attributes into `before_widget`. - $classname_ = ''; - foreach ( (array) $wp_registered_widgets[ $widget_id ]['classname'] as $cn ) { - if ( is_string( $cn ) ) { - $classname_ .= '_' . $cn; - } elseif ( is_object( $cn ) ) { - $classname_ .= '_' . get_class( $cn ); - } - } - $classname_ = ltrim( $classname_, '_' ); - $params[0]['before_widget'] = sprintf( $params[0]['before_widget'], $widget_id, $classname_ ); - - /** This filter is documented in wp-includes/widgets.php */ - $params = apply_filters( 'dynamic_sidebar_params', $params ); - - $callback = $wp_registered_widgets[ $widget_id ]['callback']; - - ob_start(); - - /** This filter is documented in wp-includes/widgets.php */ - do_action( 'dynamic_sidebar', $wp_registered_widgets[ $widget_id ] ); - - if ( is_callable( $callback ) ) { - call_user_func_array( $callback, $params ); - } - - return ob_get_clean(); - } -} - -if ( ! function_exists( 'wp_render_widget_control' ) ) { - /** - * Calls the control callback of a widget and returns the output. - * - * Can be removed when minimum WordPress version is 5.8. - * - * @since 10.2.0 - * - * @param string $id Widget ID. - * @return string|null - */ - function wp_render_widget_control( $id ) { - global $wp_registered_widget_controls; - - if ( ! isset( $wp_registered_widget_controls[ $id ]['callback'] ) ) { - return null; - } - - $callback = $wp_registered_widget_controls[ $id ]['callback']; - $params = $wp_registered_widget_controls[ $id ]['params']; - - ob_start(); - - if ( is_callable( $callback ) ) { - call_user_func_array( $callback, $params ); - } - - return ob_get_clean(); - } -} - -if ( ! function_exists( 'gutenberg_get_widget_instance' ) ) { - /** - * Returns the instance settings of the given widget. Must be a widget that - * is registered using WP_Widget. - * - * Belongs in WP_Widget when merged to Core. - * - * Can be removed when minimum WordPress version is 5.8. - * - * @since 10.2.0 - * - * @param string $id Widget ID. - * @return array|null - */ - function gutenberg_get_widget_instance( $id ) { - $parsed_id = wp_parse_widget_id( $id ); - $widget_object = gutenberg_get_widget_object( $parsed_id['id_base'] ); - - if ( ! isset( $parsed_id['number'] ) || ! $widget_object ) { - return null; - } - - $all_instances = $widget_object->get_settings(); - return $all_instances[ $parsed_id['number'] ]; - } -} - -if ( ! function_exists( 'gutenberg_get_widget_key' ) ) { - /** - * Returns the registered key for the given widget type. - * - * Belongs in WP_Widget_Factory when merged to Core. - * - * Can be removed when minimum WordPress version is 5.8. - * - * @since 10.3.0 - * - * @param string $id_base Widget type ID. - * @return string - */ - function gutenberg_get_widget_key( $id_base ) { - global $wp_widget_factory; - - foreach ( $wp_widget_factory->widgets as $key => $widget_object ) { - if ( $widget_object->id_base === $id_base ) { - return $key; - } - } - - return ''; - } -} - -if ( ! function_exists( 'gutenberg_get_widget_object' ) ) { - /** - * Returns the registered WP_Widget object for the given widget type. - * - * Belongs in WP_Widget_Factory when merged to Core. - * - * Can be removed when minimum WordPress version is 5.8. - * - * @since 10.2.0 - * - * @param string $id_base Widget type ID. - * @return WP_Widget|null - */ - function gutenberg_get_widget_object( $id_base ) { - global $wp_widget_factory; - - $key = gutenberg_get_widget_key( $id_base ); - if ( ! $key ) { - return null; - } - - return $wp_widget_factory->widgets[ $key ]; - } -} diff --git a/lib/widgets-customize.php b/lib/widgets-customize.php deleted file mode 100644 index fce4d6dc57680..0000000000000 --- a/lib/widgets-customize.php +++ /dev/null @@ -1,182 +0,0 @@ -sections() as $section ) { - if ( $section instanceof WP_Customize_Sidebar_Section ) { - $section->description = ''; - } - } - foreach ( $manager->controls() as $control ) { - if ( - $control instanceof WP_Widget_Area_Customize_Control || - $control instanceof WP_Widget_Form_Customize_Control - ) { - $manager->remove_control( $control->id ); - } - } - - foreach ( $wp_registered_sidebars as $sidebar_id => $sidebar ) { - $manager->add_setting( - "sidebars_widgets[$sidebar_id]", - array( - 'capability' => 'edit_theme_options', - 'transport' => 'postMessage', - ) - ); - - $manager->add_control( - new WP_Sidebar_Block_Editor_Control( - $manager, - "sidebars_widgets[$sidebar_id]", - array( - 'section' => "sidebar-widgets-$sidebar_id", - 'settings' => "sidebars_widgets[$sidebar_id]", - 'sidebar_id' => $sidebar_id, - 'label' => $sidebar['name'], - 'description' => $sidebar['description'], - ) - ) - ); - } -} - -/** - * Swaps the customizer setting's sanitize_callback and sanitize_js_callback - * arguments with our own implementation that adds raw_instance to the sanitized - * value. This is only done if the widget has declared that it supports raw - * instances via the show_instance_in_rest flag. This lets the block editor use - * raw_instance to create blocks. - * - * When merged to Core, these changes should be made to - * WP_Customize_Widgets::sanitize_widget_instance and - * WP_Customize_Widgets::sanitize_widget_js_instance. - * - * @param array $args Array of Customizer setting arguments. - * @param string $id Widget setting ID. - */ -function gutenberg_widgets_customize_add_unstable_instance( $args, $id ) { - if ( gutenberg_use_widgets_block_editor() && preg_match( '/^widget_(?P.+?)(?:\[(?P\d+)\])?$/', $id, $matches ) ) { - $id_base = $matches['id_base']; - - $args['sanitize_callback'] = function( $value ) use ( $id_base ) { - global $wp_customize; - - if ( isset( $value['raw_instance'] ) ) { - $widget_object = gutenberg_get_widget_object( $id_base ); - if ( ! empty( $widget_object->show_instance_in_rest ) ) { - return $value['raw_instance']; - } - } - - return $wp_customize->widgets->sanitize_widget_instance( $value ); - }; - - $args['sanitize_js_callback'] = function( $value ) use ( $id_base ) { - global $wp_customize; - - $sanitized_value = $wp_customize->widgets->sanitize_widget_js_instance( $value ); - - $widget_object = gutenberg_get_widget_object( $id_base ); - if ( ! empty( $widget_object->show_instance_in_rest ) ) { - $sanitized_value['raw_instance'] = (object) $value; - } - - return $sanitized_value; - }; - } - - return $args; -} - -/** - * Initialize the Gutenberg customize widgets page. - */ -function gutenberg_customize_widgets_init() { - if ( ! gutenberg_use_widgets_block_editor() ) { - return; - } - - $customizer_context = new WP_Block_Editor_Context(); - $settings = array_merge( - gutenberg_get_default_block_editor_settings(), - gutenberg_get_legacy_widget_settings() - ); - - // This purposefully does not rely on apply_filters( 'block_editor_settings', $settings, null ); - // Applying that filter would bring over multitude of features from the post editor, some of which - // may be undesirable. Instead of using that filter, we simply pick just the settings that are needed. - $settings = gutenberg_experimental_global_styles_settings( $settings ); - $settings = gutenberg_extend_block_editor_styles( $settings ); - - gutenberg_initialize_editor( - 'widgets_customizer', - 'customize-widgets', - array( - 'editor_settings' => $settings, - ) - ); - - wp_add_inline_script( - 'wp-blocks', - sprintf( 'wp.blocks.setCategories( %s );', wp_json_encode( gutenberg_get_block_categories( $customizer_context ) ) ), - 'after' - ); - - wp_enqueue_script( 'wp-customize-widgets' ); - wp_enqueue_style( 'wp-customize-widgets' ); - wp_enqueue_script( 'wp-format-library' ); - wp_enqueue_style( 'wp-format-library' ); - do_action( 'enqueue_block_editor_assets' ); -} - -/** - * Tells the script loader to load the scripts and styles of custom block on widgets editor screen. - * - * @param bool $is_block_editor_screen Current decision about loading block assets. - * @return bool Filtered decision about loading block assets. - */ -function gutenberg_widgets_customize_load_block_editor_scripts_and_styles( $is_block_editor_screen ) { - if ( ! gutenberg_use_widgets_block_editor() ) { - return $is_block_editor_screen; - } - - if ( ! is_callable( 'get_current_screen' ) ) { - return $is_block_editor_screen; - } - - $current_screen = get_current_screen(); - if ( is_null( $current_screen ) ) { - return $is_block_editor_screen; - } - - return 'customize' === $current_screen->base ? true : $is_block_editor_screen; -} - -// Test for wp_use_widgets_block_editor(), as the existence of this in core -// implies that the Customizer already supports the widgets block editor. -if ( ! function_exists( 'wp_use_widgets_block_editor' ) ) { - add_action( 'customize_register', 'gutenberg_widgets_customize_register' ); - add_filter( 'widget_customizer_setting_args', 'gutenberg_widgets_customize_add_unstable_instance', 10, 2 ); - add_action( 'customize_controls_enqueue_scripts', 'gutenberg_customize_widgets_init' ); - add_filter( 'should_load_block_editor_scripts_and_styles', 'gutenberg_widgets_customize_load_block_editor_scripts_and_styles' ); -} diff --git a/lib/widgets-page.php b/lib/widgets-page.php deleted file mode 100644 index 067317a74299a..0000000000000 --- a/lib/widgets-page.php +++ /dev/null @@ -1,206 +0,0 @@ - -
-
- 'body { font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif }', - '__unstableType' => 'core', - ), - ); - if ( $editor_styles && current_theme_supports( 'editor-styles' ) ) { - foreach ( $editor_styles as $style ) { - if ( preg_match( '~^(https?:)?//~', $style ) ) { - $response = wp_remote_get( $style ); - if ( ! is_wp_error( $response ) ) { - $styles[] = array( - 'css' => wp_remote_retrieve_body( $response ), - '__unstableType' => 'theme', - ); - } - } else { - $file = get_theme_file_path( $style ); - if ( is_file( $file ) ) { - $styles[] = array( - 'css' => file_get_contents( $file ), - 'baseURL' => get_theme_file_uri( $style ), - '__unstableType' => 'theme', - ); - } - } - } - } - - return $styles; -} - -/** - * Initialize the Gutenberg widgets page. - * - * @since 5.2.0 - * - * @param string $hook Page. - */ -function gutenberg_widgets_init( $hook ) { - if ( ! in_array( $hook, array( 'appearance_page_gutenberg-widgets' ), true ) ) { - return; - } - - add_filter( 'admin_body_class', 'gutenberg_widgets_editor_add_admin_body_classes' ); - - $widgets_editor_context = new WP_Block_Editor_Context(); - $settings = array_merge( - gutenberg_get_default_block_editor_settings(), - gutenberg_get_legacy_widget_settings(), - array( 'styles' => gutenberg_get_block_editor_theme_styles() ) - ); - - // This purposefully does not rely on apply_filters( 'block_editor_settings', $settings, null ); - // Applying that filter would bring over multitude of features from the post editor, some of which - // may be undesirable. Instead of using that filter, we simply pick just the settings that are needed. - $settings = gutenberg_experimental_global_styles_settings( $settings ); - $settings = gutenberg_extend_block_editor_styles( $settings ); - - gutenberg_initialize_editor( - 'widgets_editor', - 'edit-widgets', - array( - 'preload_paths' => array( - array( '/wp/v2/media', 'OPTIONS' ), - '/wp/v2/sidebars?context=edit&per_page=-1', - '/wp/v2/widgets?context=edit&per_page=-1&_embed=about', - ), - 'editor_settings' => $settings, - ) - ); - - wp_add_inline_script( - 'wp-blocks', - sprintf( 'wp.blocks.setCategories( %s );', wp_json_encode( gutenberg_get_block_categories( $widgets_editor_context ) ) ), - 'after' - ); - - wp_enqueue_script( 'wp-edit-widgets' ); - wp_enqueue_script( 'admin-widgets' ); - wp_enqueue_script( 'wp-format-library' ); - wp_enqueue_style( 'wp-edit-widgets' ); - wp_enqueue_style( 'wp-format-library' ); - do_action( 'enqueue_block_editor_assets' ); -} -add_action( 'admin_enqueue_scripts', 'gutenberg_widgets_init' ); - -/** - * Tells the script loader to load the scripts and styles of custom block on widgets editor screen. - * - * @param bool $is_block_editor_screen Current decision about loading block assets. - * @return bool Filtered decision about loading block assets. - */ -function gutenberg_widgets_editor_load_block_editor_scripts_and_styles( $is_block_editor_screen ) { - if ( is_callable( 'get_current_screen' ) && get_current_screen() && 'appearance_page_gutenberg-widgets' === get_current_screen()->base ) { - return true; - } - - return $is_block_editor_screen; -} - -add_filter( 'should_load_block_editor_scripts_and_styles', 'gutenberg_widgets_editor_load_block_editor_scripts_and_styles' ); - -/** - * Adds admin classes necessary for the block-based widgets screen. - * - * - Adds `block-editor-page` editor body class to allow directly styling the admin pages that are based on the block editor. - * - Shows responsive embeds correctly on the widgets screen by adding the `wp-embed-responsive` class. - * - * @param string $classes existing admin body classes. - * - * @return string admin body classes including the `block-editor-page` and `wp-embed-responsive` classes. - */ -function gutenberg_widgets_editor_add_admin_body_classes( $classes ) { - return "$classes block-editor-page wp-embed-responsive"; -} - -/** - * Emulates the Widgets screen `admin_print_styles` when at the block editor - * screen. - */ -function gutenberg_block_editor_admin_print_styles() { - if ( is_callable( 'get_current_screen' ) && 'appearance_page_gutenberg-widgets' === get_current_screen()->base ) { - /** This action is documented in wp-admin/admin-footer.php */ - // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores - do_action( 'admin_print_styles-widgets.php' ); - } -} -add_action( 'admin_print_styles', 'gutenberg_block_editor_admin_print_styles' ); - -/** - * Emulates the Widgets screen `admin_print_scripts` when at the block editor - * screen. - */ -function gutenberg_block_editor_admin_print_scripts() { - if ( is_callable( 'get_current_screen' ) && 'appearance_page_gutenberg-widgets' === get_current_screen()->base ) { - /** This action is documented in wp-admin/includes/ajax-actions.php */ - do_action( 'load-widgets.php' ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores - /** This action is documented in wp-admin/includes/ajax-actions.php */ - do_action( 'widgets.php' ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores - /** This action is documented in wp-admin/widgets.php */ - do_action( 'sidebar_admin_setup' ); - // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores - do_action( 'admin_print_scripts-widgets.php' ); - } -} -add_action( 'admin_print_scripts', 'gutenberg_block_editor_admin_print_scripts' ); - -/** - * Emulates the Widgets screen `admin_print_footer_scripts` when at the block - * editor screen. - */ -function gutenberg_block_editor_admin_print_footer_scripts() { - if ( is_callable( 'get_current_screen' ) && 'appearance_page_gutenberg-widgets' === get_current_screen()->base ) { - /** This action is documented in wp-admin/admin-footer.php */ - // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores - do_action( 'admin_print_footer_scripts-widgets.php' ); - } -} -add_action( 'admin_print_footer_scripts', 'gutenberg_block_editor_admin_print_footer_scripts' ); - -/** - * Emulates the Widgets screen `admin_footer` when at the block editor screen. - */ -function gutenberg_block_editor_admin_footer() { - if ( is_callable( 'get_current_screen' ) && 'appearance_page_gutenberg-widgets' === get_current_screen()->base ) { - /** This action is documented in wp-admin/admin-footer.php */ - // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores - do_action( 'admin_footer-widgets.php' ); - } -} -add_action( 'admin_footer', 'gutenberg_block_editor_admin_footer' ); diff --git a/lib/widgets.php b/lib/widgets.php deleted file mode 100644 index a2cc51fa293d5..0000000000000 --- a/lib/widgets.php +++ /dev/null @@ -1,164 +0,0 @@ -is_block_editor() || - 'appearance_page_gutenberg-widgets' === $screen->id || - ( function_exists( 'gutenberg_is_edit_site_page' ) && gutenberg_is_edit_site_page( $screen->id ) ) - ); -} - -/** - * Whether or not to use the block editor to manage widgets. Defaults to true - * unless a theme has removed support for widgets-block-editor or a plugin has - * filtered the return value of this function. - * - * @return boolean Whether or not to use the block editor to manage widgets. - */ -function gutenberg_use_widgets_block_editor() { - /** - * Filters whether or not to use the block editor to manage widgets. - * - * @param boolean $use_widgets_block_editor Whether or not to use the block editor to manage widgets. - */ - return apply_filters( - 'gutenberg_use_widgets_block_editor', - get_theme_support( 'widgets-block-editor' ) - ); -} - -/** - * Returns the settings required by legacy widgets blocks. - * - * @return array Legacy widget settings. - */ -function gutenberg_get_legacy_widget_settings() { - $settings = array(); - - $widget_types_to_hide_from_legacy_widget_block = apply_filters( - 'widget_types_to_hide_from_legacy_widget_block', - array( - 'pages', - 'calendar', - 'archives', - 'media_audio', - 'media_image', - 'media_gallery', - 'media_video', - 'search', - 'text', - 'categories', - 'recent-posts', - 'recent-comments', - 'rss', - 'tag_cloud', - 'custom_html', - 'block', - ) - ); - - $settings['widgetTypesToHideFromLegacyWidgetBlock'] = $widget_types_to_hide_from_legacy_widget_block; - - return $settings; -} - -/** - * Overrides dynamic_sidebar_params to make sure Blocks are not wrapped in
tag. - * - * @param array $arg Dynamic sidebar params. - * @return array Updated dynamic sidebar params. - */ -function gutenberg_override_sidebar_params_for_block_widget( $arg ) { - if ( 'Block' === $arg[0]['widget_name'] ) { - $arg[0]['before_form'] = ''; - $arg[0]['before_widget_content'] = '
'; - $arg[0]['after_widget_content'] = '
'; - $arg[0]['after_form'] = '
'; - } - - return $arg; -} - -/** - * Registers the WP_Widget_Block widget. - */ -function gutenberg_register_block_widget() { - global $pagenow; - - register_widget( 'WP_Widget_Block' ); - - // By default every widget on widgets.php is wrapped with a
. This - // means that you can sometimes end up with invalid HTML, e.g. when one of - // the widgets is a Search block. To fix the problem, let's add a filter - // that moves the form below the actual widget content. - if ( 'widgets.php' === $pagenow ) { - add_filter( - 'dynamic_sidebar_params', - 'gutenberg_override_sidebar_params_for_block_widget' - ); - } -} - -add_action( 'widgets_init', 'gutenberg_register_block_widget' ); - -/** - * Sets show_instance_in_rest to true on all of the core WP_Widget subclasses. - * When merged to Core, this property should be added to WP_Widget and set to - * true on each WP_Widget subclass. - */ -function gutenberg_set_show_instance_in_rest_on_core_widgets() { - global $wp_widget_factory; - - $core_widgets = array( - 'WP_Widget_Pages', - 'WP_Widget_Calendar', - 'WP_Widget_Archives', - 'WP_Widget_Media_Audio', - 'WP_Widget_Media_Image', - 'WP_Widget_Media_Gallery', - 'WP_Widget_Media_Video', - 'WP_Widget_Meta', - 'WP_Widget_Search', - 'WP_Widget_Text', - 'WP_Widget_Categories', - 'WP_Widget_Recent_Posts', - 'WP_Widget_Recent_Comments', - 'WP_Widget_RSS', - 'WP_Widget_Tag_Cloud', - 'WP_Nav_Menu_Widget', - 'WP_Widget_Custom_HTML', - ); - - foreach ( $core_widgets as $widget ) { - if ( isset( $wp_widget_factory->widgets[ $widget ] ) ) { - $wp_widget_factory->widgets[ $widget ]->show_instance_in_rest = true; - } - } -} - -if ( ! function_exists( 'wp_use_widgets_block_editor' ) ) { - add_action( 'widgets_init', 'gutenberg_set_show_instance_in_rest_on_core_widgets' ); -} diff --git a/package-lock.json b/package-lock.json index 67aa18d175ba0..d64c7fea35c22 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,14 +1,17 @@ { "name": "gutenberg", - "version": "11.2.0-rc.1", + "version": "13.3.0-rc.1", "lockfileVersion": 1, "requires": true, "dependencies": { "@actions/core": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.4.0.tgz", - "integrity": "sha512-CGx2ilGq5i7zSLgiiGUtBCxhRRxibJYU6Fim0Q1Wg2aQL2LTnF27zbqZOrxfvFQ55eSBW0L8uVStgtKMpa0Qlg==", - "dev": true + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.8.0.tgz", + "integrity": "sha512-XirM+Zo/PFlA+1h+i4bkfvagujta+LIM2AOSzPbt8JqXbbuxb1HTB+FqIyaKmue9yiCx/JIJY6pXsOl3+T8JGw==", + "dev": true, + "requires": { + "@actions/http-client": "^1.0.11" + } }, "@actions/github": { "version": "5.0.0", @@ -91,73 +94,56 @@ } }, "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", + "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", "requires": { - "@babel/highlight": "^7.10.4" + "@babel/highlight": "^7.16.0" } }, "@babel/compat-data": { - "version": "7.13.11", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.13.11.tgz", - "integrity": "sha512-BwKEkO+2a67DcFeS3RLl0Z3Gs2OvdXewuWjc1Hfokhb5eQWP9YRYH1/+VrVZvql2CfjOiNGqSAFOYt4lsqTHzg==" + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.0.tgz", + "integrity": "sha512-DGjt2QZse5SGd9nfOSqO4WLJ8NN/oHkijbXbPrxuoJO3oIPJL3TciZs9FX+cOHNiY9E9l0opL8g7BmLe3T+9ew==" }, "@babel/core": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.13.10.tgz", - "integrity": "sha512-bfIYcT0BdKeAZrovpMqX2Mx5NrgAckGbwT982AkdS5GNfn3KMGiprlBAtmBcFZRUmpaufS6WZFP8trvx8ptFDw==", - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.13.9", - "@babel/helper-compilation-targets": "^7.13.10", - "@babel/helper-module-transforms": "^7.13.0", - "@babel/helpers": "^7.13.10", - "@babel/parser": "^7.13.10", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.0", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.0.tgz", + "integrity": "sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ==", + "requires": { + "@babel/code-frame": "^7.16.0", + "@babel/generator": "^7.16.0", + "@babel/helper-compilation-targets": "^7.16.0", + "@babel/helper-module-transforms": "^7.16.0", + "@babel/helpers": "^7.16.0", + "@babel/parser": "^7.16.0", + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.1.2", - "lodash": "^4.17.19", "semver": "^6.3.0", "source-map": "^0.5.0" }, "dependencies": { - "@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "requires": { - "@babel/highlight": "^7.12.13" - } - }, "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", "requires": { "safe-buffer": "~5.1.1" } }, "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "requires": { "ms": "2.1.2" } }, - "json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "requires": { - "minimist": "^1.2.5" - } - }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -170,41 +156,70 @@ } } }, + "@babel/eslint-parser": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.16.0.tgz", + "integrity": "sha512-c+AsYOHjI+FgCa+ifLd8sDXp4U4mjkfFgL9NdQWhuA731kAUJs0WdJIXET4A14EJAR9Jv9FFF/MzPWJfV9Oirw==", + "dev": true, + "requires": { + "eslint-scope": "^5.1.1", + "eslint-visitor-keys": "^2.1.0", + "semver": "^6.3.0" + }, + "dependencies": { + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, "@babel/generator": { - "version": "7.13.9", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.9.tgz", - "integrity": "sha512-mHOOmY0Axl/JCTkxTU6Lf5sWOg/v8nUa+Xkt4zMTftX0wqmb6Sh7J8gvcehBw7q0AhrhAR+FDacKjCZ2X8K+Sw==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.0.tgz", + "integrity": "sha512-RR8hUCfRQn9j9RPKEVXo9LiwoxLPYn6hNZlvUOR8tSnaxlD0p0+la00ZP9/SnRt6HchKr+X0fO2r8vrETiJGew==", "requires": { - "@babel/types": "^7.13.0", + "@babel/types": "^7.16.0", "jsesc": "^2.5.1", "source-map": "^0.5.0" } }, "@babel/helper-annotate-as-pure": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz", - "integrity": "sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.0.tgz", + "integrity": "sha512-ItmYF9vR4zA8cByDocY05o0LGUkp1zhbTQOH1NFyl5xXEqlTJQCEJjieriw+aFpxo16swMxUnUiKS7a/r4vtHg==", "requires": { - "@babel/types": "^7.12.13" + "@babel/types": "^7.16.0" } }, "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.12.13.tgz", - "integrity": "sha512-CZOv9tGphhDRlVjVkAgm8Nhklm9RzSmWpX2my+t7Ua/KT616pEzXsQCjinzvkRvHWJ9itO4f296efroX23XCMA==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.0.tgz", + "integrity": "sha512-9KuleLT0e77wFUku6TUkqZzCEymBdtuQQ27MhEKzf9UOOJu3cYj98kyaDAzxpC7lV6DGiZFuC8XqDsq8/Kl6aQ==", "requires": { - "@babel/helper-explode-assignable-expression": "^7.12.13", - "@babel/types": "^7.12.13" + "@babel/helper-explode-assignable-expression": "^7.16.0", + "@babel/types": "^7.16.0" } }, "@babel/helper-compilation-targets": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.10.tgz", - "integrity": "sha512-/Xju7Qg1GQO4mHZ/Kcs6Au7gfafgZnwm+a7sy/ow/tV1sHeraRUHbjdat8/UvDor4Tez+siGKDk6zIKtCPKVJA==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.0.tgz", + "integrity": "sha512-S7iaOT1SYlqK0sQaCi21RX4+13hmdmnxIEAnQUB/eh7GeAnRjOUgTYpLkUOiRXzD+yog1JxP0qyAQZ7ZxVxLVg==", "requires": { - "@babel/compat-data": "^7.13.8", - "@babel/helper-validator-option": "^7.12.17", - "browserslist": "^4.14.5", + "@babel/compat-data": "^7.16.0", + "@babel/helper-validator-option": "^7.14.5", + "browserslist": "^4.16.6", "semver": "^6.3.0" }, "dependencies": { @@ -216,30 +231,31 @@ } }, "@babel/helper-create-class-features-plugin": { - "version": "7.13.11", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.13.11.tgz", - "integrity": "sha512-ays0I7XYq9xbjCSvT+EvysLgfc3tOkwCULHjrnscGT3A9qD4sk3wXnJ3of0MAWsWGjdinFvajHU2smYuqXKMrw==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.0.tgz", + "integrity": "sha512-XLwWvqEaq19zFlF5PTgOod4bUA+XbkR4WLQBct1bkzmxJGB0ZEJaoKF4c8cgH9oBtCDuYJ8BP5NB9uFiEgO5QA==", "requires": { - "@babel/helper-function-name": "^7.12.13", - "@babel/helper-member-expression-to-functions": "^7.13.0", - "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/helper-replace-supers": "^7.13.0", - "@babel/helper-split-export-declaration": "^7.12.13" + "@babel/helper-annotate-as-pure": "^7.16.0", + "@babel/helper-function-name": "^7.16.0", + "@babel/helper-member-expression-to-functions": "^7.16.0", + "@babel/helper-optimise-call-expression": "^7.16.0", + "@babel/helper-replace-supers": "^7.16.0", + "@babel/helper-split-export-declaration": "^7.16.0" } }, "@babel/helper-create-regexp-features-plugin": { - "version": "7.12.17", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.17.tgz", - "integrity": "sha512-p2VGmBu9oefLZ2nQpgnEnG0ZlRPvL8gAGvPUMQwUdaE8k49rOMuZpOwdQoy5qJf6K8jL3bcAMhVUlHAjIgJHUg==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.16.0.tgz", + "integrity": "sha512-3DyG0zAFAZKcOp7aVr33ddwkxJ0Z0Jr5V99y3I690eYLpukJsJvAbzTy1ewoCqsML8SbIrjH14Jc/nSQ4TvNPA==", "requires": { - "@babel/helper-annotate-as-pure": "^7.12.13", + "@babel/helper-annotate-as-pure": "^7.16.0", "regexpu-core": "^4.7.1" } }, "@babel/helper-define-polyfill-provider": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.1.5.tgz", - "integrity": "sha512-nXuzCSwlJ/WKr8qxzW816gwyT6VZgiJG17zR40fou70yfAcqjoNyTLl/DQ+FExw5Hx5KNqshmN8Ldl/r2N7cTg==", + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.4.tgz", + "integrity": "sha512-OrpPZ97s+aPi6h2n1OXzdhVis1SGSsMU2aMHgLcOKfsp4/v1NWpx3CWT3lBj5eeBq9cDkPkh+YCfdF7O12uNDQ==", "requires": { "@babel/helper-compilation-targets": "^7.13.0", "@babel/helper-module-imports": "^7.12.13", @@ -252,9 +268,9 @@ }, "dependencies": { "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "requires": { "ms": "2.1.2" } @@ -264,11 +280,6 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" - }, "resolve": { "version": "1.20.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", @@ -285,170 +296,175 @@ } } }, + "@babel/helper-environment-visitor": { + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.5.tgz", + "integrity": "sha512-ODQyc5AnxmZWm/R2W7fzhamOk1ey8gSguo5SGvF0zcB3uUzRpTRmM/jmLSm9bDMyPlvbyJ+PwPEK0BWIoZ9wjg==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, "@babel/helper-explode-assignable-expression": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.13.0.tgz", - "integrity": "sha512-qS0peLTDP8kOisG1blKbaoBg/o9OSa1qoumMjTK5pM+KDTtpxpsiubnCGP34vK8BXGcb2M9eigwgvoJryrzwWA==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.0.tgz", + "integrity": "sha512-Hk2SLxC9ZbcOhLpg/yMznzJ11W++lg5GMbxt1ev6TXUiJB0N42KPC+7w8a+eWGuqDnUYuwStJoZHM7RgmIOaGQ==", "requires": { - "@babel/types": "^7.13.0" + "@babel/types": "^7.16.0" } }, "@babel/helper-function-name": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", - "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.0.tgz", + "integrity": "sha512-BZh4mEk1xi2h4HFjWUXRQX5AEx4rvaZxHgax9gcjdLWdkjsY7MKt5p0otjsg5noXw+pB+clMCjw+aEVYADMjog==", "requires": { - "@babel/helper-get-function-arity": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/types": "^7.12.13" + "@babel/helper-get-function-arity": "^7.16.0", + "@babel/template": "^7.16.0", + "@babel/types": "^7.16.0" } }, "@babel/helper-get-function-arity": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", - "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.0.tgz", + "integrity": "sha512-ASCquNcywC1NkYh/z7Cgp3w31YW8aojjYIlNg4VeJiHkqyP4AzIvr4qx7pYDb4/s8YcsZWqqOSxgkvjUz1kpDQ==", "requires": { - "@babel/types": "^7.12.13" + "@babel/types": "^7.16.0" } }, "@babel/helper-hoist-variables": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.0.tgz", - "integrity": "sha512-0kBzvXiIKfsCA0y6cFEIJf4OdzfpRuNk4+YTeHZpGGc666SATFKTz6sRncwFnQk7/ugJ4dSrCj6iJuvW4Qwr2g==", - "dev": true, + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.0.tgz", + "integrity": "sha512-1AZlpazjUR0EQZQv3sgRNfM9mEVWPK3M6vlalczA+EECcPz3XPh6VplbErL5UoMpChhSck5wAJHthlj1bYpcmg==", "requires": { - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.0" + "@babel/types": "^7.16.0" } }, "@babel/helper-member-expression-to-functions": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz", - "integrity": "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.0.tgz", + "integrity": "sha512-bsjlBFPuWT6IWhl28EdrQ+gTvSvj5tqVP5Xeftp07SEuz5pLnsXZuDkDD3Rfcxy0IsHmbZ+7B2/9SHzxO0T+sQ==", "requires": { - "@babel/types": "^7.13.12" + "@babel/types": "^7.16.0" } }, "@babel/helper-module-imports": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz", - "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz", + "integrity": "sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==", "requires": { - "@babel/types": "^7.13.12" + "@babel/types": "^7.16.0" } }, "@babel/helper-module-transforms": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.13.12.tgz", - "integrity": "sha512-7zVQqMO3V+K4JOOj40kxiCrMf6xlQAkewBB0eu2b03OO/Q21ZutOzjpfD79A5gtE/2OWi1nv625MrDlGlkbknQ==", - "requires": { - "@babel/helper-module-imports": "^7.13.12", - "@babel/helper-replace-supers": "^7.13.12", - "@babel/helper-simple-access": "^7.13.12", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/helper-validator-identifier": "^7.12.11", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.12" + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.0.tgz", + "integrity": "sha512-My4cr9ATcaBbmaEa8M0dZNA74cfI6gitvUAskgDtAFmAqyFKDSHQo5YstxPbN+lzHl2D9l/YOEFqb2mtUh4gfA==", + "requires": { + "@babel/helper-module-imports": "^7.16.0", + "@babel/helper-replace-supers": "^7.16.0", + "@babel/helper-simple-access": "^7.16.0", + "@babel/helper-split-export-declaration": "^7.16.0", + "@babel/helper-validator-identifier": "^7.15.7", + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0" } }, "@babel/helper-optimise-call-expression": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", - "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.0.tgz", + "integrity": "sha512-SuI467Gi2V8fkofm2JPnZzB/SUuXoJA5zXe/xzyPP2M04686RzFKFHPK6HDVN6JvWBIEW8tt9hPR7fXdn2Lgpw==", "requires": { - "@babel/types": "^7.12.13" + "@babel/types": "^7.16.0" } }, "@babel/helper-plugin-utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", - "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==" + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" }, "@babel/helper-remap-async-to-generator": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.13.0.tgz", - "integrity": "sha512-pUQpFBE9JvC9lrQbpX0TmeNIy5s7GnZjna2lhhcHC7DzgBs6fWn722Y5cfwgrtrqc7NAJwMvOa0mKhq6XaE4jg==", - "dev": true, + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.0.tgz", + "integrity": "sha512-MLM1IOMe9aQBqMWxcRw8dcb9jlM86NIw7KA0Wri91Xkfied+dE0QuBFSBjMNvqzmS0OSIDsMNC24dBEkPUi7ew==", "requires": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-wrap-function": "^7.13.0", - "@babel/types": "^7.13.0" + "@babel/helper-annotate-as-pure": "^7.16.0", + "@babel/helper-wrap-function": "^7.16.0", + "@babel/types": "^7.16.0" } }, "@babel/helper-replace-supers": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz", - "integrity": "sha512-Gz1eiX+4yDO8mT+heB94aLVNCL+rbuT2xy4YfyNqu8F+OI6vMvJK891qGBTqL9Uc8wxEvRW92Id6G7sDen3fFw==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.0.tgz", + "integrity": "sha512-TQxuQfSCdoha7cpRNJvfaYxxxzmbxXw/+6cS7V02eeDYyhxderSoMVALvwupA54/pZcOTtVeJ0xccp1nGWladA==", "requires": { - "@babel/helper-member-expression-to-functions": "^7.13.12", - "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.12" + "@babel/helper-member-expression-to-functions": "^7.16.0", + "@babel/helper-optimise-call-expression": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0" } }, "@babel/helper-simple-access": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz", - "integrity": "sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.0.tgz", + "integrity": "sha512-o1rjBT/gppAqKsYfUdfHq5Rk03lMQrkPHG1OWzHWpLgVXRH4HnMM9Et9CVdIqwkCQlobnGHEJMsgWP/jE1zUiw==", "requires": { - "@babel/types": "^7.13.12" + "@babel/types": "^7.16.0" } }, "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz", - "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz", + "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==", "requires": { - "@babel/types": "^7.12.1" + "@babel/types": "^7.16.0" } }, "@babel/helper-split-export-declaration": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", - "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.0.tgz", + "integrity": "sha512-0YMMRpuDFNGTHNRiiqJX19GjNXA4H0E8jZ2ibccfSxaCogbm3am5WN/2nQNj0YnQwGWM1J06GOcQ2qnh3+0paw==", "requires": { - "@babel/types": "^7.12.13" + "@babel/types": "^7.16.0" } }, "@babel/helper-validator-identifier": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", - "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==" + "version": "7.15.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", + "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==" }, "@babel/helper-validator-option": { - "version": "7.12.17", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz", - "integrity": "sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==" + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", + "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==" }, "@babel/helper-wrap-function": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.13.0.tgz", - "integrity": "sha512-1UX9F7K3BS42fI6qd2A4BjKzgGjToscyZTdp1DjknHLCIvpgne6918io+aL5LXFcER/8QWiwpoY902pVEqgTXA==", - "dev": true, + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.0.tgz", + "integrity": "sha512-VVMGzYY3vkWgCJML+qVLvGIam902mJW0FvT7Avj1zEe0Gn7D93aWdLblYARTxEw+6DhZmtzhBM2zv0ekE5zg1g==", "requires": { - "@babel/helper-function-name": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.0" + "@babel/helper-function-name": "^7.16.0", + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0" } }, "@babel/helpers": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.13.10.tgz", - "integrity": "sha512-4VO883+MWPDUVRF3PhiLBUFHoX/bsLTGFpFK/HqvvfBZz2D57u9XzPVNFVBTc0PW/CWR9BXTOKt8NF4DInUHcQ==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.0.tgz", + "integrity": "sha512-dVRM0StFMdKlkt7cVcGgwD8UMaBfWJHl3A83Yfs8GQ3MO0LHIIIMvK7Fa0RGOGUQ10qikLaX6D7o5htcQWgTMQ==", "requires": { - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.0" + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0" } }, "@babel/highlight": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", - "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.0.tgz", + "integrity": "sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g==", "requires": { - "@babel/helper-validator-identifier": "^7.12.11", + "@babel/helper-validator-identifier": "^7.15.7", "chalk": "^2.0.0", "js-tokens": "^4.0.0" }, @@ -466,245 +482,154 @@ } }, "@babel/parser": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.12.tgz", - "integrity": "sha512-4T7Pb244rxH24yR116LAuJ+adxXXnHhZaLJjegJVKSdoNCe4x1eDBaud5YIcQFcqzsaD5BHvJw5BQ0AZapdCRw==" + "version": "7.16.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.2.tgz", + "integrity": "sha512-RUVpT0G2h6rOZwqLDTrKk7ksNv7YpAilTnYe1/Q+eDjxEceRMKVWbCsX7t8h6C1qCFi/1Y8WZjcEPBAFG27GPw==" + }, + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.16.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.2.tgz", + "integrity": "sha512-h37CvpLSf8gb2lIJ2CgC3t+EjFbi0t8qS7LCS1xcJIlEXE4czlofwaW7W1HA8zpgOCzI9C1nmoqNR1zWkk0pQg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } }, "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.13.12.tgz", - "integrity": "sha512-d0u3zWKcoZf379fOeJdr1a5WPDny4aOFZ6hlfKivgK0LY7ZxNfoaHL2fWwdGtHyVvra38FC+HVYkO+byfSA8AQ==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.0.tgz", + "integrity": "sha512-4tcFwwicpWTrpl9qjf7UsoosaArgImF85AxqCRZlgc3IQDvkUHjJpruXAL58Wmj+T6fypWTC/BakfEkwIL/pwA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", - "@babel/plugin-proposal-optional-chaining": "^7.13.12" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", + "@babel/plugin-proposal-optional-chaining": "^7.16.0" } }, "@babel/plugin-proposal-async-generator-functions": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.13.8.tgz", - "integrity": "sha512-rPBnhj+WgoSmgq+4gQUtXx/vOcU+UYtjy1AA/aeD61Hwj410fwYyqfUcRP3lR8ucgliVJL/G7sXcNUecC75IXA==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.0.tgz", + "integrity": "sha512-nyYmIo7ZqKsY6P4lnVmBlxp9B3a96CscbLotlsNuktMHahkDwoPYEjXrZHU0Tj844Z9f1IthVxQln57mhkcExw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-remap-async-to-generator": "^7.13.0", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-remap-async-to-generator": "^7.16.0", "@babel/plugin-syntax-async-generators": "^7.8.4" } }, "@babel/plugin-proposal-class-properties": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.13.0.tgz", - "integrity": "sha512-KnTDjFNC1g+45ka0myZNvSBFLhNCLN+GeGYLDEA8Oq7MZ6yMgfLoIRh86GRT0FjtJhZw8JyUskP9uvj5pHM9Zg==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.0.tgz", + "integrity": "sha512-mCF3HcuZSY9Fcx56Lbn+CGdT44ioBMMvjNVldpKtj8tpniETdLjnxdHI1+sDWXIM1nNt+EanJOZ3IG9lzVjs7A==", "requires": { - "@babel/helper-create-class-features-plugin": "^7.13.0", - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/helper-create-class-features-plugin": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5" } }, - "@babel/plugin-proposal-decorators": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.14.5.tgz", - "integrity": "sha512-LYz5nvQcvYeRVjui1Ykn28i+3aUiXwQ/3MGoEy0InTaz1pJo/lAzmIDXX+BQny/oufgHzJ6vnEEiXQ8KZjEVFg==", + "@babel/plugin-proposal-class-static-block": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.16.0.tgz", + "integrity": "sha512-mAy3sdcY9sKAkf3lQbDiv3olOfiLqI51c9DR9b19uMoR2Z6r5pmGl7dfNFqEvqOyqbf1ta4lknK4gc5PJn3mfA==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-create-class-features-plugin": "^7.16.0", "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-decorators": "^7.14.5" + "@babel/plugin-syntax-class-static-block": "^7.14.5" + } + }, + "@babel/plugin-proposal-decorators": { + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.16.5.tgz", + "integrity": "sha512-XAiZll5oCdp2Dd2RbXA3LVPlFyIRhhcQy+G34p9ePpl6mjFkbqHAYHovyw2j5mqUrlBf0/+MtOIJ3JGYtz8qaw==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.16.5", + "@babel/helper-plugin-utils": "^7.16.5", + "@babel/plugin-syntax-decorators": "^7.16.5" }, "dependencies": { - "@babel/code-frame": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", - "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.14.5" - } - }, "@babel/generator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", - "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.5.tgz", + "integrity": "sha512-kIvCdjZqcdKqoDbVVdt5R99icaRtrtYhYK/xux5qiWCBmfdvEYMFZ68QCrpE5cbFM1JsuArUNs1ZkuKtTtUcZA==", "dev": true, "requires": { - "@babel/types": "^7.14.5", + "@babel/types": "^7.16.0", "jsesc": "^2.5.1", "source-map": "^0.5.0" } }, - "@babel/helper-annotate-as-pure": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz", - "integrity": "sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==", - "dev": true, - "requires": { - "@babel/types": "^7.14.5" - } - }, "@babel/helper-create-class-features-plugin": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.6.tgz", - "integrity": "sha512-Z6gsfGofTxH/+LQXqYEK45kxmcensbzmk/oi8DmaQytlQCgqNZt9XQF8iqlI/SeXWVjaMNxvYvzaYw+kh42mDg==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-member-expression-to-functions": "^7.14.5", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5" - } - }, - "@babel/helper-function-name": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", - "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", - "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", - "dev": true, - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", - "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.5.tgz", + "integrity": "sha512-NEohnYA7mkB8L5JhU7BLwcBdU3j83IziR9aseMueWGeAjblbul3zzb8UvJ3a1zuBiqCMObzCJHFqKIQE6hTVmg==", "dev": true, "requires": { - "@babel/types": "^7.14.5" + "@babel/helper-annotate-as-pure": "^7.16.0", + "@babel/helper-environment-visitor": "^7.16.5", + "@babel/helper-function-name": "^7.16.0", + "@babel/helper-member-expression-to-functions": "^7.16.5", + "@babel/helper-optimise-call-expression": "^7.16.0", + "@babel/helper-replace-supers": "^7.16.5", + "@babel/helper-split-export-declaration": "^7.16.0" } }, "@babel/helper-member-expression-to-functions": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", - "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", - "dev": true, - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", - "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.5.tgz", + "integrity": "sha512-7fecSXq7ZrLE+TWshbGT+HyCLkxloWNhTbU2QM1NTI/tDqyf0oZiMcEfYtDuUDCo528EOlt39G1rftea4bRZIw==", "dev": true, "requires": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.16.0" } }, "@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.5.tgz", + "integrity": "sha512-59KHWHXxVA9K4HNF4sbHCf+eJeFe0Te/ZFGqBT4OjXhrwvA04sGfaEGsVTdsjoszq0YTP49RC9UKe5g8uN2RwQ==", "dev": true }, "@babel/helper-replace-supers": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", - "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.5.tgz", + "integrity": "sha512-ao3seGVa/FZCMCCNDuBcqnBFSbdr8N2EW35mzojx3TwfIbdPmNK+JV6+2d5bR0Z71W5ocLnQp9en/cTF7pBJiQ==", "dev": true, "requires": { - "@babel/helper-member-expression-to-functions": "^7.14.5", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", - "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", - "dev": true, - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", - "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", - "dev": true - }, - "@babel/highlight": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.14.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" + "@babel/helper-environment-visitor": "^7.16.5", + "@babel/helper-member-expression-to-functions": "^7.16.5", + "@babel/helper-optimise-call-expression": "^7.16.0", + "@babel/traverse": "^7.16.5", + "@babel/types": "^7.16.0" } }, "@babel/parser": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", - "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.5.tgz", + "integrity": "sha512-+Ce7T5iPNWzfu9C1aB5tN3Lyafs5xb3Ic7vBWyZL2KXT3QSdD1dD3CvgOzPmQKoNNRt6uauc0XwNJTQtXC2/Mw==", "dev": true }, - "@babel/template": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", - "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/parser": "^7.14.5", - "@babel/types": "^7.14.5" - } - }, "@babel/traverse": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", - "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.14.5", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-hoist-variables": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/parser": "^7.14.7", - "@babel/types": "^7.14.5", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.5.tgz", + "integrity": "sha512-FOCODAzqUMROikDYLYxl4nmwiLlu85rNqBML/A5hKRVXG2LV8d0iMqgPzdYTcIpjZEBB7D6UDU9vxRZiriASdQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.0", + "@babel/generator": "^7.16.5", + "@babel/helper-environment-visitor": "^7.16.5", + "@babel/helper-function-name": "^7.16.0", + "@babel/helper-hoist-variables": "^7.16.0", + "@babel/helper-split-export-declaration": "^7.16.0", + "@babel/parser": "^7.16.5", + "@babel/types": "^7.16.0", "debug": "^4.1.0", "globals": "^11.1.0" } }, - "@babel/types": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.14.5", - "to-fast-properties": "^2.0.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dev": true, "requires": { "ms": "2.1.2" @@ -725,122 +650,134 @@ } }, "@babel/plugin-proposal-dynamic-import": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.13.8.tgz", - "integrity": "sha512-ONWKj0H6+wIRCkZi9zSbZtE/r73uOhMVHh256ys0UzfM7I3d4n+spZNWjOnJv2gzopumP2Wxi186vI8N0Y2JyQ==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.0.tgz", + "integrity": "sha512-QGSA6ExWk95jFQgwz5GQ2Dr95cf7eI7TKutIXXTb7B1gCLTCz5hTjFTQGfLFBBiC5WSNi7udNwWsqbbMh1c4yQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3" } }, "@babel/plugin-proposal-export-default-from": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.12.13.tgz", - "integrity": "sha512-idIsBT+DGXdOHL82U+8bwX4goHm/z10g8sGGrQroh+HCRcm7mDv/luaGdWJQMTuCX2FsdXS7X0Nyyzp4znAPJA==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.16.0.tgz", + "integrity": "sha512-kFAhaIbh5qbBwETRNa/cgGmPJ/BicXhIyrZhAkyYhf/Z9LXCTRGO1mvUwczto0Hl1q4YtzP9cRtTKT4wujm38Q==", "requires": { - "@babel/helper-plugin-utils": "^7.12.13", - "@babel/plugin-syntax-export-default-from": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-export-default-from": "^7.16.0" } }, "@babel/plugin-proposal-export-namespace-from": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.13.tgz", - "integrity": "sha512-INAgtFo4OnLN3Y/j0VwAgw3HDXcDtX+C/erMvWzuV9v71r7urb6iyMXu7eM9IgLr1ElLlOkaHjJ0SbCmdOQ3Iw==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.0.tgz", + "integrity": "sha512-CjI4nxM/D+5wCnhD11MHB1AwRSAYeDT+h8gCdcVJZ/OK7+wRzFsf7PFPWVpVpNRkHMmMkQWAHpTq+15IXQ1diA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.12.13", + "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" } }, "@babel/plugin-proposal-json-strings": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.13.8.tgz", - "integrity": "sha512-w4zOPKUFPX1mgvTmL/fcEqy34hrQ1CRcGxdphBc6snDnnqJ47EZDIyop6IwXzAC8G916hsIuXB2ZMBCExC5k7Q==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.0.tgz", + "integrity": "sha512-kouIPuiv8mSi5JkEhzApg5Gn6hFyKPnlkO0a9YSzqRurH8wYzSlf6RJdzluAsbqecdW5pBvDJDfyDIUR/vLxvg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-json-strings": "^7.8.3" } }, "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.13.8.tgz", - "integrity": "sha512-aul6znYB4N4HGweImqKn59Su9RS8lbUIqxtXTOcAGtNIDczoEFv+l1EhmX8rUBp3G1jMjKJm8m0jXVp63ZpS4A==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.0.tgz", + "integrity": "sha512-pbW0fE30sVTYXXm9lpVQQ/Vc+iTeQKiXlaNRZPPN2A2VdlWyAtsUrsQ3xydSlDW00TFMK7a8m3cDTkBF5WnV3Q==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" } }, "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.13.8.tgz", - "integrity": "sha512-iePlDPBn//UhxExyS9KyeYU7RM9WScAG+D3Hhno0PLJebAEpDZMocbDe64eqynhNAnwz/vZoL/q/QB2T1OH39A==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.0.tgz", + "integrity": "sha512-3bnHA8CAFm7cG93v8loghDYyQ8r97Qydf63BeYiGgYbjKKB/XP53W15wfRC7dvKfoiJ34f6Rbyyx2btExc8XsQ==", "requires": { - "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" } }, "@babel/plugin-proposal-numeric-separator": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.13.tgz", - "integrity": "sha512-O1jFia9R8BUCl3ZGB7eitaAPu62TXJRHn7rh+ojNERCFyqRwJMTmhz+tJ+k0CwI6CLjX/ee4qW74FSqlq9I35w==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.0.tgz", + "integrity": "sha512-FAhE2I6mjispy+vwwd6xWPyEx3NYFS13pikDBWUAFGZvq6POGs5eNchw8+1CYoEgBl9n11I3NkzD7ghn25PQ9Q==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.12.13", + "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-numeric-separator": "^7.10.4" } }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.13.8.tgz", - "integrity": "sha512-DhB2EuB1Ih7S3/IRX5AFVgZ16k3EzfRbq97CxAVI1KSYcW+lexV8VZb7G7L8zuPVSdQMRn0kiBpf/Yzu9ZKH0g==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.16.0.tgz", + "integrity": "sha512-LU/+jp89efe5HuWJLmMmFG0+xbz+I2rSI7iLc1AlaeSMDMOGzWlc5yJrMN1d04osXN4sSfpo4O+azkBNBes0jg==", "requires": { - "@babel/compat-data": "^7.13.8", - "@babel/helper-compilation-targets": "^7.13.8", - "@babel/helper-plugin-utils": "^7.13.0", + "@babel/compat-data": "^7.16.0", + "@babel/helper-compilation-targets": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.13.0" + "@babel/plugin-transform-parameters": "^7.16.0" } }, "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.13.8.tgz", - "integrity": "sha512-0wS/4DUF1CuTmGo+NiaHfHcVSeSLj5S3e6RivPTg/2k3wOv3jO35tZ6/ZWsQhQMvdgI7CwphjQa/ccarLymHVA==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.0.tgz", + "integrity": "sha512-kicDo0A/5J0nrsCPbn89mTG3Bm4XgYi0CZtvex9Oyw7gGZE3HXGD0zpQNH+mo+tEfbo8wbmMvJftOwpmPy7aVw==", "requires": { - "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" } }, "@babel/plugin-proposal-optional-chaining": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.13.12.tgz", - "integrity": "sha512-fcEdKOkIB7Tf4IxrgEVeFC4zeJSTr78no9wTdBuZZbqF64kzllU0ybo2zrzm7gUQfxGhBgq4E39oRs8Zx/RMYQ==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.0.tgz", + "integrity": "sha512-Y4rFpkZODfHrVo70Uaj6cC1JJOt3Pp0MdWSwIKtb8z1/lsjl9AmnB7ErRFV+QNGIfcY1Eruc2UMx5KaRnXjMyg==", "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", "@babel/plugin-syntax-optional-chaining": "^7.8.3" } }, "@babel/plugin-proposal-private-methods": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.13.0.tgz", - "integrity": "sha512-MXyyKQd9inhx1kDYPkFRVOBXQ20ES8Pto3T7UZ92xj2mY0EVD8oAVzeyYuVfy/mxAdTSIayOvg+aVzcHV2bn6Q==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.0.tgz", + "integrity": "sha512-IvHmcTHDFztQGnn6aWq4t12QaBXTKr1whF/dgp9kz84X6GUcwq9utj7z2wFCUfeOup/QKnOlt2k0zxkGFx9ubg==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.0.tgz", + "integrity": "sha512-3jQUr/HBbMVZmi72LpjQwlZ55i1queL8KcDTQEkAHihttJnAPrcvG9ZNXIfsd2ugpizZo595egYV6xy+pv4Ofw==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.13.0", - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/helper-annotate-as-pure": "^7.16.0", + "@babel/helper-create-class-features-plugin": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" } }, "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz", - "integrity": "sha512-XyJmZidNfofEkqFV5VC/bLabGmO5QzenPO/YOfGuEbgU+2sSwMmio3YLb4WtBgcmmdwZHyVyv8on77IUjQ5Gvg==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.0.tgz", + "integrity": "sha512-ti7IdM54NXv29cA4+bNNKEMS4jLMCbJgl+Drv+FgYy0erJLAxNAIXcNjNjrRZEcWq0xJHsNVwQezskMFpF8N9g==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-create-regexp-features-plugin": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-syntax-async-generators": { @@ -869,19 +806,28 @@ "@babel/helper-plugin-utils": "^7.12.13" } }, - "@babel/plugin-syntax-decorators": { + "@babel/plugin-syntax-class-static-block": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.14.5.tgz", - "integrity": "sha512-c4sZMRWL4GSvP1EXy0woIP7m4jkVcEuG8R1TOZxPBPtp4FSM/kiPZub9UIs/Jrb5ZAOzvTUSGYrWsrSu1JvoPw==", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-decorators": { + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.16.5.tgz", + "integrity": "sha512-3CbYTXfflvyy8O819uhZcZSMedZG4J8yS/NLTc/8T24M9ke1GssTGvg8VZu3Yn2LU5IyQSv1CmPq0a9JWHXJwg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.5" }, "dependencies": { "@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.5.tgz", + "integrity": "sha512-59KHWHXxVA9K4HNF4sbHCf+eJeFe0Te/ZFGqBT4OjXhrwvA04sGfaEGsVTdsjoszq0YTP49RC9UKe5g8uN2RwQ==", "dev": true } } @@ -895,11 +841,11 @@ } }, "@babel/plugin-syntax-export-default-from": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.12.13.tgz", - "integrity": "sha512-gVry0zqoums0hA+EniCYK3gABhjYSLX1dVuwYpPw9DrLNA4/GovXySHVg4FGRsZht09ON/5C2NVx3keq+qqVGQ==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.16.0.tgz", + "integrity": "sha512-xllLOdBj77mFSw8s02I+2SSQGHOftbWTlGmagheuNk/gjQsk7IrYsR/EosXVAVpgIUFffLckB/iPRioQYLHSrQ==", "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-syntax-export-namespace-from": { @@ -912,11 +858,11 @@ } }, "@babel/plugin-syntax-flow": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.12.13.tgz", - "integrity": "sha512-J/RYxnlSLXZLVR7wTRsozxKT8qbsx1mNKJzXEEjQ0Kjx1ZACcyHgbanNWNCFtc36IzuWhYWPpvJFFoexoOWFmA==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.16.0.tgz", + "integrity": "sha512-dH91yCo0RyqfzWgoM5Ji9ir8fQ+uFbt9KHM3d2x4jZOuHS6wNA+CRmRUP/BWCsHG2bjc7A2Way6AvH1eQk0wig==", "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-syntax-import-meta": { @@ -938,11 +884,11 @@ } }, "@babel/plugin-syntax-jsx": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.13.tgz", - "integrity": "sha512-d4HM23Q1K7oq/SLNmG6mRt85l2csmQ0cHRaxRXjKW0YFdEXqlZ5kzFQKH5Uc3rDJECgu+yCRgPkG04Mm98R/1g==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.0.tgz", + "integrity": "sha512-8zv2+xiPHwly31RK4RmnEYY5zziuF3O7W2kIDW+07ewWDh6Oi0dRq8kwvulRkFgt6DB97RlKs5c1y068iPlCUg==", "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-syntax-logical-assignment-operators": { @@ -995,69 +941,77 @@ "@babel/helper-plugin-utils": "^7.8.0" } }, + "@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, "@babel/plugin-syntax-top-level-await": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz", - "integrity": "sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-syntax-typescript": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.12.13.tgz", - "integrity": "sha512-cHP3u1JiUiG2LFDKbXnwVad81GvfyIOmCD6HIEId6ojrY0Drfy2q1jw7BwN7dE84+kTnBjLkXoL3IEy/3JPu2w==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.0.tgz", + "integrity": "sha512-Xv6mEXqVdaqCBfJFyeab0fH2DnUoMsDmhamxsSi4j8nLd4Vtw213WMJr55xxqipC/YVWyPY3K0blJncPYji+dQ==", "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-arrow-functions": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.13.0.tgz", - "integrity": "sha512-96lgJagobeVmazXFaDrbmCLQxBysKu7U6Do3mLsx27gf5Dk85ezysrs2BZUpXD703U/Su1xTBDxxar2oa4jAGg==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.0.tgz", + "integrity": "sha512-vIFb5250Rbh7roWARvCLvIJ/PtAU5Lhv7BtZ1u24COwpI9Ypjsh+bZcKk6rlIyalK+r0jOc1XQ8I4ovNxNrWrA==", "requires": { - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-async-to-generator": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.13.0.tgz", - "integrity": "sha512-3j6E004Dx0K3eGmhxVJxwwI89CTJrce7lg3UrtFuDAVQ/2+SJ/h/aSFOeE6/n0WB1GsOffsJp6MnPQNQ8nmwhg==", - "dev": true, + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.0.tgz", + "integrity": "sha512-PbIr7G9kR8tdH6g8Wouir5uVjklETk91GMVSUq+VaOgiinbCkBP6Q7NN/suM/QutZkMJMvcyAriogcYAdhg8Gw==", "requires": { - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-remap-async-to-generator": "^7.13.0" + "@babel/helper-module-imports": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-remap-async-to-generator": "^7.16.0" } }, "@babel/plugin-transform-block-scoped-functions": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.13.tgz", - "integrity": "sha512-zNyFqbc3kI/fVpqwfqkg6RvBgFpC4J18aKKMmv7KdQ/1GgREapSJAykLMVNwfRGO3BtHj3YQZl8kxCXPcVMVeg==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.0.tgz", + "integrity": "sha512-V14As3haUOP4ZWrLJ3VVx5rCnrYhMSHN/jX7z6FAt5hjRkLsb0snPCmJwSOML5oxkKO4FNoNv7V5hw/y2bjuvg==", "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-block-scoping": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.13.tgz", - "integrity": "sha512-Pxwe0iqWJX4fOOM2kEZeUuAxHMWb9nK+9oh5d11bsLoB0xMg+mkDpt0eYuDZB7ETrY9bbcVlKUGTOGWy7BHsMQ==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.0.tgz", + "integrity": "sha512-27n3l67/R3UrXfizlvHGuTwsRIFyce3D/6a37GRxn28iyTPvNXaW4XvznexRh1zUNLPjbLL22Id0XQElV94ruw==", "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-classes": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.13.0.tgz", - "integrity": "sha512-9BtHCPUARyVH1oXGcSJD3YpsqRLROJx5ZNP6tN5vnk17N0SVf9WCtf8Nuh1CFmgByKKAIMstitKduoCmsaDK5g==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.0.tgz", + "integrity": "sha512-HUxMvy6GtAdd+GKBNYDWCIA776byUQH8zjnfjxwT1P1ARv/wFu8eBDpmXQcLS/IwRtrxIReGiplOwMeyO7nsDQ==", "requires": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-function-name": "^7.12.13", - "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-replace-supers": "^7.13.0", - "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/helper-annotate-as-pure": "^7.16.0", + "@babel/helper-function-name": "^7.16.0", + "@babel/helper-optimise-call-expression": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-replace-supers": "^7.16.0", + "@babel/helper-split-export-declaration": "^7.16.0", "globals": "^11.1.0" }, "dependencies": { @@ -1069,278 +1023,307 @@ } }, "@babel/plugin-transform-computed-properties": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.13.0.tgz", - "integrity": "sha512-RRqTYTeZkZAz8WbieLTvKUEUxZlUTdmL5KGMyZj7FnMfLNKV4+r5549aORG/mgojRmFlQMJDUupwAMiF2Q7OUg==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.0.tgz", + "integrity": "sha512-63l1dRXday6S8V3WFY5mXJwcRAnPYxvFfTlt67bwV1rTyVTM5zrp0DBBb13Kl7+ehkCVwIZPumPpFP/4u70+Tw==", "requires": { - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-destructuring": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.0.tgz", - "integrity": "sha512-zym5em7tePoNT9s964c0/KU3JPPnuq7VhIxPRefJ4/s82cD+q1mgKfuGRDMCPL0HTyKz4dISuQlCusfgCJ86HA==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.16.0.tgz", + "integrity": "sha512-Q7tBUwjxLTsHEoqktemHBMtb3NYwyJPTJdM+wDwb0g8PZ3kQUIzNvwD5lPaqW/p54TXBc/MXZu9Jr7tbUEUM8Q==", "requires": { - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-dotall-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.13.tgz", - "integrity": "sha512-foDrozE65ZFdUC2OfgeOCrEPTxdB3yjqxpXh8CH+ipd9CHd4s/iq81kcUpyH8ACGNEPdFqbtzfgzbT/ZGlbDeQ==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.0.tgz", + "integrity": "sha512-FXlDZfQeLILfJlC6I1qyEwcHK5UpRCFkaoVyA1nk9A1L1Yu583YO4un2KsLBsu3IJb4CUbctZks8tD9xPQubLw==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-create-regexp-features-plugin": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-duplicate-keys": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.13.tgz", - "integrity": "sha512-NfADJiiHdhLBW3pulJlJI2NB0t4cci4WTZ8FtdIuNc2+8pslXdPtRRAEWqUY+m9kNOk2eRYbTAOipAxlrOcwwQ==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.0.tgz", + "integrity": "sha512-LIe2kcHKAZOJDNxujvmp6z3mfN6V9lJxubU4fJIGoQCkKe3Ec2OcbdlYP+vW++4MpxwG0d1wSDOJtQW5kLnkZQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-exponentiation-operator": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.13.tgz", - "integrity": "sha512-fbUelkM1apvqez/yYx1/oICVnGo2KM5s63mhGylrmXUxK/IAXSIf87QIxVfZldWf4QsOafY6vV3bX8aMHSvNrA==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.0.tgz", + "integrity": "sha512-OwYEvzFI38hXklsrbNivzpO3fh87skzx8Pnqi4LoSYeav0xHlueSoCJrSgTPfnbyzopo5b3YVAJkFIcUpK2wsw==", "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-flow-strip-types": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.13.0.tgz", - "integrity": "sha512-EXAGFMJgSX8gxWD7PZtW/P6M+z74jpx3wm/+9pn+c2dOawPpBkUX7BrfyPvo6ZpXbgRIEuwgwDb/MGlKvu2pOg==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.16.0.tgz", + "integrity": "sha512-vs/F5roOaO/+WxKfp9PkvLsAyj0G+Q0zbFimHm9X2KDgabN2XmNFoAafmeGEYspUlIF9+MvVmyek9UyHiqeG/w==", "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-flow": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-flow": "^7.16.0" } }, "@babel/plugin-transform-for-of": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.13.0.tgz", - "integrity": "sha512-IHKT00mwUVYE0zzbkDgNRP6SRzvfGCYsOxIRz8KsiaaHCcT9BWIkO+H9QRJseHBLOGBZkHUdHiqj6r0POsdytg==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.0.tgz", + "integrity": "sha512-5QKUw2kO+GVmKr2wMYSATCTTnHyscl6sxFRAY+rvN7h7WB0lcG0o4NoV6ZQU32OZGVsYUsfLGgPQpDFdkfjlJQ==", "requires": { - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-function-name": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.13.tgz", - "integrity": "sha512-6K7gZycG0cmIwwF7uMK/ZqeCikCGVBdyP2J5SKNCXO5EOHcqi+z7Jwf8AmyDNcBgxET8DrEtCt/mPKPyAzXyqQ==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.0.tgz", + "integrity": "sha512-lBzMle9jcOXtSOXUpc7tvvTpENu/NuekNJVova5lCCWCV9/U1ho2HH2y0p6mBg8fPm/syEAbfaaemYGOHCY3mg==", "requires": { - "@babel/helper-function-name": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-function-name": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-literals": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.13.tgz", - "integrity": "sha512-FW+WPjSR7hiUxMcKqyNjP05tQ2kmBCdpEpZHY1ARm96tGQCCBvXKnpjILtDplUnJ/eHZ0lALLM+d2lMFSpYJrQ==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.0.tgz", + "integrity": "sha512-gQDlsSF1iv9RU04clgXqRjrPyyoJMTclFt3K1cjLmTKikc0s/6vE3hlDeEVC71wLTRu72Fq7650kABrdTc2wMQ==", "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-member-expression-literals": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.13.tgz", - "integrity": "sha512-kxLkOsg8yir4YeEPHLuO2tXP9R/gTjpuTOjshqSpELUN3ZAg2jfDnKUvzzJxObun38sw3wm4Uu69sX/zA7iRvg==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.0.tgz", + "integrity": "sha512-WRpw5HL4Jhnxw8QARzRvwojp9MIE7Tdk3ez6vRyUk1MwgjJN0aNpRoXainLR5SgxmoXx/vsXGZ6OthP6t/RbUg==", "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-modules-amd": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.13.0.tgz", - "integrity": "sha512-EKy/E2NHhY/6Vw5d1k3rgoobftcNUmp9fGjb9XZwQLtTctsRBOTRO7RHHxfIky1ogMN5BxN7p9uMA3SzPfotMQ==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.0.tgz", + "integrity": "sha512-rWFhWbCJ9Wdmzln1NmSCqn7P0RAD+ogXG/bd9Kg5c7PKWkJtkiXmYsMBeXjDlzHpVTJ4I/hnjs45zX4dEv81xw==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.13.0", - "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-module-transforms": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5", "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.13.8.tgz", - "integrity": "sha512-9QiOx4MEGglfYZ4XOnU79OHr6vIWUakIj9b4mioN8eQIoEh+pf5p/zEB36JpDFWA12nNMiRf7bfoRvl9Rn79Bw==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.0.tgz", + "integrity": "sha512-Dzi+NWqyEotgzk/sb7kgQPJQf7AJkQBWsVp1N6JWc1lBVo0vkElUnGdr1PzUBmfsCCN5OOFya3RtpeHk15oLKQ==", "requires": { - "@babel/helper-module-transforms": "^7.13.0", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-simple-access": "^7.12.13", + "@babel/helper-module-transforms": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-simple-access": "^7.16.0", "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.13.8.tgz", - "integrity": "sha512-hwqctPYjhM6cWvVIlOIe27jCIBgHCsdH2xCJVAYQm7V5yTMoilbVMi9f6wKg0rpQAOn6ZG4AOyvCqFF/hUh6+A==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.0.tgz", + "integrity": "sha512-yuGBaHS3lF1m/5R+6fjIke64ii5luRUg97N2wr+z1sF0V+sNSXPxXDdEEL/iYLszsN5VKxVB1IPfEqhzVpiqvg==", "dev": true, "requires": { - "@babel/helper-hoist-variables": "^7.13.0", - "@babel/helper-module-transforms": "^7.13.0", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-validator-identifier": "^7.12.11", + "@babel/helper-hoist-variables": "^7.16.0", + "@babel/helper-module-transforms": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-identifier": "^7.15.7", "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-umd": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.13.0.tgz", - "integrity": "sha512-D/ILzAh6uyvkWjKKyFE/W0FzWwasv6vPTSqPcjxFqn6QpX3u8DjRVliq4F2BamO2Wee/om06Vyy+vPkNrd4wxw==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.0.tgz", + "integrity": "sha512-nx4f6no57himWiHhxDM5pjwhae5vLpTK2zCnDH8+wNLJy0TVER/LJRHl2bkt6w9Aad2sPD5iNNoUpY3X9sTGDg==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.13.0", - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/helper-module-transforms": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.13.tgz", - "integrity": "sha512-Xsm8P2hr5hAxyYblrfACXpQKdQbx4m2df9/ZZSQ8MAhsadw06+jW7s9zsSw6he+mJZXRlVMyEnVktJo4zjk1WA==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.0.tgz", + "integrity": "sha512-LogN88uO+7EhxWc8WZuQ8vxdSyVGxhkh8WTC3tzlT8LccMuQdA81e9SGV6zY7kY2LjDhhDOFdQVxdGwPyBCnvg==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.13" + "@babel/helper-create-regexp-features-plugin": "^7.16.0" } }, "@babel/plugin-transform-new-target": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.13.tgz", - "integrity": "sha512-/KY2hbLxrG5GTQ9zzZSc3xWiOy379pIETEhbtzwZcw9rvuaVV4Fqy7BYGYOWZnaoXIQYbbJ0ziXLa/sKcGCYEQ==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.0.tgz", + "integrity": "sha512-fhjrDEYv2DBsGN/P6rlqakwRwIp7rBGLPbrKxwh7oVt5NNkIhZVOY2GRV+ULLsQri1bDqwDWnU3vhlmx5B2aCw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-object-assign": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.12.13.tgz", - "integrity": "sha512-4QxDMc0lAOkIBSfCrnSGbAJ+4epDBF2XXwcLXuBcG1xl9u7LrktNVD4+LwhL47XuKVPQ7R25e/WdcV+h97HyZA==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.16.7.tgz", + "integrity": "sha512-R8mawvm3x0COTJtveuoqZIjNypn2FjfvXZr4pSQ8VhEFBuQGBz4XhHasZtHXjgXU4XptZ4HtGof3NoYc93ZH9Q==", "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.16.7" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" + } } }, "@babel/plugin-transform-object-super": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.13.tgz", - "integrity": "sha512-JzYIcj3XtYspZDV8j9ulnoMPZZnF/Cj0LUxPOjR89BdBVx+zYJI9MdMIlUZjbXDX+6YVeS6I3e8op+qQ3BYBoQ==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.0.tgz", + "integrity": "sha512-fds+puedQHn4cPLshoHcR1DTMN0q1V9ou0mUjm8whx9pGcNvDrVVrgw+KJzzCaiTdaYhldtrUps8DWVMgrSEyg==", "requires": { - "@babel/helper-plugin-utils": "^7.12.13", - "@babel/helper-replace-supers": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-replace-supers": "^7.16.0" } }, "@babel/plugin-transform-parameters": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.13.0.tgz", - "integrity": "sha512-Jt8k/h/mIwE2JFEOb3lURoY5C85ETcYPnbuAJ96zRBzh1XHtQZfs62ChZ6EP22QlC8c7Xqr9q+e1SU5qttwwjw==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.0.tgz", + "integrity": "sha512-XgnQEm1CevKROPx+udOi/8f8TiGhrUWiHiaUCIp47tE0tpFDjzXNTZc9E5CmCwxNjXTWEVqvRfWZYOTFvMa/ZQ==", "requires": { - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-property-literals": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.13.tgz", - "integrity": "sha512-nqVigwVan+lR+g8Fj8Exl0UQX2kymtjcWfMOYM1vTYEKujeyv2SkMgazf2qNcK7l4SDiKyTA/nHCPqL4e2zo1A==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.0.tgz", + "integrity": "sha512-XLldD4V8+pOqX2hwfWhgwXzGdnDOThxaNTgqagOcpBgIxbUvpgU2FMvo5E1RyHbk756WYgdbS0T8y0Cj9FKkWQ==", "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-react-constant-elements": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.13.10.tgz", - "integrity": "sha512-E+aCW9j7mLq01tOuGV08YzLBt+vSyr4bOPT75B6WrAlrUfmOYOZ/yWk847EH0dv0xXiCihWLEmlX//O30YhpIw==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.16.7.tgz", + "integrity": "sha512-lF+cfsyTgwWkcw715J88JhMYJ5GpysYNLhLP1PkvkhTRN7B3e74R/1KsDxFxhRpSn0UUD3IWM4GvdBR2PEbbQQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/helper-plugin-utils": "^7.16.7" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", + "dev": true + } } }, "@babel/plugin-transform-react-display-name": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.12.13.tgz", - "integrity": "sha512-MprESJzI9O5VnJZrL7gg1MpdqmiFcUv41Jc7SahxYsNP2kDkFqClxxTZq+1Qv4AFCamm+GXMRDQINNn+qrxmiA==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.16.0.tgz", + "integrity": "sha512-FJFdJAqaCpndL+pIf0aeD/qlQwT7QXOvR6Cc8JPvNhKJBi2zc/DPc4g05Y3fbD/0iWAMQFGij4+Xw+4L/BMpTg==", "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-react-jsx": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.13.12.tgz", - "integrity": "sha512-jcEI2UqIcpCqB5U5DRxIl0tQEProI2gcu+g8VTIqxLO5Iidojb4d77q+fwGseCvd8af/lJ9masp4QWzBXFE2xA==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.16.0.tgz", + "integrity": "sha512-rqDgIbukZ44pqq7NIRPGPGNklshPkvlmvqjdx3OZcGPk4zGIenYkxDTvl3LsSL8gqcc3ZzGmXPE6hR/u/voNOw==", "requires": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-module-imports": "^7.13.12", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-jsx": "^7.12.13", - "@babel/types": "^7.13.12" + "@babel/helper-annotate-as-pure": "^7.16.0", + "@babel/helper-module-imports": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-jsx": "^7.16.0", + "@babel/types": "^7.16.0" } }, "@babel/plugin-transform-react-jsx-development": { - "version": "7.12.17", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.12.17.tgz", - "integrity": "sha512-BPjYV86SVuOaudFhsJR1zjgxxOhJDt6JHNoD48DxWEIxUCAMjV1ys6DYw4SDYZh0b1QsS2vfIA9t/ZsQGsDOUQ==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.0.tgz", + "integrity": "sha512-qq65iSqBRq0Hr3wq57YG2AmW0H6wgTnIzpffTphrUWUgLCOK+zf1f7G0vuOiXrp7dU1qq+fQBoqZ3wCDAkhFzw==", "dev": true, "requires": { - "@babel/plugin-transform-react-jsx": "^7.12.17" + "@babel/plugin-transform-react-jsx": "^7.16.0" } }, "@babel/plugin-transform-react-jsx-self": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.12.13.tgz", - "integrity": "sha512-FXYw98TTJ125GVCCkFLZXlZ1qGcsYqNQhVBQcZjyrwf8FEUtVfKIoidnO8S0q+KBQpDYNTmiGo1gn67Vti04lQ==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.16.7.tgz", + "integrity": "sha512-oe5VuWs7J9ilH3BCCApGoYjHoSO48vkjX2CbA5bFVhIuO2HKxA3vyF7rleA4o6/4rTDbk6r8hBW7Ul8E+UZrpA==", "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.16.7" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" + } } }, "@babel/plugin-transform-react-jsx-source": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.14.2.tgz", - "integrity": "sha512-OMorspVyjxghAjzgeAWc6O7W7vHbJhV69NeTGdl9Mxgz6PaweAuo7ffB9T5A1OQ9dGcw0As4SYMUhyNC4u7mVg==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.16.7.tgz", + "integrity": "sha512-rONFiQz9vgbsnaMtQlZCjIRwhJvlrPET8TabIUK2hzlXw9B9s2Ieaxte1SCOOXMbWRHodbKixNf3BLcWVOQ8Bw==", "requires": { - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/helper-plugin-utils": "^7.16.7" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" + } } }, "@babel/plugin-transform-react-pure-annotations": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.12.1.tgz", - "integrity": "sha512-RqeaHiwZtphSIUZ5I85PEH19LOSzxfuEazoY7/pWASCAIBuATQzpSVD+eT6MebeeZT2F4eSL0u4vw6n4Nm0Mjg==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.16.0.tgz", + "integrity": "sha512-NC/Bj2MG+t8Ef5Pdpo34Ay74X4Rt804h5y81PwOpfPtmAK3i6CizmQqwyBQzIepz1Yt8wNr2Z2L7Lu3qBMfZMA==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-annotate-as-pure": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-regenerator": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.13.tgz", - "integrity": "sha512-lxb2ZAvSLyJ2PEe47hoGWPmW22v7CtSl9jW8mingV4H2sEX/JOcrAj2nPuGWi56ERUm2bUpjKzONAuT6HCn2EA==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.0.tgz", + "integrity": "sha512-JAvGxgKuwS2PihiSFaDrp94XOzzTUeDeOQlcKzVAyaPap7BnZXK/lvMDiubkPTdotPKOIZq9xWXWnggUMYiExg==", "requires": { "regenerator-transform": "^0.14.2" } }, "@babel/plugin-transform-reserved-words": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.13.tgz", - "integrity": "sha512-xhUPzDXxZN1QfiOy/I5tyye+TRz6lA7z6xaT4CLOjPRMVg1ldRf0LHw0TDBpYL4vG78556WuHdyO9oi5UmzZBg==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.0.tgz", + "integrity": "sha512-Dgs8NNCehHSvXdhEhln8u/TtJxfVwGYCgP2OOr5Z3Ar+B+zXicEOKNTyc+eca2cuEOMtjW6m9P9ijOt8QdqWkg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-runtime": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.13.10.tgz", - "integrity": "sha512-Y5k8ipgfvz5d/76tx7JYbKQTcgFSU6VgJ3kKQv4zGTKr+a9T/KBvfRvGtSFgKDQGt/DBykQixV0vNWKIdzWErA==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.16.0.tgz", + "integrity": "sha512-zlPf1/XFn5+vWdve3AAhf+Sxl+MVa5VlwTwWgnLx23u4GlatSRQJ3Eoo9vllf0a9il3woQsT4SK+5Z7c06h8ag==", "requires": { - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "babel-plugin-polyfill-corejs2": "^0.1.4", - "babel-plugin-polyfill-corejs3": "^0.1.3", - "babel-plugin-polyfill-regenerator": "^0.1.2", + "@babel/helper-module-imports": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5", + "babel-plugin-polyfill-corejs2": "^0.2.3", + "babel-plugin-polyfill-corejs3": "^0.3.0", + "babel-plugin-polyfill-regenerator": "^0.2.3", "semver": "^6.3.0" }, "dependencies": { @@ -1352,101 +1335,105 @@ } }, "@babel/plugin-transform-shorthand-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.13.tgz", - "integrity": "sha512-xpL49pqPnLtf0tVluuqvzWIgLEhuPpZzvs2yabUHSKRNlN7ScYU7aMlmavOeyXJZKgZKQRBlh8rHbKiJDraTSw==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.0.tgz", + "integrity": "sha512-iVb1mTcD8fuhSv3k99+5tlXu5N0v8/DPm2mO3WACLG6al1CGZH7v09HJyUb1TtYl/Z+KrM6pHSIJdZxP5A+xow==", "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-spread": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.13.0.tgz", - "integrity": "sha512-V6vkiXijjzYeFmQTr3dBxPtZYLPcUfY34DebOU27jIl2M/Y8Egm52Hw82CSjjPqd54GTlJs5x+CR7HeNr24ckg==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.0.tgz", + "integrity": "sha512-Ao4MSYRaLAQczZVp9/7E7QHsCuK92yHRrmVNRe/SlEJjhzivq0BSn8mEraimL8wizHZ3fuaHxKH0iwzI13GyGg==", "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0" } }, "@babel/plugin-transform-sticky-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.13.tgz", - "integrity": "sha512-Jc3JSaaWT8+fr7GRvQP02fKDsYk4K/lYwWq38r/UGfaxo89ajud321NH28KRQ7xy1Ybc0VUE5Pz8psjNNDUglg==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.0.tgz", + "integrity": "sha512-/ntT2NljR9foobKk4E/YyOSwcGUXtYWv5tinMK/3RkypyNBNdhHUaq6Orw5DWq9ZcNlS03BIlEALFeQgeVAo4Q==", "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-template-literals": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.13.0.tgz", - "integrity": "sha512-d67umW6nlfmr1iehCcBv69eSUSySk1EsIS8aTDX4Xo9qajAh6mYtcl4kJrBkGXuxZPEgVr7RVfAvNW6YQkd4Mw==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.0.tgz", + "integrity": "sha512-Rd4Ic89hA/f7xUSJQk5PnC+4so50vBoBfxjdQAdvngwidM8jYIBVxBZ/sARxD4e0yMXRbJVDrYf7dyRtIIKT6Q==", "requires": { - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-typeof-symbol": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.13.tgz", - "integrity": "sha512-eKv/LmUJpMnu4npgfvs3LiHhJua5fo/CysENxa45YCQXZwKnGCQKAg87bvoqSW1fFT+HA32l03Qxsm8ouTY3ZQ==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.0.tgz", + "integrity": "sha512-++V2L8Bdf4vcaHi2raILnptTBjGEFxn5315YU+e8+EqXIucA+q349qWngCLpUYqqv233suJ6NOienIVUpS9cqg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-typescript": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.13.0.tgz", - "integrity": "sha512-elQEwluzaU8R8dbVuW2Q2Y8Nznf7hnjM7+DSCd14Lo5fF63C9qNLbwZYbmZrtV9/ySpSUpkRpQXvJb6xyu4hCQ==", + "version": "7.16.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.16.1.tgz", + "integrity": "sha512-NO4XoryBng06jjw/qWEU2LhcLJr1tWkhpMam/H4eas/CDKMX/b2/Ylb6EI256Y7+FVPCawwSM1rrJNOpDiz+Lg==", "requires": { - "@babel/helper-create-class-features-plugin": "^7.13.0", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-typescript": "^7.12.13" + "@babel/helper-create-class-features-plugin": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-typescript": "^7.16.0" } }, "@babel/plugin-transform-unicode-escapes": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.13.tgz", - "integrity": "sha512-0bHEkdwJ/sN/ikBHfSmOXPypN/beiGqjo+o4/5K+vxEFNPRPdImhviPakMKG4x96l85emoa0Z6cDflsdBusZbw==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.0.tgz", + "integrity": "sha512-VFi4dhgJM7Bpk8lRc5CMaRGlKZ29W9C3geZjt9beuzSUrlJxsNwX7ReLwaL6WEvsOf2EQkyIJEPtF8EXjB/g2A==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-unicode-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.13.tgz", - "integrity": "sha512-mDRzSNY7/zopwisPZ5kM9XKCfhchqIYwAKRERtEnhYscZB79VRekuRSoYbN0+KVe3y8+q1h6A4svXtP7N+UoCA==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.0.tgz", + "integrity": "sha512-jHLK4LxhHjvCeZDWyA9c+P9XH1sOxRd1RO9xMtDVRAOND/PczPqizEtVdx4TQF/wyPaewqpT+tgQFYMnN/P94A==", "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-create-regexp-features-plugin": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/preset-env": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.13.12.tgz", - "integrity": "sha512-JzElc6jk3Ko6zuZgBtjOd01pf9yYDEIH8BcqVuYIuOkzOwDesoa/Nz4gIo4lBG6K861KTV9TvIgmFuT6ytOaAA==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.0.tgz", + "integrity": "sha512-cdTu/W0IrviamtnZiTfixPfIncr2M1VqRrkjzZWlr1B4TVYimCFK5jkyOdP4qw2MrlKHi+b3ORj6x8GoCew8Dg==", "dev": true, "requires": { - "@babel/compat-data": "^7.13.12", - "@babel/helper-compilation-targets": "^7.13.10", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-validator-option": "^7.12.17", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.13.12", - "@babel/plugin-proposal-async-generator-functions": "^7.13.8", - "@babel/plugin-proposal-class-properties": "^7.13.0", - "@babel/plugin-proposal-dynamic-import": "^7.13.8", - "@babel/plugin-proposal-export-namespace-from": "^7.12.13", - "@babel/plugin-proposal-json-strings": "^7.13.8", - "@babel/plugin-proposal-logical-assignment-operators": "^7.13.8", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8", - "@babel/plugin-proposal-numeric-separator": "^7.12.13", - "@babel/plugin-proposal-object-rest-spread": "^7.13.8", - "@babel/plugin-proposal-optional-catch-binding": "^7.13.8", - "@babel/plugin-proposal-optional-chaining": "^7.13.12", - "@babel/plugin-proposal-private-methods": "^7.13.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.12.13", + "@babel/compat-data": "^7.16.0", + "@babel/helper-compilation-targets": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.16.0", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.16.0", + "@babel/plugin-proposal-async-generator-functions": "^7.16.0", + "@babel/plugin-proposal-class-properties": "^7.16.0", + "@babel/plugin-proposal-class-static-block": "^7.16.0", + "@babel/plugin-proposal-dynamic-import": "^7.16.0", + "@babel/plugin-proposal-export-namespace-from": "^7.16.0", + "@babel/plugin-proposal-json-strings": "^7.16.0", + "@babel/plugin-proposal-logical-assignment-operators": "^7.16.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.0", + "@babel/plugin-proposal-numeric-separator": "^7.16.0", + "@babel/plugin-proposal-object-rest-spread": "^7.16.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.16.0", + "@babel/plugin-proposal-optional-chaining": "^7.16.0", + "@babel/plugin-proposal-private-methods": "^7.16.0", + "@babel/plugin-proposal-private-property-in-object": "^7.16.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.16.0", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", "@babel/plugin-syntax-json-strings": "^7.8.3", @@ -1456,54 +1443,49 @@ "@babel/plugin-syntax-object-rest-spread": "^7.8.3", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.12.13", - "@babel/plugin-transform-arrow-functions": "^7.13.0", - "@babel/plugin-transform-async-to-generator": "^7.13.0", - "@babel/plugin-transform-block-scoped-functions": "^7.12.13", - "@babel/plugin-transform-block-scoping": "^7.12.13", - "@babel/plugin-transform-classes": "^7.13.0", - "@babel/plugin-transform-computed-properties": "^7.13.0", - "@babel/plugin-transform-destructuring": "^7.13.0", - "@babel/plugin-transform-dotall-regex": "^7.12.13", - "@babel/plugin-transform-duplicate-keys": "^7.12.13", - "@babel/plugin-transform-exponentiation-operator": "^7.12.13", - "@babel/plugin-transform-for-of": "^7.13.0", - "@babel/plugin-transform-function-name": "^7.12.13", - "@babel/plugin-transform-literals": "^7.12.13", - "@babel/plugin-transform-member-expression-literals": "^7.12.13", - "@babel/plugin-transform-modules-amd": "^7.13.0", - "@babel/plugin-transform-modules-commonjs": "^7.13.8", - "@babel/plugin-transform-modules-systemjs": "^7.13.8", - "@babel/plugin-transform-modules-umd": "^7.13.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.13", - "@babel/plugin-transform-new-target": "^7.12.13", - "@babel/plugin-transform-object-super": "^7.12.13", - "@babel/plugin-transform-parameters": "^7.13.0", - "@babel/plugin-transform-property-literals": "^7.12.13", - "@babel/plugin-transform-regenerator": "^7.12.13", - "@babel/plugin-transform-reserved-words": "^7.12.13", - "@babel/plugin-transform-shorthand-properties": "^7.12.13", - "@babel/plugin-transform-spread": "^7.13.0", - "@babel/plugin-transform-sticky-regex": "^7.12.13", - "@babel/plugin-transform-template-literals": "^7.13.0", - "@babel/plugin-transform-typeof-symbol": "^7.12.13", - "@babel/plugin-transform-unicode-escapes": "^7.12.13", - "@babel/plugin-transform-unicode-regex": "^7.12.13", - "@babel/preset-modules": "^0.1.4", - "@babel/types": "^7.13.12", - "babel-plugin-polyfill-corejs2": "^0.1.4", - "babel-plugin-polyfill-corejs3": "^0.1.3", - "babel-plugin-polyfill-regenerator": "^0.1.2", - "core-js-compat": "^3.9.0", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.16.0", + "@babel/plugin-transform-async-to-generator": "^7.16.0", + "@babel/plugin-transform-block-scoped-functions": "^7.16.0", + "@babel/plugin-transform-block-scoping": "^7.16.0", + "@babel/plugin-transform-classes": "^7.16.0", + "@babel/plugin-transform-computed-properties": "^7.16.0", + "@babel/plugin-transform-destructuring": "^7.16.0", + "@babel/plugin-transform-dotall-regex": "^7.16.0", + "@babel/plugin-transform-duplicate-keys": "^7.16.0", + "@babel/plugin-transform-exponentiation-operator": "^7.16.0", + "@babel/plugin-transform-for-of": "^7.16.0", + "@babel/plugin-transform-function-name": "^7.16.0", + "@babel/plugin-transform-literals": "^7.16.0", + "@babel/plugin-transform-member-expression-literals": "^7.16.0", + "@babel/plugin-transform-modules-amd": "^7.16.0", + "@babel/plugin-transform-modules-commonjs": "^7.16.0", + "@babel/plugin-transform-modules-systemjs": "^7.16.0", + "@babel/plugin-transform-modules-umd": "^7.16.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.16.0", + "@babel/plugin-transform-new-target": "^7.16.0", + "@babel/plugin-transform-object-super": "^7.16.0", + "@babel/plugin-transform-parameters": "^7.16.0", + "@babel/plugin-transform-property-literals": "^7.16.0", + "@babel/plugin-transform-regenerator": "^7.16.0", + "@babel/plugin-transform-reserved-words": "^7.16.0", + "@babel/plugin-transform-shorthand-properties": "^7.16.0", + "@babel/plugin-transform-spread": "^7.16.0", + "@babel/plugin-transform-sticky-regex": "^7.16.0", + "@babel/plugin-transform-template-literals": "^7.16.0", + "@babel/plugin-transform-typeof-symbol": "^7.16.0", + "@babel/plugin-transform-unicode-escapes": "^7.16.0", + "@babel/plugin-transform-unicode-regex": "^7.16.0", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.16.0", + "babel-plugin-polyfill-corejs2": "^0.2.3", + "babel-plugin-polyfill-corejs3": "^0.3.0", + "babel-plugin-polyfill-regenerator": "^0.2.3", + "core-js-compat": "^3.19.0", "semver": "^6.3.0" }, "dependencies": { - "@babel/compat-data": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.13.12.tgz", - "integrity": "sha512-3eJJ841uKxeV8dcN/2yGEUy+RfgQspPEgQat85umsE1rotuquQ2AbIub4S6j7c50a2d+4myc+zSlnXeIHrOnhQ==", - "dev": true - }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -1513,19 +1495,19 @@ } }, "@babel/preset-flow": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.13.13.tgz", - "integrity": "sha512-MDtwtamMifqq3R2mC7l3A3uFalUb3NH5TIBQWjN/epEPlZktcLq4se3J+ivckKrLMGsR7H9LW8+pYuIUN9tsKg==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.16.0.tgz", + "integrity": "sha512-e5NE1EoPMpoHFkyFkMSj2h9tu7OolARcUHki8mnBv4NiFK9so+UrhbvT9mV99tMJOUEx8BOj67T6dXvGcTeYeQ==", "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-validator-option": "^7.12.17", - "@babel/plugin-transform-flow-strip-types": "^7.13.0" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "@babel/plugin-transform-flow-strip-types": "^7.16.0" } }, "@babel/preset-modules": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", - "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", @@ -1536,67 +1518,41 @@ } }, "@babel/preset-react": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.12.13.tgz", - "integrity": "sha512-TYM0V9z6Abb6dj1K7i5NrEhA13oS5ujUYQYDfqIBXYHOc2c2VkFgc+q9kyssIyUfy4/hEwqrgSlJ/Qgv8zJLsA==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.16.0.tgz", + "integrity": "sha512-d31IFW2bLRB28uL1WoElyro8RH5l6531XfxMtCeCmp6RVAF1uTfxxUA0LH1tXl+psZdwfmIbwoG4U5VwgbhtLw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.12.13", - "@babel/plugin-transform-react-display-name": "^7.12.13", - "@babel/plugin-transform-react-jsx": "^7.12.13", - "@babel/plugin-transform-react-jsx-development": "^7.12.12", - "@babel/plugin-transform-react-pure-annotations": "^7.12.1" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "@babel/plugin-transform-react-display-name": "^7.16.0", + "@babel/plugin-transform-react-jsx": "^7.16.0", + "@babel/plugin-transform-react-jsx-development": "^7.16.0", + "@babel/plugin-transform-react-pure-annotations": "^7.16.0" } }, "@babel/preset-typescript": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.13.0.tgz", - "integrity": "sha512-LXJwxrHy0N3f6gIJlYbLta1D9BDtHpQeqwzM0LIfjDlr6UE/D5Mc7W4iDiQzaE+ks0sTjT26ArcHWnJVt0QiHw==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.16.0.tgz", + "integrity": "sha512-txegdrZYgO9DlPbv+9QOVpMnKbOtezsLHWsnsRF4AjbSIsVaujrq1qg8HK0mxQpWv0jnejt0yEoW1uWpvbrDTg==", "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-validator-option": "^7.12.17", - "@babel/plugin-transform-typescript": "^7.13.0" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "@babel/plugin-transform-typescript": "^7.16.0" } }, "@babel/register": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.13.8.tgz", - "integrity": "sha512-yCVtABcmvQjRsX2elcZFUV5Q5kDDpHdtXKKku22hNDma60lYuhKmtp1ykZ/okRCPLT2bR5S+cA1kvtBdAFlDTQ==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.16.0.tgz", + "integrity": "sha512-lzl4yfs0zVXnooeLE0AAfYaT7F3SPA8yB2Bj4W1BiZwLbMS3MZH35ZvCWSRHvneUugwuM+Wsnrj7h0F7UmU3NQ==", "requires": { + "clone-deep": "^4.0.1", "find-cache-dir": "^2.0.0", - "lodash": "^4.17.19", "make-dir": "^2.1.0", "pirates": "^4.0.0", "source-map-support": "^0.5.16" }, "dependencies": { - "find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "requires": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, "make-dir": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", @@ -1606,40 +1562,11 @@ "semver": "^5.6.0" } }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" - }, "pify": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "requires": { - "find-up": "^3.0.0" - } - }, "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", @@ -1648,86 +1575,53 @@ } }, "@babel/runtime": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.13.10.tgz", - "integrity": "sha512-4QPkjJq6Ns3V/RgpEahRk+AGfL0eO6RHHtTWoNNr5mO49G6B5+X6d6THgWEAvTrznU5xYpbAlVKRYcsCgh/Akw==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.0.tgz", + "integrity": "sha512-Nht8L0O8YCktmsDV6FqFue7vQLRx3Hb0B37lS5y0jDRqRxlBG4wIJHnf9/bgSE2UyipKFA01YtS+npRdTWBUyw==", "requires": { "regenerator-runtime": "^0.13.4" - }, - "dependencies": { - "regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" - } } }, "@babel/runtime-corejs3": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.13.10.tgz", - "integrity": "sha512-x/XYVQ1h684pp1mJwOV4CyvqZXqbc8CMsMGUnAbuc82ZCdv1U63w5RSUzgDSXQHG5Rps/kiksH6g2D5BuaKyXg==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.16.0.tgz", + "integrity": "sha512-Oi2qwQ21X7/d9gn3WiwkDTJmq3TQtYNz89lRnoFy8VeZpWlsyXvzSwiRrRZ8cXluvSwqKxqHJ6dBd9Rv+p0ZGQ==", "dev": true, "requires": { - "core-js-pure": "^3.0.0", + "core-js-pure": "^3.19.0", "regenerator-runtime": "^0.13.4" - }, - "dependencies": { - "regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", - "dev": true - } } }, "@babel/template": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", - "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.0.tgz", + "integrity": "sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A==", "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/parser": "^7.12.13", - "@babel/types": "^7.12.13" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "requires": { - "@babel/highlight": "^7.12.13" - } - } + "@babel/code-frame": "^7.16.0", + "@babel/parser": "^7.16.0", + "@babel/types": "^7.16.0" } }, "@babel/traverse": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.0.tgz", - "integrity": "sha512-xys5xi5JEhzC3RzEmSGrs/b3pJW/o87SypZ+G/PhaE7uqVQNv/jlmVIBXuoh5atqQ434LfXV+sf23Oxj0bchJQ==", - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.13.0", - "@babel/helper-function-name": "^7.12.13", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.13.0", - "@babel/types": "^7.13.0", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.0.tgz", + "integrity": "sha512-qQ84jIs1aRQxaGaxSysII9TuDaguZ5yVrEuC0BN2vcPlalwfLovVmCjbFDPECPXcYM/wLvNFfp8uDOliLxIoUQ==", + "requires": { + "@babel/code-frame": "^7.16.0", + "@babel/generator": "^7.16.0", + "@babel/helper-function-name": "^7.16.0", + "@babel/helper-hoist-variables": "^7.16.0", + "@babel/helper-split-export-declaration": "^7.16.0", + "@babel/parser": "^7.16.0", + "@babel/types": "^7.16.0", "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" + "globals": "^11.1.0" }, "dependencies": { - "@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "requires": { - "@babel/highlight": "^7.12.13" - } - }, "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "requires": { "ms": "2.1.2" } @@ -1745,19 +1639,18 @@ } }, "@babel/types": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.12.tgz", - "integrity": "sha512-K4nY2xFN4QMvQwkQ+zmBDp6ANMbVNw6BbxWmYA4qNjhR9W+Lj/8ky5MEY2Me5r+B2c6/v6F53oMndG+f9s3IiA==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.0.tgz", + "integrity": "sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg==", "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", + "@babel/helper-validator-identifier": "^7.15.7", "to-fast-properties": "^2.0.0" } }, "@base2/pretty-print-object": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@base2/pretty-print-object/-/pretty-print-object-1.0.0.tgz", - "integrity": "sha512-4Th98KlMHr5+JkxfcoDT//6vY8vM+iSPrLNpHhRyLx2CFYi8e2RfqPLdpbnpo0Q5lQC5hNB79yes07zb02fvCw==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@base2/pretty-print-object/-/pretty-print-object-1.0.1.tgz", + "integrity": "sha512-4iri8i1AqYHJE2DstZYkyEprg6Pq6sKx3xn5FpySk9sNhH7qN2LLlHJCfDTZRILNwQNPD7mATWM0TBui7uC1pA==", "dev": true }, "@bcoe/v8-coverage": { @@ -1792,6 +1685,12 @@ "minimist": "^1.2.0" } }, + "@discoveryjs/json-ext": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.5.tgz", + "integrity": "sha512-6nFkfkmSeV/rqSaS4oWHgmpnYw194f6hmWF5is6b0J1naJZoiD0NTc9AiUwPHvWsowkjuHErCZT1wa0jg+BLIA==", + "dev": true + }, "@egjs/hammerjs": { "version": "2.0.17", "resolved": "https://registry.npmjs.org/@egjs/hammerjs/-/hammerjs-2.0.17.tgz", @@ -1854,26 +1753,26 @@ } }, "@emotion/cache": { - "version": "11.4.0", - "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.4.0.tgz", - "integrity": "sha512-Zx70bjE7LErRO9OaZrhf22Qye1y4F7iDl+ITjet0J+i+B88PrAOBkKvaAWhxsZf72tDLajwCgfCjJ2dvH77C3g==", + "version": "11.7.1", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.7.1.tgz", + "integrity": "sha512-r65Zy4Iljb8oyjtLeCuBH8Qjiy107dOYC6SJq7g7GV5UCQWMObY4SJDPGFjiiVpPrOJ2hmJOoBiYTC7hwx9E2A==", "requires": { "@emotion/memoize": "^0.7.4", - "@emotion/sheet": "^1.0.0", + "@emotion/sheet": "^1.1.0", "@emotion/utils": "^1.0.0", "@emotion/weak-memoize": "^0.2.5", - "stylis": "^4.0.3" + "stylis": "4.0.13" }, "dependencies": { - "@emotion/memoize": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.5.tgz", - "integrity": "sha512-igX9a37DR2ZPGYtV6suZ6whr8pTFtyHL3K/oLUotxpSVO2ASaprmAe2Dkq7tBo7CRY7MMDrAa9nuQP9/YG8FxQ==" - }, "@emotion/sheet": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.0.1.tgz", - "integrity": "sha512-GbIvVMe4U+Zc+929N1V7nW6YYJtidj31lidSmdYcWozwoBIObXBnaJkKNDjZrLm9Nc0BR+ZyHNaRZxqNZbof5g==" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.1.0.tgz", + "integrity": "sha512-u0AX4aSo25sMAygCuQTzS+HsImZFuS8llY8O7b9MDRzbJM0kVJlAz6KNDqcG7pOuQZJmj/8X/rAW+66kMnMW+g==" + }, + "stylis": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.0.13.tgz", + "integrity": "sha512-xGPXiFVl4YED9Jh7Euv2V220mriG9u4B2TA6Ybjc1catrstKD2PpIdU3U0RKpkVBC2EhmL/F0sPCr9vrFTNRag==" } } }, @@ -1914,69 +1813,100 @@ "babel-plugin-emotion": "^10.0.27" } }, + "@emotion/serialize": { + "version": "0.11.16", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-0.11.16.tgz", + "integrity": "sha512-G3J4o8by0VRrO+PFeSc3js2myYNOXVJ3Ya+RGVxnshRYgsvErfAOglKAiy1Eo1vhzxqtUvjCyS5gtewzkmvSSg==", + "dev": true, + "requires": { + "@emotion/hash": "0.8.0", + "@emotion/memoize": "0.7.4", + "@emotion/unitless": "0.7.5", + "@emotion/utils": "0.11.3", + "csstype": "^2.5.7" + } + }, "@emotion/utils": { "version": "0.11.3", "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-0.11.3.tgz", "integrity": "sha512-0o4l6pZC+hI88+bzuaX/6BgOvQVhbt2PfmxauVaYOGgbsAw14wdKyvMCZXnsnsHys94iadcF+RG/wZyx6+ZZBw==", "dev": true + }, + "csstype": { + "version": "2.6.19", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.19.tgz", + "integrity": "sha512-ZVxXaNy28/k3kJg0Fou5MiYpp88j7H9hLZp8PDC3jV0WFjfH5E9xHb56L0W59cPbKbcHXeP4qyT8PrHp8t6LcQ==", + "dev": true } } }, "@emotion/css": { - "version": "11.1.3", - "resolved": "https://registry.npmjs.org/@emotion/css/-/css-11.1.3.tgz", - "integrity": "sha512-RSQP59qtCNTf5NWD6xM08xsQdCZmVYnX/panPYvB6LQAPKQB6GL49Njf0EMbS3CyDtrlWsBcmqBtysFvfWT3rA==", + "version": "11.7.1", + "resolved": "https://registry.npmjs.org/@emotion/css/-/css-11.7.1.tgz", + "integrity": "sha512-RUUgPlMZunlc7SE5A6Hg+VWRzb2cU6O9xlV78KCFgcnl25s7Qz/20oQg71iKudpLqk7xj0vhbJlwcJJMT0BOZg==", "requires": { - "@emotion/babel-plugin": "^11.0.0", - "@emotion/cache": "^11.1.3", + "@emotion/babel-plugin": "^11.7.1", + "@emotion/cache": "^11.7.1", "@emotion/serialize": "^1.0.0", - "@emotion/sheet": "^1.0.0", + "@emotion/sheet": "^1.0.3", "@emotion/utils": "^1.0.0" }, "dependencies": { + "@emotion/babel-plugin": { + "version": "11.7.1", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.7.1.tgz", + "integrity": "sha512-K3/6Y+J/sIAjplf3uIteWLhPuOyuMNnE+iyYnTF/m294vc6IL90kTHp7y8ldZYbpKlP17rpOWDKM9DvTcrOmNQ==", + "requires": { + "@babel/helper-module-imports": "^7.12.13", + "@babel/plugin-syntax-jsx": "^7.12.13", + "@babel/runtime": "^7.13.10", + "@emotion/hash": "^0.8.0", + "@emotion/memoize": "^0.7.5", + "@emotion/serialize": "^1.0.2", + "babel-plugin-macros": "^2.6.1", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^4.0.0", + "find-root": "^1.1.0", + "source-map": "^0.5.7", + "stylis": "4.0.13" + } + }, "@emotion/memoize": { "version": "0.7.5", "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.5.tgz", "integrity": "sha512-igX9a37DR2ZPGYtV6suZ6whr8pTFtyHL3K/oLUotxpSVO2ASaprmAe2Dkq7tBo7CRY7MMDrAa9nuQP9/YG8FxQ==" }, - "@emotion/serialize": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.0.2.tgz", - "integrity": "sha512-95MgNJ9+/ajxU7QIAruiOAdYNjxZX7G2mhgrtDWswA21VviYIRP1R5QilZ/bDY42xiKsaktP4egJb3QdYQZi1A==", - "requires": { - "@emotion/hash": "^0.8.0", - "@emotion/memoize": "^0.7.4", - "@emotion/unitless": "^0.7.5", - "@emotion/utils": "^1.0.0", - "csstype": "^3.0.2" - } - }, "@emotion/sheet": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.0.1.tgz", - "integrity": "sha512-GbIvVMe4U+Zc+929N1V7nW6YYJtidj31lidSmdYcWozwoBIObXBnaJkKNDjZrLm9Nc0BR+ZyHNaRZxqNZbof5g==" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.1.0.tgz", + "integrity": "sha512-u0AX4aSo25sMAygCuQTzS+HsImZFuS8llY8O7b9MDRzbJM0kVJlAz6KNDqcG7pOuQZJmj/8X/rAW+66kMnMW+g==" }, - "csstype": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.8.tgz", - "integrity": "sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw==" + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" + }, + "stylis": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.0.13.tgz", + "integrity": "sha512-xGPXiFVl4YED9Jh7Euv2V220mriG9u4B2TA6Ybjc1catrstKD2PpIdU3U0RKpkVBC2EhmL/F0sPCr9vrFTNRag==" } } }, "@emotion/css-prettifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@emotion/css-prettifier/-/css-prettifier-1.0.0.tgz", - "integrity": "sha512-efxSrRTiTqHTQVKW15Gz5H4pNAw8OqcG8NaiwkJIkqIdNXTD4Qr1zC1Ou6r2acd1oJJ2s56nb1ClnXMiWoj6gQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@emotion/css-prettifier/-/css-prettifier-1.0.1.tgz", + "integrity": "sha512-cA9Dtol47mtvWKasPC+8tkh2DS0wBkX0MMHKieXGSkGyx079V7yFY85KC0pPalcIy+vi0LbMR9DNyiJBqYgJ1Q==", "dev": true, "requires": { "@emotion/memoize": "^0.7.4", - "stylis": "^4.0.3" + "stylis": "4.0.13" }, "dependencies": { - "@emotion/memoize": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.5.tgz", - "integrity": "sha512-igX9a37DR2ZPGYtV6suZ6whr8pTFtyHL3K/oLUotxpSVO2ASaprmAe2Dkq7tBo7CRY7MMDrAa9nuQP9/YG8FxQ==", + "stylis": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.0.13.tgz", + "integrity": "sha512-xGPXiFVl4YED9Jh7Euv2V220mriG9u4B2TA6Ybjc1catrstKD2PpIdU3U0RKpkVBC2EhmL/F0sPCr9vrFTNRag==", "dev": true } } @@ -1990,80 +1920,35 @@ "version": "0.8.8", "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz", "integrity": "sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==", - "optional": true, "requires": { "@emotion/memoize": "0.7.4" } }, "@emotion/jest": { - "version": "11.3.0", - "resolved": "https://registry.npmjs.org/@emotion/jest/-/jest-11.3.0.tgz", - "integrity": "sha512-LZqYc3yerhic1IvAcEwBLRs1DsUt3oY7Oz6n+e+HU32iYOK/vpfzlhgmQURE94BHfv6eCOj6DV38f3jSnIkBkQ==", + "version": "11.7.1", + "resolved": "https://registry.npmjs.org/@emotion/jest/-/jest-11.7.1.tgz", + "integrity": "sha512-IYKyiIm4a7LINESYTa6aAizRj6YTwIvpD9s9yDzkrOEJXKwCqWWOTVNNOJKBygim3fv4lC9KM5jG5qzHvy4ZJg==", "dev": true, "requires": { "@babel/runtime": "^7.13.10", - "@emotion/css-prettifier": "^1.0.0", + "@emotion/css-prettifier": "^1.0.1", "chalk": "^4.1.0", "specificity": "^0.4.1", - "stylis": "^4.0.3" + "stylis": "4.0.13" }, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "stylis": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.0.13.tgz", + "integrity": "sha512-xGPXiFVl4YED9Jh7Euv2V220mriG9u4B2TA6Ybjc1catrstKD2PpIdU3U0RKpkVBC2EhmL/F0sPCr9vrFTNRag==", "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } } } }, "@emotion/memoize": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz", - "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==", - "optional": true + "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==" }, "@emotion/native": { "version": "11.0.0", @@ -2103,93 +1988,36 @@ } }, "@emotion/react": { - "version": "11.4.0", - "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.4.0.tgz", - "integrity": "sha512-4XklWsl9BdtatLoJpSjusXhpKv9YVteYKh9hPKP1Sxl+mswEFoUe0WtmtWjxEjkA51DQ2QRMCNOvKcSlCQ7ivg==", + "version": "11.7.1", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.7.1.tgz", + "integrity": "sha512-DV2Xe3yhkF1yT4uAUoJcYL1AmrnO5SVsdfvu+fBuS7IbByDeTVx9+wFmvx9Idzv7/78+9Mgx2Hcmr7Fex3tIyw==", "requires": { "@babel/runtime": "^7.13.10", - "@emotion/cache": "^11.4.0", + "@emotion/cache": "^11.7.1", "@emotion/serialize": "^1.0.2", - "@emotion/sheet": "^1.0.1", + "@emotion/sheet": "^1.1.0", "@emotion/utils": "^1.0.0", "@emotion/weak-memoize": "^0.2.5", "hoist-non-react-statics": "^3.3.1" }, "dependencies": { - "@emotion/cache": { - "version": "11.4.0", - "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.4.0.tgz", - "integrity": "sha512-Zx70bjE7LErRO9OaZrhf22Qye1y4F7iDl+ITjet0J+i+B88PrAOBkKvaAWhxsZf72tDLajwCgfCjJ2dvH77C3g==", - "requires": { - "@emotion/memoize": "^0.7.4", - "@emotion/sheet": "^1.0.0", - "@emotion/utils": "^1.0.0", - "@emotion/weak-memoize": "^0.2.5", - "stylis": "^4.0.3" - } - }, - "@emotion/memoize": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.5.tgz", - "integrity": "sha512-igX9a37DR2ZPGYtV6suZ6whr8pTFtyHL3K/oLUotxpSVO2ASaprmAe2Dkq7tBo7CRY7MMDrAa9nuQP9/YG8FxQ==" - }, - "@emotion/serialize": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.0.2.tgz", - "integrity": "sha512-95MgNJ9+/ajxU7QIAruiOAdYNjxZX7G2mhgrtDWswA21VviYIRP1R5QilZ/bDY42xiKsaktP4egJb3QdYQZi1A==", - "requires": { - "@emotion/hash": "^0.8.0", - "@emotion/memoize": "^0.7.4", - "@emotion/unitless": "^0.7.5", - "@emotion/utils": "^1.0.0", - "csstype": "^3.0.2" - } - }, "@emotion/sheet": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.0.1.tgz", - "integrity": "sha512-GbIvVMe4U+Zc+929N1V7nW6YYJtidj31lidSmdYcWozwoBIObXBnaJkKNDjZrLm9Nc0BR+ZyHNaRZxqNZbof5g==" - }, - "csstype": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.8.tgz", - "integrity": "sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw==" - }, - "hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "requires": { - "react-is": "^16.7.0" - } + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.1.0.tgz", + "integrity": "sha512-u0AX4aSo25sMAygCuQTzS+HsImZFuS8llY8O7b9MDRzbJM0kVJlAz6KNDqcG7pOuQZJmj/8X/rAW+66kMnMW+g==" } } }, "@emotion/serialize": { - "version": "0.11.16", - "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-0.11.16.tgz", - "integrity": "sha512-G3J4o8by0VRrO+PFeSc3js2myYNOXVJ3Ya+RGVxnshRYgsvErfAOglKAiy1Eo1vhzxqtUvjCyS5gtewzkmvSSg==", - "dev": true, + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.0.2.tgz", + "integrity": "sha512-95MgNJ9+/ajxU7QIAruiOAdYNjxZX7G2mhgrtDWswA21VviYIRP1R5QilZ/bDY42xiKsaktP4egJb3QdYQZi1A==", "requires": { - "@emotion/hash": "0.8.0", - "@emotion/memoize": "0.7.4", - "@emotion/unitless": "0.7.5", - "@emotion/utils": "0.11.3", - "csstype": "^2.5.7" - }, - "dependencies": { - "@emotion/memoize": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz", - "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==", - "dev": true - }, - "@emotion/utils": { - "version": "0.11.3", - "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-0.11.3.tgz", - "integrity": "sha512-0o4l6pZC+hI88+bzuaX/6BgOvQVhbt2PfmxauVaYOGgbsAw14wdKyvMCZXnsnsHys94iadcF+RG/wZyx6+ZZBw==", - "dev": true - } + "@emotion/hash": "^0.8.0", + "@emotion/memoize": "^0.7.4", + "@emotion/unitless": "^0.7.5", + "@emotion/utils": "^1.0.0", + "csstype": "^3.0.2" } }, "@emotion/sheet": { @@ -2199,46 +2027,24 @@ "dev": true }, "@emotion/styled": { - "version": "11.3.0", - "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.3.0.tgz", - "integrity": "sha512-fUoLcN3BfMiLlRhJ8CuPUMEyKkLEoM+n+UyAbnqGEsCd5IzKQ7VQFLtzpJOaCD2/VR2+1hXQTnSZXVJeiTNltA==", + "version": "11.6.0", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.6.0.tgz", + "integrity": "sha512-mxVtVyIOTmCAkFbwIp+nCjTXJNgcz4VWkOYQro87jE2QBTydnkiYusMrRGFtzuruiGK4dDaNORk4gH049iiQuw==", "requires": { "@babel/runtime": "^7.13.10", "@emotion/babel-plugin": "^11.3.0", - "@emotion/is-prop-valid": "^1.1.0", + "@emotion/is-prop-valid": "^1.1.1", "@emotion/serialize": "^1.0.2", "@emotion/utils": "^1.0.0" }, "dependencies": { "@emotion/is-prop-valid": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.1.0.tgz", - "integrity": "sha512-9RkilvXAufQHsSsjQ3PIzSns+pxuX4EW8EbGeSPjZMHuMx6z/MOzb9LpqNieQX4F3mre3NWS2+X3JNRHTQztUQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.1.1.tgz", + "integrity": "sha512-bW1Tos67CZkOURLc0OalnfxtSXQJMrAMV0jZTVGJUPSOd4qgjF3+tTD5CwJM13PHA8cltGW1WGbbvV9NpvUZPw==", "requires": { "@emotion/memoize": "^0.7.4" } - }, - "@emotion/memoize": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.5.tgz", - "integrity": "sha512-igX9a37DR2ZPGYtV6suZ6whr8pTFtyHL3K/oLUotxpSVO2ASaprmAe2Dkq7tBo7CRY7MMDrAa9nuQP9/YG8FxQ==" - }, - "@emotion/serialize": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.0.2.tgz", - "integrity": "sha512-95MgNJ9+/ajxU7QIAruiOAdYNjxZX7G2mhgrtDWswA21VviYIRP1R5QilZ/bDY42xiKsaktP4egJb3QdYQZi1A==", - "requires": { - "@emotion/hash": "^0.8.0", - "@emotion/memoize": "^0.7.4", - "@emotion/unitless": "^0.7.5", - "@emotion/utils": "^1.0.0", - "csstype": "^3.0.2" - } - }, - "csstype": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.8.tgz", - "integrity": "sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw==" } } }, @@ -2269,11 +2075,30 @@ "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==", "dev": true }, + "@emotion/serialize": { + "version": "0.11.16", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-0.11.16.tgz", + "integrity": "sha512-G3J4o8by0VRrO+PFeSc3js2myYNOXVJ3Ya+RGVxnshRYgsvErfAOglKAiy1Eo1vhzxqtUvjCyS5gtewzkmvSSg==", + "dev": true, + "requires": { + "@emotion/hash": "0.8.0", + "@emotion/memoize": "0.7.4", + "@emotion/unitless": "0.7.5", + "@emotion/utils": "0.11.3", + "csstype": "^2.5.7" + } + }, "@emotion/utils": { "version": "0.11.3", "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-0.11.3.tgz", "integrity": "sha512-0o4l6pZC+hI88+bzuaX/6BgOvQVhbt2PfmxauVaYOGgbsAw14wdKyvMCZXnsnsHys94iadcF+RG/wZyx6+ZZBw==", "dev": true + }, + "csstype": { + "version": "2.6.19", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.19.tgz", + "integrity": "sha512-ZVxXaNy28/k3kJg0Fou5MiYpp88j7H9hLZp8PDC3jV0WFjfH5E9xHb56L0W59cPbKbcHXeP4qyT8PrHp8t6LcQ==", + "dev": true } } }, @@ -2299,16 +2124,22 @@ "integrity": "sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA==" }, "@es-joy/jsdoccomment": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.4.4.tgz", - "integrity": "sha512-ua4qDt9dQb4qt5OI38eCZcQZYE5Bq3P0GzgvDARdT8Lt0mAUpxKTPy8JGGqEvF77tG1irKDZ3WreeezEa3P43w==", + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.12.0.tgz", + "integrity": "sha512-Gw4/j9v36IKY8ET+W0GoOzrRw17xjf21EIFFRL3zx21fF5MnqmeNpNi+PU/LKjqLpPb2Pw2XdlJbYM31VVo/PQ==", "dev": true, "requires": { - "comment-parser": "^1.1.5", + "comment-parser": "1.2.4", "esquery": "^1.4.0", - "jsdoctypeparser": "^9.0.0" + "jsdoc-type-pratt-parser": "2.0.0" }, "dependencies": { + "comment-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.2.4.tgz", + "integrity": "sha512-pm0b+qv+CkWNriSTMsfnjChF9kH0kxz55y44Wo5le9qLxMj5xDQAaEd9ZN1ovSuk9CsrncWaFwgpOMg7ClJwkw==", + "dev": true + }, "esquery": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", @@ -2319,27 +2150,26 @@ } }, "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true } } }, "@eslint/eslintrc": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.2.2.tgz", - "integrity": "sha512-EfB5OHNYp1F4px/LI/FEnGylop7nOqkQ1LRzCM0KccA2U8tvV8w01KBv37LbO7nW4H+YhKyo2LcJhRwjjV17QQ==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.4.tgz", + "integrity": "sha512-h8Vx6MdxwWI2WM8/zREHMoqdgLNXEL4QX3MWSVMdyNJGvXVOs+6lp+m2hc3FnuMHDc4poxFNI20vCk0OmI4G0Q==", "dev": true, "requires": { "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^12.1.0", + "debug": "^4.3.2", + "espree": "^9.0.0", + "globals": "^13.9.0", "ignore": "^4.0.6", "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "lodash": "^4.17.19", + "js-yaml": "^4.1.0", "minimatch": "^3.0.4", "strip-json-comments": "^3.1.1" }, @@ -2356,28 +2186,19 @@ "uri-js": "^4.2.2" } }, - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dev": true, "requires": { - "type-fest": "^0.8.1" + "ms": "2.1.2" } }, "ignore": { @@ -2396,6 +2217,15 @@ "resolve-from": "^4.0.0" } }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -2413,12 +2243,6 @@ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true - }, - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true } } }, @@ -2539,15 +2363,6 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true - }, - "ssri": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", - "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", - "dev": true, - "requires": { - "figgy-pudding": "^3.5.1" - } } } }, @@ -2673,6 +2488,27 @@ "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", "dev": true }, + "fs-minipass": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", + "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", + "dev": true, + "requires": { + "minipass": "^2.6.0" + }, + "dependencies": { + "minipass": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + } + } + }, "get-stream": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", @@ -2702,6 +2538,15 @@ "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", "dev": true }, + "ignore-walk": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.4.tgz", + "integrity": "sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==", + "dev": true, + "requires": { + "minimatch": "^3.0.4" + } + }, "lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -2711,6 +2556,27 @@ "yallist": "^3.0.2" } }, + "minizlib": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", + "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", + "dev": true, + "requires": { + "minipass": "^2.9.0" + }, + "dependencies": { + "minipass": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + } + } + }, "mississippi": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", @@ -2753,11 +2619,16 @@ "validate-npm-package-name": "^3.0.0" } }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true + "npm-packlist": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.8.tgz", + "integrity": "sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==", + "dev": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1", + "npm-normalize-package-bin": "^1.0.1" + } }, "pump": { "version": "3.0.0", @@ -2800,13 +2671,40 @@ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true }, - "ssri": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", - "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", - "dev": true, - "requires": { - "figgy-pudding": "^3.5.1" + "tar": { + "version": "4.4.19", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz", + "integrity": "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==", + "dev": true, + "requires": { + "chownr": "^1.1.4", + "fs-minipass": "^1.2.7", + "minipass": "^2.9.0", + "minizlib": "^1.3.3", + "mkdirp": "^0.5.5", + "safe-buffer": "^5.2.1", + "yallist": "^3.1.1" + }, + "dependencies": { + "minipass": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + } } }, "unique-filename": { @@ -2818,12 +2716,6 @@ "unique-slug": "^2.0.0" } }, - "y18n": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", - "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", - "dev": true - }, "yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", @@ -2832,53 +2724,81 @@ } } }, - "@hapi/address": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.0.0.tgz", - "integrity": "sha512-mV6T0IYqb0xL1UALPFplXYQmR0twnXG0M6jUswpquqT2sD12BOiCiLy3EvMp/Fy7s3DZElC4/aPjEjo2jeZpvw==", - "dev": true + "@floating-ui/core": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-0.6.2.tgz", + "integrity": "sha512-jktYRmZwmau63adUG3GKOAVCofBXkk55S/zQ94XOorAHhwqFIOFAy1rSp2N0Wp6/tGbe9V3u/ExlGZypyY17rg==" }, - "@hapi/hoek": { - "version": "6.2.4", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-6.2.4.tgz", - "integrity": "sha512-HOJ20Kc93DkDVvjwHyHawPwPkX44sIrbXazAUDiUXaY2R9JwQGo2PhFfnQtdrsIe4igjG2fPgMra7NYw7qhy0A==", - "dev": true + "@floating-ui/dom": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-0.4.5.tgz", + "integrity": "sha512-b+prvQgJt8pieaKYMSJBXHxX/DYwdLsAWxKYqnO5dO2V4oo/TYBZJAUQCVNjTWWsrs6o4VDrNcP9+E70HAhJdw==", + "requires": { + "@floating-ui/core": "^0.6.2" + } }, - "@hapi/joi": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-15.1.0.tgz", - "integrity": "sha512-n6kaRQO8S+kepUTbXL9O/UOL788Odqs38/VOfoCrATDtTvyfiO3fgjlSRaNkHabpTLgM7qru9ifqXlXbXk8SeQ==", - "dev": true, + "@floating-ui/react-dom": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-0.6.3.tgz", + "integrity": "sha512-hC+pS5D6AgS2wWjbmSQ6UR6Kpy+drvWGJIri6e1EDGADTPsCaa4KzCgmCczHrQeInx9tqs81EyDmbKJYY2swKg==", "requires": { - "@hapi/address": "2.x.x", - "@hapi/hoek": "6.x.x", - "@hapi/marker": "1.x.x", - "@hapi/topo": "3.x.x" + "@floating-ui/dom": "^0.4.5", + "use-isomorphic-layout-effect": "^1.1.1" } }, - "@hapi/marker": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@hapi/marker/-/marker-1.0.0.tgz", - "integrity": "sha512-JOfdekTXnJexfE8PyhZFyHvHjt81rBFSAbTIRAhF2vv/2Y1JzoKsGqxH/GpZJoF7aEfYok8JVcAHmSz1gkBieA==", + "@gar/promisify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.2.tgz", + "integrity": "sha512-82cpyJyKRoQoRi+14ibCeGPu0CwypgtBAdBhq1WfvagpCZNKqwXbKwXllYSMG91DhmG4jt9gN8eP6lGOtozuaw==", "dev": true }, + "@hapi/hoek": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.1.tgz", + "integrity": "sha512-gfta+H8aziZsm8pZa0vj04KO6biEiisppNgA1kbJvFrrWu9Vm7eaUEy76DIxsuTaWvti5fkJVhllWc6ZTE+Mdw==" + }, "@hapi/topo": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.2.tgz", - "integrity": "sha512-r+aumOqJ5QbD6aLPJWqVjMAPsx5pZKz+F5yPqXZ/WWG9JTtHbQqlzrJoknJ0iJxLj9vlXtmpSdjlkszseeG8OA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "requires": { + "@hapi/hoek": "^9.0.0" + } + }, + "@humanwhocodes/config-array": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.6.0.tgz", + "integrity": "sha512-JQlEKbcgEUjBFhLIF4iqM7u/9lwgHRBcpHrmUNCALK0Q3amXN6lxdoXLnF0sm11E9VqTmBALR87IlUg1bZ8A9A==", "dev": true, "requires": { - "@hapi/hoek": "8.x.x" + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" }, "dependencies": { - "@hapi/hoek": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.0.2.tgz", - "integrity": "sha512-O6o6mrV4P65vVccxymuruucb+GhP2zl9NLCG8OdoFRS8BEGw3vwpPp20wpAtpbQQxz1CEUtmxJGgWhjq1XA3qw==", + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true } } }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, "@istanbuljs/load-nyc-config": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.0.0.tgz", @@ -2960,124 +2880,176 @@ "integrity": "sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==", "dev": true }, + "@jest/console": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.4.2.tgz", + "integrity": "sha512-xknHThRsPB/To1FUbi6pCe43y58qFC03zfb6R7fDb/FfC7k2R3i1l+izRBJf8DI46KhYGRaF14Eo9A3qbBoixg==", + "dev": true, + "requires": { + "@jest/types": "^27.4.2", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.4.2", + "jest-util": "^27.4.2", + "slash": "^3.0.0" + }, + "dependencies": { + "@jest/types": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.4.2.tgz", + "integrity": "sha512-j35yw0PMTPpZsUoOBiuHzr1zTYoad1cVIE0ajEjcrJONxxrko/IRGKkXx3os0Nsi4Hu3+5VmDbVfq5WhG/pWAg==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + } + }, + "@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "ci-info": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", + "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==", + "dev": true + }, + "graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", + "dev": true + }, + "jest-util": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.4.2.tgz", + "integrity": "sha512-YuxxpXU6nlMan9qyLuxHaMMOzXAl5aGZWCSzben5DhLHemYQxCc4YK+4L3ZrCutT8GPQ+ui9k5D8rUJoDioMnA==", + "dev": true, + "requires": { + "@jest/types": "^27.4.2", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.4", + "picomatch": "^2.2.3" + } + }, + "picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "dev": true + } + } + }, "@jest/core": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-26.6.3.tgz", - "integrity": "sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw==", + "version": "27.4.5", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.4.5.tgz", + "integrity": "sha512-3tm/Pevmi8bDsgvo73nX8p/WPng6KWlCyScW10FPEoN1HU4pwI83tJ3TsFvi1FfzsjwUlMNEPowgb/rPau/LTQ==", "dev": true, "requires": { - "@jest/console": "^26.6.2", - "@jest/reporters": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", + "@jest/console": "^27.4.2", + "@jest/reporters": "^27.4.5", + "@jest/test-result": "^27.4.2", + "@jest/transform": "^27.4.5", + "@jest/types": "^27.4.2", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", + "emittery": "^0.8.1", "exit": "^0.1.2", "graceful-fs": "^4.2.4", - "jest-changed-files": "^26.6.2", - "jest-config": "^26.6.3", - "jest-haste-map": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-resolve-dependencies": "^26.6.3", - "jest-runner": "^26.6.3", - "jest-runtime": "^26.6.3", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "jest-watcher": "^26.6.2", - "micromatch": "^4.0.2", - "p-each-series": "^2.1.0", + "jest-changed-files": "^27.4.2", + "jest-config": "^27.4.5", + "jest-haste-map": "^27.4.5", + "jest-message-util": "^27.4.2", + "jest-regex-util": "^27.4.0", + "jest-resolve": "^27.4.5", + "jest-resolve-dependencies": "^27.4.5", + "jest-runner": "^27.4.5", + "jest-runtime": "^27.4.5", + "jest-snapshot": "^27.4.5", + "jest-util": "^27.4.2", + "jest-validate": "^27.4.2", + "jest-watcher": "^27.4.2", + "micromatch": "^4.0.4", "rimraf": "^3.0.0", "slash": "^3.0.0", "strip-ansi": "^6.0.0" }, "dependencies": { - "@jest/console": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.2.tgz", - "integrity": "sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==", + "@jest/transform": { + "version": "27.4.5", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.4.5.tgz", + "integrity": "sha512-PuMet2UlZtlGzwc6L+aZmR3I7CEBpqadO03pU40l2RNY2fFJ191b9/ITB44LNOhVtsyykx0OZvj0PCyuLm7Eew==", "dev": true, "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*", + "@babel/core": "^7.1.0", + "@jest/types": "^27.4.2", + "babel-plugin-istanbul": "^6.0.0", "chalk": "^4.0.0", - "jest-message-util": "^26.6.2", - "jest-util": "^26.6.2", - "slash": "^3.0.0" - } - }, - "@jest/test-result": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.2.tgz", - "integrity": "sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==", - "dev": true, - "requires": { - "@jest/console": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^27.4.5", + "jest-regex-util": "^27.4.0", + "jest-util": "^27.4.2", + "micromatch": "^4.0.4", + "pirates": "^4.0.1", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" } }, "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.4.2.tgz", + "integrity": "sha512-j35yw0PMTPpZsUoOBiuHzr1zTYoad1cVIE0ajEjcrJONxxrko/IRGKkXx3os0Nsi4Hu3+5VmDbVfq5WhG/pWAg==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^15.0.0", + "@types/yargs": "^16.0.0", "chalk": "^4.0.0" } }, - "@types/istanbul-reports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", - "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", + "@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", "dev": true, "requires": { - "@types/istanbul-lib-report": "*" + "@types/yargs-parser": "*" } }, - "@types/stack-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.0.tgz", - "integrity": "sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==", - "dev": true - }, "ansi-escapes": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", - "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, "requires": { - "type-fest": "^0.11.0" + "type-fest": "^0.21.3" } }, "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "dev": true, "requires": { "normalize-path": "^3.0.0", @@ -3093,31 +3065,10 @@ "fill-range": "^7.0.1" } }, - "camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", - "dev": true - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "ci-info": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", + "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==", "dev": true }, "fill-range": { @@ -3129,17 +3080,10 @@ "to-regex-range": "^5.0.1" } }, - "fsevents": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.2.1.tgz", - "integrity": "sha512-bTLYHSeC0UH/EFXS9KqWnXuOl/wHK5Z/d+ghd5AsFMYN7wIGkUCOJyzy88+wJKkZPGON8u4Z9f6U4FdgURE9qA==", - "dev": true, - "optional": true - }, "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", "dev": true }, "has-flag": { @@ -3154,55 +3098,37 @@ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, - "jest-get-type": { - "version": "26.3.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", - "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", - "dev": true - }, "jest-haste-map": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", - "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", + "version": "27.4.5", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.4.5.tgz", + "integrity": "sha512-oJm1b5qhhPs78K24EDGifWS0dELYxnoBiDhatT/FThgB9yxqUm5F6li3Pv+Q+apMBmmPNzOBnZ7ZxWMB1Leq1Q==", "dev": true, "requires": { - "@jest/types": "^26.6.2", + "@jest/types": "^27.4.2", "@types/graceful-fs": "^4.1.2", "@types/node": "*", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", - "fsevents": "^2.1.2", + "fsevents": "^2.3.2", "graceful-fs": "^4.2.4", - "jest-regex-util": "^26.0.0", - "jest-serializer": "^26.6.2", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "micromatch": "^4.0.2", - "sane": "^4.0.3", + "jest-regex-util": "^27.4.0", + "jest-serializer": "^27.4.0", + "jest-util": "^27.4.2", + "jest-worker": "^27.4.5", + "micromatch": "^4.0.4", "walker": "^1.0.7" } }, - "jest-message-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz", - "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@jest/types": "^26.6.2", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.2", - "pretty-format": "^26.6.2", - "slash": "^3.0.0", - "stack-utils": "^2.0.2" - } + "jest-regex-util": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.4.0.tgz", + "integrity": "sha512-WeCpMpNnqJYMQoOjm1nTtsgbR4XHAk1u00qDoNBQoykM280+/TmgA5Qh5giC1ecy6a5d4hbSsHzpBtu5yvlbEg==", + "dev": true }, "jest-serializer": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", - "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.4.0.tgz", + "integrity": "sha512-RDhpcn5f1JYTX2pvJAGDcnsNTnsV9bjYPU8xcV+xPwOXnUPOQwf4ZEuiU6G9H1UztH+OapMgu/ckEVwO87PwnQ==", "dev": true, "requires": { "@types/node": "*", @@ -3210,58 +3136,54 @@ } }, "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.4.2.tgz", + "integrity": "sha512-YuxxpXU6nlMan9qyLuxHaMMOzXAl5aGZWCSzben5DhLHemYQxCc4YK+4L3ZrCutT8GPQ+ui9k5D8rUJoDioMnA==", "dev": true, "requires": { - "@jest/types": "^26.6.2", + "@jest/types": "^27.4.2", "@types/node": "*", "chalk": "^4.0.0", + "ci-info": "^3.2.0", "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" - } - }, - "jest-validate": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.2.tgz", - "integrity": "sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "camelcase": "^6.0.0", - "chalk": "^4.0.0", - "jest-get-type": "^26.3.0", - "leven": "^3.1.0", - "pretty-format": "^26.6.2" + "picomatch": "^2.2.3" + }, + "dependencies": { + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + } } }, "jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "version": "27.4.5", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.5.tgz", + "integrity": "sha512-f2s8kEdy15cv9r7q4KkzGXvlY0JTcmCbMHZBfSQDwW77REr45IDWwd0lksDFeVHH2jJ5pqb90T77XscrjeGzzg==", "dev": true, "requires": { "@types/node": "*", "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" + "supports-color": "^8.0.0" } }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", "dev": true, "requires": { "braces": "^3.0.1", - "picomatch": "^2.0.5" + "picomatch": "^2.2.3" + }, + "dependencies": { + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + } } }, "normalize-path": { @@ -3270,52 +3192,25 @@ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true }, - "pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - } - }, - "react-is": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.1.tgz", - "integrity": "sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, - "stack-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==", - "dev": true, - "requires": { - "escape-string-regexp": "^2.0.0" - } - }, "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { - "ansi-regex": "^5.0.0" + "ansi-regex": "^5.0.1" } }, "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -3331,399 +3226,310 @@ } }, "type-fest": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", - "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true + }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } } } }, "@jest/create-cache-key-function": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/create-cache-key-function/-/create-cache-key-function-26.6.2.tgz", - "integrity": "sha512-LgEuqU1f/7WEIPYqwLPIvvHuc1sB6gMVbT6zWhin3txYUNYK/kGQrC1F2WR4gR34YlI9bBtViTm5z98RqVZAaw==", + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/@jest/create-cache-key-function/-/create-cache-key-function-27.3.1.tgz", + "integrity": "sha512-21lx0HRgkznc5Tc2WGiXVYQQ6Vdfohs6CkLV2FLogLRb52f6v9SiSIjTNflu23lzEmY4EalLgQLxCfhgvREV6w==", "requires": { - "@jest/types": "^26.6.2" + "@jest/types": "^27.2.5" }, "dependencies": { "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.4.2.tgz", + "integrity": "sha512-j35yw0PMTPpZsUoOBiuHzr1zTYoad1cVIE0ajEjcrJONxxrko/IRGKkXx3os0Nsi4Hu3+5VmDbVfq5WhG/pWAg==", "requires": { "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^15.0.0", + "@types/yargs": "^16.0.0", "chalk": "^4.0.0" } }, - "@types/istanbul-reports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", - "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", + "@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", "requires": { - "@types/istanbul-lib-report": "*" + "@types/yargs-parser": "*" } } } }, "@jest/environment": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-26.6.2.tgz", - "integrity": "sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA==", + "version": "27.4.4", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.4.4.tgz", + "integrity": "sha512-q+niMx7cJgt/t/b6dzLOh4W8Ef/8VyKG7hxASK39jakijJzbFBGpptx3RXz13FFV7OishQ9lTbv+dQ5K3EhfDQ==", "dev": true, "requires": { - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", + "@jest/fake-timers": "^27.4.2", + "@jest/types": "^27.4.2", "@types/node": "*", - "jest-mock": "^26.6.2" + "jest-mock": "^27.4.2" }, "dependencies": { - "@jest/fake-timers": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-26.6.2.tgz", - "integrity": "sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA==", + "@jest/types": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.4.2.tgz", + "integrity": "sha512-j35yw0PMTPpZsUoOBiuHzr1zTYoad1cVIE0ajEjcrJONxxrko/IRGKkXx3os0Nsi4Hu3+5VmDbVfq5WhG/pWAg==", "dev": true, "requires": { - "@jest/types": "^26.6.2", - "@sinonjs/fake-timers": "^6.0.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "jest-message-util": "^26.6.2", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2" + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" } }, + "@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + } + } + }, + "@jest/fake-timers": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.4.2.tgz", + "integrity": "sha512-f/Xpzn5YQk5adtqBgvw1V6bF8Nx3hY0OIRRpCvWcfPl0EAjdqWPdhH3t/3XpiWZqtjIEHDyMKP9ajpva1l4Zmg==", + "dev": true, + "requires": { + "@jest/types": "^27.4.2", + "@sinonjs/fake-timers": "^8.0.1", + "@types/node": "*", + "jest-message-util": "^27.4.2", + "jest-mock": "^27.4.2", + "jest-util": "^27.4.2" + }, + "dependencies": { "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.4.2.tgz", + "integrity": "sha512-j35yw0PMTPpZsUoOBiuHzr1zTYoad1cVIE0ajEjcrJONxxrko/IRGKkXx3os0Nsi4Hu3+5VmDbVfq5WhG/pWAg==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^15.0.0", + "@types/yargs": "^16.0.0", "chalk": "^4.0.0" } }, - "@types/istanbul-reports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", - "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", + "@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", "dev": true, "requires": { - "@types/istanbul-lib-report": "*" + "@types/yargs-parser": "*" } }, - "@types/stack-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.0.tgz", - "integrity": "sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==", + "ci-info": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", + "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==", "dev": true }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", "dev": true }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "jest-util": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.4.2.tgz", + "integrity": "sha512-YuxxpXU6nlMan9qyLuxHaMMOzXAl5aGZWCSzben5DhLHemYQxCc4YK+4L3ZrCutT8GPQ+ui9k5D8rUJoDioMnA==", "dev": true, "requires": { - "color-convert": "^2.0.1" + "@jest/types": "^27.4.2", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.4", + "picomatch": "^2.2.3" } }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "dev": true + } + } + }, + "@jest/globals": { + "version": "27.4.4", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.4.4.tgz", + "integrity": "sha512-bqpqQhW30BOreXM8bA8t8JbOQzsq/WnPTnBl+It3UxAD9J8yxEAaBEylHx1dtBapAr/UBk8GidXbzmqnee8tYQ==", + "dev": true, + "requires": { + "@jest/environment": "^27.4.4", + "@jest/types": "^27.4.2", + "expect": "^27.4.2" + }, + "dependencies": { + "@jest/types": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.4.2.tgz", + "integrity": "sha512-j35yw0PMTPpZsUoOBiuHzr1zTYoad1cVIE0ajEjcrJONxxrko/IRGKkXx3os0Nsi4Hu3+5VmDbVfq5WhG/pWAg==", "dev": true, "requires": { - "fill-range": "^7.0.1" + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" } }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", "dev": true, "requires": { - "color-name": "~1.1.4" + "@types/yargs-parser": "*" } }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "expect": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.4.2.tgz", + "integrity": "sha512-BjAXIDC6ZOW+WBFNg96J22D27Nq5ohn+oGcuP2rtOtcjuxNoV9McpQ60PcQWhdFOSBIQdR72e+4HdnbZTFSTyg==", "dev": true, "requires": { - "to-regex-range": "^5.0.1" + "@jest/types": "^27.4.2", + "ansi-styles": "^5.0.0", + "jest-get-type": "^27.4.0", + "jest-matcher-utils": "^27.4.2", + "jest-message-util": "^27.4.2", + "jest-regex-util": "^27.4.0" } }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "jest-get-type": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.4.0.tgz", + "integrity": "sha512-tk9o+ld5TWq41DkK14L4wox4s2D9MtTpKaAVzXfr5CUKm5ZK2ExcaFE0qls2W71zE/6R2TxxrK9w2r6svAFDBQ==", "dev": true }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "jest-regex-util": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.4.0.tgz", + "integrity": "sha512-WeCpMpNnqJYMQoOjm1nTtsgbR4XHAk1u00qDoNBQoykM280+/TmgA5Qh5giC1ecy6a5d4hbSsHzpBtu5yvlbEg==", "dev": true - }, - "jest-message-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz", - "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==", + } + } + }, + "@jest/reporters": { + "version": "27.4.5", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.4.5.tgz", + "integrity": "sha512-3orsG4vi8zXuBqEoy2LbnC1kuvkg1KQUgqNxmxpQgIOQEPeV0onvZu+qDQnEoX8qTQErtqn/xzcnbpeTuOLSiA==", + "dev": true, + "requires": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^27.4.2", + "@jest/test-result": "^27.4.2", + "@jest/transform": "^27.4.5", + "@jest/types": "^27.4.2", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.2.4", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^4.0.3", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.0.2", + "jest-haste-map": "^27.4.5", + "jest-resolve": "^27.4.5", + "jest-util": "^27.4.2", + "jest-worker": "^27.4.5", + "slash": "^3.0.0", + "source-map": "^0.6.0", + "string-length": "^4.0.1", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^8.1.0" + }, + "dependencies": { + "@jest/transform": { + "version": "27.4.5", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.4.5.tgz", + "integrity": "sha512-PuMet2UlZtlGzwc6L+aZmR3I7CEBpqadO03pU40l2RNY2fFJ191b9/ITB44LNOhVtsyykx0OZvj0PCyuLm7Eew==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "@jest/types": "^26.6.2", - "@types/stack-utils": "^2.0.0", + "@babel/core": "^7.1.0", + "@jest/types": "^27.4.2", + "babel-plugin-istanbul": "^6.0.0", "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", "graceful-fs": "^4.2.4", - "micromatch": "^4.0.2", - "pretty-format": "^26.6.2", + "jest-haste-map": "^27.4.5", + "jest-regex-util": "^27.4.0", + "jest-util": "^27.4.2", + "micromatch": "^4.0.4", + "pirates": "^4.0.1", "slash": "^3.0.0", - "stack-utils": "^2.0.2" + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" } }, - "jest-mock": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-26.6.2.tgz", - "integrity": "sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*" - } - }, - "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" - } - }, - "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" - } - }, - "pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - } - }, - "react-is": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.1.tgz", - "integrity": "sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "stack-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==", - "dev": true, - "requires": { - "escape-string-regexp": "^2.0.0" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - } - } - }, - "@jest/globals": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-26.6.2.tgz", - "integrity": "sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA==", - "dev": true, - "requires": { - "@jest/environment": "^26.6.2", - "@jest/types": "^26.6.2", - "expect": "^26.6.2" - }, - "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "@types/istanbul-reports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", - "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", - "dev": true, - "requires": { - "@types/istanbul-lib-report": "*" - } - } - } - }, - "@jest/reporters": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-26.6.2.tgz", - "integrity": "sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw==", - "dev": true, - "requires": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.2", - "graceful-fs": "^4.2.4", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^4.0.3", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.2", - "jest-haste-map": "^26.6.2", - "jest-resolve": "^26.6.2", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "node-notifier": "^8.0.0", - "slash": "^3.0.0", - "source-map": "^0.6.0", - "string-length": "^4.0.1", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^7.0.0" - }, - "dependencies": { - "@jest/console": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.2.tgz", - "integrity": "sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^26.6.2", - "jest-util": "^26.6.2", - "slash": "^3.0.0" - } - }, - "@jest/test-result": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.2.tgz", - "integrity": "sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==", - "dev": true, - "requires": { - "@jest/console": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - } - }, - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "@jest/types": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.4.2.tgz", + "integrity": "sha512-j35yw0PMTPpZsUoOBiuHzr1zTYoad1cVIE0ajEjcrJONxxrko/IRGKkXx3os0Nsi4Hu3+5VmDbVfq5WhG/pWAg==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^15.0.0", + "@types/yargs": "^16.0.0", "chalk": "^4.0.0" } }, - "@types/istanbul-reports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", - "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", - "dev": true, - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/stack-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.0.tgz", - "integrity": "sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==", - "dev": true - }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", "dev": true, "requires": { - "color-convert": "^2.0.1" + "@types/yargs-parser": "*" } }, "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "dev": true, "requires": { "normalize-path": "^3.0.0", @@ -3739,25 +3545,10 @@ "fill-range": "^7.0.1" } }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "ci-info": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", + "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==", "dev": true }, "fill-range": { @@ -3769,17 +3560,10 @@ "to-regex-range": "^5.0.1" } }, - "fsevents": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.2.1.tgz", - "integrity": "sha512-bTLYHSeC0UH/EFXS9KqWnXuOl/wHK5Z/d+ghd5AsFMYN7wIGkUCOJyzy88+wJKkZPGON8u4Z9f6U4FdgURE9qA==", - "dev": true, - "optional": true - }, "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", "dev": true }, "has-flag": { @@ -3794,71 +3578,37 @@ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "optional": true, - "requires": { - "is-docker": "^2.0.0" - } - }, - "istanbul-lib-instrument": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", - "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", - "dev": true, - "requires": { - "@babel/core": "^7.7.5", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", - "semver": "^6.3.0" - } - }, "jest-haste-map": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", - "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", + "version": "27.4.5", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.4.5.tgz", + "integrity": "sha512-oJm1b5qhhPs78K24EDGifWS0dELYxnoBiDhatT/FThgB9yxqUm5F6li3Pv+Q+apMBmmPNzOBnZ7ZxWMB1Leq1Q==", "dev": true, "requires": { - "@jest/types": "^26.6.2", + "@jest/types": "^27.4.2", "@types/graceful-fs": "^4.1.2", "@types/node": "*", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", - "fsevents": "^2.1.2", + "fsevents": "^2.3.2", "graceful-fs": "^4.2.4", - "jest-regex-util": "^26.0.0", - "jest-serializer": "^26.6.2", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "micromatch": "^4.0.2", - "sane": "^4.0.3", + "jest-regex-util": "^27.4.0", + "jest-serializer": "^27.4.0", + "jest-util": "^27.4.2", + "jest-worker": "^27.4.5", + "micromatch": "^4.0.4", "walker": "^1.0.7" } }, - "jest-message-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz", - "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@jest/types": "^26.6.2", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.2", - "pretty-format": "^26.6.2", - "slash": "^3.0.0", - "stack-utils": "^2.0.2" - } + "jest-regex-util": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.4.0.tgz", + "integrity": "sha512-WeCpMpNnqJYMQoOjm1nTtsgbR4XHAk1u00qDoNBQoykM280+/TmgA5Qh5giC1ecy6a5d4hbSsHzpBtu5yvlbEg==", + "dev": true }, "jest-serializer": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", - "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.4.0.tgz", + "integrity": "sha512-RDhpcn5f1JYTX2pvJAGDcnsNTnsV9bjYPU8xcV+xPwOXnUPOQwf4ZEuiU6G9H1UztH+OapMgu/ckEVwO87PwnQ==", "dev": true, "requires": { "@types/node": "*", @@ -3866,80 +3616,53 @@ } }, "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.4.2.tgz", + "integrity": "sha512-YuxxpXU6nlMan9qyLuxHaMMOzXAl5aGZWCSzben5DhLHemYQxCc4YK+4L3ZrCutT8GPQ+ui9k5D8rUJoDioMnA==", "dev": true, "requires": { - "@jest/types": "^26.6.2", + "@jest/types": "^27.4.2", "@types/node": "*", "chalk": "^4.0.0", + "ci-info": "^3.2.0", "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" + "picomatch": "^2.2.3" + }, + "dependencies": { + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + } } }, "jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "version": "27.4.5", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.5.tgz", + "integrity": "sha512-f2s8kEdy15cv9r7q4KkzGXvlY0JTcmCbMHZBfSQDwW77REr45IDWwd0lksDFeVHH2jJ5pqb90T77XscrjeGzzg==", "dev": true, "requires": { "@types/node": "*", "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - } - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "optional": true, - "requires": { - "yallist": "^4.0.0" + "supports-color": "^8.0.0" } }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", "dev": true, "requires": { "braces": "^3.0.1", - "picomatch": "^2.0.5" - } - }, - "node-notifier": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.1.tgz", - "integrity": "sha512-BvEXF+UmsnAfYfoapKM9nGxnP+Wn7P91YfXmrKnfcYCx6VBeoN5Ez5Ogck6I8Bi5k4RlpqRYaw75pAwzX9OphA==", - "dev": true, - "optional": true, - "requires": { - "growly": "^1.3.0", - "is-wsl": "^2.2.0", - "semver": "^7.3.2", - "shellwords": "^0.1.1", - "uuid": "^8.3.0", - "which": "^2.0.2" + "picomatch": "^2.2.3" }, "dependencies": { - "semver": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", - "dev": true, - "optional": true, - "requires": { - "lru-cache": "^6.0.0" - } + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true } } }, @@ -3949,55 +3672,16 @@ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true }, - "pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - } - }, - "react-is": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.1.tgz", - "integrity": "sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA==", - "dev": true - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, - "stack-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==", - "dev": true, - "requires": { - "escape-string-regexp": "^2.0.0" - } - }, "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -4012,111 +3696,119 @@ "is-number": "^7.0.0" } }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", "dev": true, - "optional": true, "requires": { - "isexe": "^2.0.0" + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "optional": true } } }, - "@jest/test-sequencer": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz", - "integrity": "sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw==", + "@jest/source-map": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.4.0.tgz", + "integrity": "sha512-Ntjx9jzP26Bvhbm93z/AKcPRj/9wrkI88/gK60glXDx1q+IeI0rf7Lw2c89Ch6ofonB0On/iRDreQuQ6te9pgQ==", "dev": true, "requires": { - "@jest/test-result": "^26.6.2", + "callsites": "^3.0.0", "graceful-fs": "^4.2.4", - "jest-haste-map": "^26.6.2", - "jest-runner": "^26.6.3", - "jest-runtime": "^26.6.3" + "source-map": "^0.6.0" }, "dependencies": { - "@jest/console": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.2.tgz", - "integrity": "sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==", + "graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "@jest/test-result": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.4.2.tgz", + "integrity": "sha512-kr+bCrra9jfTgxHXHa2UwoQjxvQk3Am6QbpAiJ5x/50LW8llOYrxILkqY0lZRW/hu8FXesnudbql263+EW9iNA==", + "dev": true, + "requires": { + "@jest/console": "^27.4.2", + "@jest/types": "^27.4.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "dependencies": { + "@jest/types": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.4.2.tgz", + "integrity": "sha512-j35yw0PMTPpZsUoOBiuHzr1zTYoad1cVIE0ajEjcrJONxxrko/IRGKkXx3os0Nsi4Hu3+5VmDbVfq5WhG/pWAg==", "dev": true, "requires": { - "@jest/types": "^26.6.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^26.6.2", - "jest-util": "^26.6.2", - "slash": "^3.0.0" + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" } }, - "@jest/test-result": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.2.tgz", - "integrity": "sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==", + "@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", "dev": true, "requires": { - "@jest/console": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" + "@types/yargs-parser": "*" } - }, + } + } + }, + "@jest/test-sequencer": { + "version": "27.4.5", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.4.5.tgz", + "integrity": "sha512-n5woIn/1v+FT+9hniymHPARA9upYUmfi5Pw9ewVwXCDlK4F5/Gkees9v8vdjGdAIJ2MPHLHodiajLpZZanWzEQ==", + "dev": true, + "requires": { + "@jest/test-result": "^27.4.2", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^27.4.5", + "jest-runtime": "^27.4.5" + }, + "dependencies": { "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.4.2.tgz", + "integrity": "sha512-j35yw0PMTPpZsUoOBiuHzr1zTYoad1cVIE0ajEjcrJONxxrko/IRGKkXx3os0Nsi4Hu3+5VmDbVfq5WhG/pWAg==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^15.0.0", + "@types/yargs": "^16.0.0", "chalk": "^4.0.0" } }, - "@types/istanbul-reports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", - "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", - "dev": true, - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/stack-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.0.tgz", - "integrity": "sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==", - "dev": true - }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", "dev": true, "requires": { - "color-convert": "^2.0.1" + "@types/yargs-parser": "*" } }, "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "dev": true, "requires": { "normalize-path": "^3.0.0", @@ -4132,25 +3824,10 @@ "fill-range": "^7.0.1" } }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "ci-info": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", + "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==", "dev": true }, "fill-range": { @@ -4162,17 +3839,10 @@ "to-regex-range": "^5.0.1" } }, - "fsevents": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.2.1.tgz", - "integrity": "sha512-bTLYHSeC0UH/EFXS9KqWnXuOl/wHK5Z/d+ghd5AsFMYN7wIGkUCOJyzy88+wJKkZPGON8u4Z9f6U4FdgURE9qA==", - "dev": true, - "optional": true - }, "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", "dev": true }, "has-flag": { @@ -4188,48 +3858,36 @@ "dev": true }, "jest-haste-map": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", - "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", + "version": "27.4.5", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.4.5.tgz", + "integrity": "sha512-oJm1b5qhhPs78K24EDGifWS0dELYxnoBiDhatT/FThgB9yxqUm5F6li3Pv+Q+apMBmmPNzOBnZ7ZxWMB1Leq1Q==", "dev": true, "requires": { - "@jest/types": "^26.6.2", + "@jest/types": "^27.4.2", "@types/graceful-fs": "^4.1.2", "@types/node": "*", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", - "fsevents": "^2.1.2", + "fsevents": "^2.3.2", "graceful-fs": "^4.2.4", - "jest-regex-util": "^26.0.0", - "jest-serializer": "^26.6.2", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "micromatch": "^4.0.2", - "sane": "^4.0.3", + "jest-regex-util": "^27.4.0", + "jest-serializer": "^27.4.0", + "jest-util": "^27.4.2", + "jest-worker": "^27.4.5", + "micromatch": "^4.0.4", "walker": "^1.0.7" } }, - "jest-message-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz", - "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@jest/types": "^26.6.2", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.2", - "pretty-format": "^26.6.2", - "slash": "^3.0.0", - "stack-utils": "^2.0.2" - } + "jest-regex-util": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.4.0.tgz", + "integrity": "sha512-WeCpMpNnqJYMQoOjm1nTtsgbR4XHAk1u00qDoNBQoykM280+/TmgA5Qh5giC1ecy6a5d4hbSsHzpBtu5yvlbEg==", + "dev": true }, "jest-serializer": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", - "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.4.0.tgz", + "integrity": "sha512-RDhpcn5f1JYTX2pvJAGDcnsNTnsV9bjYPU8xcV+xPwOXnUPOQwf4ZEuiU6G9H1UztH+OapMgu/ckEVwO87PwnQ==", "dev": true, "requires": { "@types/node": "*", @@ -4237,44 +3895,54 @@ } }, "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.4.2.tgz", + "integrity": "sha512-YuxxpXU6nlMan9qyLuxHaMMOzXAl5aGZWCSzben5DhLHemYQxCc4YK+4L3ZrCutT8GPQ+ui9k5D8rUJoDioMnA==", "dev": true, "requires": { - "@jest/types": "^26.6.2", + "@jest/types": "^27.4.2", "@types/node": "*", "chalk": "^4.0.0", + "ci-info": "^3.2.0", "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" + "picomatch": "^2.2.3" + }, + "dependencies": { + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + } } }, "jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "version": "27.4.5", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.5.tgz", + "integrity": "sha512-f2s8kEdy15cv9r7q4KkzGXvlY0JTcmCbMHZBfSQDwW77REr45IDWwd0lksDFeVHH2jJ5pqb90T77XscrjeGzzg==", "dev": true, "requires": { "@types/node": "*", "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" + "supports-color": "^8.0.0" } }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", "dev": true, "requires": { "braces": "^3.0.1", - "picomatch": "^2.0.5" + "picomatch": "^2.2.3" + }, + "dependencies": { + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + } } }, "normalize-path": { @@ -4283,43 +3951,10 @@ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true }, - "pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - } - }, - "react-is": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.1.tgz", - "integrity": "sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "stack-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==", - "dev": true, - "requires": { - "escape-string-regexp": "^2.0.0" - } - }, "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -4359,38 +3994,6 @@ "write-file-atomic": "^3.0.0" }, "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "@types/istanbul-reports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", - "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", - "dev": true, - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, "braces": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", @@ -4409,23 +4012,10 @@ "to-regex-range": "^5.0.1" } }, - "fsevents": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.2.1.tgz", - "integrity": "sha512-bTLYHSeC0UH/EFXS9KqWnXuOl/wHK5Z/d+ghd5AsFMYN7wIGkUCOJyzy88+wJKkZPGON8u4Z9f6U4FdgURE9qA==", - "dev": true, - "optional": true - }, "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", "dev": true }, "is-number": { @@ -4434,89 +4024,20 @@ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, - "jest-haste-map": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", - "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.1.2", - "graceful-fs": "^4.2.4", - "jest-regex-util": "^26.0.0", - "jest-serializer": "^26.6.2", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "micromatch": "^4.0.2", - "sane": "^4.0.3", - "walker": "^1.0.7" - } - }, - "jest-serializer": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", - "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", - "dev": true, - "requires": { - "@types/node": "*", - "graceful-fs": "^4.2.4" - } - }, - "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" - } - }, - "jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - } - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", "dev": true, "requires": { "braces": "^3.0.1", - "picomatch": "^2.0.5" + "picomatch": "^2.2.3" } }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", "dev": true }, "source-map": { @@ -4525,15 +4046,6 @@ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -4558,25 +4070,15 @@ } }, "@jest/types": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", - "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", - "dev": true, + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", "requires": { "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^13.0.0" - }, - "dependencies": { - "@types/yargs": { - "version": "13.0.11", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.11.tgz", - "integrity": "sha512-NRqD6T4gktUrDi1o1wLH3EKC1o2caCr7/wR87ODcbVITQF106OM3sFN92ysZ++wqelOd1CTzatnOBRDYYG6wGQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - } + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" } }, "@kwsites/file-exists": { @@ -4589,9 +4091,9 @@ }, "dependencies": { "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "requires": { "ms": "2.1.2" @@ -4973,12 +4475,6 @@ "strip-ansi": "^5.0.0" } }, - "y18n": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", - "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", - "dev": true - }, "yargs": { "version": "14.2.3", "resolved": "https://registry.npmjs.org/yargs/-/yargs-14.2.3.tgz", @@ -5373,14 +4869,69 @@ "tar": "^4.4.8" }, "dependencies": { - "ssri": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", - "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "fs-minipass": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", + "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", + "dev": true, + "requires": { + "minipass": "^2.6.0" + } + }, + "minipass": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", + "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", + "dev": true, + "requires": { + "minipass": "^2.9.0" + } + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dev": true, "requires": { - "figgy-pudding": "^3.5.1" + "minimist": "^1.2.5" } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "tar": { + "version": "4.4.19", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz", + "integrity": "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==", + "dev": true, + "requires": { + "chownr": "^1.1.4", + "fs-minipass": "^1.2.7", + "minipass": "^2.9.0", + "minizlib": "^1.3.3", + "mkdirp": "^0.5.5", + "safe-buffer": "^5.2.1", + "yallist": "^3.1.1" + } + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true } } }, @@ -5433,12 +4984,12 @@ }, "dependencies": { "@octokit/request-error": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.0.4.tgz", - "integrity": "sha512-LjkSiTbsxIErBiRh5wSZvpZqT4t0/c9+4dOe0PII+6jXR+oj/h66s7E4a/MghV7iT8W9ffoQ5Skoxzs96+gBPA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz", + "integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==", "dev": true, "requires": { - "@octokit/types": "^6.0.0", + "@octokit/types": "^6.0.3", "deprecation": "^2.0.0", "once": "^1.4.0" } @@ -5451,6 +5002,28 @@ } } }, + "@octokit/request-error": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-1.2.1.tgz", + "integrity": "sha512-+6yDyk1EES6WK+l3viRDElw96MvwfJxCt45GvmjDUKWjYIb3PJZQkq3i46TwGwoPD4h8NmTrENmtyA1FwbmhRA==", + "dev": true, + "requires": { + "@octokit/types": "^2.0.0", + "deprecation": "^2.0.0", + "once": "^1.4.0" + }, + "dependencies": { + "@octokit/types": { + "version": "2.16.2", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-2.16.2.tgz", + "integrity": "sha512-O75k56TYvJ8WpAakWwYRN8Bgu60KrmX0z1KqFp1kNiFNkgW+JW+9EBKZ+S33PU6SLvbihqd+3drvPxKK68Ee8Q==", + "dev": true, + "requires": { + "@types/node": ">= 8" + } + } + } + }, "@octokit/rest": { "version": "16.43.2", "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-16.43.2.tgz", @@ -5868,6 +5441,92 @@ "npmlog": "^4.1.2", "tar": "^4.4.10", "temp-write": "^3.4.0" + }, + "dependencies": { + "fs-minipass": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", + "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", + "dev": true, + "requires": { + "minipass": "^2.6.0" + } + }, + "ignore-walk": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.4.tgz", + "integrity": "sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==", + "dev": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "minipass": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", + "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", + "dev": true, + "requires": { + "minipass": "^2.9.0" + } + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "npm-packlist": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.8.tgz", + "integrity": "sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==", + "dev": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "tar": { + "version": "4.4.19", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz", + "integrity": "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==", + "dev": true, + "requires": { + "chownr": "^1.1.4", + "fs-minipass": "^1.2.7", + "minipass": "^2.9.0", + "minizlib": "^1.3.3", + "mkdirp": "^0.5.5", + "safe-buffer": "^5.2.1", + "yallist": "^3.1.1" + } + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } } }, "@lerna/package": { @@ -6619,40 +6278,6 @@ "@mdx-js/mdx": "1.6.22", "@mdx-js/react": "1.6.22", "loader-utils": "2.0.0" - }, - "dependencies": { - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true - }, - "json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - } } }, "@mdx-js/mdx": { @@ -6725,9 +6350,9 @@ } }, "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dev": true, "requires": { "ms": "2.1.2" @@ -6745,15 +6370,6 @@ "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true }, - "json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -6949,13 +6565,24 @@ "fastq": "^1.6.0" } }, + "@npmcli/fs": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.0.tgz", + "integrity": "sha512-VhP1qZLXcrXRIaPoqb4YA55JQxLNF3jNR4T55IdOJa3+IFJKNYHtPvtXx8slmeMavj37vCzCfrqQM1vWLsYKLA==", + "dev": true, + "requires": { + "@gar/promisify": "^1.0.1", + "semver": "^7.3.5" + } + }, "@npmcli/move-file": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.0.1.tgz", - "integrity": "sha512-Uv6h1sT+0DrblvIrolFtbvM1FgWm+/sy4B3pvLp67Zys+thcukzS5ekn7HsZFGpWP4Q3fYJCljbWQE/XivMRLw==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", + "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", "dev": true, "requires": { - "mkdirp": "^1.0.4" + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" }, "dependencies": { "mkdirp": { @@ -7002,15 +6629,15 @@ } }, "@octokit/openapi-types": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-7.3.2.tgz", - "integrity": "sha512-oJhK/yhl9Gt430OrZOzAl2wJqR0No9445vmZ9Ey8GjUZUpwuu/vmEFP0TDhDXdpGDoxD6/EIFHJEcY8nHXpDTA==", + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-11.2.0.tgz", + "integrity": "sha512-PBsVO+15KSlGmiI8QAzaqvsNlZlrDlyAJYcrXBCvVUxCp7VnXjkwPoFHgjEJXx3WF9BAwkA6nfCUA7i9sODzKA==", "dev": true }, "@octokit/request": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.0.tgz", - "integrity": "sha512-4cPp/N+NqmaGQwbh3vUsYqokQIzt7VjsgTYVXiwpUP2pxd5YiZB2XuTedbb0SPtv9XS7nzAKjAuQxmY8/aZkiA==", + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.2.tgz", + "integrity": "sha512-je66CvSEVf0jCpRISxkUcCa0UkxmFs6eGDRSbfJtAVwbLH5ceqF+YEyC8lj8ystKyZTy8adWr0qmkY52EfOeLA==", "dev": true, "requires": { "@octokit/endpoint": "^6.0.1", @@ -7022,27 +6649,16 @@ }, "dependencies": { "@octokit/types": { - "version": "6.16.4", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.16.4.tgz", - "integrity": "sha512-UxhWCdSzloULfUyamfOg4dJxV9B+XjgrIZscI0VCbp4eNrjmorGEw+4qdwcpTsu6DIrm9tQsFQS2pK5QkqQ04A==", + "version": "6.34.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.34.0.tgz", + "integrity": "sha512-s1zLBjWhdEI2zwaoSgyOFoKSl109CUcVBCc7biPJ3aAf6LGLU6szDvi31JPU7bxfla2lqfhjbbg/5DdFNxOwHw==", "dev": true, "requires": { - "@octokit/openapi-types": "^7.3.2" + "@octokit/openapi-types": "^11.2.0" } } } }, - "@octokit/request-error": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz", - "integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==", - "dev": true, - "requires": { - "@octokit/types": "^6.0.3", - "deprecation": "^2.0.0", - "once": "^1.4.0" - } - }, "before-after-hook": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.2.tgz", @@ -7121,15 +6737,15 @@ } }, "@octokit/openapi-types": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-7.3.2.tgz", - "integrity": "sha512-oJhK/yhl9Gt430OrZOzAl2wJqR0No9445vmZ9Ey8GjUZUpwuu/vmEFP0TDhDXdpGDoxD6/EIFHJEcY8nHXpDTA==", + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-11.2.0.tgz", + "integrity": "sha512-PBsVO+15KSlGmiI8QAzaqvsNlZlrDlyAJYcrXBCvVUxCp7VnXjkwPoFHgjEJXx3WF9BAwkA6nfCUA7i9sODzKA==", "dev": true }, "@octokit/request": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.0.tgz", - "integrity": "sha512-4cPp/N+NqmaGQwbh3vUsYqokQIzt7VjsgTYVXiwpUP2pxd5YiZB2XuTedbb0SPtv9XS7nzAKjAuQxmY8/aZkiA==", + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.2.tgz", + "integrity": "sha512-je66CvSEVf0jCpRISxkUcCa0UkxmFs6eGDRSbfJtAVwbLH5ceqF+YEyC8lj8ystKyZTy8adWr0qmkY52EfOeLA==", "dev": true, "requires": { "@octokit/endpoint": "^6.0.1", @@ -7141,27 +6757,16 @@ }, "dependencies": { "@octokit/types": { - "version": "6.16.4", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.16.4.tgz", - "integrity": "sha512-UxhWCdSzloULfUyamfOg4dJxV9B+XjgrIZscI0VCbp4eNrjmorGEw+4qdwcpTsu6DIrm9tQsFQS2pK5QkqQ04A==", + "version": "6.34.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.34.0.tgz", + "integrity": "sha512-s1zLBjWhdEI2zwaoSgyOFoKSl109CUcVBCc7biPJ3aAf6LGLU6szDvi31JPU7bxfla2lqfhjbbg/5DdFNxOwHw==", "dev": true, "requires": { - "@octokit/openapi-types": "^7.3.2" + "@octokit/openapi-types": "^11.2.0" } } } }, - "@octokit/request-error": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz", - "integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==", - "dev": true, - "requires": { - "@octokit/types": "^6.0.3", - "deprecation": "^2.0.0", - "once": "^1.4.0" - } - }, "is-plain-object": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", @@ -7256,6 +6861,26 @@ "universal-user-agent": "^2.1.0" }, "dependencies": { + "@octokit/request-error": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-1.2.1.tgz", + "integrity": "sha512-+6yDyk1EES6WK+l3viRDElw96MvwfJxCt45GvmjDUKWjYIb3PJZQkq3i46TwGwoPD4h8NmTrENmtyA1FwbmhRA==", + "dev": true, + "requires": { + "@octokit/types": "^2.0.0", + "deprecation": "^2.0.0", + "once": "^1.4.0" + } + }, + "@octokit/types": { + "version": "2.16.2", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-2.16.2.tgz", + "integrity": "sha512-O75k56TYvJ8WpAakWwYRN8Bgu60KrmX0z1KqFp1kNiFNkgW+JW+9EBKZ+S33PU6SLvbihqd+3drvPxKK68Ee8Q==", + "dev": true, + "requires": { + "@types/node": ">= 8" + } + }, "is-plain-object": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-3.0.0.tgz", @@ -7280,11 +6905,12 @@ } }, "@octokit/request-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-1.0.2.tgz", - "integrity": "sha512-T9swMS/Vc4QlfWrvyeSyp/GjhXtYaBzCcibjGywV4k4D2qVrQKfEMPy8OxMDEj7zkIIdpHwqdpVbKCvnUPqkXw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz", + "integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==", "dev": true, "requires": { + "@octokit/types": "^6.0.3", "deprecation": "^2.0.0", "once": "^1.4.0" } @@ -7308,6 +6934,28 @@ "once": "^1.4.0", "universal-user-agent": "^2.0.0", "url-template": "^2.0.8" + }, + "dependencies": { + "@octokit/request-error": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-1.2.1.tgz", + "integrity": "sha512-+6yDyk1EES6WK+l3viRDElw96MvwfJxCt45GvmjDUKWjYIb3PJZQkq3i46TwGwoPD4h8NmTrENmtyA1FwbmhRA==", + "dev": true, + "requires": { + "@octokit/types": "^2.0.0", + "deprecation": "^2.0.0", + "once": "^1.4.0" + } + }, + "@octokit/types": { + "version": "2.16.2", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-2.16.2.tgz", + "integrity": "sha512-O75k56TYvJ8WpAakWwYRN8Bgu60KrmX0z1KqFp1kNiFNkgW+JW+9EBKZ+S33PU6SLvbihqd+3drvPxKK68Ee8Q==", + "dev": true, + "requires": { + "@types/node": ">= 8" + } + } } }, "@octokit/types": { @@ -7330,12 +6978,12 @@ }, "dependencies": { "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dev": true, "requires": { - "ms": "^2.1.1" + "ms": "2.1.2" } }, "ms": { @@ -7346,1704 +6994,1240 @@ } } }, - "@pmmmwh/react-refresh-webpack-plugin": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.4.3.tgz", - "integrity": "sha512-br5Qwvh8D2OQqSXpd1g/xqXKnK0r+Jz6qVKBbWmpUcrbGOxUrf39V5oZ1876084CGn18uMdR5uvPqBv9UqtBjQ==", - "dev": true, - "requires": { - "ansi-html": "^0.0.7", - "error-stack-parser": "^2.0.6", - "html-entities": "^1.2.1", - "native-url": "^0.2.6", - "schema-utils": "^2.6.5", - "source-map": "^0.7.3" + "@playwright/test": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.20.0.tgz", + "integrity": "sha512-UpI5HTcgNLckR0kqXqwNvbcIXtRaDxk+hnO0OBwPSjfbBjRfRgAJ2ClA/b30C5E3UW5dJa17zhsy2qrk66l5cg==", + "dev": true, + "requires": { + "@babel/code-frame": "7.16.7", + "@babel/core": "7.16.12", + "@babel/helper-plugin-utils": "7.16.7", + "@babel/plugin-proposal-class-properties": "7.16.7", + "@babel/plugin-proposal-dynamic-import": "7.16.7", + "@babel/plugin-proposal-export-namespace-from": "7.16.7", + "@babel/plugin-proposal-logical-assignment-operators": "7.16.7", + "@babel/plugin-proposal-nullish-coalescing-operator": "7.16.7", + "@babel/plugin-proposal-numeric-separator": "7.16.7", + "@babel/plugin-proposal-optional-chaining": "7.16.7", + "@babel/plugin-proposal-private-methods": "7.16.11", + "@babel/plugin-proposal-private-property-in-object": "7.16.7", + "@babel/plugin-syntax-async-generators": "7.8.4", + "@babel/plugin-syntax-json-strings": "7.8.3", + "@babel/plugin-syntax-object-rest-spread": "7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "7.8.3", + "@babel/plugin-transform-modules-commonjs": "7.16.8", + "@babel/preset-typescript": "7.16.7", + "colors": "1.4.0", + "commander": "8.3.0", + "debug": "4.3.3", + "expect": "27.2.5", + "jest-matcher-utils": "27.2.5", + "json5": "2.2.0", + "mime": "3.0.0", + "minimatch": "3.0.4", + "ms": "2.1.3", + "open": "8.4.0", + "pirates": "4.0.4", + "playwright-core": "1.20.0", + "rimraf": "3.0.2", + "source-map-support": "0.4.18", + "stack-utils": "2.0.5", + "yazl": "2.5.1" }, "dependencies": { - "@types/json-schema": { - "version": "7.0.7", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", - "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==", - "dev": true - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "@babel/code-frame": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", "dev": true, "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "@babel/highlight": "^7.16.7" } }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "@babel/compat-data": { + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.7.tgz", + "integrity": "sha512-p8pdE6j0a29TNGebNm7NzYZWB3xVZJBZ7XGs42uAKzQo8VQ3F0By/cQCtUEABwIqw5zo6WA4NbmxsfzADzMKnQ==", "dev": true }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true + "@babel/core": { + "version": "7.16.12", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.12.tgz", + "integrity": "sha512-dK5PtG1uiN2ikk++5OzSYsitZKny4wOCD0nrO4TqnW4BVBTQ2NGS3NgilvT/TEyxTST7LNyWV/T4tXDoD3fOgg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.16.8", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helpers": "^7.16.7", + "@babel/parser": "^7.16.12", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.10", + "@babel/types": "^7.16.8", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0", + "source-map": "^0.5.0" + } }, - "schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "@babel/generator": { + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.7.tgz", + "integrity": "sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w==", "dev": true, "requires": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" + "@babel/types": "^7.17.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" } }, - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true - } - } - }, - "@popperjs/core": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.6.0.tgz", - "integrity": "sha512-cPqjjzuFWNK3BSKLm0abspP0sp/IGOli4p5I5fKFAzdS8fvjdOwDCfZqAaIiXd9lPkOWi3SUUfZof3hEb7J/uw==" - }, - "@reach/router": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/@reach/router/-/router-1.3.4.tgz", - "integrity": "sha512-+mtn9wjlB9NN2CNnnC/BRYtwdKBfSyyasPYraNAyvaV1occr/5NnB4CVzjEZipNHwYebQwcndGUmpFzxAUoqSA==", - "dev": true, - "requires": { - "create-react-context": "0.3.0", - "invariant": "^2.2.3", - "prop-types": "^15.6.1", - "react-lifecycles-compat": "^3.0.4" - } - }, - "@react-native-community/blur": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@react-native-community/blur/-/blur-3.6.0.tgz", - "integrity": "sha512-GtDBhpX2pQcjl4VopOC8FktrVufrEfYRwVeMQ2WWckqKIv2BdwvlvWvj88L1WmEdBr9UNcm3rtgz+d+YXkmirA==", - "requires": { - "prop-types": "^15.5.10" - } - }, - "@react-native-community/cli-debugger-ui": { - "version": "5.0.1-alpha.1", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-5.0.1-alpha.1.tgz", - "integrity": "sha512-o6msDywXU7q0dPKhCTo8IrpmJ+7o+kVghyHlrAndnb30p6vnm4pID5Yi7lHXGfs6bQXorKUWX8oD5xYwWkN8qw==", - "requires": { - "serve-static": "^1.13.1" - } - }, - "@react-native-community/cli-hermes": { - "version": "5.0.1-alpha.1", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-hermes/-/cli-hermes-5.0.1-alpha.1.tgz", - "integrity": "sha512-7FNhqeZCbON4vhzZpV8nx4gB3COJy2KGbVku376CnIAjMncxJhupqORWdMukP8jNuuvUZ1R0vj0L0+W/M5rY1w==", - "requires": { - "@react-native-community/cli-platform-android": "^5.0.1-alpha.1", - "@react-native-community/cli-tools": "^5.0.1-alpha.1", - "chalk": "^3.0.0", - "hermes-profile-transformer": "^0.0.6", - "ip": "^1.1.5" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "@babel/helper-annotate-as-pure": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", + "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", + "dev": true, "requires": { - "color-convert": "^2.0.1" + "@babel/types": "^7.16.7" } }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "@babel/helper-compilation-targets": { + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.7.tgz", + "integrity": "sha512-UFzlz2jjd8kroj0hmCFV5zr+tQPi1dpC2cRsDV/3IEW8bJfCPrPpmcSN6ZS8RqIq4LXcmpipCQFPddyFA5Yc7w==", + "dev": true, "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@babel/compat-data": "^7.17.7", + "@babel/helper-validator-option": "^7.16.7", + "browserslist": "^4.17.5", + "semver": "^6.3.0" } }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "@babel/helper-create-class-features-plugin": { + "version": "7.17.6", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.6.tgz", + "integrity": "sha512-SogLLSxXm2OkBbSsHZMM4tUi8fUzjs63AT/d0YQIzr6GSd8Hxsbk2KYDX0k0DweAzGMj/YWeiCsorIdtdcW8Eg==", + "dev": true, "requires": { - "color-name": "~1.1.4" + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-member-expression-to-functions": "^7.16.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7" } }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "@babel/helper-environment-visitor": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", + "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "@babel/helper-function-name": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", + "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/types": "^7.16.7" + } }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "@babel/helper-get-function-arity": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", + "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", + "dev": true, "requires": { - "has-flag": "^4.0.0" + "@babel/types": "^7.16.7" } - } - } - }, - "@react-native-community/cli-platform-android": { - "version": "5.0.1-alpha.1", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-5.0.1-alpha.1.tgz", - "integrity": "sha512-Fx9Tm0Z9sl5CD/VS8XWIY1gTgf28MMnAvyx0oj7yO4IzWuOpJPyWxTJITc80GAK6tlyijORv5kriYpXnquxQLg==", - "requires": { - "@react-native-community/cli-tools": "^5.0.1-alpha.1", - "chalk": "^3.0.0", - "execa": "^1.0.0", - "fs-extra": "^8.1.0", - "glob": "^7.1.3", - "jetifier": "^1.6.2", - "lodash": "^4.17.15", - "logkitty": "^0.7.1", - "slash": "^3.0.0", - "xmldoc": "^1.1.2" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + }, + "@babel/helper-hoist-variables": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", + "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", + "dev": true, "requires": { - "color-convert": "^2.0.1" + "@babel/types": "^7.16.7" } }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "@babel/helper-member-expression-to-functions": { + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.17.7.tgz", + "integrity": "sha512-thxXgnQ8qQ11W2wVUObIqDL4p148VMxkt5T/qpN5k2fboRyzFGFmKsTGViquyM5QHKUy48OZoca8kw4ajaDPyw==", + "dev": true, "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@babel/types": "^7.17.0" } }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "@babel/helper-module-imports": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", + "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", + "dev": true, "requires": { - "color-name": "~1.1.4" + "@babel/types": "^7.16.7" } }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "@babel/helper-module-transforms": { + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.17.7.tgz", + "integrity": "sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-simple-access": "^7.17.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.3", + "@babel/types": "^7.17.0" + } }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "@babel/helper-optimise-call-expression": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz", + "integrity": "sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==", + "dev": true, "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "@babel/types": "^7.16.7" } }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", + "dev": true + }, + "@babel/helper-replace-supers": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz", + "integrity": "sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw==", + "dev": true, "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-member-expression-to-functions": "^7.16.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7" } }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "@babel/helper-simple-access": { + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz", + "integrity": "sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA==", + "dev": true, "requires": { - "pump": "^3.0.0" + "@babel/types": "^7.17.0" } }, - "glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "@babel/helper-split-export-declaration": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", + "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", + "dev": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "@babel/types": "^7.16.7" } }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "dev": true }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "@babel/helper-validator-option": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", + "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", + "dev": true + }, + "@babel/helpers": { + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.7.tgz", + "integrity": "sha512-TKsj9NkjJfTBxM7Phfy7kv6yYc4ZcOo+AaWGqQOKTPDOmcGkIFb5xNA746eKisQkm4yavUYh4InYM9S+VnO01w==", + "dev": true, "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.3", + "@babel/types": "^7.17.0" } }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "@babel/highlight": { + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", + "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + "@babel/parser": { + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.7.tgz", + "integrity": "sha512-bm3AQf45vR4gKggRfvJdYJ0gFLoCbsPxiFLSH6hTVYABptNHY6l9NrhnucVjQ/X+SPtLANT9lc0fFhikj+VBRA==", + "dev": true }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "@babel/plugin-proposal-class-properties": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz", + "integrity": "sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww==", + "dev": true, "requires": { - "has-flag": "^4.0.0" + "@babel/helper-create-class-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" } - } - } - }, - "@react-native-community/cli-platform-ios": { - "version": "5.0.1-alpha.2", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-5.0.1-alpha.2.tgz", - "integrity": "sha512-W15A75j+4bx6qbcapFia1A0M+W3JAt7Bc4VgEYvxDDRI62EsSHk1k6ZBNxs/j0cDPSYF9ZXHlRI+CWi3r9bTbQ==", - "requires": { - "@react-native-community/cli-tools": "^5.0.1-alpha.1", - "chalk": "^3.0.0", - "glob": "^7.1.3", - "js-yaml": "^3.13.1", - "lodash": "^4.17.15", - "plist": "^3.0.1", - "xcode": "^2.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz", + "integrity": "sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg==", + "dev": true, "requires": { - "color-convert": "^2.0.1" + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" } }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "@babel/plugin-proposal-export-namespace-from": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.7.tgz", + "integrity": "sha512-ZxdtqDXLRGBL64ocZcs7ovt71L3jhC1RGSyR996svrCi3PYqHNkb3SwPJCs8RIzD86s+WPpt2S73+EHCGO+NUA==", + "dev": true, "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" } }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.7.tgz", + "integrity": "sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg==", + "dev": true, "requires": { - "color-name": "~1.1.4" + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" } }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz", + "integrity": "sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + } }, - "glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "@babel/plugin-proposal-numeric-separator": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz", + "integrity": "sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw==", + "dev": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" } }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "@babel/plugin-proposal-optional-chaining": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz", + "integrity": "sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + } }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "@babel/plugin-proposal-private-methods": { + "version": "7.16.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.11.tgz", + "integrity": "sha512-F/2uAkPlXDr8+BHpZvo19w3hLFKge+k75XUprE6jaqKxjGkSYcK+4c+bup5PdW/7W/Rpjwql7FTVEDW+fRAQsw==", + "dev": true, "requires": { - "has-flag": "^4.0.0" + "@babel/helper-create-class-features-plugin": "^7.16.10", + "@babel/helper-plugin-utils": "^7.16.7" } - } - } - }, - "@react-native-community/cli-server-api": { - "version": "5.0.1-alpha.2", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-server-api/-/cli-server-api-5.0.1-alpha.2.tgz", - "integrity": "sha512-qzjoLF51GmvUHQrcJZE+wD3bTmgnTNOnGBU6z4terKmPdt/EBBSUkdXc6ScWWRF6oWP+xpxLZ//tKic2v2f+ag==", - "requires": { - "@react-native-community/cli-debugger-ui": "^5.0.1-alpha.1", - "@react-native-community/cli-tools": "^5.0.1-alpha.1", - "compression": "^1.7.1", - "connect": "^3.6.5", - "errorhandler": "^1.5.0", - "nocache": "^2.1.0", - "pretty-format": "^26.6.2", - "serve-static": "^1.13.1", - "ws": "^1.1.0" - }, - "dependencies": { - "ws": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz", - "integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==", + }, + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.7.tgz", + "integrity": "sha512-rMQkjcOFbm+ufe3bTZLyOfsOUOxyvLXZJCTARhJr+8UMSoZmqTe1K1BgkFcrW37rAchWg57yI69ORxiWvUINuQ==", + "dev": true, "requires": { - "options": ">=0.0.5", - "ultron": "1.0.x" + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-create-class-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" } - } - } - }, - "@react-native-community/cli-tools": { - "version": "5.0.1-alpha.1", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-5.0.1-alpha.1.tgz", - "integrity": "sha512-TwQxtfEOxGf8n5+UYKVO5exm56TwEAsWjYcoWkUKcSsIBl6VwCR4s3qGB8Y63uLUN2wf9MKnzvsaX337GjMVTA==", - "requires": { - "chalk": "^3.0.0", - "lodash": "^4.17.15", - "mime": "^2.4.1", - "node-fetch": "^2.6.0", - "open": "^6.2.0", - "shell-quote": "1.6.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + }, + "@babel/plugin-syntax-typescript": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.7.tgz", + "integrity": "sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A==", + "dev": true, "requires": { - "color-convert": "^2.0.1" + "@babel/helper-plugin-utils": "^7.16.7" } }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "@babel/plugin-transform-modules-commonjs": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.8.tgz", + "integrity": "sha512-oflKPvsLT2+uKQopesJt3ApiaIS2HW+hzHFcwRNtyDGieAeC/dIHZX8buJQ2J2X1rxGPy4eRcUijm3qcSPjYcA==", + "dev": true, "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-simple-access": "^7.16.7", + "babel-plugin-dynamic-import-node": "^2.3.3" } }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "@babel/plugin-transform-typescript": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.16.8.tgz", + "integrity": "sha512-bHdQ9k7YpBDO2d0NVfkj51DpQcvwIzIusJ7mEUaMlbZq3Kt/U47j24inXZHQ5MDiYpCs+oZiwnXyKedE8+q7AQ==", + "dev": true, "requires": { - "color-name": "~1.1.4" + "@babel/helper-create-class-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-typescript": "^7.16.7" } }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "@babel/preset-typescript": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.16.7.tgz", + "integrity": "sha512-WbVEmgXdIyvzB77AQjGBEyYPZx+8tTsO50XtfozQrkW8QB2rLJpH2lgx0TRw5EJrBxOZQ+wCcyPVQvS8tjEHpQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-validator-option": "^7.16.7", + "@babel/plugin-transform-typescript": "^7.16.7" + } }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "@babel/template": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", + "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" + } }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "@babel/traverse": { + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.3.tgz", + "integrity": "sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.3", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/parser": "^7.17.3", + "@babel/types": "^7.17.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", + "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", + "dev": true, "requires": { - "has-flag": "^4.0.0" + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" } - } - } - }, - "@react-native-community/cli-types": { - "version": "5.0.1-alpha.1", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-types/-/cli-types-5.0.1-alpha.1.tgz", - "integrity": "sha512-RdsLU0Jf3HodFnAY+oxCJt3VlhaN4MxGhfISvjGzqdjq3kpzmxex3+7fi6QvS97Kd6G2cheOJAdgP5wcwxp3Ng==", - "requires": { - "ora": "^3.4.0" - }, - "dependencies": { + }, + "@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "requires": { + "debug": "4" + } + }, "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" } }, - "ora": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz", - "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==", - "requires": { - "chalk": "^2.4.2", - "cli-cursor": "^2.1.0", - "cli-spinners": "^2.0.0", - "log-symbols": "^2.2.0", - "strip-ansi": "^5.2.0", - "wcwidth": "^1.0.1" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "requires": { - "ansi-regex": "^4.1.0" + "color-name": "~1.1.4" } - } - } - }, - "@react-native-community/masked-view": { - "version": "git+https://github.com/wordpress-mobile/react-native-masked-view.git#d849a1c7ed318196394aa20c3ae329431435e01f", - "from": "git+https://github.com/wordpress-mobile/react-native-masked-view.git#v0.1.11-wp" - }, - "@react-native-community/slider": { - "version": "git+https://github.com/wordpress-mobile/react-native-slider.git#af01fce403b2c559c704fc87654f363ed2aea9fd", - "from": "git+https://github.com/wordpress-mobile/react-native-slider.git#v3.0.2-wp" - }, - "@react-native/assets": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@react-native/assets/-/assets-1.0.0.tgz", - "integrity": "sha512-KrwSpS1tKI70wuKl68DwJZYEvXktDHdZMG0k2AXD/rJVSlB23/X2CB2cutVR0HwNMJIal9HOUOBB2rVfa6UGtQ==" - }, - "@react-native/normalize-color": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@react-native/normalize-color/-/normalize-color-1.0.0.tgz", - "integrity": "sha512-xUNRvNmCl3UGCPbbHvfyFMnpvLPoOjDCcp5bT9m2k+TF/ZBklEQwhPZlkrxRx2NhgFh1X3a5uL7mJ7ZR+8G7Qg==" - }, - "@react-native/polyfills": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@react-native/polyfills/-/polyfills-1.0.0.tgz", - "integrity": "sha512-0jbp4RxjYopTsIdLl+/Fy2TiwVYHy4mgeu07DG4b/LyM0OS/+lPP5c9sbnt/AMlnF6qz2JRZpPpGw1eMNS6A4w==" - }, - "@react-navigation/core": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@react-navigation/core/-/core-5.12.0.tgz", - "integrity": "sha512-CTmYrFXCZwInN40CpEzkPxhrpzujj20qvsUgpH05+oO1flwsnaJsyBfYawIcTS62/1/Z6SAM7iW5PbKk+qw9iQ==", - "requires": { - "@react-navigation/routers": "^5.4.9", - "escape-string-regexp": "^4.0.0", - "nanoid": "^3.1.9", - "query-string": "^6.13.1", - "react-is": "^16.13.0", - "use-subscription": "^1.4.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" }, - "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - } - } - }, - "@react-navigation/native": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@react-navigation/native/-/native-5.7.0.tgz", - "integrity": "sha512-a2JBOdRB3q20Jdc5hF8shR4Dk+ZmjF2Rr9RviErtARztu08lU+jcb1gK6c31OKL37JDuaS3xexE9Cb7dYeMy3Q==", - "requires": { - "@react-navigation/core": "^5.12.0", - "nanoid": "^3.1.9" - } - }, - "@react-navigation/routers": { - "version": "5.4.9", - "resolved": "https://registry.npmjs.org/@react-navigation/routers/-/routers-5.4.9.tgz", - "integrity": "sha512-dYD5qrIKUmuBEp+O98hB0tDYpEsGQgCQFQgMEoFKBmVVhx2JnJJ1zxRjU7xWcCU4VdBA8IOowgHQHJsVNKYyrg==", - "requires": { - "nanoid": "^3.1.9" - } - }, - "@react-navigation/stack": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@react-navigation/stack/-/stack-5.6.2.tgz", - "integrity": "sha512-51Aasxg8j2eKxz4mhA0ajJXrhAyJQkk2iiNE511zcqJ3tlfxv/h70Eej3PetnbbHFMOwNsEwc2GjB3OnfQcxjQ==", - "requires": { - "color": "^3.1.2", - "react-native-iphone-x-helper": "^1.2.1" - } - }, - "@samverschueren/stream-to-observable": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.0.tgz", - "integrity": "sha512-MI4Xx6LHs4Webyvi6EbspgyAb4D2Q2VtnCQ1blOJcoLS6mVa8lNN2rkIy1CVxfTUpoyIbCTkXES1rLXztFD1lg==", - "dev": true, - "requires": { - "any-observable": "^0.3.0" - } - }, - "@sideway/address": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.2.tgz", - "integrity": "sha512-idTz8ibqWFrPU8kMirL0CoPH/A29XOzzAzpyN3zQ4kAWnzmNfFmRaoMNN6VI8ske5M73HZyhIaW4OuSFIdM4oA==", - "requires": { - "@hapi/hoek": "^9.0.0" - }, - "dependencies": { - "@hapi/hoek": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.0.tgz", - "integrity": "sha512-sqKVVVOe5ivCaXDWivIJYVSaEgdQK9ul7a4Kity5Iw7u9+wBAPbX1RMSnLLmp7O4Vzj0WOWwMAJsTL00xwaNug==" - } - } - }, - "@sideway/formula": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.0.tgz", - "integrity": "sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg==" - }, - "@sideway/pinpoint": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" - }, - "@sindresorhus/is": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-2.1.0.tgz", - "integrity": "sha512-lXKXfypKo644k4Da4yXkPCrwcvn6SlUW2X2zFbuflKHNjf0w9htru01bo26uMhleMXsDmnZ12eJLdrAZa9MANg==", - "dev": true - }, - "@sinonjs/commons": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.1.tgz", - "integrity": "sha512-892K+kWUUi3cl+LlqEWIDrhvLgdL79tECi8JZUyq6IviKy/DNhuzCRlbHUjxK89f4ypPMMaFnFuR9Ie6DoIMsw==", - "dev": true, - "requires": { - "type-detect": "4.0.8" - } - }, - "@sinonjs/fake-timers": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz", - "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==", - "dev": true, - "requires": { - "@sinonjs/commons": "^1.7.0" - } - }, - "@storybook/addon-a11y": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/@storybook/addon-a11y/-/addon-a11y-6.3.2.tgz", - "integrity": "sha512-oz0/iwcmn9iYoQLwSbhf2PTMR3Tyhh06pTC1aQvBSotYs6zCViF1kw/XKptvu4jDQ4A8+tCrHujhIUPYyJzAEw==", - "dev": true, - "requires": { - "@storybook/addons": "6.3.2", - "@storybook/api": "6.3.2", - "@storybook/channels": "6.3.2", - "@storybook/client-api": "6.3.2", - "@storybook/client-logger": "6.3.2", - "@storybook/components": "6.3.2", - "@storybook/core-events": "6.3.2", - "@storybook/theming": "6.3.2", - "axe-core": "^4.2.0", - "core-js": "^3.8.2", - "global": "^4.4.0", - "lodash": "^4.17.20", - "react-sizeme": "^3.0.1", - "regenerator-runtime": "^0.13.7", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2" - }, - "dependencies": { - "axe-core": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.2.3.tgz", - "integrity": "sha512-pXnVMfJKSIWU2Ml4JHP7pZEPIrgBO1Fd3WGx+fPBsS+KRGhE4vxooD8XBGWbQOIVSZsVK7pUDBBkCicNu80yzQ==", - "dev": true - } - } - }, - "@storybook/addon-docs": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-6.3.2.tgz", - "integrity": "sha512-y9+umLi22ow3qAivxqkDeCtqzkIhlDIFOA7HH3Wd2yDo96UAzUiGozelCycijtfcyFuzwL8cvoKB6nIiVyuWsw==", - "dev": true, - "requires": { - "@babel/core": "^7.12.10", - "@babel/generator": "^7.12.11", - "@babel/parser": "^7.12.11", - "@babel/plugin-transform-react-jsx": "^7.12.12", - "@babel/preset-env": "^7.12.11", - "@jest/transform": "^26.6.2", - "@mdx-js/loader": "^1.6.22", - "@mdx-js/mdx": "^1.6.22", - "@mdx-js/react": "^1.6.22", - "@storybook/addons": "6.3.2", - "@storybook/api": "6.3.2", - "@storybook/builder-webpack4": "6.3.2", - "@storybook/client-api": "6.3.2", - "@storybook/client-logger": "6.3.2", - "@storybook/components": "6.3.2", - "@storybook/core": "6.3.2", - "@storybook/core-events": "6.3.2", - "@storybook/csf": "0.0.1", - "@storybook/csf-tools": "6.3.2", - "@storybook/node-logger": "6.3.2", - "@storybook/postinstall": "6.3.2", - "@storybook/source-loader": "6.3.2", - "@storybook/theming": "6.3.2", - "acorn": "^7.4.1", - "acorn-jsx": "^5.3.1", - "acorn-walk": "^7.2.0", - "core-js": "^3.8.2", - "doctrine": "^3.0.0", - "escodegen": "^2.0.0", - "fast-deep-equal": "^3.1.3", - "global": "^4.4.0", - "html-tags": "^3.1.0", - "js-string-escape": "^1.0.1", - "loader-utils": "^2.0.0", - "lodash": "^4.17.20", - "p-limit": "^3.1.0", - "prettier": "~2.2.1", - "prop-types": "^15.7.2", - "react-element-to-jsx-string": "^14.3.2", - "regenerator-runtime": "^0.13.7", - "remark-external-links": "^8.0.0", - "remark-slug": "^6.0.0", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2" - }, - "dependencies": { - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", "dev": true }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", "dev": true }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", "dev": true, "requires": { - "esutils": "^2.0.2" + "safe-buffer": "~5.1.1" } }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, + "requires": { + "ms": "2.1.2" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "diff-sequences": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", + "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", "dev": true }, - "json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "expect": { + "version": "27.2.5", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.2.5.tgz", + "integrity": "sha512-ZrO0w7bo8BgGoP/bLz+HDCI+0Hfei9jUSZs5yI/Wyn9VkG9w8oJ7rHRgYj+MA7yqqFa0IwHA3flJzZtYugShJA==", "dev": true, "requires": { - "minimist": "^1.2.5" + "@jest/types": "^27.2.5", + "ansi-styles": "^5.0.0", + "jest-get-type": "^27.0.6", + "jest-matcher-utils": "^27.2.5", + "jest-message-util": "^27.2.5", + "jest-regex-util": "^27.0.6" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + } } }, - "loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", "dev": true, "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" + "@types/yauzl": "^2.9.1", + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" } }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", "dev": true, "requires": { - "yocto-queue": "^0.1.0" + "pend": "~1.2.0" } }, - "prettier": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.2.1.tgz", - "integrity": "sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q==", + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true - } - } - }, - "@storybook/addon-knobs": { - "version": "6.2.9", - "resolved": "https://registry.npmjs.org/@storybook/addon-knobs/-/addon-knobs-6.2.9.tgz", - "integrity": "sha512-ic3xXy9uWPfIGP4x3VuGnrUmg/Jn9rHKIqZMhRcC7mFDRVlgbekvQxaruC6VY9LW6o8jV/miReSZkJf7M8o0aQ==", - "dev": true, - "requires": { - "@storybook/addons": "6.2.9", - "@storybook/api": "6.2.9", - "@storybook/channels": "6.2.9", - "@storybook/client-api": "6.2.9", - "@storybook/components": "6.2.9", - "@storybook/core-events": "6.2.9", - "@storybook/theming": "6.2.9", - "copy-to-clipboard": "^3.3.1", - "core-js": "^3.8.2", - "escape-html": "^1.0.3", - "fast-deep-equal": "^3.1.3", - "global": "^4.4.0", - "lodash": "^4.17.20", - "prop-types": "^15.7.2", - "qs": "^6.10.0", - "react-colorful": "^5.0.1", - "react-lifecycles-compat": "^3.0.4", - "react-select": "^3.2.0", - "regenerator-runtime": "^0.13.7" - }, - "dependencies": { - "@emotion/is-prop-valid": { - "version": "0.8.8", - "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz", - "integrity": "sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==", - "dev": true, - "requires": { - "@emotion/memoize": "0.7.4" - } }, - "@emotion/memoize": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz", - "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==", + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "@emotion/styled": { - "version": "10.0.27", - "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-10.0.27.tgz", - "integrity": "sha512-iK/8Sh7+NLJzyp9a5+vIQIXTYxfT4yB/OJbjzQanB2RZpvmzBQOHZWhpAMZWYEKRNNbsD6WfBw5sVWkb6WzS/Q==", + "https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", "dev": true, "requires": { - "@emotion/styled-base": "^10.0.27", - "babel-plugin-emotion": "^10.0.27" + "agent-base": "6", + "debug": "4" } }, - "@storybook/addons": { - "version": "6.2.9", - "resolved": "https://registry.npmjs.org/@storybook/addons/-/addons-6.2.9.tgz", - "integrity": "sha512-GnmEKbJwiN1jncN9NSA8CuR1i2XAlasPcl/Zn0jkfV9WitQeczVcJCPw86SGH84AD+tTBCyF2i9UC0KaOV1YBQ==", - "dev": true, - "requires": { - "@storybook/api": "6.2.9", - "@storybook/channels": "6.2.9", - "@storybook/client-logger": "6.2.9", - "@storybook/core-events": "6.2.9", - "@storybook/router": "6.2.9", - "@storybook/theming": "6.2.9", - "core-js": "^3.8.2", - "global": "^4.4.0", - "regenerator-runtime": "^0.13.7" - } + "is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true }, - "@storybook/api": { - "version": "6.2.9", - "resolved": "https://registry.npmjs.org/@storybook/api/-/api-6.2.9.tgz", - "integrity": "sha512-okkA3HAScE9tGnYBrjTOcgzT+L1lRHNoEh3ZfGgh1u/XNEyHGNkj4grvkd6nX7BzRcYQ/l2VkcKCqmOjUnSkVQ==", + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "dev": true, "requires": { - "@reach/router": "^1.3.4", - "@storybook/channels": "6.2.9", - "@storybook/client-logger": "6.2.9", - "@storybook/core-events": "6.2.9", - "@storybook/csf": "0.0.1", - "@storybook/router": "6.2.9", - "@storybook/semver": "^7.3.2", - "@storybook/theming": "6.2.9", - "@types/reach__router": "^1.3.7", - "core-js": "^3.8.2", - "fast-deep-equal": "^3.1.3", - "global": "^4.4.0", - "lodash": "^4.17.20", - "memoizerific": "^1.11.3", - "qs": "^6.10.0", - "regenerator-runtime": "^0.13.7", - "store2": "^2.12.0", - "telejson": "^5.1.0", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2" + "is-docker": "^2.0.0" } }, - "@storybook/channel-postmessage": { - "version": "6.2.9", - "resolved": "https://registry.npmjs.org/@storybook/channel-postmessage/-/channel-postmessage-6.2.9.tgz", - "integrity": "sha512-OqV+gLeeCHR0KExsIz0B7gD17Cjd9D+I75qnBsLWM9inWO5kc/WZ5svw8Bvjlcm6snWpvxUaT8L+svuqcPSmww==", + "jest-diff": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", + "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", "dev": true, "requires": { - "@storybook/channels": "6.2.9", - "@storybook/client-logger": "6.2.9", - "@storybook/core-events": "6.2.9", - "core-js": "^3.8.2", - "global": "^4.4.0", - "qs": "^6.10.0", - "telejson": "^5.1.0" + "chalk": "^4.0.0", + "diff-sequences": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, - "@storybook/channels": { - "version": "6.2.9", - "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-6.2.9.tgz", - "integrity": "sha512-6dC8Fb2ipNyOQXnUZMDeEUaJGH5DMLzyHlGLhVyDtrO5WR6bO8mQdkzf4+5dSKXgCBNX0BSkssXth4pDjn18rg==", - "dev": true, - "requires": { - "core-js": "^3.8.2", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2" - } + "jest-get-type": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", + "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "dev": true }, - "@storybook/client-api": { - "version": "6.2.9", - "resolved": "https://registry.npmjs.org/@storybook/client-api/-/client-api-6.2.9.tgz", - "integrity": "sha512-aLvEUVkbvv6Qo/2mF4rFCecdqi2CGOUDdsV1a6EFIVS/9gXFdpirsOwKHo9qNjacGdWPlBYGCUcbrw+DvNaSFA==", + "jest-matcher-utils": { + "version": "27.2.5", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.2.5.tgz", + "integrity": "sha512-qNR/kh6bz0Dyv3m68Ck2g1fLW5KlSOUNcFQh87VXHZwWc/gY6XwnKofx76Qytz3x5LDWT09/2+yXndTkaG4aWg==", "dev": true, "requires": { - "@storybook/addons": "6.2.9", - "@storybook/channel-postmessage": "6.2.9", - "@storybook/channels": "6.2.9", - "@storybook/client-logger": "6.2.9", - "@storybook/core-events": "6.2.9", - "@storybook/csf": "0.0.1", - "@types/qs": "^6.9.5", - "@types/webpack-env": "^1.16.0", - "core-js": "^3.8.2", - "global": "^4.4.0", - "lodash": "^4.17.20", - "memoizerific": "^1.11.3", - "qs": "^6.10.0", - "regenerator-runtime": "^0.13.7", - "stable": "^0.1.8", - "store2": "^2.12.0", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2" + "chalk": "^4.0.0", + "jest-diff": "^27.2.5", + "jest-get-type": "^27.0.6", + "pretty-format": "^27.2.5" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, - "@storybook/client-logger": { - "version": "6.2.9", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-6.2.9.tgz", - "integrity": "sha512-IfOQZuvpjh66qBInQCJOb9S0dTGpzZ/Cxlcvokp+PYt95KztaWN3mPm+HaDQCeRsrWNe0Bpm1zuickcJ6dBOXg==", + "jest-regex-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", + "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", + "dev": true + }, + "mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", + "dev": true + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "open": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", "dev": true, "requires": { - "core-js": "^3.8.2", - "global": "^4.4.0" + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" } }, - "@storybook/components": { - "version": "6.2.9", - "resolved": "https://registry.npmjs.org/@storybook/components/-/components-6.2.9.tgz", - "integrity": "sha512-hnV1MI2aB2g1sJ7NJphpxi7TwrMZQ/tpCJeHnkjmzyC6ez1MXqcBXGrEEdSXzRfAxjQTOEpu6H1mnns0xMP0Ag==", + "pirates": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.4.tgz", + "integrity": "sha512-ZIrVPH+A52Dw84R0L3/VS9Op04PuQ2SEoJL6bkshmiTic/HldyW9Tf7oH5mhJZBK7NmDx27vSMrYEXPXclpDKw==", + "dev": true + }, + "playwright-core": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.20.0.tgz", + "integrity": "sha512-d25IRcdooS278Cijlp8J8A5fLQZ+/aY3dKRJvgX5yjXA69N0huIUdnh3xXSgn+LsQ9DCNmB7Ngof3eY630jgdA==", + "dev": true, + "requires": { + "colors": "1.4.0", + "commander": "8.3.0", + "debug": "4.3.3", + "extract-zip": "2.0.1", + "https-proxy-agent": "5.0.0", + "jpeg-js": "0.4.3", + "mime": "3.0.0", + "pixelmatch": "5.2.1", + "pngjs": "6.0.0", + "progress": "2.0.3", + "proper-lockfile": "4.1.2", + "proxy-from-env": "1.1.0", + "rimraf": "3.0.2", + "socks-proxy-agent": "6.1.1", + "stack-utils": "2.0.5", + "ws": "8.4.2", + "yauzl": "2.10.0", + "yazl": "2.5.1" + } + }, + "pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", "dev": true, "requires": { - "@popperjs/core": "^2.6.0", - "@storybook/client-logger": "6.2.9", - "@storybook/csf": "0.0.1", - "@storybook/theming": "6.2.9", - "@types/color-convert": "^2.0.0", - "@types/overlayscrollbars": "^1.12.0", - "@types/react-syntax-highlighter": "11.0.5", - "color-convert": "^2.0.1", - "core-js": "^3.8.2", - "fast-deep-equal": "^3.1.3", - "global": "^4.4.0", - "lodash": "^4.17.20", - "markdown-to-jsx": "^7.1.0", - "memoizerific": "^1.11.3", - "overlayscrollbars": "^1.13.1", - "polished": "^4.0.5", - "prop-types": "^15.7.2", - "react-colorful": "^5.0.1", - "react-popper-tooltip": "^3.1.1", - "react-syntax-highlighter": "^13.5.3", - "react-textarea-autosize": "^8.3.0", - "regenerator-runtime": "^0.13.7", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2" + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + } } }, - "@storybook/core-events": { - "version": "6.2.9", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-6.2.9.tgz", - "integrity": "sha512-xQmbX/oYQK1QsAGN8hriXX5SUKOoTUe3L4dVaVHxJqy7MReRWJpprJmCpbAPJzWS6WCbDFfCM5kVEexHLOzJlQ==", + "react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true + }, + "socks": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.2.tgz", + "integrity": "sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA==", "dev": true, "requires": { - "core-js": "^3.8.2" + "ip": "^1.1.5", + "smart-buffer": "^4.2.0" } }, - "@storybook/router": { - "version": "6.2.9", - "resolved": "https://registry.npmjs.org/@storybook/router/-/router-6.2.9.tgz", - "integrity": "sha512-7Bn1OFoItCl8whXRT8N1qp1Lky7kzXJ3aslWp5E8HcM8rxh4OYXfbaeiyJEJxBTGC5zxgY+tAEXHFjsAviFROg==", + "socks-proxy-agent": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.1.1.tgz", + "integrity": "sha512-t8J0kG3csjA4g6FTbsMOWws+7R7vuRC8aQ/wy3/1OWmsgwA68zs/+cExQ0koSitUDXqhufF/YJr9wtNMZHw5Ew==", "dev": true, "requires": { - "@reach/router": "^1.3.4", - "@storybook/client-logger": "6.2.9", - "@types/reach__router": "^1.3.7", - "core-js": "^3.8.2", - "fast-deep-equal": "^3.1.3", - "global": "^4.4.0", - "lodash": "^4.17.20", - "memoizerific": "^1.11.3", - "qs": "^6.10.0", - "ts-dedent": "^2.0.0" + "agent-base": "^6.0.2", + "debug": "^4.3.1", + "socks": "^2.6.1" } }, - "@storybook/semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@storybook/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-SWeszlsiPsMI0Ps0jVNtH64cI5c0UF3f7KgjVKJoNP30crQ6wUSddY2hsdeczZXEKVJGEn50Q60flcGsQGIcrg==", + "source-map-support": { + "version": "0.4.18", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", + "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", "dev": true, "requires": { - "core-js": "^3.6.5", - "find-up": "^4.1.0" + "source-map": "^0.5.6" } }, - "@storybook/theming": { - "version": "6.2.9", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-6.2.9.tgz", - "integrity": "sha512-183oJW7AD7Fhqg5NT4ct3GJntwteAb9jZnQ6yhf9JSdY+fk8OhxRbPf7ov0au2gYACcGrWDd9K5pYQsvWlP5gA==", + "stack-utils": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", + "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", "dev": true, "requires": { - "@emotion/core": "^10.1.1", - "@emotion/is-prop-valid": "^0.8.6", - "@emotion/styled": "^10.0.27", - "@storybook/client-logger": "6.2.9", - "core-js": "^3.8.2", - "deep-object-diff": "^1.1.0", - "emotion-theming": "^10.0.27", - "global": "^4.4.0", - "memoizerific": "^1.11.3", - "polished": "^4.0.5", - "resolve-from": "^5.0.0", - "ts-dedent": "^2.0.0" + "escape-string-regexp": "^2.0.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true + } } }, - "@types/qs": { - "version": "6.9.6", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.6.tgz", - "integrity": "sha512-0/HnwIfW4ki2D8L8c9GVcG5I72s9jP5GSLVF0VIXDW00kmIpA6O33G7a8n59Tmh7Nz0WUC3rSb7PTY/sdW2JzA==", + "ws": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.4.2.tgz", + "integrity": "sha512-Kbk4Nxyq7/ZWqr/tarI9yIt/+iNNFOjBXEWgTb4ydaNHBNGgvf2QHbS9fdfsndfjFlFwEd4Al+mw83YkaD10ZA==", "dev": true }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", "dev": true, "requires": { - "color-name": "~1.1.4" + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + } + } + }, + "@pmmmwh/react-refresh-webpack-plugin": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.2.tgz", + "integrity": "sha512-BWOG6opI9+L5HjQIj6znFLwVXkjDS98PKfRDlbPFvinTz4wQ7ZSXxV0lLOfRW12HXcqk4DEzrphjRMJFXuihNg==", + "dev": true, + "requires": { + "ansi-html-community": "^0.0.8", + "common-path-prefix": "^3.0.0", + "core-js-pure": "^3.8.1", + "error-stack-parser": "^2.0.6", + "find-up": "^5.0.0", + "html-entities": "^2.1.0", + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0", + "source-map": "^0.7.3" + }, + "dependencies": { + "@types/json-schema": { + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", + "dev": true + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" } }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "dev": true }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", "dev": true }, "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "requires": { - "locate-path": "^5.0.0", + "locate-path": "^6.0.0", "path-exists": "^4.0.0" } }, + "html-entities": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.2.tgz", + "integrity": "sha512-c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ==", + "dev": true + }, "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "requires": { - "p-locate": "^4.1.0" + "p-locate": "^5.0.0" } }, "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "requires": { - "p-try": "^2.0.0" + "yocto-queue": "^0.1.0" } }, "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "requires": { - "p-limit": "^2.2.0" + "p-limit": "^3.0.2" } }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true }, - "qs": { - "version": "6.10.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz", - "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==", + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "dev": true, "requires": { - "side-channel": "^1.0.4" + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" } }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", "dev": true - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } } } }, - "@storybook/addon-storysource": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/@storybook/addon-storysource/-/addon-storysource-6.3.2.tgz", - "integrity": "sha512-biJ8Lt0D9cVnztwUlfnam3WnyKlJaL8l9+3+9uoHZ+GWfSxRnzOZe3fIiL6n4AwK6r4TrpThmq9GGh1KyHDBuQ==", - "dev": true, - "requires": { - "@storybook/addons": "6.3.2", - "@storybook/api": "6.3.2", - "@storybook/client-logger": "6.3.2", - "@storybook/components": "6.3.2", - "@storybook/router": "6.3.2", - "@storybook/source-loader": "6.3.2", - "@storybook/theming": "6.3.2", - "core-js": "^3.8.2", - "estraverse": "^5.2.0", - "loader-utils": "^2.0.0", - "prettier": "~2.2.1", - "prop-types": "^15.7.2", - "react-syntax-highlighter": "^13.5.3", - "regenerator-runtime": "^0.13.7" - }, - "dependencies": { - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true - }, - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true - }, - "json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - }, - "prettier": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.2.1.tgz", - "integrity": "sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q==", - "dev": true - } - } + "@polka/url": { + "version": "1.0.0-next.15", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.15.tgz", + "integrity": "sha512-15spi3V28QdevleWBNXE4pIls3nFZmBbUGrW9IVPwiQczuSb9n76TCB4bsk8TSel+I1OkHEdPhu5QKMfY6rQHA==", + "dev": true }, - "@storybook/addon-viewport": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-6.3.2.tgz", - "integrity": "sha512-npmD2kpXyc7zPFgxOu2JBg8U702P4c2B+OvFa53jQJIKyUdjXNzGatG2FSshQmY+UpiDJyKScPJ7W/9oU7HAfw==", + "@popperjs/core": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.6.0.tgz", + "integrity": "sha512-cPqjjzuFWNK3BSKLm0abspP0sp/IGOli4p5I5fKFAzdS8fvjdOwDCfZqAaIiXd9lPkOWi3SUUfZof3hEb7J/uw==" + }, + "@reach/router": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@reach/router/-/router-1.3.4.tgz", + "integrity": "sha512-+mtn9wjlB9NN2CNnnC/BRYtwdKBfSyyasPYraNAyvaV1occr/5NnB4CVzjEZipNHwYebQwcndGUmpFzxAUoqSA==", "dev": true, "requires": { - "@storybook/addons": "6.3.2", - "@storybook/api": "6.3.2", - "@storybook/client-logger": "6.3.2", - "@storybook/components": "6.3.2", - "@storybook/core-events": "6.3.2", - "@storybook/theming": "6.3.2", - "core-js": "^3.8.2", - "global": "^4.4.0", - "memoizerific": "^1.11.3", - "prop-types": "^15.7.2", - "regenerator-runtime": "^0.13.7" + "create-react-context": "0.3.0", + "invariant": "^2.2.3", + "prop-types": "^15.6.1", + "react-lifecycles-compat": "^3.0.4" } }, - "@storybook/addons": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/@storybook/addons/-/addons-6.3.2.tgz", - "integrity": "sha512-fzpTLKyweD0yPXnfjaOrLpKRm4AVHdGRmfJb1p6KyUTXoNRWGYHsXN3EvAdsWjTamhbL2JoQy38kvu7SmkTEug==", - "dev": true, + "@react-native-clipboard/clipboard": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@react-native-clipboard/clipboard/-/clipboard-1.9.0.tgz", + "integrity": "sha512-O/ohFq1CAQLfoNc376Z3W6gvVcCJlje5AVk0JhsI8Q40hn+NXAWCnOM1bEePfC0uDMtp0/RCK6FotUvkQ6c4Zw==" + }, + "@react-native-community/blur": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@react-native-community/blur/-/blur-3.6.0.tgz", + "integrity": "sha512-GtDBhpX2pQcjl4VopOC8FktrVufrEfYRwVeMQ2WWckqKIv2BdwvlvWvj88L1WmEdBr9UNcm3rtgz+d+YXkmirA==", "requires": { - "@storybook/api": "6.3.2", - "@storybook/channels": "6.3.2", - "@storybook/client-logger": "6.3.2", - "@storybook/core-events": "6.3.2", - "@storybook/router": "6.3.2", - "@storybook/theming": "6.3.2", - "core-js": "^3.8.2", - "global": "^4.4.0", - "regenerator-runtime": "^0.13.7" + "prop-types": "^15.5.10" } }, - "@storybook/api": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/@storybook/api/-/api-6.3.2.tgz", - "integrity": "sha512-rXe7l8mwNEvk3cqHYJ4H2XQWWY8oeezJezgt1ZBq4GvNVzVUPjASi1meXQwAYm39SdCL5+lP/hLpAZvobB1Tag==", - "dev": true, - "requires": { - "@reach/router": "^1.3.4", - "@storybook/channels": "6.3.2", - "@storybook/client-logger": "6.3.2", - "@storybook/core-events": "6.3.2", - "@storybook/csf": "0.0.1", - "@storybook/router": "6.3.2", - "@storybook/semver": "^7.3.2", - "@storybook/theming": "6.3.2", - "@types/reach__router": "^1.3.7", - "core-js": "^3.8.2", - "fast-deep-equal": "^3.1.3", - "global": "^4.4.0", - "lodash": "^4.17.20", - "memoizerific": "^1.11.3", - "qs": "^6.10.0", - "regenerator-runtime": "^0.13.7", - "store2": "^2.12.0", - "telejson": "^5.3.2", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2" + "@react-native-community/cli": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-6.3.1.tgz", + "integrity": "sha512-UQ77AkGvPzdwJt6qhYXUyDMP1v2rdCcIlrhU48FOcAhGX+N/LCL9Cp/Ic6CkiiSHJdktbgiEEJ2srprXH8nzVg==", + "requires": { + "@react-native-community/cli-debugger-ui": "^6.0.0-rc.0", + "@react-native-community/cli-hermes": "^6.3.0", + "@react-native-community/cli-plugin-metro": "^6.2.0", + "@react-native-community/cli-server-api": "^6.2.0", + "@react-native-community/cli-tools": "^6.2.0", + "@react-native-community/cli-types": "^6.0.0", + "appdirsjs": "^1.2.4", + "chalk": "^4.1.2", + "command-exists": "^1.2.8", + "commander": "^2.19.0", + "cosmiconfig": "^5.1.0", + "deepmerge": "^3.2.0", + "envinfo": "^7.7.2", + "execa": "^1.0.0", + "find-up": "^4.1.0", + "fs-extra": "^8.1.0", + "glob": "^7.1.3", + "graceful-fs": "^4.1.3", + "joi": "^17.2.1", + "leven": "^3.1.0", + "lodash": "^4.17.15", + "minimist": "^1.2.0", + "node-stream-zip": "^1.9.1", + "ora": "^3.4.0", + "pretty-format": "^26.6.2", + "prompts": "^2.4.0", + "semver": "^6.3.0", + "serve-static": "^1.13.1", + "strip-ansi": "^5.2.0", + "sudo-prompt": "^9.0.0", + "wcwidth": "^1.0.1" }, "dependencies": { - "@storybook/semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@storybook/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-SWeszlsiPsMI0Ps0jVNtH64cI5c0UF3f7KgjVKJoNP30crQ6wUSddY2hsdeczZXEKVJGEn50Q60flcGsQGIcrg==", - "dev": true, - "requires": { - "core-js": "^3.6.5", - "find-up": "^4.1.0" - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "find-up": { + "ansi-regex": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "requires": { - "p-locate": "^4.1.0" + "color-convert": "^2.0.1" } }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "requires": { - "p-try": "^2.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "requires": { - "p-limit": "^2.2.0" + "color-name": "~1.1.4" } }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, - "qs": { - "version": "6.10.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz", - "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==", - "dev": true, + "cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", "requires": { - "side-channel": "^1.0.4" + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" } }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - } - } - }, - "@storybook/builder-webpack4": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/@storybook/builder-webpack4/-/builder-webpack4-6.3.2.tgz", - "integrity": "sha512-0xKMy/9Zp+Z1EK9R2Oq4kmd2Za9OlzXoLNBHdGuwe3lqoCsXvEQHsrGdc7V5uT4HwP1KBEhn9Yl+Y7yuMDZJ0Q==", - "dev": true, - "requires": { - "@babel/core": "^7.12.10", - "@babel/plugin-proposal-class-properties": "^7.12.1", - "@babel/plugin-proposal-decorators": "^7.12.12", - "@babel/plugin-proposal-export-default-from": "^7.12.1", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", - "@babel/plugin-proposal-object-rest-spread": "^7.12.1", - "@babel/plugin-proposal-optional-chaining": "^7.12.7", - "@babel/plugin-proposal-private-methods": "^7.12.1", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-arrow-functions": "^7.12.1", - "@babel/plugin-transform-block-scoping": "^7.12.12", - "@babel/plugin-transform-classes": "^7.12.1", - "@babel/plugin-transform-destructuring": "^7.12.1", - "@babel/plugin-transform-for-of": "^7.12.1", - "@babel/plugin-transform-parameters": "^7.12.1", - "@babel/plugin-transform-shorthand-properties": "^7.12.1", - "@babel/plugin-transform-spread": "^7.12.1", - "@babel/plugin-transform-template-literals": "^7.12.1", - "@babel/preset-env": "^7.12.11", - "@babel/preset-react": "^7.12.10", - "@babel/preset-typescript": "^7.12.7", - "@storybook/addons": "6.3.2", - "@storybook/api": "6.3.2", - "@storybook/channel-postmessage": "6.3.2", - "@storybook/channels": "6.3.2", - "@storybook/client-api": "6.3.2", - "@storybook/client-logger": "6.3.2", - "@storybook/components": "6.3.2", - "@storybook/core-common": "6.3.2", - "@storybook/core-events": "6.3.2", - "@storybook/node-logger": "6.3.2", - "@storybook/router": "6.3.2", - "@storybook/semver": "^7.3.2", - "@storybook/theming": "6.3.2", - "@storybook/ui": "6.3.2", - "@types/node": "^14.0.10", - "@types/webpack": "^4.41.26", - "autoprefixer": "^9.8.6", - "babel-loader": "^8.2.2", - "babel-plugin-macros": "^2.8.0", - "babel-plugin-polyfill-corejs3": "^0.1.0", - "case-sensitive-paths-webpack-plugin": "^2.3.0", - "core-js": "^3.8.2", - "css-loader": "^3.6.0", - "dotenv-webpack": "^1.8.0", - "file-loader": "^6.2.0", - "find-up": "^5.0.0", - "fork-ts-checker-webpack-plugin": "^4.1.6", - "fs-extra": "^9.0.1", - "glob": "^7.1.6", - "glob-promise": "^3.4.0", - "global": "^4.4.0", - "html-webpack-plugin": "^4.0.0", - "pnp-webpack-plugin": "1.6.4", - "postcss": "^7.0.36", - "postcss-flexbugs-fixes": "^4.2.1", - "postcss-loader": "^4.2.0", - "raw-loader": "^4.0.2", - "react-dev-utils": "^11.0.3", - "stable": "^0.1.8", - "style-loader": "^1.3.0", - "terser-webpack-plugin": "^4.2.3", - "ts-dedent": "^2.0.0", - "url-loader": "^4.1.1", - "util-deprecate": "^1.0.2", - "webpack": "4", - "webpack-dev-middleware": "^3.7.3", - "webpack-filter-warnings-plugin": "^1.2.1", - "webpack-hot-middleware": "^2.25.0", - "webpack-virtual-modules": "^0.2.2" - }, - "dependencies": { - "@storybook/semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@storybook/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-SWeszlsiPsMI0Ps0jVNtH64cI5c0UF3f7KgjVKJoNP30crQ6wUSddY2hsdeczZXEKVJGEn50Q60flcGsQGIcrg==", - "dev": true, - "requires": { - "core-js": "^3.6.5", - "find-up": "^4.1.0" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - } - } - }, - "@types/json-schema": { - "version": "7.0.7", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", - "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==", - "dev": true - }, - "@types/webpack": { - "version": "4.41.30", - "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.30.tgz", - "integrity": "sha512-GUHyY+pfuQ6haAfzu4S14F+R5iGRwN6b2FRNJY7U0NilmFAqbsOfK6j1HwuLBAqwRIT+pVdNDJGJ6e8rpp0KHA==", - "dev": true, - "requires": { - "@types/node": "*", - "@types/tapable": "^1", - "@types/uglify-js": "*", - "@types/webpack-sources": "*", - "anymatch": "^3.0.0", - "source-map": "^0.6.0" - } - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "autoprefixer": { - "version": "9.8.6", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.6.tgz", - "integrity": "sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg==", - "dev": true, - "requires": { - "browserslist": "^4.12.0", - "caniuse-lite": "^1.0.30001109", - "colorette": "^1.2.1", - "normalize-range": "^0.1.2", - "num2fraction": "^1.2.2", - "postcss": "^7.0.32", - "postcss-value-parser": "^4.1.0" - } - }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true - }, - "cacache": { - "version": "15.2.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.2.0.tgz", - "integrity": "sha512-uKoJSHmnrqXgthDFx/IU6ED/5xd+NNGe+Bb+kLZy7Ku4P+BaiWEUflAKPZ7eAzsYGcsAGASJZsybXp+quEcHTw==", - "dev": true, - "requires": { - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" - } - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "css-loader": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.6.0.tgz", - "integrity": "sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ==", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "cssesc": "^3.0.0", - "icss-utils": "^4.1.1", - "loader-utils": "^1.2.3", - "normalize-path": "^3.0.0", - "postcss": "^7.0.32", - "postcss-modules-extract-imports": "^2.0.0", - "postcss-modules-local-by-default": "^3.0.2", - "postcss-modules-scope": "^2.2.0", - "postcss-modules-values": "^3.0.0", - "postcss-value-parser": "^4.1.0", - "schema-utils": "^2.7.0", - "semver": "^6.3.0" + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" } } }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true + "deepmerge": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-3.3.0.tgz", + "integrity": "sha512-GRQOafGHwMHpjPx9iCvTgpu9NojZ49q794EEL94JVEw6VaeA8XTUyBKvAkOOjBX9oJNiV6G3P+T+tihFjo2TqA==" }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true + "envinfo": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", + "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==" }, - "find-cache-dir": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", - "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", - "dev": true, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" } }, "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "requires": { - "locate-path": "^6.0.0", + "locate-path": "^5.0.0", "path-exists": "^4.0.0" - }, - "dependencies": { - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - } - } - }, - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" } }, - "fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", "requires": { - "minipass": "^3.0.0" + "pump": "^3.0.0" } }, "glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "dev": true, + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -9053,113 +8237,91 @@ "path-is-absolute": "^1.0.0" } }, - "graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", - "dev": true - }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, + "import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" } }, "locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, "requires": { "p-locate": "^4.1.0" } }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, + "ora": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz", + "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==", "requires": { - "semver": "^6.0.0" + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-spinners": "^2.0.0", + "log-symbols": "^2.2.0", + "strip-ansi": "^5.2.0", + "wcwidth": "^1.0.1" }, "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } } } }, - "minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dev": true, - "requires": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - } - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, "p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, "requires": { "p-try": "^2.0.0" } @@ -9168,401 +8330,382 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, "requires": { "p-limit": "^2.2.0" } }, - "p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, "p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } }, "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - } + "prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "requires": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" } }, - "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", - "dev": true, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, - "postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", - "dev": true + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" }, - "schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "dev": true, + "sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "requires": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" + "ansi-regex": "^4.1.0" } }, - "serialize-javascript": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", - "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", - "dev": true, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "requires": { - "randombytes": "^2.1.0" + "has-flag": "^4.0.0" + } + } + } + }, + "@react-native-community/cli-debugger-ui": { + "version": "6.0.0-rc.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-6.0.0-rc.0.tgz", + "integrity": "sha512-achYcPPoWa9D02C5tn6TBzjeY443wQTyx37urptc75JpZ7gR5YHsDyIEEWa3DDYp1va9zx/iGg+uZ/hWw07GAw==", + "requires": { + "serve-static": "^1.13.1" + } + }, + "@react-native-community/cli-hermes": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-hermes/-/cli-hermes-6.3.0.tgz", + "integrity": "sha512-Uhbm9bubyZLZ12vFCIfWbE/Qi3SBTbYIN/TC08EudTLhv/KbPomCQnmFsnJ7AXQFuOZJs73mBxoEAYSbRbwyVA==", + "requires": { + "@react-native-community/cli-platform-android": "^6.3.0", + "@react-native-community/cli-tools": "^6.2.0", + "chalk": "^4.1.2", + "hermes-profile-transformer": "^0.0.6", + "ip": "^1.1.5" + }, + "dependencies": { + "@react-native-community/cli-platform-android": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-6.3.0.tgz", + "integrity": "sha512-d5ufyYcvrZoHznYm5bjBXaiHIJv552t5gYtQpnUsxBhHSQ8QlaNmlLUyeSPRDfOw4ND9b0tPHqs4ufwx6vp/fQ==", + "requires": { + "@react-native-community/cli-tools": "^6.2.0", + "chalk": "^4.1.2", + "execa": "^1.0.0", + "fs-extra": "^8.1.0", + "glob": "^7.1.3", + "jetifier": "^1.6.2", + "lodash": "^4.17.15", + "logkitty": "^0.7.1", + "slash": "^3.0.0", + "xmldoc": "^1.1.2" } }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "dev": true, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "color-convert": "^2.0.1" } }, - "ssri": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", - "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", - "dev": true, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "requires": { - "minipass": "^3.1.1" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } }, - "style-loader": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.3.0.tgz", - "integrity": "sha512-V7TCORko8rs9rIqkSrlMfkqA63DfoGBBJmK1kKGCcSi+BWb4cqz0SRsnp4l6rU5iwOEd0/2ePv68SV22VXon4Q==", - "dev": true, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^2.7.0" - }, - "dependencies": { - "json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - } + "color-name": "~1.1.4" } }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "requires": { - "has-flag": "^3.0.0" + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } }, - "tar": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.0.tgz", - "integrity": "sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA==", - "dev": true, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", "requires": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" } }, - "terser": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.7.1.tgz", - "integrity": "sha512-b3e+d5JbHAe/JSjwsC3Zn55wsBIM7AsHLjKxT31kGCldgbpFePaFo+PiddtO6uwRZWRw7sPXmAN8dTW61xmnSg==", - "dev": true, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", "requires": { - "commander": "^2.20.0", - "source-map": "~0.7.2", - "source-map-support": "~0.5.19" - }, - "dependencies": { - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true - } + "pump": "^3.0.0" } }, - "terser-webpack-plugin": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-4.2.3.tgz", - "integrity": "sha512-jTgXh40RnvOrLQNgIkwEKnQ8rmHjHK4u+6UBEi+W+FPmvb+uo+chJXntKe7/3lW5mNysgSWD60KyesnhW8D6MQ==", - "dev": true, + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "requires": { - "cacache": "^15.0.5", - "find-cache-dir": "^3.3.1", - "jest-worker": "^26.5.0", - "p-limit": "^3.0.2", - "schema-utils": "^3.0.0", - "serialize-javascript": "^5.0.1", - "source-map": "^0.6.1", - "terser": "^5.3.4", - "webpack-sources": "^1.4.3" - }, - "dependencies": { - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "schema-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.0.tgz", - "integrity": "sha512-tTEaeYkyIhEZ9uWgAjDerWov3T9MgX8dhhy2r0IGeeX4W8ngtGl1++dUve/RUqzuaASSh7shwCDJjEzthxki8w==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.7", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, - "webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "dev": true, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } } } }, - "@storybook/channel-postmessage": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/@storybook/channel-postmessage/-/channel-postmessage-6.3.2.tgz", - "integrity": "sha512-6ne51RmZ7Ye9TDhPy/y5NuyQGNJ6VJcEch5E8D0nrFfNwJ5djKzkg1xatADjdhlCfQ9zPfseQVPM5IovEzEb/A==", - "dev": true, + "@react-native-community/cli-platform-android": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-6.2.0.tgz", + "integrity": "sha512-QLxwClcbxVhuIGsQiIpqRnoJzRdpN2B+y/Yt2OGgDHXGbuOXulgt4D+8AhvZXrB4jyAcEUlFg/048v3RGQQudw==", "requires": { - "@storybook/channels": "6.3.2", - "@storybook/client-logger": "6.3.2", - "@storybook/core-events": "6.3.2", - "core-js": "^3.8.2", - "global": "^4.4.0", - "qs": "^6.10.0", - "telejson": "^5.3.2" + "@react-native-community/cli-tools": "^6.2.0", + "chalk": "^4.1.2", + "execa": "^1.0.0", + "fs-extra": "^8.1.0", + "glob": "^7.1.3", + "jetifier": "^1.6.2", + "lodash": "^4.17.15", + "logkitty": "^0.7.1", + "slash": "^3.0.0", + "xmldoc": "^1.1.2" }, "dependencies": { - "qs": { - "version": "6.10.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz", - "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==", - "dev": true, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "requires": { - "side-channel": "^1.0.4" + "color-convert": "^2.0.1" } }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } - } - } - }, - "@storybook/channels": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-6.3.2.tgz", - "integrity": "sha512-fkyX0vn7KkN7p515Knm4Cfo8Z2xyO9hMPK4IReZiGz8o9vOziXHeYvdFZ07aTfcUb9ZG3ur3C7rmaEDMNfwCWA==", - "dev": true, - "requires": { - "core-js": "^3.8.2", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2" - } - }, - "@storybook/client-api": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/@storybook/client-api/-/client-api-6.3.2.tgz", - "integrity": "sha512-vYPTaROdmBtzKckGAbZAi8gpD2OgDB0FlsjTTe7rz8jcN1ecGRBBXlb/CJndLlAKgZqF+sramtIY3GZp0wdpPA==", - "dev": true, - "requires": { - "@storybook/addons": "6.3.2", - "@storybook/channel-postmessage": "6.3.2", - "@storybook/channels": "6.3.2", - "@storybook/client-logger": "6.3.2", - "@storybook/core-events": "6.3.2", - "@storybook/csf": "0.0.1", - "@types/qs": "^6.9.5", - "@types/webpack-env": "^1.16.0", - "core-js": "^3.8.2", - "global": "^4.4.0", - "lodash": "^4.17.20", - "memoizerific": "^1.11.3", - "qs": "^6.10.0", - "regenerator-runtime": "^0.13.7", - "stable": "^0.1.8", - "store2": "^2.12.0", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2" - }, - "dependencies": { - "@types/qs": { - "version": "6.9.6", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.6.tgz", - "integrity": "sha512-0/HnwIfW4ki2D8L8c9GVcG5I72s9jP5GSLVF0VIXDW00kmIpA6O33G7a8n59Tmh7Nz0WUC3rSb7PTY/sdW2JzA==", - "dev": true }, - "qs": { - "version": "6.10.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz", - "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==", - "dev": true, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "requires": { - "side-channel": "^1.0.4" + "color-name": "~1.1.4" } }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "requires": { + "pump": "^3.0.0" + } + }, + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" } } } }, - "@storybook/client-logger": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-6.3.2.tgz", - "integrity": "sha512-1V70P4ARRHSvkAUZP/mgU3hUl7BN9kpNujbBNRcVCCv+DgsnryF+CH9xJ8nxrpOZxlj4sIG68OcMqRaV1HL/3w==", - "dev": true, - "requires": { - "core-js": "^3.8.2", - "global": "^4.4.0" - } - }, - "@storybook/components": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/@storybook/components/-/components-6.3.2.tgz", - "integrity": "sha512-lwzqY7CLbo+4PxBiN9DMwtMRPG1jN9Ih6SAdB4fJdCj3bZQ7ef9peme70RvpDEIOD3MX6vu/9AKQj2wxAaHrDA==", - "dev": true, + "@react-native-community/cli-platform-ios": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-6.2.0.tgz", + "integrity": "sha512-k15MhExxLiLDDZOeuPgvTxbp0CsoLQQpk2Du0HjZDePqqWcKJylQqMZru1o8HuQHPcEr+b71HIs5V+lKyFYpfg==", "requires": { - "@popperjs/core": "^2.6.0", - "@storybook/client-logger": "6.3.2", - "@storybook/csf": "0.0.1", - "@storybook/theming": "6.3.2", - "@types/color-convert": "^2.0.0", - "@types/overlayscrollbars": "^1.12.0", - "@types/react-syntax-highlighter": "11.0.5", - "color-convert": "^2.0.1", - "core-js": "^3.8.2", - "fast-deep-equal": "^3.1.3", - "global": "^4.4.0", - "lodash": "^4.17.20", - "markdown-to-jsx": "^7.1.3", - "memoizerific": "^1.11.3", - "overlayscrollbars": "^1.13.1", - "polished": "^4.0.5", - "prop-types": "^15.7.2", - "react-colorful": "^5.1.2", - "react-popper-tooltip": "^3.1.1", - "react-syntax-highlighter": "^13.5.3", - "react-textarea-autosize": "^8.3.0", - "regenerator-runtime": "^0.13.7", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2" + "@react-native-community/cli-tools": "^6.2.0", + "chalk": "^4.1.2", + "glob": "^7.1.3", + "js-yaml": "^3.13.1", + "lodash": "^4.17.15", + "ora": "^3.4.0", + "plist": "^3.0.2", + "xcode": "^2.0.0" }, "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "requires": { "color-name": "~1.1.4" } @@ -9570,785 +8713,725 @@ "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - } - } - }, - "@storybook/core": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/@storybook/core/-/core-6.3.2.tgz", - "integrity": "sha512-EPyGqTu2f2184FfZ7o1IMWbVKWkdhbIeLSnNfl5CA5ZVMFQwV8XhEJXpzWI0VopZK0hE0+ooU4M+if8JeSWulQ==", - "dev": true, - "requires": { - "@storybook/core-client": "6.3.2", - "@storybook/core-server": "6.3.2" - } - }, - "@storybook/core-client": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/@storybook/core-client/-/core-client-6.3.2.tgz", - "integrity": "sha512-A354DrsBQgtfKRSNVM0WpepNZwZfb8QxBKB86LR5crfbLIAs9fxJnYmAVBF1ju1EasrIxX6kGDryH4pQYaJPXw==", - "dev": true, - "requires": { - "@storybook/addons": "6.3.2", - "@storybook/channel-postmessage": "6.3.2", - "@storybook/client-api": "6.3.2", - "@storybook/client-logger": "6.3.2", - "@storybook/core-events": "6.3.2", - "@storybook/csf": "0.0.1", - "@storybook/ui": "6.3.2", - "airbnb-js-shims": "^2.2.1", - "ansi-to-html": "^0.6.11", - "core-js": "^3.8.2", - "global": "^4.4.0", - "lodash": "^4.17.20", - "qs": "^6.10.0", - "regenerator-runtime": "^0.13.7", - "ts-dedent": "^2.0.0", - "unfetch": "^4.2.0", - "util-deprecate": "^1.0.2" - }, - "dependencies": { - "qs": { - "version": "6.10.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz", - "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==", - "dev": true, + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "requires": { - "side-channel": "^1.0.4" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - } - } - }, - "@storybook/core-common": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-6.3.2.tgz", - "integrity": "sha512-draeHXXWTn1u3YzLMZdtCOy1UOXsPBQz6q5f64o8Qjkr8Htqf2IiFYPmswOq7eo9yPQZu7+nsfRcx7M1GNAQlg==", - "dev": true, - "requires": { - "@babel/core": "^7.12.10", - "@babel/plugin-proposal-class-properties": "^7.12.1", - "@babel/plugin-proposal-decorators": "^7.12.12", - "@babel/plugin-proposal-export-default-from": "^7.12.1", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", - "@babel/plugin-proposal-object-rest-spread": "^7.12.1", - "@babel/plugin-proposal-optional-chaining": "^7.12.7", - "@babel/plugin-proposal-private-methods": "^7.12.1", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-arrow-functions": "^7.12.1", - "@babel/plugin-transform-block-scoping": "^7.12.12", - "@babel/plugin-transform-classes": "^7.12.1", - "@babel/plugin-transform-destructuring": "^7.12.1", - "@babel/plugin-transform-for-of": "^7.12.1", - "@babel/plugin-transform-parameters": "^7.12.1", - "@babel/plugin-transform-shorthand-properties": "^7.12.1", - "@babel/plugin-transform-spread": "^7.12.1", - "@babel/preset-env": "^7.12.11", - "@babel/preset-react": "^7.12.10", - "@babel/preset-typescript": "^7.12.7", - "@babel/register": "^7.12.1", - "@storybook/node-logger": "6.3.2", - "@storybook/semver": "^7.3.2", - "@types/glob-base": "^0.3.0", - "@types/micromatch": "^4.0.1", - "@types/node": "^14.0.10", - "@types/pretty-hrtime": "^1.0.0", - "babel-loader": "^8.2.2", - "babel-plugin-macros": "^3.0.1", - "babel-plugin-polyfill-corejs3": "^0.1.0", - "chalk": "^4.1.0", - "core-js": "^3.8.2", - "express": "^4.17.1", - "file-system-cache": "^1.0.5", - "find-up": "^5.0.0", - "fork-ts-checker-webpack-plugin": "^6.0.4", - "glob": "^7.1.6", - "glob-base": "^0.3.0", - "interpret": "^2.2.0", - "json5": "^2.1.3", - "lazy-universal-dotenv": "^3.0.1", - "micromatch": "^4.0.2", - "pkg-dir": "^5.0.0", - "pretty-hrtime": "^1.0.3", - "resolve-from": "^5.0.0", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2", - "webpack": "4" - }, - "dependencies": { - "@storybook/semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@storybook/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-SWeszlsiPsMI0Ps0jVNtH64cI5c0UF3f7KgjVKJoNP30crQ6wUSddY2hsdeczZXEKVJGEn50Q60flcGsQGIcrg==", - "dev": true, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "ora": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz", + "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==", "requires": { - "core-js": "^3.6.5", - "find-up": "^4.1.0" + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-spinners": "^2.0.0", + "log-symbols": "^2.2.0", + "strip-ansi": "^5.2.0", + "wcwidth": "^1.0.1" }, "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" } } } }, - "@types/json-schema": { - "version": "7.0.7", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", - "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==", - "dev": true - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "ansi-regex": "^4.1.0" } }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "has-flag": "^4.0.0" } - }, - "babel-plugin-macros": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", - "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", - "dev": true, + } + } + }, + "@react-native-community/cli-plugin-metro": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-plugin-metro/-/cli-plugin-metro-6.2.0.tgz", + "integrity": "sha512-JfmzuFNzOr+dFTUQJo1rV0t87XAqgHRTMYXNleQVt8otOVCk1FSCgKlgqMdvQc/FCx2ZjoMWEEV/g0LrPI8Etw==", + "requires": { + "@react-native-community/cli-server-api": "^6.2.0", + "@react-native-community/cli-tools": "^6.2.0", + "chalk": "^4.1.2", + "metro": "^0.66.1", + "metro-config": "^0.66.1", + "metro-core": "^0.66.1", + "metro-react-native-babel-transformer": "^0.66.1", + "metro-resolver": "^0.66.1", + "metro-runtime": "^0.66.1", + "readline": "^1.3.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "requires": { - "@babel/runtime": "^7.12.5", - "cosmiconfig": "^7.0.0", - "resolve": "^1.19.0" + "color-convert": "^2.0.1" } }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "requires": { - "fill-range": "^7.0.1" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } }, - "chokidar": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", - "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", - "dev": true, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" + "color-name": "~1.1.4" } }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "dependencies": { - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - } + "has-flag": "^4.0.0" } - }, - "fork-ts-checker-webpack-plugin": { - "version": "6.2.12", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.2.12.tgz", - "integrity": "sha512-BzXGIfM47q1WFwXsNLl22dQVMFwSBgldL07lvqRJFxgrhT76QQ3nri5PX01Rxfa2RYvv/hqACULO8K5gT8fFuA==", - "dev": true, + } + } + }, + "@react-native-community/cli-server-api": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-server-api/-/cli-server-api-6.2.0.tgz", + "integrity": "sha512-OnbnYclhoDpjge33QO5Slhfn0DsmLzzAgyrSCnb24HhSqwq7ObjMHaLpoEhpajzLG71wq5oKh0APEQjiL4Mknw==", + "requires": { + "@react-native-community/cli-debugger-ui": "^6.0.0-rc.0", + "@react-native-community/cli-tools": "^6.2.0", + "compression": "^1.7.1", + "connect": "^3.6.5", + "errorhandler": "^1.5.0", + "nocache": "^2.1.0", + "pretty-format": "^26.6.2", + "serve-static": "^1.13.1", + "ws": "^1.1.0" + }, + "dependencies": { + "ws": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz", + "integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==", "requires": { - "@babel/code-frame": "^7.8.3", - "@types/json-schema": "^7.0.5", - "chalk": "^4.1.0", - "chokidar": "^3.4.2", - "cosmiconfig": "^6.0.0", - "deepmerge": "^4.2.2", - "fs-extra": "^9.0.0", - "glob": "^7.1.6", - "memfs": "^3.1.2", - "minimatch": "^3.0.4", - "schema-utils": "2.7.0", - "semver": "^7.3.2", - "tapable": "^1.0.0" - }, - "dependencies": { - "cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", - "dev": true, - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.7.2" - } - } + "options": ">=0.0.5", + "ultron": "1.0.x" } - }, - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, + } + } + }, + "@react-native-community/cli-tools": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-6.2.0.tgz", + "integrity": "sha512-08ssz4GMEnRxC/1FgTTN/Ud7mExQi5xMphItPjfHiTxpZPhrFn+IMx6mya0ncFEhhxQ207wYlJMRLPRRdBZ8oA==", + "requires": { + "appdirsjs": "^1.2.4", + "chalk": "^4.1.2", + "lodash": "^4.17.15", + "mime": "^2.4.1", + "node-fetch": "^2.6.0", + "open": "^6.2.0", + "semver": "^6.3.0", + "shell-quote": "1.6.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "color-convert": "^2.0.1" } }, - "glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "dev": true, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "requires": { - "is-glob": "^4.0.1" + "color-name": "~1.1.4" } }, - "graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", - "dev": true - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" }, - "json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "dev": true, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "requires": { - "minimist": "^1.2.5" + "has-flag": "^4.0.0" } + } + } + }, + "@react-native-community/cli-types": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-types/-/cli-types-6.0.0.tgz", + "integrity": "sha512-K493Fk2DMJC0ZM8s8gnfseKxGasIhuDaCUDeLZcoCSFlrjKEuEs1BKKEJiev0CARhKEXKOyyp/uqYM9nWhisNw==", + "requires": { + "ora": "^3.4.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, + "ora": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz", + "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==", "requires": { - "p-locate": "^4.1.0" + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-spinners": "^2.0.0", + "log-symbols": "^2.2.0", + "strip-ansi": "^5.2.0", + "wcwidth": "^1.0.1" } }, - "micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "dev": true, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "requires": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - }, - "dependencies": { - "picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", - "dev": true - } - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" + "ansi-regex": "^4.1.0" } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "path-type": { + } + } + }, + "@react-native-community/slider": { + "version": "https://raw.githubusercontent.com/wordpress-mobile/react-native-slider/v3.0.2-wp-2/react-native-community-slider-3.0.2-wp-2.tgz", + "integrity": "sha512-JKRintAuY/fyf30euhB7Exu4r8Lp3n4Mw55J920zfAKuBfFJbmLvLEahvwxUdO9nkBMMJl4r3xquW+qqiXbHIQ==" + }, + "@react-native-masked-view/masked-view": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/@react-native-masked-view/masked-view/-/masked-view-0.2.6.tgz", + "integrity": "sha512-303CxmetUmgiX9NSUxatZkNh9qTYYdiM8xkGf9I3Uj20U3eGY3M78ljeNQ4UVCJA+FNGS5nC1dtS9GjIqvB4dg==" + }, + "@react-native/assets": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@react-native/assets/-/assets-1.0.0.tgz", + "integrity": "sha512-KrwSpS1tKI70wuKl68DwJZYEvXktDHdZMG0k2AXD/rJVSlB23/X2CB2cutVR0HwNMJIal9HOUOBB2rVfa6UGtQ==" + }, + "@react-native/normalize-color": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@react-native/normalize-color/-/normalize-color-1.0.0.tgz", + "integrity": "sha512-xUNRvNmCl3UGCPbbHvfyFMnpvLPoOjDCcp5bT9m2k+TF/ZBklEQwhPZlkrxRx2NhgFh1X3a5uL7mJ7ZR+8G7Qg==" + }, + "@react-native/polyfills": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@react-native/polyfills/-/polyfills-2.0.0.tgz", + "integrity": "sha512-K0aGNn1TjalKj+65D7ycc1//H9roAQ51GJVk5ZJQFb2teECGmzd86bYDC0aYdbRf7gtovescq4Zt6FR0tgXiHQ==" + }, + "@react-navigation/core": { + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/@react-navigation/core/-/core-5.12.0.tgz", + "integrity": "sha512-CTmYrFXCZwInN40CpEzkPxhrpzujj20qvsUgpH05+oO1flwsnaJsyBfYawIcTS62/1/Z6SAM7iW5PbKk+qw9iQ==", + "requires": { + "@react-navigation/routers": "^5.4.9", + "escape-string-regexp": "^4.0.0", + "nanoid": "^3.1.9", + "query-string": "^6.13.1", + "react-is": "^16.13.0", + "use-subscription": "^1.4.0" + }, + "dependencies": { + "escape-string-regexp": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "pkg-dir": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", - "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", - "dev": true, - "requires": { - "find-up": "^5.0.0" - } - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - }, - "dependencies": { - "picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", - "dev": true - } - } - }, - "resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "dev": true, - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - }, - "schema-utils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", - "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" } } }, - "@storybook/core-events": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-6.3.2.tgz", - "integrity": "sha512-Mqxp2au4djPC9j8Wc97oM1iJQLAS8ZsW8CqcPxDmhl38cMfcMQiQXTk+2GDQbMxD2An2b73EU5hMMBAvNzYjog==", + "@react-navigation/native": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@react-navigation/native/-/native-5.7.0.tgz", + "integrity": "sha512-a2JBOdRB3q20Jdc5hF8shR4Dk+ZmjF2Rr9RviErtARztu08lU+jcb1gK6c31OKL37JDuaS3xexE9Cb7dYeMy3Q==", + "requires": { + "@react-navigation/core": "^5.12.0", + "nanoid": "^3.1.9" + } + }, + "@react-navigation/routers": { + "version": "5.4.9", + "resolved": "https://registry.npmjs.org/@react-navigation/routers/-/routers-5.4.9.tgz", + "integrity": "sha512-dYD5qrIKUmuBEp+O98hB0tDYpEsGQgCQFQgMEoFKBmVVhx2JnJJ1zxRjU7xWcCU4VdBA8IOowgHQHJsVNKYyrg==", + "requires": { + "nanoid": "^3.1.9" + } + }, + "@react-navigation/stack": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@react-navigation/stack/-/stack-5.6.2.tgz", + "integrity": "sha512-51Aasxg8j2eKxz4mhA0ajJXrhAyJQkk2iiNE511zcqJ3tlfxv/h70Eej3PetnbbHFMOwNsEwc2GjB3OnfQcxjQ==", + "requires": { + "color": "^3.1.2", + "react-native-iphone-x-helper": "^1.2.1" + } + }, + "@samverschueren/stream-to-observable": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.1.tgz", + "integrity": "sha512-c/qwwcHyafOQuVQJj0IlBjf5yYgBI7YPJ77k4fOJYesb41jio65eaJODRUmfYKhTOFBrIZ66kgvGPlNbjuoRdQ==", "dev": true, "requires": { - "core-js": "^3.8.2" + "any-observable": "^0.3.0" } }, - "@storybook/core-server": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/@storybook/core-server/-/core-server-6.3.2.tgz", - "integrity": "sha512-ceBKdLYlhKygBOJyIWR+9i4bLVOOadsLxM9ITAIzaSqSfZiuFxoP+irnEZrZUfFA0zcLYFEW5MH2vtCCPH+fhg==", + "@sideway/formula": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.0.tgz", + "integrity": "sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg==" + }, + "@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" + }, + "@sindresorhus/is": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-2.1.0.tgz", + "integrity": "sha512-lXKXfypKo644k4Da4yXkPCrwcvn6SlUW2X2zFbuflKHNjf0w9htru01bo26uMhleMXsDmnZ12eJLdrAZa9MANg==", + "dev": true + }, + "@sinonjs/commons": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", + "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", "dev": true, "requires": { - "@storybook/builder-webpack4": "6.3.2", - "@storybook/core-client": "6.3.2", - "@storybook/core-common": "6.3.2", - "@storybook/csf-tools": "6.3.2", - "@storybook/manager-webpack4": "6.3.2", - "@storybook/node-logger": "6.3.2", - "@storybook/semver": "^7.3.2", - "@types/node": "^14.0.10", - "@types/node-fetch": "^2.5.7", - "@types/pretty-hrtime": "^1.0.0", - "@types/webpack": "^4.41.26", - "better-opn": "^2.1.1", - "boxen": "^4.2.0", - "chalk": "^4.1.0", - "cli-table3": "0.6.0", - "commander": "^6.2.1", - "compression": "^1.7.4", + "type-detect": "4.0.8" + } + }, + "@sinonjs/fake-timers": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", + "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.7.0" + } + }, + "@storybook/addon-a11y": { + "version": "6.4.9", + "resolved": "https://registry.npmjs.org/@storybook/addon-a11y/-/addon-a11y-6.4.9.tgz", + "integrity": "sha512-9LwFprh7A3KWmQRTqnyh/wvQ1SX/BewzhBPWqJzq0fGnx9fG35zt0VFtXV13i157wTRDqSO1g92Dgxw9l3S8/A==", + "dev": true, + "requires": { + "@storybook/addons": "6.4.9", + "@storybook/api": "6.4.9", + "@storybook/channels": "6.4.9", + "@storybook/client-logger": "6.4.9", + "@storybook/components": "6.4.9", + "@storybook/core-events": "6.4.9", + "@storybook/csf": "0.0.2--canary.87bc651.0", + "@storybook/theming": "6.4.9", + "axe-core": "^4.2.0", "core-js": "^3.8.2", - "cpy": "^8.1.1", - "detect-port": "^1.3.0", - "express": "^4.17.1", - "file-system-cache": "^1.0.5", - "fs-extra": "^9.0.1", - "globby": "^11.0.2", - "ip": "^1.1.5", - "node-fetch": "^2.6.1", - "pretty-hrtime": "^1.0.3", - "prompts": "^2.4.0", + "global": "^4.4.0", + "lodash": "^4.17.21", + "react-sizeme": "^3.0.1", "regenerator-runtime": "^0.13.7", - "serve-favicon": "^2.5.0", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + }, + "dependencies": { + "@storybook/csf": { + "version": "0.0.2--canary.87bc651.0", + "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.0.2--canary.87bc651.0.tgz", + "integrity": "sha512-ajk1Uxa+rBpFQHKrCcTmJyQBXZ5slfwHVEaKlkuFaW77it8RgbPJp/ccna3sgoi8oZ7FkkOyvv1Ve4SmwFqRqw==", + "dev": true, + "requires": { + "lodash": "^4.17.15" + } + } + } + }, + "@storybook/addon-actions": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-6.4.19.tgz", + "integrity": "sha512-GpSvP8xV8GfNkmtGJjfCgaOx6mbjtyTK0aT9FqX9pU0s+KVMmoCTrBh43b7dWrwxxas01yleBK9VpYggzhi/Fw==", + "dev": true, + "requires": { + "@storybook/addons": "6.4.19", + "@storybook/api": "6.4.19", + "@storybook/components": "6.4.19", + "@storybook/core-events": "6.4.19", + "@storybook/csf": "0.0.2--canary.87bc651.0", + "@storybook/theming": "6.4.19", + "core-js": "^3.8.2", + "fast-deep-equal": "^3.1.3", + "global": "^4.4.0", + "lodash": "^4.17.21", + "polished": "^4.0.5", + "prop-types": "^15.7.2", + "react-inspector": "^5.1.0", + "regenerator-runtime": "^0.13.7", + "telejson": "^5.3.2", "ts-dedent": "^2.0.0", "util-deprecate": "^1.0.2", - "webpack": "4" + "uuid-browser": "^3.1.0" }, "dependencies": { - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "@storybook/semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@storybook/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-SWeszlsiPsMI0Ps0jVNtH64cI5c0UF3f7KgjVKJoNP30crQ6wUSddY2hsdeczZXEKVJGEn50Q60flcGsQGIcrg==", + "@emotion/serialize": { + "version": "0.11.16", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-0.11.16.tgz", + "integrity": "sha512-G3J4o8by0VRrO+PFeSc3js2myYNOXVJ3Ya+RGVxnshRYgsvErfAOglKAiy1Eo1vhzxqtUvjCyS5gtewzkmvSSg==", "dev": true, "requires": { - "core-js": "^3.6.5", - "find-up": "^4.1.0" + "@emotion/hash": "0.8.0", + "@emotion/memoize": "0.7.4", + "@emotion/unitless": "0.7.5", + "@emotion/utils": "0.11.3", + "csstype": "^2.5.7" } }, - "@types/webpack": { - "version": "4.41.30", - "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.30.tgz", - "integrity": "sha512-GUHyY+pfuQ6haAfzu4S14F+R5iGRwN6b2FRNJY7U0NilmFAqbsOfK6j1HwuLBAqwRIT+pVdNDJGJ6e8rpp0KHA==", + "@emotion/styled": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-10.3.0.tgz", + "integrity": "sha512-GgcUpXBBEU5ido+/p/mCT2/Xx+Oqmp9JzQRuC+a4lYM4i4LBBn/dWvc0rQ19N9ObA8/T4NWMrPNe79kMBDJqoQ==", "dev": true, "requires": { - "@types/node": "*", - "@types/tapable": "^1", - "@types/uglify-js": "*", - "@types/webpack-sources": "*", - "anymatch": "^3.0.0", - "source-map": "^0.6.0" + "@emotion/styled-base": "^10.3.0", + "babel-plugin-emotion": "^10.0.27" } }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "@emotion/styled-base": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@emotion/styled-base/-/styled-base-10.3.0.tgz", + "integrity": "sha512-PBRqsVKR7QRNkmfH78hTSSwHWcwDpecH9W6heujWAcyp2wdz/64PP73s7fWS1dIPm8/Exc8JAzYS8dEWXjv60w==", "dev": true, "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "@babel/runtime": "^7.5.5", + "@emotion/is-prop-valid": "0.8.8", + "@emotion/serialize": "^0.11.15", + "@emotion/utils": "0.11.3" } }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "@emotion/utils": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-0.11.3.tgz", + "integrity": "sha512-0o4l6pZC+hI88+bzuaX/6BgOvQVhbt2PfmxauVaYOGgbsAw14wdKyvMCZXnsnsHys94iadcF+RG/wZyx6+ZZBw==", "dev": true }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "@storybook/addons": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/addons/-/addons-6.4.19.tgz", + "integrity": "sha512-QNyRYhpqmHV8oJxxTBdkRlLSbDFhpBvfvMfIrIT1UXb/eemdBZTaCGVvXZ9UixoEEI7f8VwAQ44IvkU5B1509w==", + "dev": true, + "requires": { + "@storybook/api": "6.4.19", + "@storybook/channels": "6.4.19", + "@storybook/client-logger": "6.4.19", + "@storybook/core-events": "6.4.19", + "@storybook/csf": "0.0.2--canary.87bc651.0", + "@storybook/router": "6.4.19", + "@storybook/theming": "6.4.19", + "@types/webpack-env": "^1.16.0", + "core-js": "^3.8.2", + "global": "^4.4.0", + "regenerator-runtime": "^0.13.7" + } + }, + "@storybook/api": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/api/-/api-6.4.19.tgz", + "integrity": "sha512-aDvea+NpQCBjpNp9YidO1Pr7fzzCp15FSdkG+2ihGQfv5raxrN+IIJnGUXecpe71nvlYiB+29UXBVK7AL0j51Q==", "dev": true, "requires": { - "fill-range": "^7.0.1" + "@storybook/channels": "6.4.19", + "@storybook/client-logger": "6.4.19", + "@storybook/core-events": "6.4.19", + "@storybook/csf": "0.0.2--canary.87bc651.0", + "@storybook/router": "6.4.19", + "@storybook/semver": "^7.3.2", + "@storybook/theming": "6.4.19", + "core-js": "^3.8.2", + "fast-deep-equal": "^3.1.3", + "global": "^4.4.0", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "regenerator-runtime": "^0.13.7", + "store2": "^2.12.0", + "telejson": "^5.3.2", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" } }, - "commander": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", - "dev": true + "@storybook/channels": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-6.4.19.tgz", + "integrity": "sha512-EwyoncFvTfmIlfsy8jTfayCxo2XchPkZk/9txipugWSmc057HdklMKPLOHWP0z5hLH0IbVIKXzdNISABm36jwQ==", + "dev": true, + "requires": { + "core-js": "^3.8.2", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + } }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "@storybook/client-logger": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-6.4.19.tgz", + "integrity": "sha512-zmg/2wyc9W3uZrvxaW4BfHcr40J0v7AGslqYXk9H+ERLVwIvrR4NhxQFaS6uITjBENyRDxwzfU3Va634WcmdDQ==", "dev": true, "requires": { - "ms": "2.0.0" + "core-js": "^3.8.2", + "global": "^4.4.0" } }, - "detect-port": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.3.0.tgz", - "integrity": "sha512-E+B1gzkl2gqxt1IhUzwjrxBKRqx1UzC3WLONHinn8S3T6lwV/agVCyitiFOsGJ/eYuEUBvD71MZHy3Pv1G9doQ==", + "@storybook/components": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/components/-/components-6.4.19.tgz", + "integrity": "sha512-q/0V37YAJA7CNc+wSiiefeM9+3XVk8ixBNylY36QCGJgIeGQ5/79vPyUe6K4lLmsQwpmZsIq1s1Ad5+VbboeOA==", "dev": true, "requires": { - "address": "^1.0.1", - "debug": "^2.6.0" + "@popperjs/core": "^2.6.0", + "@storybook/client-logger": "6.4.19", + "@storybook/csf": "0.0.2--canary.87bc651.0", + "@storybook/theming": "6.4.19", + "@types/color-convert": "^2.0.0", + "@types/overlayscrollbars": "^1.12.0", + "@types/react-syntax-highlighter": "11.0.5", + "color-convert": "^2.0.1", + "core-js": "^3.8.2", + "fast-deep-equal": "^3.1.3", + "global": "^4.4.0", + "lodash": "^4.17.21", + "markdown-to-jsx": "^7.1.3", + "memoizerific": "^1.11.3", + "overlayscrollbars": "^1.13.1", + "polished": "^4.0.5", + "prop-types": "^15.7.2", + "react-colorful": "^5.1.2", + "react-popper-tooltip": "^3.1.1", + "react-syntax-highlighter": "^13.5.3", + "react-textarea-autosize": "^8.3.0", + "regenerator-runtime": "^0.13.7", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" } }, - "fast-glob": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.6.tgz", - "integrity": "sha512-GnLuqj/pvQ7pX8/L4J84nijv6sAnlwvSDpMkJi9i7nPmPxGtRPkBSStfvDW5l6nMdX9VWe+pkKWFTgD+vF2QSQ==", + "@storybook/core-events": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-6.4.19.tgz", + "integrity": "sha512-KICzUw6XVQUJzFSCXfvhfHAuyhn4Q5J4IZEfuZkcGJS4ODkrO6tmpdYE5Cfr+so95Nfp0ErWiLUuodBsW9/rtA==", "dev": true, "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" + "core-js": "^3.8.2" } }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "@storybook/csf": { + "version": "0.0.2--canary.87bc651.0", + "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.0.2--canary.87bc651.0.tgz", + "integrity": "sha512-ajk1Uxa+rBpFQHKrCcTmJyQBXZ5slfwHVEaKlkuFaW77it8RgbPJp/ccna3sgoi8oZ7FkkOyvv1Ve4SmwFqRqw==", "dev": true, "requires": { - "to-regex-range": "^5.0.1" + "lodash": "^4.17.15" } }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "@storybook/router": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/router/-/router-6.4.19.tgz", + "integrity": "sha512-KWWwIzuyeEIWVezkCihwY2A76Il9tUNg0I410g9qT7NrEsKyqXGRYOijWub7c1GGyNjLqz0jtrrehtixMcJkuA==", "dev": true, "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "@storybook/client-logger": "6.4.19", + "core-js": "^3.8.2", + "fast-deep-equal": "^3.1.3", + "global": "^4.4.0", + "history": "5.0.0", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "qs": "^6.10.0", + "react-router": "^6.0.0", + "react-router-dom": "^6.0.0", + "ts-dedent": "^2.0.0" } }, - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "@storybook/semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/@storybook/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-SWeszlsiPsMI0Ps0jVNtH64cI5c0UF3f7KgjVKJoNP30crQ6wUSddY2hsdeczZXEKVJGEn50Q60flcGsQGIcrg==", "dev": true, "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "core-js": "^3.6.5", + "find-up": "^4.1.0" } }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "@storybook/theming": { + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-6.4.19.tgz", + "integrity": "sha512-V4pWmTvAxmbHR6B3jA4hPkaxZPyExHvCToy7b76DpUTpuHihijNDMAn85KhOQYIeL9q14zP/aiz899tOHsOidg==", "dev": true, "requires": { - "is-glob": "^4.0.1" + "@emotion/core": "^10.1.1", + "@emotion/is-prop-valid": "^0.8.6", + "@emotion/styled": "^10.0.27", + "@storybook/client-logger": "6.4.19", + "core-js": "^3.8.2", + "deep-object-diff": "^1.1.0", + "emotion-theming": "^10.0.27", + "global": "^4.4.0", + "memoizerific": "^1.11.3", + "polished": "^4.0.5", + "resolve-from": "^5.0.0", + "ts-dedent": "^2.0.0" } }, - "globby": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", - "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", - "slash": "^3.0.0" + "color-name": "~1.1.4" } }, - "graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "csstype": { + "version": "2.6.20", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.20.tgz", + "integrity": "sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA==", "dev": true }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "requires": { - "is-extglob": "^2.1.1" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" } }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "history": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/history/-/history-5.0.0.tgz", + "integrity": "sha512-3NyRMKIiFSJmIPdq7FxkNMJkQ7ZEtVblOQ38VtKaA0zZMW1Eo6Q6W8oDKEflr1kNNTItSnk4JMCO1deeSgbLLg==", "dev": true, "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" + "@babel/runtime": "^7.7.6" } }, "locate-path": { @@ -10360,43 +9443,13 @@ "p-locate": "^4.1.0" } }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "requires": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - }, - "dependencies": { - "picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", - "dev": true - } - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" + "p-try": "^2.0.0" } }, "p-locate": { @@ -10420,644 +9473,811 @@ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true }, - "prompts": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.1.tgz", - "integrity": "sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ==", - "dev": true, - "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - } - }, - "sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "qs": { + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", "dev": true, "requires": { - "is-number": "^7.0.0" + "side-channel": "^1.0.4" } }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true } } }, - "@storybook/csf": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.0.1.tgz", - "integrity": "sha512-USTLkZze5gkel8MYCujSRBVIrUQ3YPBrLOx7GNk/0wttvVtlzWXAq9eLbQ4p/NicGxP+3T7KPEMVV//g+yubpw==", + "@storybook/addon-controls": { + "version": "6.4.9", + "resolved": "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-6.4.9.tgz", + "integrity": "sha512-2eqtiYugCAOw8MCv0HOfjaZRQ4lHydMYoKIFy/QOv6/mjcJeG9dF01dA30n3miErQ18BaVyAB5+7rrmuqMwXVA==", "dev": true, "requires": { - "lodash": "^4.17.15" + "@storybook/addons": "6.4.9", + "@storybook/api": "6.4.9", + "@storybook/client-logger": "6.4.9", + "@storybook/components": "6.4.9", + "@storybook/core-common": "6.4.9", + "@storybook/csf": "0.0.2--canary.87bc651.0", + "@storybook/node-logger": "6.4.9", + "@storybook/store": "6.4.9", + "@storybook/theming": "6.4.9", + "core-js": "^3.8.2", + "lodash": "^4.17.21", + "ts-dedent": "^2.0.0" + }, + "dependencies": { + "@storybook/csf": { + "version": "0.0.2--canary.87bc651.0", + "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.0.2--canary.87bc651.0.tgz", + "integrity": "sha512-ajk1Uxa+rBpFQHKrCcTmJyQBXZ5slfwHVEaKlkuFaW77it8RgbPJp/ccna3sgoi8oZ7FkkOyvv1Ve4SmwFqRqw==", + "dev": true, + "requires": { + "lodash": "^4.17.15" + } + } } }, - "@storybook/csf-tools": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-6.3.2.tgz", - "integrity": "sha512-CGj4HsKwYBwp2zWmrG1RJedwrnakfxkptp/4HQ0mE9ajw28GndNZus2+IgnBsxdbzv8LYwz/rHpXRbvfDbgPFg==", + "@storybook/addon-docs": { + "version": "6.4.9", + "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-6.4.9.tgz", + "integrity": "sha512-sJvnbp6Z+e7B1+vDE8gZVhCg1eNotIa7bx9LYd1Y2QwJ4PEv9hE2YxnzmWt3NZJGtrn4gdGaMCk7pmksugHi7g==", "dev": true, "requires": { + "@babel/core": "^7.12.10", "@babel/generator": "^7.12.11", "@babel/parser": "^7.12.11", "@babel/plugin-transform-react-jsx": "^7.12.12", "@babel/preset-env": "^7.12.11", - "@babel/traverse": "^7.12.11", - "@babel/types": "^7.12.11", + "@jest/transform": "^26.6.2", + "@mdx-js/loader": "^1.6.22", "@mdx-js/mdx": "^1.6.22", - "@storybook/csf": "^0.0.1", + "@mdx-js/react": "^1.6.22", + "@storybook/addons": "6.4.9", + "@storybook/api": "6.4.9", + "@storybook/builder-webpack4": "6.4.9", + "@storybook/client-logger": "6.4.9", + "@storybook/components": "6.4.9", + "@storybook/core": "6.4.9", + "@storybook/core-events": "6.4.9", + "@storybook/csf": "0.0.2--canary.87bc651.0", + "@storybook/csf-tools": "6.4.9", + "@storybook/node-logger": "6.4.9", + "@storybook/postinstall": "6.4.9", + "@storybook/preview-web": "6.4.9", + "@storybook/source-loader": "6.4.9", + "@storybook/store": "6.4.9", + "@storybook/theming": "6.4.9", + "acorn": "^7.4.1", + "acorn-jsx": "^5.3.1", + "acorn-walk": "^7.2.0", "core-js": "^3.8.2", - "fs-extra": "^9.0.1", + "doctrine": "^3.0.0", + "escodegen": "^2.0.0", + "fast-deep-equal": "^3.1.3", + "global": "^4.4.0", + "html-tags": "^3.1.0", "js-string-escape": "^1.0.1", - "lodash": "^4.17.20", - "prettier": "~2.2.1", - "regenerator-runtime": "^0.13.7" + "loader-utils": "^2.0.0", + "lodash": "^4.17.21", + "nanoid": "^3.1.23", + "p-limit": "^3.1.0", + "prettier": "^2.2.1", + "prop-types": "^15.7.2", + "react-element-to-jsx-string": "^14.3.4", + "regenerator-runtime": "^0.13.7", + "remark-external-links": "^8.0.0", + "remark-slug": "^6.0.0", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" }, "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "@storybook/csf": { + "version": "0.0.2--canary.87bc651.0", + "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.0.2--canary.87bc651.0.tgz", + "integrity": "sha512-ajk1Uxa+rBpFQHKrCcTmJyQBXZ5slfwHVEaKlkuFaW77it8RgbPJp/ccna3sgoi8oZ7FkkOyvv1Ve4SmwFqRqw==", "dev": true, "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "lodash": "^4.17.15" } }, - "graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", "dev": true }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" + "esutils": "^2.0.2" } }, - "prettier": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.2.1.tgz", - "integrity": "sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q==", - "dev": true + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "prettier": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", + "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", "dev": true } } }, - "@storybook/manager-webpack4": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/@storybook/manager-webpack4/-/manager-webpack4-6.3.2.tgz", - "integrity": "sha512-MeYXK2H65y08meKM477PT0ygMMiHYGo9e8vl8oIXY3pp/24iiE5W+yCHH3HP5PEsKCXMml6gWM7ba44lpkuutQ==", + "@storybook/addon-knobs": { + "version": "6.2.9", + "resolved": "https://registry.npmjs.org/@storybook/addon-knobs/-/addon-knobs-6.2.9.tgz", + "integrity": "sha512-ic3xXy9uWPfIGP4x3VuGnrUmg/Jn9rHKIqZMhRcC7mFDRVlgbekvQxaruC6VY9LW6o8jV/miReSZkJf7M8o0aQ==", "dev": true, "requires": { - "@babel/core": "^7.12.10", - "@babel/plugin-transform-template-literals": "^7.12.1", - "@babel/preset-react": "^7.12.10", - "@storybook/addons": "6.3.2", - "@storybook/core-client": "6.3.2", - "@storybook/core-common": "6.3.2", - "@storybook/node-logger": "6.3.2", - "@storybook/theming": "6.3.2", - "@storybook/ui": "6.3.2", - "@types/node": "^14.0.10", - "@types/webpack": "^4.41.26", - "babel-loader": "^8.2.2", - "case-sensitive-paths-webpack-plugin": "^2.3.0", - "chalk": "^4.1.0", + "@storybook/addons": "6.2.9", + "@storybook/api": "6.2.9", + "@storybook/channels": "6.2.9", + "@storybook/client-api": "6.2.9", + "@storybook/components": "6.2.9", + "@storybook/core-events": "6.2.9", + "@storybook/theming": "6.2.9", + "copy-to-clipboard": "^3.3.1", "core-js": "^3.8.2", - "css-loader": "^3.6.0", - "dotenv-webpack": "^1.8.0", - "express": "^4.17.1", - "file-loader": "^6.2.0", - "file-system-cache": "^1.0.5", - "find-up": "^5.0.0", - "fs-extra": "^9.0.1", - "html-webpack-plugin": "^4.0.0", - "node-fetch": "^2.6.1", - "pnp-webpack-plugin": "1.6.4", - "read-pkg-up": "^7.0.1", - "regenerator-runtime": "^0.13.7", - "resolve-from": "^5.0.0", - "style-loader": "^1.3.0", - "telejson": "^5.3.2", - "terser-webpack-plugin": "^4.2.3", - "ts-dedent": "^2.0.0", - "url-loader": "^4.1.1", - "util-deprecate": "^1.0.2", - "webpack": "4", - "webpack-dev-middleware": "^3.7.3", - "webpack-virtual-modules": "^0.2.2" + "escape-html": "^1.0.3", + "fast-deep-equal": "^3.1.3", + "global": "^4.4.0", + "lodash": "^4.17.20", + "prop-types": "^15.7.2", + "qs": "^6.10.0", + "react-colorful": "^5.0.1", + "react-lifecycles-compat": "^3.0.4", + "react-select": "^3.2.0", + "regenerator-runtime": "^0.13.7" }, "dependencies": { - "@types/json-schema": { - "version": "7.0.7", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", - "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==", - "dev": true - }, - "@types/webpack": { - "version": "4.41.30", - "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.30.tgz", - "integrity": "sha512-GUHyY+pfuQ6haAfzu4S14F+R5iGRwN6b2FRNJY7U0NilmFAqbsOfK6j1HwuLBAqwRIT+pVdNDJGJ6e8rpp0KHA==", - "dev": true, - "requires": { - "@types/node": "*", - "@types/tapable": "^1", - "@types/uglify-js": "*", - "@types/webpack-sources": "*", - "anymatch": "^3.0.0", - "source-map": "^0.6.0" - } - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "@emotion/is-prop-valid": { + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz", + "integrity": "sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==", "dev": true, "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "@emotion/memoize": "0.7.4" } }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "@emotion/memoize": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz", + "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==", "dev": true }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "@emotion/styled": { + "version": "10.0.27", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-10.0.27.tgz", + "integrity": "sha512-iK/8Sh7+NLJzyp9a5+vIQIXTYxfT4yB/OJbjzQanB2RZpvmzBQOHZWhpAMZWYEKRNNbsD6WfBw5sVWkb6WzS/Q==", "dev": true, "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "@emotion/styled-base": "^10.0.27", + "babel-plugin-emotion": "^10.0.27" } }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true - }, - "cacache": { - "version": "15.2.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.2.0.tgz", - "integrity": "sha512-uKoJSHmnrqXgthDFx/IU6ED/5xd+NNGe+Bb+kLZy7Ku4P+BaiWEUflAKPZ7eAzsYGcsAGASJZsybXp+quEcHTw==", + "@storybook/addons": { + "version": "6.2.9", + "resolved": "https://registry.npmjs.org/@storybook/addons/-/addons-6.2.9.tgz", + "integrity": "sha512-GnmEKbJwiN1jncN9NSA8CuR1i2XAlasPcl/Zn0jkfV9WitQeczVcJCPw86SGH84AD+tTBCyF2i9UC0KaOV1YBQ==", "dev": true, "requires": { - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" + "@storybook/api": "6.2.9", + "@storybook/channels": "6.2.9", + "@storybook/client-logger": "6.2.9", + "@storybook/core-events": "6.2.9", + "@storybook/router": "6.2.9", + "@storybook/theming": "6.2.9", + "core-js": "^3.8.2", + "global": "^4.4.0", + "regenerator-runtime": "^0.13.7" } }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "css-loader": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.6.0.tgz", - "integrity": "sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ==", + "@storybook/api": { + "version": "6.2.9", + "resolved": "https://registry.npmjs.org/@storybook/api/-/api-6.2.9.tgz", + "integrity": "sha512-okkA3HAScE9tGnYBrjTOcgzT+L1lRHNoEh3ZfGgh1u/XNEyHGNkj4grvkd6nX7BzRcYQ/l2VkcKCqmOjUnSkVQ==", "dev": true, "requires": { - "camelcase": "^5.3.1", - "cssesc": "^3.0.0", - "icss-utils": "^4.1.1", - "loader-utils": "^1.2.3", - "normalize-path": "^3.0.0", - "postcss": "^7.0.32", - "postcss-modules-extract-imports": "^2.0.0", - "postcss-modules-local-by-default": "^3.0.2", - "postcss-modules-scope": "^2.2.0", - "postcss-modules-values": "^3.0.0", - "postcss-value-parser": "^4.1.0", - "schema-utils": "^2.7.0", - "semver": "^6.3.0" + "@reach/router": "^1.3.4", + "@storybook/channels": "6.2.9", + "@storybook/client-logger": "6.2.9", + "@storybook/core-events": "6.2.9", + "@storybook/csf": "0.0.1", + "@storybook/router": "6.2.9", + "@storybook/semver": "^7.3.2", + "@storybook/theming": "6.2.9", + "@types/reach__router": "^1.3.7", + "core-js": "^3.8.2", + "fast-deep-equal": "^3.1.3", + "global": "^4.4.0", + "lodash": "^4.17.20", + "memoizerific": "^1.11.3", + "qs": "^6.10.0", + "regenerator-runtime": "^0.13.7", + "store2": "^2.12.0", + "telejson": "^5.1.0", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" } }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "find-cache-dir": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", - "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", + "@storybook/channel-postmessage": { + "version": "6.2.9", + "resolved": "https://registry.npmjs.org/@storybook/channel-postmessage/-/channel-postmessage-6.2.9.tgz", + "integrity": "sha512-OqV+gLeeCHR0KExsIz0B7gD17Cjd9D+I75qnBsLWM9inWO5kc/WZ5svw8Bvjlcm6snWpvxUaT8L+svuqcPSmww==", "dev": true, "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" + "@storybook/channels": "6.2.9", + "@storybook/client-logger": "6.2.9", + "@storybook/core-events": "6.2.9", + "core-js": "^3.8.2", + "global": "^4.4.0", + "qs": "^6.10.0", + "telejson": "^5.1.0" } }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "@storybook/channels": { + "version": "6.2.9", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-6.2.9.tgz", + "integrity": "sha512-6dC8Fb2ipNyOQXnUZMDeEUaJGH5DMLzyHlGLhVyDtrO5WR6bO8mQdkzf4+5dSKXgCBNX0BSkssXth4pDjn18rg==", "dev": true, "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" + "core-js": "^3.8.2", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" } }, - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "@storybook/client-api": { + "version": "6.2.9", + "resolved": "https://registry.npmjs.org/@storybook/client-api/-/client-api-6.2.9.tgz", + "integrity": "sha512-aLvEUVkbvv6Qo/2mF4rFCecdqi2CGOUDdsV1a6EFIVS/9gXFdpirsOwKHo9qNjacGdWPlBYGCUcbrw+DvNaSFA==", "dev": true, "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "@storybook/addons": "6.2.9", + "@storybook/channel-postmessage": "6.2.9", + "@storybook/channels": "6.2.9", + "@storybook/client-logger": "6.2.9", + "@storybook/core-events": "6.2.9", + "@storybook/csf": "0.0.1", + "@types/qs": "^6.9.5", + "@types/webpack-env": "^1.16.0", + "core-js": "^3.8.2", + "global": "^4.4.0", + "lodash": "^4.17.20", + "memoizerific": "^1.11.3", + "qs": "^6.10.0", + "regenerator-runtime": "^0.13.7", + "stable": "^0.1.8", + "store2": "^2.12.0", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" } }, - "fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "@storybook/client-logger": { + "version": "6.2.9", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-6.2.9.tgz", + "integrity": "sha512-IfOQZuvpjh66qBInQCJOb9S0dTGpzZ/Cxlcvokp+PYt95KztaWN3mPm+HaDQCeRsrWNe0Bpm1zuickcJ6dBOXg==", "dev": true, "requires": { - "minipass": "^3.0.0" + "core-js": "^3.8.2", + "global": "^4.4.0" } }, - "glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "@storybook/components": { + "version": "6.2.9", + "resolved": "https://registry.npmjs.org/@storybook/components/-/components-6.2.9.tgz", + "integrity": "sha512-hnV1MI2aB2g1sJ7NJphpxi7TwrMZQ/tpCJeHnkjmzyC6ez1MXqcBXGrEEdSXzRfAxjQTOEpu6H1mnns0xMP0Ag==", "dev": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "@popperjs/core": "^2.6.0", + "@storybook/client-logger": "6.2.9", + "@storybook/csf": "0.0.1", + "@storybook/theming": "6.2.9", + "@types/color-convert": "^2.0.0", + "@types/overlayscrollbars": "^1.12.0", + "@types/react-syntax-highlighter": "11.0.5", + "color-convert": "^2.0.1", + "core-js": "^3.8.2", + "fast-deep-equal": "^3.1.3", + "global": "^4.4.0", + "lodash": "^4.17.20", + "markdown-to-jsx": "^7.1.0", + "memoizerific": "^1.11.3", + "overlayscrollbars": "^1.13.1", + "polished": "^4.0.5", + "prop-types": "^15.7.2", + "react-colorful": "^5.0.1", + "react-popper-tooltip": "^3.1.1", + "react-syntax-highlighter": "^13.5.3", + "react-textarea-autosize": "^8.3.0", + "regenerator-runtime": "^0.13.7", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" } }, - "graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", - "dev": true - }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "@storybook/core-events": { + "version": "6.2.9", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-6.2.9.tgz", + "integrity": "sha512-xQmbX/oYQK1QsAGN8hriXX5SUKOoTUe3L4dVaVHxJqy7MReRWJpprJmCpbAPJzWS6WCbDFfCM5kVEexHLOzJlQ==", "dev": true, "requires": { - "minimist": "^1.2.0" + "core-js": "^3.8.2" } }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "@storybook/router": { + "version": "6.2.9", + "resolved": "https://registry.npmjs.org/@storybook/router/-/router-6.2.9.tgz", + "integrity": "sha512-7Bn1OFoItCl8whXRT8N1qp1Lky7kzXJ3aslWp5E8HcM8rxh4OYXfbaeiyJEJxBTGC5zxgY+tAEXHFjsAviFROg==", "dev": true, "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" + "@reach/router": "^1.3.4", + "@storybook/client-logger": "6.2.9", + "@types/reach__router": "^1.3.7", + "core-js": "^3.8.2", + "fast-deep-equal": "^3.1.3", + "global": "^4.4.0", + "lodash": "^4.17.20", + "memoizerific": "^1.11.3", + "qs": "^6.10.0", + "ts-dedent": "^2.0.0" } }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "@storybook/semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/@storybook/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-SWeszlsiPsMI0Ps0jVNtH64cI5c0UF3f7KgjVKJoNP30crQ6wUSddY2hsdeczZXEKVJGEn50Q60flcGsQGIcrg==", "dev": true, "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" + "core-js": "^3.6.5", + "find-up": "^4.1.0" } }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "@storybook/theming": { + "version": "6.2.9", + "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-6.2.9.tgz", + "integrity": "sha512-183oJW7AD7Fhqg5NT4ct3GJntwteAb9jZnQ6yhf9JSdY+fk8OhxRbPf7ov0au2gYACcGrWDd9K5pYQsvWlP5gA==", "dev": true, "requires": { - "p-locate": "^5.0.0" + "@emotion/core": "^10.1.1", + "@emotion/is-prop-valid": "^0.8.6", + "@emotion/styled": "^10.0.27", + "@storybook/client-logger": "6.2.9", + "core-js": "^3.8.2", + "deep-object-diff": "^1.1.0", + "emotion-theming": "^10.0.27", + "global": "^4.4.0", + "memoizerific": "^1.11.3", + "polished": "^4.0.5", + "resolve-from": "^5.0.0", + "ts-dedent": "^2.0.0" } }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "@types/qs": { + "version": "6.9.6", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.6.tgz", + "integrity": "sha512-0/HnwIfW4ki2D8L8c9GVcG5I72s9jP5GSLVF0VIXDW00kmIpA6O33G7a8n59Tmh7Nz0WUC3rSb7PTY/sdW2JzA==", + "dev": true + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { - "yallist": "^4.0.0" + "color-name": "~1.1.4" } }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "requires": { - "semver": "^6.0.0" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" } }, - "minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "requires": { - "yallist": "^4.0.0" + "p-locate": "^4.1.0" } }, - "minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "requires": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" + "p-try": "^2.0.0" } }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } + "p-limit": "^2.2.0" } }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "qs": { + "version": "6.10.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz", + "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==", "dev": true, "requires": { - "yocto-queue": "^0.1.0" + "side-channel": "^1.0.4" } }, - "p-locate": { + "resolve-from": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", "dev": true, "requires": { - "p-limit": "^3.0.2" + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" } + } + } + }, + "@storybook/addon-storysource": { + "version": "6.4.9", + "resolved": "https://registry.npmjs.org/@storybook/addon-storysource/-/addon-storysource-6.4.9.tgz", + "integrity": "sha512-vLdRY7D2ECz8tjTMQUjI0C/qj7+4Zzh3+MX3rkJRgs6u8hUELO00AIXv3BZpo7gp5tw32jPSdHdj5a24Q242ig==", + "dev": true, + "requires": { + "@storybook/addons": "6.4.9", + "@storybook/api": "6.4.9", + "@storybook/client-logger": "6.4.9", + "@storybook/components": "6.4.9", + "@storybook/router": "6.4.9", + "@storybook/source-loader": "6.4.9", + "@storybook/theming": "6.4.9", + "core-js": "^3.8.2", + "estraverse": "^5.2.0", + "loader-utils": "^2.0.0", + "prettier": "^2.2.1", + "prop-types": "^15.7.2", + "react-syntax-highlighter": "^13.5.3", + "regenerator-runtime": "^0.13.7" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true }, - "p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "prettier": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", + "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", + "dev": true + } + } + }, + "@storybook/addon-toolbars": { + "version": "6.4.9", + "resolved": "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-6.4.9.tgz", + "integrity": "sha512-fep1lLDcyaQJdR8rC/lJTamiiJ8Ilio580d9aXDM651b7uHqhxM0dJvM9hObBU8dOj/R3hIAszgTvdTzYlL2cQ==", + "dev": true, + "requires": { + "@storybook/addons": "6.4.9", + "@storybook/api": "6.4.9", + "@storybook/components": "6.4.9", + "@storybook/theming": "6.4.9", + "core-js": "^3.8.2", + "regenerator-runtime": "^0.13.7" + } + }, + "@storybook/addon-viewport": { + "version": "6.4.9", + "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-6.4.9.tgz", + "integrity": "sha512-iqDcfbOG3TClybDEIi+hOKq8PDKNldyAiqBeak4AfGp+lIZ4NvhHgS5RCNylMVKpOUMbGIeWiSFxQ/oglEN1zA==", + "dev": true, + "requires": { + "@storybook/addons": "6.4.9", + "@storybook/api": "6.4.9", + "@storybook/client-logger": "6.4.9", + "@storybook/components": "6.4.9", + "@storybook/core-events": "6.4.9", + "@storybook/theming": "6.4.9", + "core-js": "^3.8.2", + "global": "^4.4.0", + "memoizerific": "^1.11.3", + "prop-types": "^15.7.2", + "regenerator-runtime": "^0.13.7" + } + }, + "@storybook/addons": { + "version": "6.4.9", + "resolved": "https://registry.npmjs.org/@storybook/addons/-/addons-6.4.9.tgz", + "integrity": "sha512-y+oiN2zd+pbRWwkf6aQj4tPDFn+rQkrv7fiVoMxsYub+kKyZ3CNOuTSJH+A1A+eBL6DmzocChUyO6jvZFuh6Dg==", + "dev": true, + "requires": { + "@storybook/api": "6.4.9", + "@storybook/channels": "6.4.9", + "@storybook/client-logger": "6.4.9", + "@storybook/core-events": "6.4.9", + "@storybook/csf": "0.0.2--canary.87bc651.0", + "@storybook/router": "6.4.9", + "@storybook/theming": "6.4.9", + "@types/webpack-env": "^1.16.0", + "core-js": "^3.8.2", + "global": "^4.4.0", + "regenerator-runtime": "^0.13.7" + }, + "dependencies": { + "@storybook/csf": { + "version": "0.0.2--canary.87bc651.0", + "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.0.2--canary.87bc651.0.tgz", + "integrity": "sha512-ajk1Uxa+rBpFQHKrCcTmJyQBXZ5slfwHVEaKlkuFaW77it8RgbPJp/ccna3sgoi8oZ7FkkOyvv1Ve4SmwFqRqw==", "dev": true, "requires": { - "aggregate-error": "^3.0.0" + "lodash": "^4.17.15" } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + } + } + }, + "@storybook/api": { + "version": "6.4.9", + "resolved": "https://registry.npmjs.org/@storybook/api/-/api-6.4.9.tgz", + "integrity": "sha512-U+YKcDQg8xal9sE5eSMXB9vcqk8fD1pSyewyAjjbsW5hV0B3L3i4u7z/EAD9Ujbnor+Cvxq+XGvp+Qnc5Gd40A==", + "dev": true, + "requires": { + "@storybook/channels": "6.4.9", + "@storybook/client-logger": "6.4.9", + "@storybook/core-events": "6.4.9", + "@storybook/csf": "0.0.2--canary.87bc651.0", + "@storybook/router": "6.4.9", + "@storybook/semver": "^7.3.2", + "@storybook/theming": "6.4.9", + "core-js": "^3.8.2", + "fast-deep-equal": "^3.1.3", + "global": "^4.4.0", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "regenerator-runtime": "^0.13.7", + "store2": "^2.12.0", + "telejson": "^5.3.2", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + }, + "dependencies": { + "@storybook/csf": { + "version": "0.0.2--canary.87bc651.0", + "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.0.2--canary.87bc651.0.tgz", + "integrity": "sha512-ajk1Uxa+rBpFQHKrCcTmJyQBXZ5slfwHVEaKlkuFaW77it8RgbPJp/ccna3sgoi8oZ7FkkOyvv1Ve4SmwFqRqw==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" + "lodash": "^4.17.15" } }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true + "@storybook/semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/@storybook/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-SWeszlsiPsMI0Ps0jVNtH64cI5c0UF3f7KgjVKJoNP30crQ6wUSddY2hsdeczZXEKVJGEn50Q60flcGsQGIcrg==", + "dev": true, + "requires": { + "core-js": "^3.6.5", + "find-up": "^4.1.0" + } }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "requires": { - "find-up": "^4.0.0" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - } + "p-locate": "^4.1.0" } }, - "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - }, - "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - } + "p-try": "^2.0.0" } }, - "postcss-value-parser": { + "p-locate": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, - "read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + } + } + }, + "@storybook/builder-webpack4": { + "version": "6.4.9", + "resolved": "https://registry.npmjs.org/@storybook/builder-webpack4/-/builder-webpack4-6.4.9.tgz", + "integrity": "sha512-nDbXDd3A8dvalCiuBZuUT6/GQP14+fuxTj5g+AppCgV1gLO45lXWtX75Hc0IbZrIQte6tDg5xeFQamZSLPMcGg==", + "dev": true, + "requires": { + "@babel/core": "^7.12.10", + "@babel/plugin-proposal-class-properties": "^7.12.1", + "@babel/plugin-proposal-decorators": "^7.12.12", + "@babel/plugin-proposal-export-default-from": "^7.12.1", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", + "@babel/plugin-proposal-object-rest-spread": "^7.12.1", + "@babel/plugin-proposal-optional-chaining": "^7.12.7", + "@babel/plugin-proposal-private-methods": "^7.12.1", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-arrow-functions": "^7.12.1", + "@babel/plugin-transform-block-scoping": "^7.12.12", + "@babel/plugin-transform-classes": "^7.12.1", + "@babel/plugin-transform-destructuring": "^7.12.1", + "@babel/plugin-transform-for-of": "^7.12.1", + "@babel/plugin-transform-parameters": "^7.12.1", + "@babel/plugin-transform-shorthand-properties": "^7.12.1", + "@babel/plugin-transform-spread": "^7.12.1", + "@babel/plugin-transform-template-literals": "^7.12.1", + "@babel/preset-env": "^7.12.11", + "@babel/preset-react": "^7.12.10", + "@babel/preset-typescript": "^7.12.7", + "@storybook/addons": "6.4.9", + "@storybook/api": "6.4.9", + "@storybook/channel-postmessage": "6.4.9", + "@storybook/channels": "6.4.9", + "@storybook/client-api": "6.4.9", + "@storybook/client-logger": "6.4.9", + "@storybook/components": "6.4.9", + "@storybook/core-common": "6.4.9", + "@storybook/core-events": "6.4.9", + "@storybook/node-logger": "6.4.9", + "@storybook/preview-web": "6.4.9", + "@storybook/router": "6.4.9", + "@storybook/semver": "^7.3.2", + "@storybook/store": "6.4.9", + "@storybook/theming": "6.4.9", + "@storybook/ui": "6.4.9", + "@types/node": "^14.0.10", + "@types/webpack": "^4.41.26", + "autoprefixer": "^9.8.6", + "babel-loader": "^8.0.0", + "babel-plugin-macros": "^2.8.0", + "babel-plugin-polyfill-corejs3": "^0.1.0", + "case-sensitive-paths-webpack-plugin": "^2.3.0", + "core-js": "^3.8.2", + "css-loader": "^3.6.0", + "file-loader": "^6.2.0", + "find-up": "^5.0.0", + "fork-ts-checker-webpack-plugin": "^4.1.6", + "glob": "^7.1.6", + "glob-promise": "^3.4.0", + "global": "^4.4.0", + "html-webpack-plugin": "^4.0.0", + "pnp-webpack-plugin": "1.6.4", + "postcss": "^7.0.36", + "postcss-flexbugs-fixes": "^4.2.1", + "postcss-loader": "^4.2.0", + "raw-loader": "^4.0.2", + "react-dev-utils": "^11.0.4", + "stable": "^0.1.8", + "style-loader": "^1.3.0", + "terser-webpack-plugin": "^4.2.3", + "ts-dedent": "^2.0.0", + "url-loader": "^4.1.1", + "util-deprecate": "^1.0.2", + "webpack": "4", + "webpack-dev-middleware": "^3.7.3", + "webpack-filter-warnings-plugin": "^1.2.1", + "webpack-hot-middleware": "^2.25.1", + "webpack-virtual-modules": "^0.2.2" + }, + "dependencies": { + "@babel/helper-define-polyfill-provider": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.1.5.tgz", + "integrity": "sha512-nXuzCSwlJ/WKr8qxzW816gwyT6VZgiJG17zR40fou70yfAcqjoNyTLl/DQ+FExw5Hx5KNqshmN8Ldl/r2N7cTg==", "dev": true, "requires": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" + "@babel/helper-compilation-targets": "^7.13.0", + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/traverse": "^7.13.0", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" }, "dependencies": { - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true } } }, - "read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "@storybook/semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/@storybook/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-SWeszlsiPsMI0Ps0jVNtH64cI5c0UF3f7KgjVKJoNP30crQ6wUSddY2hsdeczZXEKVJGEn50Q60flcGsQGIcrg==", "dev": true, "requires": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" + "core-js": "^3.6.5", + "find-up": "^4.1.0" }, "dependencies": { "find-up": { @@ -11069,308 +10289,301 @@ "locate-path": "^5.0.0", "path-exists": "^4.0.0" } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } } } }, - "resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "@types/json-schema": { + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", + "dev": true + }, + "@types/webpack": { + "version": "4.41.32", + "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.32.tgz", + "integrity": "sha512-cb+0ioil/7oz5//7tZUSwbrSAN/NWHrQylz5cW8G0dWTcF/g+/dSdMlKVZspBYuMAN1+WnwHrkxiRrLcwd0Heg==", "dev": true, "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" + "@types/node": "*", + "@types/tapable": "^1", + "@types/uglify-js": "*", + "@types/webpack-sources": "*", + "anymatch": "^3.0.0", + "source-map": "^0.6.0" } }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - }, - "schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "requires": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" } }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "dev": true }, - "serialize-javascript": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", - "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "dev": true, "requires": { - "randombytes": "^2.1.0" + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" } }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "autoprefixer": { + "version": "9.8.8", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.8.tgz", + "integrity": "sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==", + "dev": true, + "requires": { + "browserslist": "^4.12.0", + "caniuse-lite": "^1.0.30001109", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "picocolors": "^0.2.1", + "postcss": "^7.0.32", + "postcss-value-parser": "^4.1.0" + } + }, + "babel-plugin-polyfill-corejs3": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.1.7.tgz", + "integrity": "sha512-u+gbS9bbPhZWEeyy1oR/YaaSpod/KDT07arZHb80aTpl8H5ZBq+uN1nN9/xtX7jQyfLdPfoqI4Rue/MQSWJquw==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.1.5", + "core-js-compat": "^3.8.1" + } + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", "dev": true }, - "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "cacache": { + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", "dev": true, "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" } }, - "ssri": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", - "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { - "minipass": "^3.1.1" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, - "style-loader": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.3.0.tgz", - "integrity": "sha512-V7TCORko8rs9rIqkSrlMfkqA63DfoGBBJmK1kKGCcSi+BWb4cqz0SRsnp4l6rU5iwOEd0/2ePv68SV22VXon4Q==", + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "css-loader": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.6.0.tgz", + "integrity": "sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ==", "dev": true, "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^2.7.0" + "camelcase": "^5.3.1", + "cssesc": "^3.0.0", + "icss-utils": "^4.1.1", + "loader-utils": "^1.2.3", + "normalize-path": "^3.0.0", + "postcss": "^7.0.32", + "postcss-modules-extract-imports": "^2.0.0", + "postcss-modules-local-by-default": "^3.0.2", + "postcss-modules-scope": "^2.2.0", + "postcss-modules-values": "^3.0.0", + "postcss-value-parser": "^4.1.0", + "schema-utils": "^2.7.0", + "semver": "^6.3.0" }, "dependencies": { - "json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true } } }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "ms": "2.1.2" } }, - "tar": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.0.tgz", - "integrity": "sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA==", + "find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", "dev": true, "requires": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" } }, - "terser": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.7.1.tgz", - "integrity": "sha512-b3e+d5JbHAe/JSjwsC3Zn55wsBIM7AsHLjKxT31kGCldgbpFePaFo+PiddtO6uwRZWRw7sPXmAN8dTW61xmnSg==", + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "requires": { - "commander": "^2.20.0", - "source-map": "~0.7.2", - "source-map-support": "~0.5.19" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, "dependencies": { - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } } } }, - "terser-webpack-plugin": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-4.2.3.tgz", - "integrity": "sha512-jTgXh40RnvOrLQNgIkwEKnQ8rmHjHK4u+6UBEi+W+FPmvb+uo+chJXntKe7/3lW5mNysgSWD60KyesnhW8D6MQ==", + "fork-ts-checker-webpack-plugin": { + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-4.1.6.tgz", + "integrity": "sha512-DUxuQaKoqfNne8iikd14SAkh5uw4+8vNifp6gmA73yYNS6ywLIWSLD/n/mBzHQRpW3J7rbATEakmiA8JvkTyZw==", "dev": true, "requires": { - "cacache": "^15.0.5", - "find-cache-dir": "^3.3.1", - "jest-worker": "^26.5.0", - "p-limit": "^3.0.2", - "schema-utils": "^3.0.0", - "serialize-javascript": "^5.0.1", - "source-map": "^0.6.1", - "terser": "^5.3.4", - "webpack-sources": "^1.4.3" + "@babel/code-frame": "^7.5.5", + "chalk": "^2.4.1", + "micromatch": "^3.1.10", + "minimatch": "^3.0.4", + "semver": "^5.6.0", + "tapable": "^1.0.0", + "worker-rpc": "^0.1.0" }, "dependencies": { - "schema-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.0.tgz", - "integrity": "sha512-tTEaeYkyIhEZ9uWgAjDerWov3T9MgX8dhhy2r0IGeeX4W8ngtGl1++dUve/RUqzuaASSh7shwCDJjEzthxki8w==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.7", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true } } }, - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } }, - "webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", "dev": true - } - } - }, - "@storybook/node-logger": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-6.3.2.tgz", - "integrity": "sha512-TJvJpysIIP3EWoyfFDmXCRC/yTReu0jIFUPdldh4FjhADjQU+JTbLwJmtcJyHoMSqfIHgUc1TB6D/B4PjYqElA==", - "dev": true, - "requires": { - "@types/npmlog": "^4.1.2", - "chalk": "^4.1.0", - "core-js": "^3.8.2", - "npmlog": "^4.1.2", - "pretty-hrtime": "^1.0.3" - } - }, - "@storybook/postinstall": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/@storybook/postinstall/-/postinstall-6.3.2.tgz", - "integrity": "sha512-RkzrEr5GyBKFEPwOJw6JFRqkCtexvqZbyQeDuQ8K5AxRoJOcdXfxtb2Qkq06wfUnexxhZ9R0ktzepdtzk89ALw==", - "dev": true, - "requires": { - "core-js": "^3.8.2" - } - }, - "@storybook/react": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/@storybook/react/-/react-6.3.2.tgz", - "integrity": "sha512-AwuXzvu6zKSZnWFgYWxvP1QumnJ/8VChZJ1/pCEW3IGqxtSBd7KAF7EjlmS6CqAnWP+zp9jUr7It1P9631CwNQ==", - "dev": true, - "requires": { - "@babel/preset-flow": "^7.12.1", - "@babel/preset-react": "^7.12.10", - "@pmmmwh/react-refresh-webpack-plugin": "^0.4.3", - "@storybook/addons": "6.3.2", - "@storybook/core": "6.3.2", - "@storybook/core-common": "6.3.2", - "@storybook/node-logger": "6.3.2", - "@storybook/react-docgen-typescript-plugin": "1.0.2-canary.253f8c1.0", - "@storybook/semver": "^7.3.2", - "@types/webpack-env": "^1.16.0", - "babel-plugin-add-react-displayname": "^0.0.5", - "babel-plugin-named-asset-import": "^0.3.1", - "babel-plugin-react-docgen": "^4.2.1", - "core-js": "^3.8.2", - "global": "^4.4.0", - "lodash": "^4.17.20", - "prop-types": "^15.7.2", - "react-dev-utils": "^11.0.3", - "react-refresh": "^0.8.3", - "read-pkg-up": "^7.0.1", - "regenerator-runtime": "^0.13.7", - "ts-dedent": "^2.0.0", - "webpack": "4" - }, - "dependencies": { - "@storybook/semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@storybook/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-SWeszlsiPsMI0Ps0jVNtH64cI5c0UF3f7KgjVKJoNP30crQ6wUSddY2hsdeczZXEKVJGEn50Q60flcGsQGIcrg==", + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", "dev": true, "requires": { - "core-js": "^3.6.5", - "find-up": "^4.1.0" + "minimist": "^1.2.0" } }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", "dev": true, "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" } }, "locate-path": { @@ -11382,26 +10595,67 @@ "p-locate": "^4.1.0" } }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" + "yallist": "^4.0.0" + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" }, "dependencies": { "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true } } }, + "minipass": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz", + "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", + "requires": { + "yallist": "^4.0.0" + } + }, + "minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, "p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", @@ -11420,73 +10674,122 @@ "p-limit": "^2.2.0" } }, + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, "p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, - "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", "dev": true }, - "react-refresh": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.8.3.tgz", - "integrity": "sha512-X8jZHc7nCMjaCqoU+V2I0cOhNW+QMBwSUkeXnTi8IPe6zaRWfn60ZzvFDZqWPfmSJfjub7dDW1SP0jaHWLu/hg==", + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true }, - "read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, "requires": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" + "find-up": "^4.0.0" }, "dependencies": { - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } } } }, - "read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dev": true, "requires": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "postcss-loader": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-4.3.0.tgz", + "integrity": "sha512-M/dSoIiNDOo8Rk0mUqoj4kpGq91gcxCfb9PoyZVdZ76/AuhxylHDYZblNE8o+EQ9AMSASeMFEKxZf5aU6wlx1Q==", + "dev": true, + "requires": { + "cosmiconfig": "^7.0.0", + "klona": "^2.0.4", + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0", + "semver": "^7.3.4" + }, + "dependencies": { + "json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "loader-utils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", + "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } } }, + "postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, "resolve": { "version": "1.20.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", @@ -11497,395 +10800,646 @@ "path-parse": "^1.0.6" } }, - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - } - } - }, - "@storybook/react-docgen-typescript-plugin": { - "version": "1.0.2-canary.253f8c1.0", - "resolved": "https://registry.npmjs.org/@storybook/react-docgen-typescript-plugin/-/react-docgen-typescript-plugin-1.0.2-canary.253f8c1.0.tgz", - "integrity": "sha512-mmoRG/rNzAiTbh+vGP8d57dfcR2aP+5/Ll03KKFyfy5FqWFm/Gh7u27ikx1I3LmVMI8n6jh5SdWMkMKon7/tDw==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "endent": "^2.0.1", - "find-cache-dir": "^3.3.1", - "flat-cache": "^3.0.4", - "micromatch": "^4.0.2", - "react-docgen-typescript": "^2.0.0", - "tslib": "^2.0.0" - }, - "dependencies": { - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", "dev": true, "requires": { - "fill-range": "^7.0.1" + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" } }, - "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "serialize-javascript": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", + "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", "dev": true, "requires": { - "ms": "2.1.2" + "randombytes": "^2.1.0" } }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, "requires": { - "to-regex-range": "^5.0.1" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, - "find-cache-dir": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", - "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", + "ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", "dev": true, "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" + "minipass": "^3.1.1" } }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "style-loader": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.3.0.tgz", + "integrity": "sha512-V7TCORko8rs9rIqkSrlMfkqA63DfoGBBJmK1kKGCcSi+BWb4cqz0SRsnp4l6rU5iwOEd0/2ePv68SV22VXon4Q==", "dev": true, "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "loader-utils": "^2.0.0", + "schema-utils": "^2.7.0" + }, + "dependencies": { + "json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "loader-utils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", + "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + } } }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "terser": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.10.0.tgz", + "integrity": "sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==", "dev": true, "requires": { - "p-locate": "^4.1.0" + "commander": "^2.20.0", + "source-map": "~0.7.2", + "source-map-support": "~0.5.20" + }, + "dependencies": { + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + } } }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "terser-webpack-plugin": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-4.2.3.tgz", + "integrity": "sha512-jTgXh40RnvOrLQNgIkwEKnQ8rmHjHK4u+6UBEi+W+FPmvb+uo+chJXntKe7/3lW5mNysgSWD60KyesnhW8D6MQ==", "dev": true, "requires": { - "semver": "^6.0.0" + "cacache": "^15.0.5", + "find-cache-dir": "^3.3.1", + "jest-worker": "^26.5.0", + "p-limit": "^3.0.2", + "schema-utils": "^3.0.0", + "serialize-javascript": "^5.0.1", + "source-map": "^0.6.1", + "terser": "^5.3.4", + "webpack-sources": "^1.4.3" + }, + "dependencies": { + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } } }, - "micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "webpack": { + "version": "4.46.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz", + "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/wasm-edit": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "acorn": "^6.4.1", + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^4.5.0", + "eslint-scope": "^4.0.3", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^2.4.0", + "loader-utils": "^1.2.3", + "memory-fs": "^0.4.1", + "micromatch": "^3.1.10", + "mkdirp": "^0.5.3", + "neo-async": "^2.6.1", + "node-libs-browser": "^2.2.1", + "schema-utils": "^1.0.0", + "tapable": "^1.1.3", + "terser-webpack-plugin": "^1.4.3", + "watchpack": "^1.7.4", + "webpack-sources": "^1.4.1" + }, + "dependencies": { + "cacache": { + "version": "12.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", + "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", + "dev": true, + "requires": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + } + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "ssri": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", + "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1" + } + }, + "tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "dev": true + }, + "terser": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", + "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + } + }, + "terser-webpack-plugin": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", + "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", + "dev": true, + "requires": { + "cacache": "^12.0.2", + "find-cache-dir": "^2.1.0", + "is-wsl": "^1.1.0", + "schema-utils": "^1.0.0", + "serialize-javascript": "^4.0.0", + "source-map": "^0.6.1", + "terser": "^4.1.2", + "webpack-sources": "^1.4.0", + "worker-farm": "^1.7.0" + } + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } + } + }, + "webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", "dev": true, "requires": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" } }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } + }, + "@storybook/builder-webpack5": { + "version": "6.4.9", + "resolved": "https://registry.npmjs.org/@storybook/builder-webpack5/-/builder-webpack5-6.4.9.tgz", + "integrity": "sha512-OB/PJHgsHwvX03smEsIM45oyYhLD8RK2wBIRS0PuGj1XdisOsiMal2a9hUHcqhZIiFstOEXUltMwBzJnixzprg==", + "dev": true, + "requires": { + "@babel/core": "^7.12.10", + "@babel/plugin-proposal-class-properties": "^7.12.1", + "@babel/plugin-proposal-decorators": "^7.12.12", + "@babel/plugin-proposal-export-default-from": "^7.12.1", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", + "@babel/plugin-proposal-object-rest-spread": "^7.12.1", + "@babel/plugin-proposal-optional-chaining": "^7.12.7", + "@babel/plugin-proposal-private-methods": "^7.12.1", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-arrow-functions": "^7.12.1", + "@babel/plugin-transform-block-scoping": "^7.12.12", + "@babel/plugin-transform-classes": "^7.12.1", + "@babel/plugin-transform-destructuring": "^7.12.1", + "@babel/plugin-transform-for-of": "^7.12.1", + "@babel/plugin-transform-parameters": "^7.12.1", + "@babel/plugin-transform-shorthand-properties": "^7.12.1", + "@babel/plugin-transform-spread": "^7.12.1", + "@babel/preset-env": "^7.12.11", + "@babel/preset-react": "^7.12.10", + "@babel/preset-typescript": "^7.12.7", + "@storybook/addons": "6.4.9", + "@storybook/api": "6.4.9", + "@storybook/channel-postmessage": "6.4.9", + "@storybook/channels": "6.4.9", + "@storybook/client-api": "6.4.9", + "@storybook/client-logger": "6.4.9", + "@storybook/components": "6.4.9", + "@storybook/core-common": "6.4.9", + "@storybook/core-events": "6.4.9", + "@storybook/node-logger": "6.4.9", + "@storybook/preview-web": "6.4.9", + "@storybook/router": "6.4.9", + "@storybook/semver": "^7.3.2", + "@storybook/store": "6.4.9", + "@storybook/theming": "6.4.9", + "@types/node": "^14.0.10", + "babel-loader": "^8.0.0", + "babel-plugin-macros": "^3.0.1", + "babel-plugin-polyfill-corejs3": "^0.1.0", + "case-sensitive-paths-webpack-plugin": "^2.3.0", + "core-js": "^3.8.2", + "css-loader": "^5.0.1", + "fork-ts-checker-webpack-plugin": "^6.0.4", + "glob": "^7.1.6", + "glob-promise": "^3.4.0", + "html-webpack-plugin": "^5.0.0", + "path-browserify": "^1.0.1", + "react-dev-utils": "^11.0.4", + "stable": "^0.1.8", + "style-loader": "^2.0.0", + "terser-webpack-plugin": "^5.0.3", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2", + "webpack": "^5.9.0", + "webpack-dev-middleware": "^4.1.0", + "webpack-hot-middleware": "^2.25.1", + "webpack-virtual-modules": "^0.4.1" + }, + "dependencies": { + "@babel/helper-define-polyfill-provider": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.1.5.tgz", + "integrity": "sha512-nXuzCSwlJ/WKr8qxzW816gwyT6VZgiJG17zR40fou70yfAcqjoNyTLl/DQ+FExw5Hx5KNqshmN8Ldl/r2N7cTg==", "dev": true, "requires": { - "p-try": "^2.0.0" + "@babel/helper-compilation-targets": "^7.13.0", + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/traverse": "^7.13.0", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "@storybook/semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/@storybook/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-SWeszlsiPsMI0Ps0jVNtH64cI5c0UF3f7KgjVKJoNP30crQ6wUSddY2hsdeczZXEKVJGEn50Q60flcGsQGIcrg==", "dev": true, "requires": { - "p-limit": "^2.2.0" + "core-js": "^3.6.5", + "find-up": "^4.1.0" } }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "@types/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", "dev": true }, - "picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "@types/json-schema": { + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", "dev": true }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "requires": { - "find-up": "^4.0.0" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" } }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "dev": true }, - "to-regex-range": { + "ansi-regex": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "babel-plugin-macros": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", "dev": true, "requires": { - "is-number": "^7.0.0" + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" } }, - "tslib": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", - "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==", - "dev": true - } - } - }, - "@storybook/router": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/@storybook/router/-/router-6.3.2.tgz", - "integrity": "sha512-2oe2w1h4ucKhVub2NjKqwvJ6E6b57rA0fr8EOElPXdQXDi2fD3hFjUIXL4OdWG+GMVEqfkoje0eRCDRdjbu+yg==", - "dev": true, - "requires": { - "@reach/router": "^1.3.4", - "@storybook/client-logger": "6.3.2", - "@types/reach__router": "^1.3.7", - "core-js": "^3.8.2", - "fast-deep-equal": "^3.1.3", - "global": "^4.4.0", - "lodash": "^4.17.20", - "memoizerific": "^1.11.3", - "qs": "^6.10.0", - "ts-dedent": "^2.0.0" - }, - "dependencies": { - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "qs": { - "version": "6.10.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz", - "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==", + "babel-plugin-polyfill-corejs3": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.1.7.tgz", + "integrity": "sha512-u+gbS9bbPhZWEeyy1oR/YaaSpod/KDT07arZHb80aTpl8H5ZBq+uN1nN9/xtX7jQyfLdPfoqI4Rue/MQSWJquw==", "dev": true, "requires": { - "side-channel": "^1.0.4" + "@babel/helper-define-polyfill-provider": "^0.1.5", + "core-js-compat": "^3.8.1" } }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "clean-css": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.2.2.tgz", + "integrity": "sha512-/eR8ru5zyxKzpBLv9YZvMXgTSSQn7AdkMItMYynsFgGwTveCRVam9IUPFloE85B4vAIj05IuKmmEoV7/AQjT0w==", "dev": true, "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "source-map": "~0.6.0" } - } - } - }, - "@storybook/source-loader": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/@storybook/source-loader/-/source-loader-6.3.2.tgz", - "integrity": "sha512-tg8VDBoVRrazDdvFJBtAp0ChztaF3cxmXsbWCOxYkP8u4sYDXBikJCllSGzkuSx6GUuU0kyQ0JV94Bd2ECTdOw==", - "dev": true, - "requires": { - "@storybook/addons": "6.3.2", - "@storybook/client-logger": "6.3.2", - "@storybook/csf": "0.0.1", - "core-js": "^3.8.2", - "estraverse": "^5.2.0", - "global": "^4.4.0", - "loader-utils": "^2.0.0", - "lodash": "^4.17.20", - "prettier": "~2.2.1", - "regenerator-runtime": "^0.13.7" - }, - "dependencies": { - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", "dev": true }, - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "css-loader": { + "version": "5.2.7", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.7.tgz", + "integrity": "sha512-Q7mOvpBNBG7YrVGMxRxcBJZFL75o+cH2abNASdibkj/fffYD8qWbInZrD0S9ccI6vZclF3DsHE7njGlLtaHbhg==", + "dev": true, + "requires": { + "icss-utils": "^5.1.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.15", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.1.0", + "schema-utils": "^3.0.0", + "semver": "^7.3.5" + } + }, + "css-select": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz", + "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^5.0.0", + "domhandler": "^4.2.0", + "domutils": "^2.6.0", + "nth-check": "^2.0.0" + } + }, + "css-what": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", + "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", "dev": true }, - "json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dev": true, "requires": { - "minimist": "^1.2.5" + "ms": "2.1.2" } }, - "loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "dom-serializer": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", + "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", "dev": true, "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" } }, - "prettier": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.2.1.tgz", - "integrity": "sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q==", - "dev": true - } - } - }, - "@storybook/theming": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-6.3.2.tgz", - "integrity": "sha512-XICs67cuEGQxnzJ2SYPRZiIELaUCFQsYhtBTXycJIpBUbcbysdBE7GH+3aG8PpDMaSgHWJ7qaiYEoPlhFbAv1w==", - "dev": true, - "requires": { - "@emotion/core": "^10.1.1", - "@emotion/is-prop-valid": "^0.8.6", - "@emotion/styled": "^10.0.27", - "@storybook/client-logger": "6.3.2", - "core-js": "^3.8.2", - "deep-object-diff": "^1.1.0", - "emotion-theming": "^10.0.27", - "global": "^4.4.0", - "memoizerific": "^1.11.3", - "polished": "^4.0.5", - "resolve-from": "^5.0.0", - "ts-dedent": "^2.0.0" - }, - "dependencies": { - "@emotion/is-prop-valid": { - "version": "0.8.8", - "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz", - "integrity": "sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==", - "dev": true, - "requires": { - "@emotion/memoize": "0.7.4" - } - }, - "@emotion/memoize": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz", - "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==", + "domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", "dev": true }, - "@emotion/styled": { - "version": "10.0.27", - "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-10.0.27.tgz", - "integrity": "sha512-iK/8Sh7+NLJzyp9a5+vIQIXTYxfT4yB/OJbjzQanB2RZpvmzBQOHZWhpAMZWYEKRNNbsD6WfBw5sVWkb6WzS/Q==", + "domhandler": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", + "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", "dev": true, "requires": { - "@emotion/styled-base": "^10.0.27", - "babel-plugin-emotion": "^10.0.27" + "domelementtype": "^2.2.0" } }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - } - } - }, - "@storybook/ui": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/@storybook/ui/-/ui-6.3.2.tgz", - "integrity": "sha512-Aqzr5vQsr67iDwg41CmHr/NlcNayld8PPGWqtxJ/+/fSScnKZ8KdwGoqpj64dizowoggpCCeYVZCanHhxS47Vg==", - "dev": true, - "requires": { - "@emotion/core": "^10.1.1", - "@storybook/addons": "6.3.2", - "@storybook/api": "6.3.2", - "@storybook/channels": "6.3.2", - "@storybook/client-logger": "6.3.2", - "@storybook/components": "6.3.2", - "@storybook/core-events": "6.3.2", - "@storybook/router": "6.3.2", - "@storybook/semver": "^7.3.2", - "@storybook/theming": "6.3.2", - "@types/markdown-to-jsx": "^6.11.3", - "copy-to-clipboard": "^3.3.1", - "core-js": "^3.8.2", - "core-js-pure": "^3.8.2", - "downshift": "^6.0.15", - "emotion-theming": "^10.0.27", - "fuse.js": "^3.6.1", - "global": "^4.4.0", - "lodash": "^4.17.20", - "markdown-to-jsx": "^6.11.4", - "memoizerific": "^1.11.3", - "polished": "^4.0.5", - "qs": "^6.10.0", - "react-draggable": "^4.4.3", - "react-helmet-async": "^1.0.7", - "react-sizeme": "^3.0.1", - "regenerator-runtime": "^0.13.7", - "resolve-from": "^5.0.0", - "store2": "^2.12.0" - }, - "dependencies": { - "@storybook/semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@storybook/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-SWeszlsiPsMI0Ps0jVNtH64cI5c0UF3f7KgjVKJoNP30crQ6wUSddY2hsdeczZXEKVJGEn50Q60flcGsQGIcrg==", + "domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", "dev": true, "requires": { - "core-js": "^3.6.5", - "find-up": "^4.1.0" + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" } }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true + }, "find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", @@ -11896,6 +11450,66 @@ "path-exists": "^4.0.0" } }, + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", + "dev": true, + "requires": { + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.10.0" + } + }, + "html-webpack-plugin": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", + "integrity": "sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==", + "dev": true, + "requires": { + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.0" + } + }, + "htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true + }, "locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -11905,14 +11519,42 @@ "p-locate": "^4.1.0" } }, - "markdown-to-jsx": { - "version": "6.11.4", - "resolved": "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-6.11.4.tgz", - "integrity": "sha512-3lRCD5Sh+tfA52iGgfs/XZiw33f7fFX9Bn55aNnVNUd2GzLDkOWyKYYD8Yju2B1Vn+feiEdgJs8T6Tg0xNokPw==", + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "mime-db": { + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", + "dev": true + }, + "mime-types": { + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", + "dev": true, + "requires": { + "mime-db": "1.51.0" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "nth-check": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", + "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", "dev": true, "requires": { - "prop-types": "^15.6.2", - "unquote": "^1.1.0" + "boolbase": "^1.0.0" } }, "p-limit": { @@ -11939,578 +11581,644 @@ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, + "path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true + }, "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true }, - "qs": { - "version": "6.10.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz", - "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==", + "postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "dev": true + }, + "postcss-modules-local-by-default": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", + "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", "dev": true, "requires": { - "side-channel": "^1.0.4" + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" } }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true + "postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.4" + } }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", "dev": true, "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "icss-utils": "^5.0.0" } - } - } - }, - "@stylelint/postcss-css-in-js": { - "version": "0.37.2", - "resolved": "https://registry.npmjs.org/@stylelint/postcss-css-in-js/-/postcss-css-in-js-0.37.2.tgz", - "integrity": "sha512-nEhsFoJurt8oUmieT8qy4nk81WRHmJynmVwn/Vts08PL9fhgIsMhk1GId5yAN643OzqEEb5S/6At2TZW7pqPDA==", - "dev": true, - "requires": { - "@babel/core": ">=7.9.0" - } - }, - "@stylelint/postcss-markdown": { - "version": "0.36.2", - "resolved": "https://registry.npmjs.org/@stylelint/postcss-markdown/-/postcss-markdown-0.36.2.tgz", - "integrity": "sha512-2kGbqUVJUGE8dM+bMzXG/PYUWKkjLIkRLWNh39OaADkiabDRdw8ATFCgbMz5xdIcvwspPAluSL7uY+ZiTWdWmQ==", - "dev": true, - "requires": { - "remark": "^13.0.0", - "unist-util-find-all-after": "^3.0.2" - }, - "dependencies": { - "is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "dev": true }, - "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", "dev": true }, - "remark": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/remark/-/remark-13.0.0.tgz", - "integrity": "sha512-HDz1+IKGtOyWN+QgBiAT0kn+2s6ovOxHyPAFGKVE81VSzJ+mq7RwHFledEvB5F1p4iJvOah/LOKdFuzvRnNLCA==", + "pretty-error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", "dev": true, "requires": { - "remark-parse": "^9.0.0", - "remark-stringify": "^9.0.0", - "unified": "^9.1.0" + "lodash": "^4.17.20", + "renderkid": "^3.0.0" } }, - "remark-parse": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-9.0.0.tgz", - "integrity": "sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==", + "renderkid": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", + "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", "dev": true, "requires": { - "mdast-util-from-markdown": "^0.8.0" + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.1" } }, - "remark-stringify": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-9.0.1.tgz", - "integrity": "sha512-mWmNg3ZtESvZS8fv5PTvaPckdL4iNlCHTt8/e/8oN08nArHRHjNZMKzA/YW3+p7/lYqIw4nx1XsjCBo/AxNChg==", + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", "dev": true, "requires": { - "mdast-util-to-markdown": "^0.6.0" + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" } }, - "unified": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.1.tgz", - "integrity": "sha512-juWjuI8Z4xFg8pJbnEZ41b5xjGUWGHqXALmBZ3FC3WX0PIx1CZBIIJ6mXbYMcf6Yw4Fi0rFUTA1cdz/BglbOhA==", + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "dev": true, "requires": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" } }, - "unist-util-stringify-position": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", - "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, "requires": { - "@types/unist": "^2.0.2" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, - "vfile": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", - "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" + "ansi-regex": "^5.0.1" } }, - "vfile-message": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", - "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "style-loader": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-2.0.0.tgz", + "integrity": "sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ==", "dev": true, "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + } + }, + "tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true + }, + "terser": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.10.0.tgz", + "integrity": "sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.7.2", + "source-map-support": "~0.5.20" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + } + } + }, + "webpack-dev-middleware": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-4.3.0.tgz", + "integrity": "sha512-PjwyVY95/bhBh6VUqt6z4THplYcsvQ8YNNBTBM873xLVmw8FLeALn0qurHbs9EmcfhzQis/eoqypSnZeuUz26w==", + "dev": true, + "requires": { + "colorette": "^1.2.2", + "mem": "^8.1.1", + "memfs": "^3.2.2", + "mime-types": "^2.1.30", + "range-parser": "^1.2.1", + "schema-utils": "^3.0.0" } + }, + "webpack-virtual-modules": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.4.3.tgz", + "integrity": "sha512-5NUqC2JquIL2pBAAo/VfBP6KuGkHIZQXW/lNKupLPfhViwh8wNsu0BObtl09yuKZszeEUfbXz8xhrHvSG16Nqw==", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" } } }, - "@svgr/babel-plugin-add-jsx-attribute": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.0.1.tgz", - "integrity": "sha512-av76JbSudaN2CUOGuKQp5BVqLFidtojg4ApRTg1PBOVsskXK2ORwKnBYhIu0JLA6ynmuNDprlHNCD6IwLiYidw==", - "dev": true - }, - "@svgr/babel-plugin-remove-jsx-attribute": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.0.1.tgz", - "integrity": "sha512-oXyByaDQEK4Ut/eC75698MDKnaadbWmp/LS2w22cZAaoObCkkiwYYgZTZ+bvb3moo//AxvKkBtNrlz6+xBb9ZQ==", - "dev": true - }, - "@svgr/babel-plugin-remove-jsx-empty-expression": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz", - "integrity": "sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==", - "dev": true - }, - "@svgr/babel-plugin-replace-jsx-attribute-value": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz", - "integrity": "sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==", - "dev": true - }, - "@svgr/babel-plugin-svg-dynamic-title": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.0.1.tgz", - "integrity": "sha512-IbFiDBvq5WpANPndjEom1Y9k1pHCNfJs87jCN1Lt8NEA7yrNVPSoAjBVmmfi0aVBERfp8IT/lgjn2a/S85lXGg==", - "dev": true - }, - "@svgr/babel-plugin-svg-em-dimensions": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.0.1.tgz", - "integrity": "sha512-7kL9LtqCm1ca+zAbBsrD4ME3EQeVcRxkdrf2GsbKPgkzWJ+399vS4VqCP462+WvFRbG13jSwpNCrvhekdyvXsA==", - "dev": true - }, - "@svgr/babel-plugin-transform-react-native-svg": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.0.1.tgz", - "integrity": "sha512-ITG1jJ0zHQ4yft6ISQqlMW4fHIzsrSB/FmrMxAcJtkTjh9M2/9M8wfKxQya9NnTfZ5WMSlQjXMQNZmGQsuxRrw==", - "dev": true - }, - "@svgr/babel-plugin-transform-svg-component": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.2.0.tgz", - "integrity": "sha512-t4dq0cNr7c8cuUu1Cwehai/0iXO3dV5876r2QRaLdgQF3C6XOK2vdTvNOwcJ3uRa92revSC3kGL8v8WgJrecRg==", - "dev": true + "@storybook/channel-postmessage": { + "version": "6.4.9", + "resolved": "https://registry.npmjs.org/@storybook/channel-postmessage/-/channel-postmessage-6.4.9.tgz", + "integrity": "sha512-0Oif4e6/oORv4oc2tHhIRts9faE/ID9BETn4uqIUWSl2CX1wYpKYDm04rEg3M6WvSzsi+6fzoSFvkr9xC5Ns2w==", + "dev": true, + "requires": { + "@storybook/channels": "6.4.9", + "@storybook/client-logger": "6.4.9", + "@storybook/core-events": "6.4.9", + "core-js": "^3.8.2", + "global": "^4.4.0", + "qs": "^6.10.0", + "telejson": "^5.3.2" + }, + "dependencies": { + "qs": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.2.tgz", + "integrity": "sha512-mSIdjzqznWgfd4pMii7sHtaYF8rx8861hBO80SraY5GT0XQibWZWJSid0avzHGkDIZLImux2S5mXO0Hfct2QCw==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + } + } }, - "@svgr/babel-preset": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-5.2.0.tgz", - "integrity": "sha512-sr7486h+SddMU1VgFrajXx/Ws0a1QPzX4wUBM1LgG2PHeZpnm+fQs2MXQNdnfoXRwo7C5mH2I4QDiRVR/49BEg==", + "@storybook/channel-websocket": { + "version": "6.4.9", + "resolved": "https://registry.npmjs.org/@storybook/channel-websocket/-/channel-websocket-6.4.9.tgz", + "integrity": "sha512-R1O5yrNtN+dIAghqMXUqoaH7XWBcrKi5miVRn7QelKG3qZwPL8HQa7gIPc/b6S2D6hD3kQdSuv/zTIjjMg7wyw==", "dev": true, "requires": { - "@svgr/babel-plugin-add-jsx-attribute": "^5.0.1", - "@svgr/babel-plugin-remove-jsx-attribute": "^5.0.1", - "@svgr/babel-plugin-remove-jsx-empty-expression": "^5.0.1", - "@svgr/babel-plugin-replace-jsx-attribute-value": "^5.0.1", - "@svgr/babel-plugin-svg-dynamic-title": "^5.0.1", - "@svgr/babel-plugin-svg-em-dimensions": "^5.0.1", - "@svgr/babel-plugin-transform-react-native-svg": "^5.0.1", - "@svgr/babel-plugin-transform-svg-component": "^5.2.0" + "@storybook/channels": "6.4.9", + "@storybook/client-logger": "6.4.9", + "core-js": "^3.8.2", + "global": "^4.4.0", + "telejson": "^5.3.2" } }, - "@svgr/core": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-5.2.0.tgz", - "integrity": "sha512-vuODnJ0owj/oFi2bzskuSEk6TGuYoMV9hmvBhGuE1QktzMAAjOr0LnvUN5u2eGB6ilGdI7yqUKrZtQ0Tw44mrA==", + "@storybook/channels": { + "version": "6.4.9", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-6.4.9.tgz", + "integrity": "sha512-DNW1qDg+1WFS2aMdGh658WJXh8xBXliO5KAn0786DKcWCsKjfsPPQg/QCHczHK0+s5SZyzQT5aOBb4kTRHELQA==", "dev": true, "requires": { - "@svgr/plugin-jsx": "^5.2.0", - "camelcase": "^5.3.1", - "cosmiconfig": "^6.0.0" + "core-js": "^3.8.2", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/client-api": { + "version": "6.4.9", + "resolved": "https://registry.npmjs.org/@storybook/client-api/-/client-api-6.4.9.tgz", + "integrity": "sha512-1IljlTr+ea2pIr6oiPhygORtccOdEb7SqaVzWDfLCHOhUnJ2Ka5UY9ADqDa35jvSSdRdynfk9Yl5/msY0yY1yg==", + "dev": true, + "requires": { + "@storybook/addons": "6.4.9", + "@storybook/channel-postmessage": "6.4.9", + "@storybook/channels": "6.4.9", + "@storybook/client-logger": "6.4.9", + "@storybook/core-events": "6.4.9", + "@storybook/csf": "0.0.2--canary.87bc651.0", + "@storybook/store": "6.4.9", + "@types/qs": "^6.9.5", + "@types/webpack-env": "^1.16.0", + "core-js": "^3.8.2", + "fast-deep-equal": "^3.1.3", + "global": "^4.4.0", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "qs": "^6.10.0", + "regenerator-runtime": "^0.13.7", + "store2": "^2.12.0", + "synchronous-promise": "^2.0.15", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" }, "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "@storybook/csf": { + "version": "0.0.2--canary.87bc651.0", + "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.0.2--canary.87bc651.0.tgz", + "integrity": "sha512-ajk1Uxa+rBpFQHKrCcTmJyQBXZ5slfwHVEaKlkuFaW77it8RgbPJp/ccna3sgoi8oZ7FkkOyvv1Ve4SmwFqRqw==", "dev": true, "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.7.2" + "lodash": "^4.17.15" } }, - "parse-json": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.0.tgz", - "integrity": "sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==", + "qs": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.2.tgz", + "integrity": "sha512-mSIdjzqznWgfd4pMii7sHtaYF8rx8861hBO80SraY5GT0XQibWZWJSid0avzHGkDIZLImux2S5mXO0Hfct2QCw==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1", - "lines-and-columns": "^1.1.6" + "side-channel": "^1.0.4" } - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true } } }, - "@svgr/hast-util-to-babel-ast": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.0.1.tgz", - "integrity": "sha512-G7UHNPNhLyDK5p6RJvSh4TRpHszTxG8jPp5lAxC6Ez6O6rj1plEAjrCDdYj50mvilUuT9IKjqn87F8+agpKaSw==", - "dev": true, - "requires": { - "@babel/types": "^7.4.4" - } - }, - "@svgr/plugin-jsx": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-5.2.0.tgz", - "integrity": "sha512-z1HWitE5sCNgaXqBGrmCnnnvR/BRTq9B/lsgZ+T8OWABzZHhezqjjDUvkyyyBb3Y+0xExWg5aTh2jxqk7GR9tg==", + "@storybook/client-logger": { + "version": "6.4.9", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-6.4.9.tgz", + "integrity": "sha512-BVagmmHcuKDZ/XROADfN3tiolaDW2qG0iLmDhyV1gONnbGE6X5Qm19Jt2VYu3LvjKF1zMPSWm4mz7HtgdwKbuQ==", "dev": true, "requires": { - "@babel/core": "^7.7.5", - "@svgr/babel-preset": "^5.2.0", - "@svgr/hast-util-to-babel-ast": "^5.0.1", - "svg-parser": "^2.0.2" + "core-js": "^3.8.2", + "global": "^4.4.0" } }, - "@svgr/plugin-svgo": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-5.2.0.tgz", - "integrity": "sha512-cyqWx026uO3heGG/55j5zfJLtS5sl0dWYawN1JotOqpJDyyR7rraTsnydpwwsOoz0YpESjVjAkXOAfd41lBY9Q==", + "@storybook/components": { + "version": "6.4.9", + "resolved": "https://registry.npmjs.org/@storybook/components/-/components-6.4.9.tgz", + "integrity": "sha512-uOUR97S6kjptkMCh15pYNM1vAqFXtpyneuonmBco5vADJb3ds0n2a8NeVd+myIbhIXn55x0OHKiSwBH/u7swCQ==", "dev": true, "requires": { - "cosmiconfig": "^6.0.0", - "merge-deep": "^3.0.2", - "svgo": "^1.2.2" + "@popperjs/core": "^2.6.0", + "@storybook/client-logger": "6.4.9", + "@storybook/csf": "0.0.2--canary.87bc651.0", + "@storybook/theming": "6.4.9", + "@types/color-convert": "^2.0.0", + "@types/overlayscrollbars": "^1.12.0", + "@types/react-syntax-highlighter": "11.0.5", + "color-convert": "^2.0.1", + "core-js": "^3.8.2", + "fast-deep-equal": "^3.1.3", + "global": "^4.4.0", + "lodash": "^4.17.21", + "markdown-to-jsx": "^7.1.3", + "memoizerific": "^1.11.3", + "overlayscrollbars": "^1.13.1", + "polished": "^4.0.5", + "prop-types": "^15.7.2", + "react-colorful": "^5.1.2", + "react-popper-tooltip": "^3.1.1", + "react-syntax-highlighter": "^13.5.3", + "react-textarea-autosize": "^8.3.0", + "regenerator-runtime": "^0.13.7", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" }, "dependencies": { - "cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "@storybook/csf": { + "version": "0.0.2--canary.87bc651.0", + "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.0.2--canary.87bc651.0.tgz", + "integrity": "sha512-ajk1Uxa+rBpFQHKrCcTmJyQBXZ5slfwHVEaKlkuFaW77it8RgbPJp/ccna3sgoi8oZ7FkkOyvv1Ve4SmwFqRqw==", "dev": true, "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.7.2" + "lodash": "^4.17.15" } }, - "css-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", - "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { - "boolbase": "^1.0.0", - "css-what": "^3.2.1", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" + "color-name": "~1.1.4" } }, - "css-tree": { - "version": "1.0.0-alpha.37", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", - "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + } + } + }, + "@storybook/core": { + "version": "6.4.9", + "resolved": "https://registry.npmjs.org/@storybook/core/-/core-6.4.9.tgz", + "integrity": "sha512-Mzhiy13loMSd3PCygK3t7HIT3X3L35iZmbe6+2xVbVmc/3ypCmq4PQALCUoDOGk37Ifrhop6bo6sl4s9YQ6UFw==", + "dev": true, + "requires": { + "@storybook/core-client": "6.4.9", + "@storybook/core-server": "6.4.9" + } + }, + "@storybook/core-client": { + "version": "6.4.9", + "resolved": "https://registry.npmjs.org/@storybook/core-client/-/core-client-6.4.9.tgz", + "integrity": "sha512-LZSpTtvBlpcn+Ifh0jQXlm/8wva2zZ2v13yxYIxX6tAwQvmB54U0N4VdGVmtkiszEp7TQUAzA8Pcyp4GWE+UMA==", + "dev": true, + "requires": { + "@storybook/addons": "6.4.9", + "@storybook/channel-postmessage": "6.4.9", + "@storybook/channel-websocket": "6.4.9", + "@storybook/client-api": "6.4.9", + "@storybook/client-logger": "6.4.9", + "@storybook/core-events": "6.4.9", + "@storybook/csf": "0.0.2--canary.87bc651.0", + "@storybook/preview-web": "6.4.9", + "@storybook/store": "6.4.9", + "@storybook/ui": "6.4.9", + "airbnb-js-shims": "^2.2.1", + "ansi-to-html": "^0.6.11", + "core-js": "^3.8.2", + "global": "^4.4.0", + "lodash": "^4.17.21", + "qs": "^6.10.0", + "regenerator-runtime": "^0.13.7", + "ts-dedent": "^2.0.0", + "unfetch": "^4.2.0", + "util-deprecate": "^1.0.2" + }, + "dependencies": { + "@storybook/csf": { + "version": "0.0.2--canary.87bc651.0", + "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.0.2--canary.87bc651.0.tgz", + "integrity": "sha512-ajk1Uxa+rBpFQHKrCcTmJyQBXZ5slfwHVEaKlkuFaW77it8RgbPJp/ccna3sgoi8oZ7FkkOyvv1Ve4SmwFqRqw==", "dev": true, "requires": { - "mdn-data": "2.0.4", - "source-map": "^0.6.1" + "lodash": "^4.17.15" } }, - "css-what": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.2.1.tgz", - "integrity": "sha512-WwOrosiQTvyms+Ti5ZC5vGEK0Vod3FTt1ca+payZqvKuGJF+dq7bG63DstxtN0dpm6FxY27a/zS3Wten+gEtGw==", - "dev": true - }, - "csso": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.0.2.tgz", - "integrity": "sha512-kS7/oeNVXkHWxby5tHVxlhjizRCSv8QdU7hB2FpdAibDU8FjTAolhNjKNTiLzXtUrKT6HwClE81yXwEk1309wg==", + "qs": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.2.tgz", + "integrity": "sha512-mSIdjzqznWgfd4pMii7sHtaYF8rx8861hBO80SraY5GT0XQibWZWJSid0avzHGkDIZLImux2S5mXO0Hfct2QCw==", "dev": true, "requires": { - "css-tree": "1.0.0-alpha.37" + "side-channel": "^1.0.4" } - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", - "dev": true, - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "es-abstract": { - "version": "1.17.4", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.4.tgz", - "integrity": "sha512-Ae3um/gb8F0mui/jPL+QiqmglkUsaQf7FwBEHYIFkztkneosu9imhqHpBzQ3h1vit8t5iQ74t6PEVvphBZiuiQ==", + } + } + }, + "@storybook/core-common": { + "version": "6.4.9", + "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-6.4.9.tgz", + "integrity": "sha512-wVHRfUGnj/Tv8nGjv128NDQ5Zp6c63rSXd1lYLzfZPTJmGOz4rpPPez2IZSnnDwbAWeqUSMekFVZPj4v6yuujQ==", + "dev": true, + "requires": { + "@babel/core": "^7.12.10", + "@babel/plugin-proposal-class-properties": "^7.12.1", + "@babel/plugin-proposal-decorators": "^7.12.12", + "@babel/plugin-proposal-export-default-from": "^7.12.1", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", + "@babel/plugin-proposal-object-rest-spread": "^7.12.1", + "@babel/plugin-proposal-optional-chaining": "^7.12.7", + "@babel/plugin-proposal-private-methods": "^7.12.1", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-arrow-functions": "^7.12.1", + "@babel/plugin-transform-block-scoping": "^7.12.12", + "@babel/plugin-transform-classes": "^7.12.1", + "@babel/plugin-transform-destructuring": "^7.12.1", + "@babel/plugin-transform-for-of": "^7.12.1", + "@babel/plugin-transform-parameters": "^7.12.1", + "@babel/plugin-transform-shorthand-properties": "^7.12.1", + "@babel/plugin-transform-spread": "^7.12.1", + "@babel/preset-env": "^7.12.11", + "@babel/preset-react": "^7.12.10", + "@babel/preset-typescript": "^7.12.7", + "@babel/register": "^7.12.1", + "@storybook/node-logger": "6.4.9", + "@storybook/semver": "^7.3.2", + "@types/node": "^14.0.10", + "@types/pretty-hrtime": "^1.0.0", + "babel-loader": "^8.0.0", + "babel-plugin-macros": "^3.0.1", + "babel-plugin-polyfill-corejs3": "^0.1.0", + "chalk": "^4.1.0", + "core-js": "^3.8.2", + "express": "^4.17.1", + "file-system-cache": "^1.0.5", + "find-up": "^5.0.0", + "fork-ts-checker-webpack-plugin": "^6.0.4", + "fs-extra": "^9.0.1", + "glob": "^7.1.6", + "handlebars": "^4.7.7", + "interpret": "^2.2.0", + "json5": "^2.1.3", + "lazy-universal-dotenv": "^3.0.1", + "picomatch": "^2.3.0", + "pkg-dir": "^5.0.0", + "pretty-hrtime": "^1.0.3", + "resolve-from": "^5.0.0", + "slash": "^3.0.0", + "telejson": "^5.3.2", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2", + "webpack": "4" + }, + "dependencies": { + "@babel/helper-define-polyfill-provider": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.1.5.tgz", + "integrity": "sha512-nXuzCSwlJ/WKr8qxzW816gwyT6VZgiJG17zR40fou70yfAcqjoNyTLl/DQ+FExw5Hx5KNqshmN8Ldl/r2N7cTg==", "dev": true, "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.1.5", - "is-regex": "^1.0.5", - "object-inspect": "^1.7.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimleft": "^2.1.1", - "string.prototype.trimright": "^2.1.1" + "@babel/helper-compilation-targets": "^7.13.0", + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/traverse": "^7.13.0", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" }, "dependencies": { - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true } } }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "@storybook/semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/@storybook/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-SWeszlsiPsMI0Ps0jVNtH64cI5c0UF3f7KgjVKJoNP30crQ6wUSddY2hsdeczZXEKVJGEn50Q60flcGsQGIcrg==", "dev": true, "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "core-js": "^3.6.5", + "find-up": "^4.1.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + } } }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - }, - "is-callable": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", - "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", - "dev": true - }, - "is-regex": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", - "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "requires": { - "has": "^1.0.3" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" } }, - "is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "babel-plugin-macros": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", "dev": true, "requires": { - "has-symbols": "^1.0.1" + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" } }, - "mdn-data": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", - "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", - "dev": true - }, - "nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "babel-plugin-polyfill-corejs3": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.1.7.tgz", + "integrity": "sha512-u+gbS9bbPhZWEeyy1oR/YaaSpod/KDT07arZHb80aTpl8H5ZBq+uN1nN9/xtX7jQyfLdPfoqI4Rue/MQSWJquw==", "dev": true, "requires": { - "boolbase": "~1.0.0" + "@babel/helper-define-polyfill-provider": "^0.1.5", + "core-js-compat": "^3.8.1" } }, - "object-inspect": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", - "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", - "dev": true - }, - "object.values": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", - "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==", + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dev": true, "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1", - "function-bind": "^1.1.1", - "has": "^1.0.3" + "ms": "2.1.2" } }, - "parse-json": { + "find-up": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.0.tgz", - "integrity": "sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1", - "lines-and-columns": "^1.1.6" - } - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "string.prototype.trimleft": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz", - "integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "requires": { - "define-properties": "^1.1.3", - "function-bind": "^1.1.1" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "dependencies": { + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + } } }, - "string.prototype.trimright": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz", - "integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==", + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, "requires": { - "define-properties": "^1.1.3", - "function-bind": "^1.1.1" + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" } }, - "svgo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", - "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, "requires": { - "chalk": "^2.4.1", - "coa": "^2.0.2", - "css-select": "^2.0.0", - "css-select-base-adapter": "^0.1.1", - "css-tree": "1.0.0-alpha.37", - "csso": "^4.0.2", - "js-yaml": "^3.13.1", - "mkdirp": "~0.5.1", - "object.values": "^1.1.0", - "sax": "~1.2.4", - "stable": "^0.1.8", - "unquote": "~1.1.1", - "util.promisify": "~1.0.0" - }, - "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - } + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } - } - } - }, - "@svgr/webpack": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-5.2.0.tgz", - "integrity": "sha512-y9tMjTtqrvC998aCOgsEP8pb+bdg2RR1v8i+sjT31m4Xb8HGd905K7/GdSwEMM2nlTFbxSUQPZRRvfaJwAvghA==", - "dev": true, - "requires": { - "@babel/core": "^7.4.5", - "@babel/plugin-transform-react-constant-elements": "^7.0.0", - "@babel/preset-env": "^7.4.5", - "@babel/preset-react": "^7.0.0", - "@svgr/core": "^5.2.0", - "@svgr/plugin-jsx": "^5.2.0", - "@svgr/plugin-svgo": "^5.2.0", - "loader-utils": "^1.2.3" - }, - "dependencies": { - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", "dev": true }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, "requires": { - "minimist": "^1.2.0" + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" } }, "loader-utils": { @@ -12522,11256 +12230,10786 @@ "big.js": "^5.2.2", "emojis-list": "^3.0.0", "json5": "^1.0.1" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + } } - } - } - }, - "@szmarczak/http-timer": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.5.tgz", - "integrity": "sha512-PyRA9sm1Yayuj5OIoJ1hGt2YISX45w9WcFbh6ddT0Z/0yaFxOtGLInr4jUfU1EAFVs0Yfyfev4RNwBlUaHdlDQ==", - "dev": true, - "requires": { - "defer-to-connect": "^2.0.0" - } - }, - "@tannin/compile": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@tannin/compile/-/compile-1.1.0.tgz", - "integrity": "sha512-n8m9eNDfoNZoxdvWiTfW/hSPhehzLJ3zW7f8E7oT6mCROoMNWCB4TYtv041+2FMAxweiE0j7i1jubQU4MEC/Gg==", - "requires": { - "@tannin/evaluate": "^1.2.0", - "@tannin/postfix": "^1.1.0" - } - }, - "@tannin/evaluate": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@tannin/evaluate/-/evaluate-1.2.0.tgz", - "integrity": "sha512-3ioXvNowbO/wSrxsDG5DKIMxC81P0QrQTYai8zFNY+umuoHWRPbQ/TuuDEOju9E+jQDXmj6yI5GyejNuh8I+eg==" - }, - "@tannin/plural-forms": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@tannin/plural-forms/-/plural-forms-1.1.0.tgz", - "integrity": "sha512-xl9R2mDZO/qiHam1AgMnAES6IKIg7OBhcXqy6eDsRCdXuxAFPcjrej9HMjyCLE0DJ/8cHf0i5OQTstuBRhpbHw==", - "requires": { - "@tannin/compile": "^1.1.0" - } - }, - "@tannin/postfix": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@tannin/postfix/-/postfix-1.1.0.tgz", - "integrity": "sha512-oocsqY7g0cR+Gur5jRQLSrX2OtpMLMse1I10JQBm8CdGMrDkh1Mg2gjsiquMHRtBs4Qwu5wgEp5GgIYHk4SNPw==" - }, - "@testing-library/dom": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-7.29.0.tgz", - "integrity": "sha512-0hhuJSmw/zLc6ewR9cVm84TehuTd7tbqBX9pRNSp8znJ9gTmSgesdbiGZtt8R6dL+2rgaPFp9Yjr7IU1HWm49w==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/runtime": "^7.12.5", - "@types/aria-query": "^4.2.0", - "aria-query": "^4.2.2", - "chalk": "^4.1.0", - "dom-accessibility-api": "^0.5.4", - "lz-string": "^1.4.4", - "pretty-format": "^26.6.2" - }, - "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" + "p-locate": "^4.1.0" } }, - "@types/istanbul-reports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", - "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dev": true, "requires": { - "@types/istanbul-lib-report": "*" + "minimist": "^1.2.5" } }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "requires": { - "color-convert": "^2.0.1" + "p-try": "^2.0.0" } }, - "aria-query": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", - "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "requires": { - "@babel/runtime": "^7.10.2", - "@babel/runtime-corejs3": "^7.10.2" + "p-limit": "^2.2.0" } }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "dev": true + }, + "pkg-dir": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", + "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", "dev": true, "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "find-up": "^5.0.0" } }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", "dev": true, "requires": { - "color-name": "~1.1.4" + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" } }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, - "pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - } - }, - "react-is": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.1.tgz", - "integrity": "sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA==", + "tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", "dev": true }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "terser-webpack-plugin": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", + "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", "dev": true, "requires": { - "has-flag": "^4.0.0" + "cacache": "^12.0.2", + "find-cache-dir": "^2.1.0", + "is-wsl": "^1.1.0", + "schema-utils": "^1.0.0", + "serialize-javascript": "^4.0.0", + "source-map": "^0.6.1", + "terser": "^4.1.2", + "webpack-sources": "^1.4.0", + "worker-farm": "^1.7.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + }, + "webpack": { + "version": "4.46.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz", + "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/wasm-edit": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "acorn": "^6.4.1", + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^4.5.0", + "eslint-scope": "^4.0.3", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^2.4.0", + "loader-utils": "^1.2.3", + "memory-fs": "^0.4.1", + "micromatch": "^3.1.10", + "mkdirp": "^0.5.3", + "neo-async": "^2.6.1", + "node-libs-browser": "^2.2.1", + "schema-utils": "^1.0.0", + "tapable": "^1.1.3", + "terser-webpack-plugin": "^1.4.3", + "watchpack": "^1.7.4", + "webpack-sources": "^1.4.1" + } + }, + "webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dev": true, + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" } } } }, - "@testing-library/jest-dom": { - "version": "5.11.9", - "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.11.9.tgz", - "integrity": "sha512-Mn2gnA9d1wStlAIT2NU8J15LNob0YFBVjs2aEQ3j8rsfRQo+lAs7/ui1i2TGaJjapLmuNPLTsrm+nPjmZDwpcQ==", + "@storybook/core-events": { + "version": "6.4.9", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-6.4.9.tgz", + "integrity": "sha512-YhU2zJr6wzvh5naYYuy/0UKNJ/SaXu73sIr0Tx60ur3bL08XkRg7eZ9vBhNBTlAa35oZqI0iiGCh0ljiX7yEVQ==", "dev": true, "requires": { - "@babel/runtime": "^7.9.2", - "@types/testing-library__jest-dom": "^5.9.1", - "aria-query": "^4.2.2", - "chalk": "^3.0.0", - "css": "^3.0.0", - "css.escape": "^1.5.1", - "lodash": "^4.17.15", - "redent": "^3.0.0" + "core-js": "^3.8.2" + } + }, + "@storybook/core-server": { + "version": "6.4.9", + "resolved": "https://registry.npmjs.org/@storybook/core-server/-/core-server-6.4.9.tgz", + "integrity": "sha512-Ht/e17/SNW9BgdvBsnKmqNrlZ6CpHeVsClEUnauMov8I5rxjvKBVmI/UsbJJIy6H6VLiL/RwrA3RvLoAoZE8dA==", + "dev": true, + "requires": { + "@discoveryjs/json-ext": "^0.5.3", + "@storybook/builder-webpack4": "6.4.9", + "@storybook/core-client": "6.4.9", + "@storybook/core-common": "6.4.9", + "@storybook/core-events": "6.4.9", + "@storybook/csf": "0.0.2--canary.87bc651.0", + "@storybook/csf-tools": "6.4.9", + "@storybook/manager-webpack4": "6.4.9", + "@storybook/node-logger": "6.4.9", + "@storybook/semver": "^7.3.2", + "@storybook/store": "6.4.9", + "@types/node": "^14.0.10", + "@types/node-fetch": "^2.5.7", + "@types/pretty-hrtime": "^1.0.0", + "@types/webpack": "^4.41.26", + "better-opn": "^2.1.1", + "boxen": "^5.1.2", + "chalk": "^4.1.0", + "cli-table3": "0.6.0", + "commander": "^6.2.1", + "compression": "^1.7.4", + "core-js": "^3.8.2", + "cpy": "^8.1.2", + "detect-port": "^1.3.0", + "express": "^4.17.1", + "file-system-cache": "^1.0.5", + "fs-extra": "^9.0.1", + "globby": "^11.0.2", + "ip": "^1.1.5", + "lodash": "^4.17.21", + "node-fetch": "^2.6.1", + "pretty-hrtime": "^1.0.3", + "prompts": "^2.4.0", + "regenerator-runtime": "^0.13.7", + "serve-favicon": "^2.5.0", + "slash": "^3.0.0", + "telejson": "^5.3.3", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2", + "watchpack": "^2.2.0", + "webpack": "4", + "ws": "^8.2.3" }, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "@storybook/csf": { + "version": "0.0.2--canary.87bc651.0", + "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.0.2--canary.87bc651.0.tgz", + "integrity": "sha512-ajk1Uxa+rBpFQHKrCcTmJyQBXZ5slfwHVEaKlkuFaW77it8RgbPJp/ccna3sgoi8oZ7FkkOyvv1Ve4SmwFqRqw==", "dev": true, "requires": { - "color-convert": "^2.0.1" + "lodash": "^4.17.15" } }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true + "@storybook/semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/@storybook/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-SWeszlsiPsMI0Ps0jVNtH64cI5c0UF3f7KgjVKJoNP30crQ6wUSddY2hsdeczZXEKVJGEn50Q60flcGsQGIcrg==", + "dev": true, + "requires": { + "core-js": "^3.6.5", + "find-up": "^4.1.0" + } }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "@types/webpack": { + "version": "4.41.32", + "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.32.tgz", + "integrity": "sha512-cb+0ioil/7oz5//7tZUSwbrSAN/NWHrQylz5cW8G0dWTcF/g+/dSdMlKVZspBYuMAN1+WnwHrkxiRrLcwd0Heg==", "dev": true, "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@types/node": "*", + "@types/tapable": "^1", + "@types/uglify-js": "*", + "@types/webpack-sources": "*", + "anymatch": "^3.0.0", + "source-map": "^0.6.0" } }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "requires": { - "color-name": "~1.1.4" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" } }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true }, - "css": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/css/-/css-3.0.0.tgz", - "integrity": "sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ==", + "commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { - "inherits": "^2.0.4", - "source-map": "^0.6.1", - "source-map-resolve": "^0.6.0" + "ms": "2.0.0" } }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "detect-port": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.3.0.tgz", + "integrity": "sha512-E+B1gzkl2gqxt1IhUzwjrxBKRqx1UzC3WLONHinn8S3T6lwV/agVCyitiFOsGJ/eYuEUBvD71MZHy3Pv1G9doQ==", + "dev": true, + "requires": { + "address": "^1.0.1", + "debug": "^2.6.0" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", "dev": true }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "globby": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", + "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + } + }, + "graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", "dev": true }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true }, - "redent": { + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "normalize-path": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "requires": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "requires": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" } }, + "sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, - "source-map-resolve": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz", - "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==", + "tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "dev": true + }, + "terser-webpack-plugin": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", + "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", "dev": true, "requires": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0" + "cacache": "^12.0.2", + "find-cache-dir": "^2.1.0", + "is-wsl": "^1.1.0", + "schema-utils": "^1.0.0", + "serialize-javascript": "^4.0.0", + "source-map": "^0.6.1", + "terser": "^4.1.2", + "webpack-sources": "^1.4.0", + "worker-farm": "^1.7.0" } }, - "strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + }, + "watchpack": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.1.tgz", + "integrity": "sha512-x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA==", "dev": true, "requires": { - "min-indent": "^1.0.0" + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" } }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "webpack": { + "version": "4.46.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz", + "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==", "dev": true, "requires": { - "has-flag": "^4.0.0" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/wasm-edit": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "acorn": "^6.4.1", + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^4.5.0", + "eslint-scope": "^4.0.3", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^2.4.0", + "loader-utils": "^1.2.3", + "memory-fs": "^0.4.1", + "micromatch": "^3.1.10", + "mkdirp": "^0.5.3", + "neo-async": "^2.6.1", + "node-libs-browser": "^2.2.1", + "schema-utils": "^1.0.0", + "tapable": "^1.1.3", + "terser-webpack-plugin": "^1.4.3", + "watchpack": "^1.7.4", + "webpack-sources": "^1.4.1" + }, + "dependencies": { + "watchpack": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", + "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", + "dev": true, + "requires": { + "chokidar": "^3.4.1", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0", + "watchpack-chokidar2": "^2.0.1" + } + } + } + }, + "webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dev": true, + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" } + }, + "ws": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.3.0.tgz", + "integrity": "sha512-Gs5EZtpqZzLvmIM59w4igITU57lrtYVFneaa434VROv4thzJyV6UjIL3D42lslWlI+D4KzLYnxSwtfuiO79sNw==", + "dev": true } } }, - "@testing-library/react": { - "version": "11.2.2", - "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-11.2.2.tgz", - "integrity": "sha512-jaxm0hwUjv+hzC+UFEywic7buDC9JQ1q3cDsrWVSDAPmLotfA6E6kUHlYm/zOeGCac6g48DR36tFHxl7Zb+N5A==", + "@storybook/csf": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.0.1.tgz", + "integrity": "sha512-USTLkZze5gkel8MYCujSRBVIrUQ3YPBrLOx7GNk/0wttvVtlzWXAq9eLbQ4p/NicGxP+3T7KPEMVV//g+yubpw==", "dev": true, "requires": { - "@babel/runtime": "^7.12.5", - "@testing-library/dom": "^7.28.1" + "lodash": "^4.17.15" } }, - "@testing-library/react-native": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@testing-library/react-native/-/react-native-7.1.0.tgz", - "integrity": "sha512-ljVM9KZqG7BT/NFN6CHzdF6MNmM28+k7MEybFJ7FW1wVrhpiY4+hU9ypZ+hboO+MG3KpE2aFBzP4od3gu+Zzdg==", + "@storybook/csf-tools": { + "version": "6.4.9", + "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-6.4.9.tgz", + "integrity": "sha512-zbgsx9vY5XOA9bBmyw+KyuRspFXAjEJ6I3d/6Z3G1kNBeOEj9i3DT7O99Rd/THfL/3mWl8DJ/7CJVPk1ZYxunA==", "dev": true, "requires": { - "pretty-format": "^26.0.1" + "@babel/core": "^7.12.10", + "@babel/generator": "^7.12.11", + "@babel/parser": "^7.12.11", + "@babel/plugin-transform-react-jsx": "^7.12.12", + "@babel/preset-env": "^7.12.11", + "@babel/traverse": "^7.12.11", + "@babel/types": "^7.12.11", + "@mdx-js/mdx": "^1.6.22", + "@storybook/csf": "0.0.2--canary.87bc651.0", + "core-js": "^3.8.2", + "fs-extra": "^9.0.1", + "global": "^4.4.0", + "js-string-escape": "^1.0.1", + "lodash": "^4.17.21", + "prettier": "^2.2.1", + "regenerator-runtime": "^0.13.7", + "ts-dedent": "^2.0.0" }, "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "@storybook/csf": { + "version": "0.0.2--canary.87bc651.0", + "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.0.2--canary.87bc651.0.tgz", + "integrity": "sha512-ajk1Uxa+rBpFQHKrCcTmJyQBXZ5slfwHVEaKlkuFaW77it8RgbPJp/ccna3sgoi8oZ7FkkOyvv1Ve4SmwFqRqw==", "dev": true, "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" + "lodash": "^4.17.15" } }, - "@types/istanbul-reports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", - "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, "requires": { - "@types/istanbul-lib-report": "*" + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" } }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", "dev": true }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, "requires": { - "color-name": "~1.1.4" + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" } }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "prettier": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", + "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", "dev": true }, - "pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - } - }, - "react-is": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.1.tgz", - "integrity": "sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA==", + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true } } }, - "@trysound/sax": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.1.1.tgz", - "integrity": "sha512-Z6DoceYb/1xSg5+e+ZlPZ9v0N16ZvZ+wYMraFue4HYrE4ttONKtsvruIRf6t9TBR0YvSOfi1hUU0fJfBLCDYow==", - "dev": true - }, - "@types/anymatch": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@types/anymatch/-/anymatch-1.3.1.tgz", - "integrity": "sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA==", - "dev": true - }, - "@types/aria-query": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-4.2.0.tgz", - "integrity": "sha512-iIgQNzCm0v7QMhhe4Jjn9uRh+I6GoPmt03CbEtwx3ao8/EfoQcmgtqH4vQ5Db/lxiIGaWDv6nwvunuh0RyX0+A==", - "dev": true - }, - "@types/babel__core": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.7.tgz", - "integrity": "sha512-RL62NqSFPCDK2FM1pSDH0scHpJvsXtZNiYlMB73DgPBaG1E38ZYVL+ei5EkWRbr+KC4YNiAUNBnRj+bgwpgjMw==", + "@storybook/manager-webpack4": { + "version": "6.4.9", + "resolved": "https://registry.npmjs.org/@storybook/manager-webpack4/-/manager-webpack4-6.4.9.tgz", + "integrity": "sha512-828x3rqMuzBNSb13MSDo2nchY7fuywh+8+Vk+fn00MvBYJjogd5RQFx5ocwhHzmwXbnESIerlGwe81AzMck8ng==", "dev": true, "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "@types/babel__generator": { - "version": "7.6.1", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.1.tgz", - "integrity": "sha512-bBKm+2VPJcMRVwNhxKu8W+5/zT7pwNEqeokFOmbvVSqGzFneNxYcEBro9Ac7/N9tlsaPYnZLK8J1LWKkMsLAew==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@types/babel__template": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.0.2.tgz", - "integrity": "sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg==", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@types/babel__traverse": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.11.tgz", - "integrity": "sha512-ddHK5icION5U6q11+tV2f9Mo6CZVuT8GJKld2q9LqHSZbvLbH34Kcu2yFGckZut453+eQU6btIA3RihmnRgI+Q==", - "dev": true, - "requires": { - "@babel/types": "^7.3.0" - } - }, - "@types/braces": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/braces/-/braces-3.0.0.tgz", - "integrity": "sha512-TbH79tcyi9FHwbyboOKeRachRq63mSuWYXOflsNO9ZyE5ClQ/JaozNKl+aWUq87qPNsXasXxi2AbgfwIJ+8GQw==", - "dev": true - }, - "@types/cacheable-request": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.1.tgz", - "integrity": "sha512-ykFq2zmBGOCbpIXtoVbz4SKY5QriWPh3AjyU4G74RYbtt5yOc5OfaY75ftjg7mikMOla1CTGpX3lLbuJh8DTrQ==", - "dev": true, - "requires": { - "@types/http-cache-semantics": "*", - "@types/keyv": "*", - "@types/node": "*", - "@types/responselike": "*" - } - }, - "@types/cheerio": { - "version": "0.22.29", - "resolved": "https://registry.npmjs.org/@types/cheerio/-/cheerio-0.22.29.tgz", - "integrity": "sha512-rNX1PsrDPxiNiyLnRKiW2NXHJFHqx0Fl3J2WsZq0MTBspa/FgwlqhXJE2crIcc+/2IglLHtSWw7g053oUR8fOg==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/classnames": { - "version": "2.2.10", - "resolved": "https://registry.npmjs.org/@types/classnames/-/classnames-2.2.10.tgz", - "integrity": "sha512-1UzDldn9GfYYEsWWnn/P4wkTlkZDH7lDb0wBMGbtIQc9zXEQq7FlKBdZUn6OBqD8sKZZ2RQO2mAjGpXiDGoRmQ==", - "dev": true - }, - "@types/clipboard": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/clipboard/-/clipboard-2.0.1.tgz", - "integrity": "sha512-gJJX9Jjdt3bIAePQRRjYWG20dIhAgEqonguyHxXuqALxsoDsDLimihqrSg8fXgVTJ4KZCzkfglKtwsh/8dLfbA==", - "dev": true - }, - "@types/color-convert": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@types/color-convert/-/color-convert-2.0.0.tgz", - "integrity": "sha512-m7GG7IKKGuJUXvkZ1qqG3ChccdIM/qBBo913z+Xft0nKCX4hAU/IxKwZBU4cpRZ7GS5kV4vOblUkILtSShCPXQ==", - "dev": true, - "requires": { - "@types/color-name": "*" - } - }, - "@types/color-name": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", - "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", - "dev": true - }, - "@types/eslint": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-6.8.0.tgz", - "integrity": "sha512-hqzmggoxkOubpgTdcOltkfc5N8IftRJqU70d1jbOISjjZVPvjcr+CLi2CI70hx1SUIRkLgpglTy9w28nGe2Hsw==", - "dev": true, - "requires": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "@types/estree": { - "version": "0.0.44", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.44.tgz", - "integrity": "sha512-iaIVzr+w2ZJ5HkidlZ3EJM8VTZb2MJLCjw3V+505yVts0gRC4UMvjw0d1HPtGqI/HQC/KdsYtayfzl+AXY2R8g==", - "dev": true - }, - "@types/events": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", - "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==", - "dev": true - }, - "@types/glob": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz", - "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==", - "dev": true, - "requires": { - "@types/events": "*", - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "@types/glob-base": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@types/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha1-pYHWiDR+EOUN18F9byiAoQNUMZ0=", - "dev": true - }, - "@types/graceful-fs": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.3.tgz", - "integrity": "sha512-AiHRaEB50LQg0pZmm659vNBb9f4SJ0qrAnteuzhSeAUcJKxoYgEnprg/83kppCnc2zvtCKbdZry1a5pVY3lOTQ==", - "requires": { - "@types/node": "*" - } - }, - "@types/hammerjs": { - "version": "2.0.39", - "resolved": "https://registry.npmjs.org/@types/hammerjs/-/hammerjs-2.0.39.tgz", - "integrity": "sha512-lYR2Y/tV2ujpk/WyUc7S0VLI0a9hrtVIN9EwnrNo5oSEJI2cK2/XrgwOQmXLL3eTulOESvh9qP6si9+DWM9cOA==" - }, - "@types/hast": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.1.tgz", - "integrity": "sha512-viwwrB+6xGzw+G1eWpF9geV3fnsDgXqHG+cqgiHrvQfDUW5hzhCyV7Sy3UJxhfRFBsgky2SSW33qi/YrIkjX5Q==", - "dev": true, - "requires": { - "@types/unist": "*" - } - }, - "@types/highlight-words-core": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@types/highlight-words-core/-/highlight-words-core-1.2.0.tgz", - "integrity": "sha512-yy+e7t3P5ABzT/Bl0Wy0hxworXGKKSJVQljaUQxco9ddXY5OZVbRm+yyzZAPBhP4C7KwfkZRRhNOCYkLbloFYw==", - "dev": true - }, - "@types/html-minifier-terser": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", - "integrity": "sha512-giAlZwstKbmvMk1OO7WXSj4OZ0keXAcl2TQq4LWHiiPH2ByaH7WeUzng+Qej8UPxxv+8lRTuouo0iaNDBuzIBA==", - "dev": true - }, - "@types/http-cache-semantics": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.0.tgz", - "integrity": "sha512-c3Xy026kOF7QOTn00hbIllV1dLR9hG9NkSrLQgCVs8NF6sBU+VGWjD3wLPhmh1TYAc7ugCFsvHYMN4VcBN1U1A==", - "dev": true - }, - "@types/is-function": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/is-function/-/is-function-1.0.0.tgz", - "integrity": "sha512-iTs9HReBu7evG77Q4EC8hZnqRt57irBDkK9nvmHroiOIVwYMQc4IvYvdRgwKfYepunIY7Oh/dBuuld+Gj9uo6w==", - "dev": true - }, - "@types/istanbul-lib-coverage": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz", - "integrity": "sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg==" - }, - "@types/istanbul-lib-report": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz", - "integrity": "sha512-3BUTyMzbZa2DtDI2BkERNC6jJw2Mr2Y0oGI7mRxYNBPxppbtEK1F66u3bKwU2g+wxwWI7PAoRpJnOY1grJqzHg==", - "requires": { - "@types/istanbul-lib-coverage": "*" - } - }, - "@types/istanbul-reports": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.1.tgz", - "integrity": "sha512-UpYjBi8xefVChsCoBpKShdxTllC9pwISirfoZsUa2AAdQg/Jd2KQGtSbw+ya7GPo7x/wAPlH6JBhKhAsXUEZNA==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" - } - }, - "@types/jest": { - "version": "23.3.14", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-23.3.14.tgz", - "integrity": "sha512-Q5hTcfdudEL2yOmluA1zaSyPbzWPmJ3XfSWeP3RyoYvS9hnje1ZyagrZOuQ6+1nQC1Gw+7gap3pLNL3xL6UBug==", - "dev": true - }, - "@types/json-schema": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.4.tgz", - "integrity": "sha512-8+KAKzEvSUdeo+kmqnKrqgeE+LcA0tjYWFY7RPProVYwnqDjukzO+3b6dLD56rYX5TdWejnEOLJYOIeh4CXKuA==", - "dev": true - }, - "@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", - "dev": true - }, - "@types/keyv": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.1.tgz", - "integrity": "sha512-MPtoySlAZQ37VoLaPcTHCu1RWJ4llDkULYZIzOYxlhxBqYPB0RsRlmMU0R6tahtFe27mIdkHV+551ZWV4PLmVw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/lodash": { - "version": "4.14.149", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.149.tgz", - "integrity": "sha512-ijGqzZt/b7BfzcK9vTrS6MFljQRPn5BFWOx8oE0GYxribu6uV+aA9zZuXI1zc/etK9E8nrgdoF2+LgUw7+9tJQ==" - }, - "@types/markdown-to-jsx": { - "version": "6.11.3", - "resolved": "https://registry.npmjs.org/@types/markdown-to-jsx/-/markdown-to-jsx-6.11.3.tgz", - "integrity": "sha512-30nFYpceM/ZEvhGiqWjm5quLUxNeld0HCzJEXMZZDpq53FPkS85mTwkWtCXzCqq8s5JYLgM5W392a02xn8Bdaw==", - "dev": true, - "requires": { - "@types/react": "*" - } - }, - "@types/mdast": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.3.tgz", - "integrity": "sha512-SXPBMnFVQg1s00dlMCc/jCdvPqdE4mXaMMCeRlxLDmTAEoegHT53xKtkDnzDTOcmMHUfcjyf36/YYZ6SxRdnsw==", - "dev": true, - "requires": { - "@types/unist": "*" - } - }, - "@types/micromatch": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/micromatch/-/micromatch-4.0.1.tgz", - "integrity": "sha512-my6fLBvpY70KattTNzYOK6KU1oR1+UCz9ug/JbcF5UrEmeCt9P7DV2t7L8+t18mMPINqGQCE4O8PLOPbI84gxw==", - "dev": true, - "requires": { - "@types/braces": "*" - } - }, - "@types/minimatch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", - "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", - "dev": true - }, - "@types/minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-aaI6OtKcrwCX8G7aWbNh7i8GOfY=", - "dev": true - }, - "@types/mousetrap": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/@types/mousetrap/-/mousetrap-1.6.8.tgz", - "integrity": "sha512-zTqjvgCUT5EoXqbqmd8iJMb4NJqyV/V7pK7AIKq7qcaAsJIpGlTVJS1HQM6YkdHCdnkNSbhcQI7MXYxFfE3iCA==" - }, - "@types/node": { - "version": "14.14.22", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.22.tgz", - "integrity": "sha512-g+f/qj/cNcqKkc3tFqlXOYjrmZA+jNBiDzbP3kH+B+otKFqAdPgVTGP1IeKRdMml/aE69as5S4FqtxAbl+LaMw==" - }, - "@types/node-fetch": { - "version": "2.5.10", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.10.tgz", - "integrity": "sha512-IpkX0AasN44hgEad0gEF/V6EgR5n69VEqPEgnmoM8GsIGro3PowbWs4tR6IhxUTyPLpOn+fiGG6nrQhcmoCuIQ==", - "dev": true, - "requires": { - "@types/node": "*", - "form-data": "^3.0.0" + "@babel/core": "^7.12.10", + "@babel/plugin-transform-template-literals": "^7.12.1", + "@babel/preset-react": "^7.12.10", + "@storybook/addons": "6.4.9", + "@storybook/core-client": "6.4.9", + "@storybook/core-common": "6.4.9", + "@storybook/node-logger": "6.4.9", + "@storybook/theming": "6.4.9", + "@storybook/ui": "6.4.9", + "@types/node": "^14.0.10", + "@types/webpack": "^4.41.26", + "babel-loader": "^8.0.0", + "case-sensitive-paths-webpack-plugin": "^2.3.0", + "chalk": "^4.1.0", + "core-js": "^3.8.2", + "css-loader": "^3.6.0", + "express": "^4.17.1", + "file-loader": "^6.2.0", + "file-system-cache": "^1.0.5", + "find-up": "^5.0.0", + "fs-extra": "^9.0.1", + "html-webpack-plugin": "^4.0.0", + "node-fetch": "^2.6.1", + "pnp-webpack-plugin": "1.6.4", + "read-pkg-up": "^7.0.1", + "regenerator-runtime": "^0.13.7", + "resolve-from": "^5.0.0", + "style-loader": "^1.3.0", + "telejson": "^5.3.2", + "terser-webpack-plugin": "^4.2.3", + "ts-dedent": "^2.0.0", + "url-loader": "^4.1.1", + "util-deprecate": "^1.0.2", + "webpack": "4", + "webpack-dev-middleware": "^3.7.3", + "webpack-virtual-modules": "^0.2.2" }, "dependencies": { - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "@types/json-schema": { + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", + "dev": true + }, + "@types/webpack": { + "version": "4.41.32", + "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.32.tgz", + "integrity": "sha512-cb+0ioil/7oz5//7tZUSwbrSAN/NWHrQylz5cW8G0dWTcF/g+/dSdMlKVZspBYuMAN1+WnwHrkxiRrLcwd0Heg==", "dev": true, "requires": { - "delayed-stream": "~1.0.0" + "@types/node": "*", + "@types/tapable": "^1", + "@types/uglify-js": "*", + "@types/webpack-sources": "*", + "anymatch": "^3.0.0", + "source-map": "^0.6.0" } }, - "form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" } - } - } - }, - "@types/normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", - "dev": true - }, - "@types/npm-package-arg": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@types/npm-package-arg/-/npm-package-arg-6.1.0.tgz", - "integrity": "sha512-vbt5fb0y1svMhu++1lwtKmZL76d0uPChFlw7kEzyUmTwfmpHRcFb8i0R8ElT69q/L+QLgK2hgECivIAvaEDwag==", - "dev": true - }, - "@types/npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@types/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-4QQmOF5KlwfxJ5IGXFIudkeLCdMABz03RcUXu+LCb24zmln8QW6aDjuGl4d4XPVLf2j+FnjelHTP7dvceAFbhA==", - "dev": true - }, - "@types/overlayscrollbars": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@types/overlayscrollbars/-/overlayscrollbars-1.12.0.tgz", - "integrity": "sha512-h/pScHNKi4mb+TrJGDon8Yb06ujFG0mSg12wIO0sWMUF3dQIe2ExRRdNRviaNt9IjxIiOfnRr7FsQAdHwK4sMg==", - "dev": true - }, - "@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" - }, - "@types/parse5": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-5.0.3.tgz", - "integrity": "sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==", - "dev": true - }, - "@types/prettier": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-1.19.0.tgz", - "integrity": "sha512-gDE8JJEygpay7IjA/u3JiIURvwZW08f0cZSZLAzFoX/ZmeqvS0Sqv+97aKuHpNsalAMMhwPe+iAS6fQbfmbt7A==", - "dev": true - }, - "@types/pretty-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/pretty-hrtime/-/pretty-hrtime-1.0.0.tgz", - "integrity": "sha512-xl+5r2rcrxdLViAYkkiLMYsoUs3qEyrAnHFyEzYysgRxdVp3WbhysxIvJIxZp9FvZ2CYezh0TaHZorivH+voOQ==", - "dev": true - }, - "@types/prop-types": { - "version": "15.7.3", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz", - "integrity": "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==" - }, - "@types/q": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.2.tgz", - "integrity": "sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw==", - "dev": true - }, - "@types/qs": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.1.tgz", - "integrity": "sha512-lhbQXx9HKZAPgBkISrBcmAcMpZsmpe/Cd/hY7LGZS5OfkySUBItnPZHgQPssWYUET8elF+yCFBbP1Q0RZPTdaw==", - "dev": true - }, - "@types/reach__router": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/@types/reach__router/-/reach__router-1.3.8.tgz", - "integrity": "sha512-cjjT0FPdwuvhLWpCDt2WCh4sdBqNzJe3XhxXmRQGsY3IvT58M8sE4E7A0QaFYuJs3ar+McSJTiJxdYKWAXbBhw==", - "dev": true, - "requires": { - "@types/react": "*" - } - }, - "@types/react": { - "version": "16.9.49", - "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.49.tgz", - "integrity": "sha512-DtLFjSj0OYAdVLBbyjhuV9CdGVHCkHn2R+xr3XkBvK2rS1Y1tkc14XSGjYgm5Fjjr90AxH9tiSzc1pCFMGO06g==", - "requires": { - "@types/prop-types": "*", - "csstype": "^3.0.2" - }, - "dependencies": { - "csstype": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.3.tgz", - "integrity": "sha512-jPl+wbWPOWJ7SXsWyqGRk3lGecbar0Cb0OvZF/r/ZU011R4YqiRehgkQ9p4eQfo9DSDLqLL3wHwfxeJiuIsNag==" - } - } - }, - "@types/react-dom": { - "version": "16.9.13", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.9.13.tgz", - "integrity": "sha512-34Hr3XnmUSJbUVDxIw/e7dhQn2BJZhJmlAaPyPwfTQyuVS9mV/CeyghFcXyvkJXxI7notQJz8mF8FeCVvloJrA==", - "requires": { - "@types/react": "^16" - } - }, - "@types/react-syntax-highlighter": { - "version": "11.0.5", - "resolved": "https://registry.npmjs.org/@types/react-syntax-highlighter/-/react-syntax-highlighter-11.0.5.tgz", - "integrity": "sha512-VIOi9i2Oj5XsmWWoB72p3KlZoEbdRAcechJa8Ztebw7bDl2YmR+odxIqhtJGp1q2EozHs02US+gzxJ9nuf56qg==", - "dev": true, - "requires": { - "@types/react": "*" - } - }, - "@types/requestidlecallback": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@types/requestidlecallback/-/requestidlecallback-0.3.1.tgz", - "integrity": "sha512-BnnRkgWYijCIndUn+LgoqKHX/hNpJC5G03B9y7mZya/C2gUQTSn75fEj3ZP1/Rl2E6EYeXh2/7/8UNEZ4X7HuQ==", - "dev": true - }, - "@types/responselike": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", - "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/semver": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.2.0.tgz", - "integrity": "sha512-TbB0A8ACUWZt3Y6bQPstW9QNbhNeebdgLX4T/ZfkrswAfUzRiXrgd9seol+X379Wa589Pu4UEx9Uok0D4RjRCQ==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/source-list-map": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz", - "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==", - "dev": true - }, - "@types/sprintf-js": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/sprintf-js/-/sprintf-js-1.1.2.tgz", - "integrity": "sha512-hkgzYF+qnIl8uTO8rmUSVSfQ8BIfMXC4yJAF4n8BE758YsKBZvFC4NumnAegj7KmylP0liEZNpb9RRGFMbFejA==", - "dev": true - }, - "@types/tapable": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.5.tgz", - "integrity": "sha512-/gG2M/Imw7cQFp8PGvz/SwocNrmKFjFsm5Pb8HdbHkZ1K8pmuPzOX4VeVoiEecFCVf4CsN1r3/BRvx+6sNqwtQ==", - "dev": true - }, - "@types/testing-library__jest-dom": { - "version": "5.9.5", - "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.9.5.tgz", - "integrity": "sha512-ggn3ws+yRbOHog9GxnXiEZ/35Mow6YtPZpd7Z5mKDeZS/o7zx3yAle0ov/wjhVB5QT4N2Dt+GNoGCdqkBGCajQ==", - "dev": true, - "requires": { - "@types/jest": "*" - } - }, - "@types/tinycolor2": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@types/tinycolor2/-/tinycolor2-1.4.2.tgz", - "integrity": "sha512-PeHg/AtdW6aaIO2a+98Xj7rWY4KC1E6yOy7AFknJQ7VXUGNrMlyxDFxJo7HqLtjQms/ZhhQX52mLVW/EX3JGOw==", - "dev": true - }, - "@types/uglify-js": { - "version": "3.9.2", - "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.9.2.tgz", - "integrity": "sha512-d6dIfpPbF+8B7WiCi2ELY7m0w1joD8cRW4ms88Emdb2w062NeEpbNCeWwVCgzLRpVG+5e74VFSg4rgJ2xXjEiQ==", - "dev": true, - "requires": { - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "dev": true - } - } - }, - "@types/unist": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz", - "integrity": "sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==", - "dev": true - }, - "@types/uuid": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.0.tgz", - "integrity": "sha512-eQ9qFW/fhfGJF8WKHGEHZEyVWfZxrT+6CLIJGBcZPfxUh/+BnEj+UCGYMlr9qZuX/2AltsvwrGqp0LhEW8D0zQ==", - "dev": true - }, - "@types/vfile": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/vfile/-/vfile-3.0.2.tgz", - "integrity": "sha512-b3nLFGaGkJ9rzOcuXRfHkZMdjsawuDD0ENL9fzTophtBg8FJHSGbH7daXkEpcwy3v7Xol3pAvsmlYyFhR4pqJw==", - "dev": true, - "requires": { - "@types/node": "*", - "@types/unist": "*", - "@types/vfile-message": "*" - } - }, - "@types/vfile-message": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/vfile-message/-/vfile-message-1.0.1.tgz", - "integrity": "sha512-mlGER3Aqmq7bqR1tTTIVHq8KSAFFRyGbrxuM8C/H82g6k7r2fS+IMEkIu3D7JHzG10NvPdR8DNx0jr0pwpp4dA==", - "dev": true, - "requires": { - "@types/node": "*", - "@types/unist": "*" - } - }, - "@types/webpack": { - "version": "4.41.16", - "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.16.tgz", - "integrity": "sha512-w80nXwCcXwwgv7rkTXb8lET6nWPNNUJxa36lrA2DEkD5TcPpHrlGAPrjdpZnkFX/FXSSuN5IIxCYowAB1Vobtw==", - "dev": true, - "requires": { - "@types/anymatch": "*", - "@types/node": "*", - "@types/tapable": "*", - "@types/uglify-js": "*", - "@types/webpack-sources": "*", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "@types/webpack-env": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/@types/webpack-env/-/webpack-env-1.16.2.tgz", - "integrity": "sha512-vKx7WNQNZDyJveYcHAm9ZxhqSGLYwoyLhrHjLBOkw3a7cT76sTdjgtwyijhk1MaHyRIuSztcVwrUOO/NEu68Dw==", - "dev": true - }, - "@types/webpack-sources": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-0.1.7.tgz", - "integrity": "sha512-XyaHrJILjK1VHVC4aVlKsdNN5KBTwufMb43cQs+flGxtPAf/1Qwl8+Q0tp5BwEGaI8D6XT1L+9bSWXckgkjTLw==", - "dev": true, - "requires": { - "@types/node": "*", - "@types/source-list-map": "*", - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "@types/yargs": { - "version": "15.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.4.tgz", - "integrity": "sha512-9T1auFmbPZoxHz0enUFlUuKRy3it01R+hlggyVUMtnCTQRunsQYifnSGb8hET4Xo8yiC0o0r1paW3ud5+rbURg==", - "requires": { - "@types/yargs-parser": "*" - } - }, - "@types/yargs-parser": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-13.1.0.tgz", - "integrity": "sha512-gCubfBUZ6KxzoibJ+SCUc/57Ms1jz5NjHe4+dI2krNmU5zCPAphyLJYyTOg06ueIyfj+SaCUqmzun7ImlxDcKg==" - }, - "@types/yauzl": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.1.tgz", - "integrity": "sha512-A1b8SU4D10uoPjwb0lnHmmu8wZhR9d+9o2PKBQT2jU5YPTKsxac6M2qGAdY7VcL+dHHhARVUDmeg0rOrcd9EjA==", - "dev": true, - "optional": true, - "requires": { - "@types/node": "*" - } - }, - "@typescript-eslint/eslint-plugin": { - "version": "4.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.15.0.tgz", - "integrity": "sha512-DJgdGZW+8CFUTz5C/dnn4ONcUm2h2T0itWD85Ob5/V27Ndie8hUoX5HKyGssvR8sUMkAIlUc/AMK67Lqa3kBIQ==", - "dev": true, - "requires": { - "@typescript-eslint/experimental-utils": "4.15.0", - "@typescript-eslint/scope-manager": "4.15.0", - "debug": "^4.1.1", - "functional-red-black-tree": "^1.0.1", - "lodash": "^4.17.15", - "regexpp": "^3.0.0", - "semver": "^7.3.2", - "tsutils": "^3.17.1" - }, - "dependencies": { - "@nodelib/fs.stat": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz", - "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==", + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", "dev": true }, - "@typescript-eslint/experimental-utils": { - "version": "4.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.15.0.tgz", - "integrity": "sha512-V4vaDWvxA2zgesg4KPgEGiomWEBpJXvY4ZX34Y3qxK8LUm5I87L+qGIOTd9tHZOARXNRt9pLbblSKiYBlGMawg==", + "cacache": { + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", "dev": true, "requires": { - "@types/json-schema": "^7.0.3", - "@typescript-eslint/scope-manager": "4.15.0", - "@typescript-eslint/types": "4.15.0", - "@typescript-eslint/typescript-estree": "4.15.0", - "eslint-scope": "^5.0.0", - "eslint-utils": "^2.0.0" + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" } }, - "@typescript-eslint/scope-manager": { - "version": "4.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.15.0.tgz", - "integrity": "sha512-CSNBZnCC2jEA/a+pR9Ljh8Y+5TY5qgbPz7ICEk9WCpSEgT6Pi7H2RIjxfrrbUXvotd6ta+i27sssKEH8Azm75g==", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.15.0", - "@typescript-eslint/visitor-keys": "4.15.0" - } + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true }, - "@typescript-eslint/types": { - "version": "4.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.15.0.tgz", - "integrity": "sha512-su4RHkJhS+iFwyqyXHcS8EGPlUVoC+XREfy5daivjLur9JP8GhvTmDipuRpcujtGC4M+GYhUOJCPDE3rC5NJrg==", + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, - "@typescript-eslint/typescript-estree": { - "version": "4.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.15.0.tgz", - "integrity": "sha512-jG6xTmcNbi6xzZq0SdWh7wQ9cMb2pqXaUp6bUZOMsIlu5aOlxGxgE/t6L/gPybybQGvdguajXGkZKSndZJpksA==", + "css-loader": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.6.0.tgz", + "integrity": "sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ==", "dev": true, "requires": { - "@typescript-eslint/types": "4.15.0", - "@typescript-eslint/visitor-keys": "4.15.0", - "debug": "^4.1.1", - "globby": "^11.0.1", - "is-glob": "^4.0.1", - "semver": "^7.3.2", - "tsutils": "^3.17.1" + "camelcase": "^5.3.1", + "cssesc": "^3.0.0", + "icss-utils": "^4.1.1", + "loader-utils": "^1.2.3", + "normalize-path": "^3.0.0", + "postcss": "^7.0.32", + "postcss-modules-extract-imports": "^2.0.0", + "postcss-modules-local-by-default": "^3.0.2", + "postcss-modules-scope": "^2.2.0", + "postcss-modules-values": "^3.0.0", + "postcss-value-parser": "^4.1.0", + "schema-utils": "^2.7.0", + "semver": "^6.3.0" } }, - "@typescript-eslint/visitor-keys": { - "version": "4.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.15.0.tgz", - "integrity": "sha512-RnDtJwOwFucWFAMjG3ghCG/ikImFJFEg20DI7mn4pHEx3vC48lIAoyjhffvfHmErRDboUPC7p9Z2il4CLb7qxA==", + "find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", "dev": true, "requires": { - "@typescript-eslint/types": "4.15.0", - "eslint-visitor-keys": "^2.0.0" + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" } }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, "requires": { - "fill-range": "^7.0.1" + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" } }, - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", "dev": true, "requires": { - "ms": "2.1.2" + "minipass": "^3.0.0" } }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, - "eslint-visitor-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", - "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", + "graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", "dev": true }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", "dev": true, "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true - } + "minimist": "^1.2.0" } }, - "fast-glob": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", - "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.0", - "merge2": "^1.3.0", - "micromatch": "^4.0.2", - "picomatch": "^2.2.1" + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" } }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", "dev": true, "requires": { - "to-regex-range": "^5.0.1" + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" } }, - "glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "requires": { - "is-glob": "^4.0.1" + "p-locate": "^5.0.0" } }, - "globby": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.2.tgz", - "integrity": "sha512-2ZThXDvvV8fYFRVIxnrMQBipZQDr7MxKAmQK1vujaj9/7eF0efG7BPUKJ7jP7G5SLF37xKDXvO4S/KKLj/Z0og==", + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", - "slash": "^3.0.0" + "yallist": "^4.0.0" } }, - "ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", - "dev": true - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, "requires": { - "is-extglob": "^2.1.1" + "semver": "^6.0.0" } }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", - "dev": true, + "minipass": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz", + "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", "requires": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" + "yallist": "^4.0.0" } }, - "ms": { + "minizlib": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + } }, - "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true }, - "slash": { + "normalize-path": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "requires": { - "is-number": "^7.0.0" + "yocto-queue": "^0.1.0" } - } - } - }, - "@typescript-eslint/experimental-utils": { - "version": "4.11.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.11.1.tgz", - "integrity": "sha512-mAlWowT4A6h0TC9F+J5pdbEhjNiEMO+kqPKQ4sc3fVieKL71dEqfkKgtcFVSX3cjSBwYwhImaQ/mXQF0oaI38g==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.3", - "@typescript-eslint/scope-manager": "4.11.1", - "@typescript-eslint/types": "4.11.1", - "@typescript-eslint/typescript-estree": "4.11.1", - "eslint-scope": "^5.0.0", - "eslint-utils": "^2.0.0" - }, - "dependencies": { - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "p-limit": "^3.0.2" } }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", "dev": true, "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true - } + "aggregate-error": "^3.0.0" } - } - } - }, - "@typescript-eslint/parser": { - "version": "4.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.15.0.tgz", - "integrity": "sha512-L6Dtbq8Bc7g2aZwnIBETpmUa9XDKCMzKVwAArnGp5Mn7PRNFjf3mUzq8UeBjL3K8t311hvevnyqXAMSmxO8Gpg==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "4.15.0", - "@typescript-eslint/types": "4.15.0", - "@typescript-eslint/typescript-estree": "4.15.0", - "debug": "^4.1.1" - }, - "dependencies": { - "@nodelib/fs.stat": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz", - "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==", + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, - "@typescript-eslint/scope-manager": { - "version": "4.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.15.0.tgz", - "integrity": "sha512-CSNBZnCC2jEA/a+pR9Ljh8Y+5TY5qgbPz7ICEk9WCpSEgT6Pi7H2RIjxfrrbUXvotd6ta+i27sssKEH8Azm75g==", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.15.0", - "@typescript-eslint/visitor-keys": "4.15.0" - } + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true }, - "@typescript-eslint/types": { - "version": "4.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.15.0.tgz", - "integrity": "sha512-su4RHkJhS+iFwyqyXHcS8EGPlUVoC+XREfy5daivjLur9JP8GhvTmDipuRpcujtGC4M+GYhUOJCPDE3rC5NJrg==", + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true }, - "@typescript-eslint/typescript-estree": { - "version": "4.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.15.0.tgz", - "integrity": "sha512-jG6xTmcNbi6xzZq0SdWh7wQ9cMb2pqXaUp6bUZOMsIlu5aOlxGxgE/t6L/gPybybQGvdguajXGkZKSndZJpksA==", + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, "requires": { - "@typescript-eslint/types": "4.15.0", - "@typescript-eslint/visitor-keys": "4.15.0", - "debug": "^4.1.1", - "globby": "^11.0.1", - "is-glob": "^4.0.1", - "semver": "^7.3.2", - "tsutils": "^3.17.1" + "find-up": "^4.0.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + } } }, - "@typescript-eslint/visitor-keys": { - "version": "4.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.15.0.tgz", - "integrity": "sha512-RnDtJwOwFucWFAMjG3ghCG/ikImFJFEg20DI7mn4pHEx3vC48lIAoyjhffvfHmErRDboUPC7p9Z2il4CLb7qxA==", + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dev": true, "requires": { - "@typescript-eslint/types": "4.15.0", - "eslint-visitor-keys": "^2.0.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", "dev": true }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true }, - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", "dev": true, "requires": { - "ms": "2.1.2" + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" } }, - "eslint-visitor-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", - "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true }, - "fast-glob": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", - "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", + "serialize-javascript": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", + "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", "dev": true, "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.0", - "merge2": "^1.3.0", - "micromatch": "^4.0.2", - "picomatch": "^2.2.1" + "randombytes": "^2.1.0" } }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, "requires": { - "to-regex-range": "^5.0.1" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, - "glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", "dev": true, "requires": { - "is-glob": "^4.0.1" + "minipass": "^3.1.1" } }, - "globby": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.2.tgz", - "integrity": "sha512-2ZThXDvvV8fYFRVIxnrMQBipZQDr7MxKAmQK1vujaj9/7eF0efG7BPUKJ7jP7G5SLF37xKDXvO4S/KKLj/Z0og==", + "style-loader": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.3.0.tgz", + "integrity": "sha512-V7TCORko8rs9rIqkSrlMfkqA63DfoGBBJmK1kKGCcSi+BWb4cqz0SRsnp4l6rU5iwOEd0/2ePv68SV22VXon4Q==", "dev": true, "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", - "slash": "^3.0.0" + "loader-utils": "^2.0.0", + "schema-utils": "^2.7.0" + }, + "dependencies": { + "json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "loader-utils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", + "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + } } }, - "ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", "dev": true }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "terser": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.10.0.tgz", + "integrity": "sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==", "dev": true, "requires": { - "is-extglob": "^2.1.1" + "commander": "^2.20.0", + "source-map": "~0.7.2", + "source-map-support": "~0.5.20" + }, + "dependencies": { + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + } } }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "terser-webpack-plugin": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-4.2.3.tgz", + "integrity": "sha512-jTgXh40RnvOrLQNgIkwEKnQ8rmHjHK4u+6UBEi+W+FPmvb+uo+chJXntKe7/3lW5mNysgSWD60KyesnhW8D6MQ==", "dev": true, "requires": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" + "cacache": "^15.0.5", + "find-cache-dir": "^3.3.1", + "jest-worker": "^26.5.0", + "p-limit": "^3.0.2", + "schema-utils": "^3.0.0", + "serialize-javascript": "^5.0.1", + "source-map": "^0.6.1", + "terser": "^5.3.4", + "webpack-sources": "^1.4.3" + }, + "dependencies": { + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } } }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true + "webpack": { + "version": "4.46.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz", + "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/wasm-edit": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "acorn": "^6.4.1", + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^4.5.0", + "eslint-scope": "^4.0.3", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^2.4.0", + "loader-utils": "^1.2.3", + "memory-fs": "^0.4.1", + "micromatch": "^3.1.10", + "mkdirp": "^0.5.3", + "neo-async": "^2.6.1", + "node-libs-browser": "^2.2.1", + "schema-utils": "^1.0.0", + "tapable": "^1.1.3", + "terser-webpack-plugin": "^1.4.3", + "watchpack": "^1.7.4", + "webpack-sources": "^1.4.1" + }, + "dependencies": { + "cacache": { + "version": "12.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", + "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", + "dev": true, + "requires": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + } + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "ssri": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", + "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1" + } + }, + "terser": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", + "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + } + }, + "terser-webpack-plugin": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", + "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", + "dev": true, + "requires": { + "cacache": "^12.0.2", + "find-cache-dir": "^2.1.0", + "is-wsl": "^1.1.0", + "schema-utils": "^1.0.0", + "serialize-javascript": "^4.0.0", + "source-map": "^0.6.1", + "terser": "^4.1.2", + "webpack-sources": "^1.4.0", + "worker-farm": "^1.7.0" + } + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } + } }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", "dev": true, "requires": { - "is-number": "^7.0.0" + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" } } }, - "@typescript-eslint/scope-manager": { - "version": "4.11.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.11.1.tgz", - "integrity": "sha512-Al2P394dx+kXCl61fhrrZ1FTI7qsRDIUiVSuN6rTwss6lUn8uVO2+nnF4AvO0ug8vMsy3ShkbxLu/uWZdTtJMQ==", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.11.1", - "@typescript-eslint/visitor-keys": "4.11.1" - } - }, - "@typescript-eslint/types": { - "version": "4.11.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.11.1.tgz", - "integrity": "sha512-5kvd38wZpqGY4yP/6W3qhYX6Hz0NwUbijVsX2rxczpY6OXaMxh0+5E5uLJKVFwaBM7PJe1wnMym85NfKYIh6CA==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "4.11.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.11.1.tgz", - "integrity": "sha512-tC7MKZIMRTYxQhrVAFoJq/DlRwv1bnqA4/S2r3+HuHibqvbrPcyf858lNzU7bFmy4mLeIHFYr34ar/1KumwyRw==", + "@storybook/manager-webpack5": { + "version": "6.4.9", + "resolved": "https://registry.npmjs.org/@storybook/manager-webpack5/-/manager-webpack5-6.4.9.tgz", + "integrity": "sha512-WJfHs9nPAWx6NONzwoo4s72fqWW/HIBnw+StpRVMNJfi9YojTTFNGMHU0waSd22qT0zOV8XXrXi7XDuHissIwg==", "dev": true, "requires": { - "@typescript-eslint/types": "4.11.1", - "@typescript-eslint/visitor-keys": "4.11.1", - "debug": "^4.1.1", - "globby": "^11.0.1", - "is-glob": "^4.0.1", - "lodash": "^4.17.15", - "semver": "^7.3.2", - "tsutils": "^3.17.1" + "@babel/core": "^7.12.10", + "@babel/plugin-transform-template-literals": "^7.12.1", + "@babel/preset-react": "^7.12.10", + "@storybook/addons": "6.4.9", + "@storybook/core-client": "6.4.9", + "@storybook/core-common": "6.4.9", + "@storybook/node-logger": "6.4.9", + "@storybook/theming": "6.4.9", + "@storybook/ui": "6.4.9", + "@types/node": "^14.0.10", + "babel-loader": "^8.0.0", + "case-sensitive-paths-webpack-plugin": "^2.3.0", + "chalk": "^4.1.0", + "core-js": "^3.8.2", + "css-loader": "^5.0.1", + "express": "^4.17.1", + "file-system-cache": "^1.0.5", + "find-up": "^5.0.0", + "fs-extra": "^9.0.1", + "html-webpack-plugin": "^5.0.0", + "node-fetch": "^2.6.1", + "read-pkg-up": "^7.0.1", + "regenerator-runtime": "^0.13.7", + "resolve-from": "^5.0.0", + "style-loader": "^2.0.0", + "telejson": "^5.3.2", + "terser-webpack-plugin": "^5.0.3", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2", + "webpack": "^5.9.0", + "webpack-dev-middleware": "^4.1.0", + "webpack-virtual-modules": "^0.4.1" }, "dependencies": { - "@nodelib/fs.stat": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz", - "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==", + "@types/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", "dev": true }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "@types/json-schema": { + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", "dev": true }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "requires": { - "fill-range": "^7.0.1" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" } }, - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "clean-css": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.2.2.tgz", + "integrity": "sha512-/eR8ru5zyxKzpBLv9YZvMXgTSSQn7AdkMItMYynsFgGwTveCRVam9IUPFloE85B4vAIj05IuKmmEoV7/AQjT0w==", "dev": true, "requires": { - "ms": "2.1.2" + "source-map": "~0.6.0" } }, - "fast-glob": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz", - "integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==", + "commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true + }, + "css-loader": { + "version": "5.2.7", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.7.tgz", + "integrity": "sha512-Q7mOvpBNBG7YrVGMxRxcBJZFL75o+cH2abNASdibkj/fffYD8qWbInZrD0S9ccI6vZclF3DsHE7njGlLtaHbhg==", "dev": true, "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.0", - "merge2": "^1.3.0", - "micromatch": "^4.0.2", - "picomatch": "^2.2.1" + "icss-utils": "^5.1.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.15", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.1.0", + "schema-utils": "^3.0.0", + "semver": "^7.3.5" } }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "css-select": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.2.0.tgz", + "integrity": "sha512-6YVG6hsH9yIb/si3Th/is8Pex7qnVHO6t7q7U6TIUnkQASGbS8tnUDBftnPynLNnuUl/r2+PTd0ekiiq7R0zJw==", "dev": true, "requires": { - "to-regex-range": "^5.0.1" + "boolbase": "^1.0.0", + "css-what": "^5.1.0", + "domhandler": "^4.3.0", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" } }, - "glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "css-what": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", + "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", + "dev": true + }, + "dom-serializer": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", + "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", "dev": true, "requires": { - "is-glob": "^4.0.1" + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" } }, - "globby": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz", - "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==", + "domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", + "dev": true + }, + "domhandler": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", + "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", "dev": true, "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", - "slash": "^3.0.0" + "domelementtype": "^2.2.0" } }, - "ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", "dev": true }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "requires": { - "is-extglob": "^2.1.1" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" } }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", "dev": true }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", + "dev": true, + "requires": { + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.10.0" + } + }, + "html-webpack-plugin": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", + "integrity": "sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==", + "dev": true, + "requires": { + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.0" + } + }, + "htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", "dev": true }, - "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, "requires": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" } }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "mime-db": { + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", "dev": true }, - "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "mime-types": { + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", + "dev": true, + "requires": { + "mime-db": "1.51.0" + } + }, + "nth-check": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", + "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", + "dev": true, + "requires": { + "boolbase": "^1.0.0" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true }, - "slash": { + "postcss-modules-extract-imports": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", "dev": true }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "postcss-modules-local-by-default": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", + "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", "dev": true, "requires": { - "is-number": "^7.0.0" + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" } - } - } - }, - "@typescript-eslint/visitor-keys": { - "version": "4.11.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.11.1.tgz", - "integrity": "sha512-IrlBhD9bm4bdYcS8xpWarazkKXlE7iYb1HzRuyBP114mIaj5DJPo11Us1HgH60dTt41TCZXMaTCAW+OILIYPOg==", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.11.1", - "eslint-visitor-keys": "^2.0.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", - "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", - "dev": true - } - } - }, - "@webassemblyjs/ast": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", - "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", - "dev": true, - "requires": { - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", - "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", - "dev": true - }, - "@webassemblyjs/helper-api-error": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", - "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", - "dev": true - }, - "@webassemblyjs/helper-buffer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", - "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", - "dev": true - }, - "@webassemblyjs/helper-code-frame": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", - "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", - "dev": true, - "requires": { - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "@webassemblyjs/helper-fsm": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", - "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", - "dev": true - }, - "@webassemblyjs/helper-module-context": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", - "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", - "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", - "dev": true - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", - "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", - "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", - "dev": true, - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", - "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", - "dev": true, - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", - "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", - "dev": true - }, - "@webassemblyjs/wasm-edit": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", - "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/helper-wasm-section": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-opt": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", - "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", - "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", - "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "@webassemblyjs/wast-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", - "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/floating-point-hex-parser": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-code-frame": "1.9.0", - "@webassemblyjs/helper-fsm": "1.9.0", - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", - "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0", - "@xtuc/long": "4.2.2" + }, + "postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.4" + } + }, + "postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "requires": { + "icss-utils": "^5.0.0" + } + }, + "postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "pretty-error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", + "dev": true, + "requires": { + "lodash": "^4.17.20", + "renderkid": "^3.0.0" + } + }, + "renderkid": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", + "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", + "dev": true, + "requires": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.1" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + }, + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "style-loader": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-2.0.0.tgz", + "integrity": "sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ==", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + } + }, + "tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true + }, + "terser": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.10.0.tgz", + "integrity": "sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.7.2", + "source-map-support": "~0.5.20" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + } + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + }, + "webpack-dev-middleware": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-4.3.0.tgz", + "integrity": "sha512-PjwyVY95/bhBh6VUqt6z4THplYcsvQ8YNNBTBM873xLVmw8FLeALn0qurHbs9EmcfhzQis/eoqypSnZeuUz26w==", + "dev": true, + "requires": { + "colorette": "^1.2.2", + "mem": "^8.1.1", + "memfs": "^3.2.2", + "mime-types": "^2.1.30", + "range-parser": "^1.2.1", + "schema-utils": "^3.0.0" + } + }, + "webpack-virtual-modules": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.4.3.tgz", + "integrity": "sha512-5NUqC2JquIL2pBAAo/VfBP6KuGkHIZQXW/lNKupLPfhViwh8wNsu0BObtl09yuKZszeEUfbXz8xhrHvSG16Nqw==", + "dev": true + } } }, - "@wojtekmaj/enzyme-adapter-react-17": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/@wojtekmaj/enzyme-adapter-react-17/-/enzyme-adapter-react-17-0.6.1.tgz", - "integrity": "sha512-xgPfzLVpN0epIHeZofahwr5qwpukEDNAbrufgeDWN6vZPtfblGCC+OZG5TlfK+A6ePVy8sBkD8S2X4tO17JKjg==", + "@storybook/node-logger": { + "version": "6.4.9", + "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-6.4.9.tgz", + "integrity": "sha512-giil8dA85poH+nslKHIS9tSxp4MP4ensOec7el6GwKiqzAQXITrm3b7gw61ETj39jAQeLIcQYGHLq1oqQo4/YQ==", "dev": true, "requires": { - "@wojtekmaj/enzyme-adapter-utils": "^0.1.0", - "enzyme-shallow-equal": "^1.0.0", - "has": "^1.0.0", - "object.assign": "^4.1.0", - "object.values": "^1.1.0", - "prop-types": "^15.7.0", - "react-is": "^17.0.0", - "react-test-renderer": "^17.0.0" + "@types/npmlog": "^4.1.2", + "chalk": "^4.1.0", + "core-js": "^3.8.2", + "npmlog": "^5.0.1", + "pretty-hrtime": "^1.0.3" }, "dependencies": { - "react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "are-we-there-yet": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "dev": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "gauge": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "dev": true, + "requires": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + } + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true + }, + "npmlog": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "dev": true, + "requires": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } } } }, - "@wojtekmaj/enzyme-adapter-utils": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@wojtekmaj/enzyme-adapter-utils/-/enzyme-adapter-utils-0.1.0.tgz", - "integrity": "sha512-EYK/Vy0Y1ap0jH2UNQjOKtR/7HWkbEq8N+cwC5+yDf+Mwp5uu7j4Qg70RmWuzsA35DGGwgkop6m4pQsGwNOF2A==", + "@storybook/postinstall": { + "version": "6.4.9", + "resolved": "https://registry.npmjs.org/@storybook/postinstall/-/postinstall-6.4.9.tgz", + "integrity": "sha512-LNI5ku+Q4DI7DD3Y8liYVgGPasp8r/5gzNLSJZ1ad03OW/mASjhSsOKp2eD8Jxud2T5JDe3/yKH9u/LP6SepBQ==", "dev": true, "requires": { - "function.prototype.name": "^1.1.0", - "has": "^1.0.0", - "object.assign": "^4.1.0", - "object.fromentries": "^2.0.0", - "prop-types": "^15.7.0" - } - }, - "@wordpress/a11y": { - "version": "file:packages/a11y", - "requires": { - "@babel/runtime": "^7.13.10", - "@wordpress/dom-ready": "file:packages/dom-ready", - "@wordpress/i18n": "file:packages/i18n" - } - }, - "@wordpress/admin-manifest": { - "version": "file:packages/admin-manifest", - "requires": { - "@babel/runtime": "^7.13.10" - } - }, - "@wordpress/annotations": { - "version": "file:packages/annotations", - "requires": { - "@babel/runtime": "^7.13.10", - "@wordpress/data": "file:packages/data", - "@wordpress/hooks": "file:packages/hooks", - "@wordpress/i18n": "file:packages/i18n", - "@wordpress/rich-text": "file:packages/rich-text", - "lodash": "^4.17.21", - "rememo": "^3.0.0", - "uuid": "^8.3.0" - } - }, - "@wordpress/api-fetch": { - "version": "file:packages/api-fetch", - "requires": { - "@babel/runtime": "^7.13.10", - "@wordpress/i18n": "file:packages/i18n", - "@wordpress/url": "file:packages/url" - } - }, - "@wordpress/autop": { - "version": "file:packages/autop", - "requires": { - "@babel/runtime": "^7.13.10" + "core-js": "^3.8.2" } }, - "@wordpress/babel-plugin-import-jsx-pragma": { - "version": "file:packages/babel-plugin-import-jsx-pragma", - "dev": true - }, - "@wordpress/babel-plugin-makepot": { - "version": "file:packages/babel-plugin-makepot", + "@storybook/preview-web": { + "version": "6.4.9", + "resolved": "https://registry.npmjs.org/@storybook/preview-web/-/preview-web-6.4.9.tgz", + "integrity": "sha512-fMB/akK14oc+4FBkeVJBtZQdxikOraXQSVn6zoVR93WVDR7JVeV+oz8rxjuK3n6ZEWN87iKH946k4jLoZ95tdw==", "dev": true, "requires": { - "gettext-parser": "^1.3.1", - "lodash": "^4.17.21" + "@storybook/addons": "6.4.9", + "@storybook/channel-postmessage": "6.4.9", + "@storybook/client-logger": "6.4.9", + "@storybook/core-events": "6.4.9", + "@storybook/csf": "0.0.2--canary.87bc651.0", + "@storybook/store": "6.4.9", + "ansi-to-html": "^0.6.11", + "core-js": "^3.8.2", + "global": "^4.4.0", + "lodash": "^4.17.21", + "qs": "^6.10.0", + "regenerator-runtime": "^0.13.7", + "synchronous-promise": "^2.0.15", + "ts-dedent": "^2.0.0", + "unfetch": "^4.2.0", + "util-deprecate": "^1.0.2" + }, + "dependencies": { + "@storybook/csf": { + "version": "0.0.2--canary.87bc651.0", + "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.0.2--canary.87bc651.0.tgz", + "integrity": "sha512-ajk1Uxa+rBpFQHKrCcTmJyQBXZ5slfwHVEaKlkuFaW77it8RgbPJp/ccna3sgoi8oZ7FkkOyvv1Ve4SmwFqRqw==", + "dev": true, + "requires": { + "lodash": "^4.17.15" + } + }, + "qs": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.2.tgz", + "integrity": "sha512-mSIdjzqznWgfd4pMii7sHtaYF8rx8861hBO80SraY5GT0XQibWZWJSid0avzHGkDIZLImux2S5mXO0Hfct2QCw==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + } } }, - "@wordpress/babel-preset-default": { - "version": "file:packages/babel-preset-default", + "@storybook/react": { + "version": "6.4.9", + "resolved": "https://registry.npmjs.org/@storybook/react/-/react-6.4.9.tgz", + "integrity": "sha512-GVbCeii2dIKSD66pAdn9bY7mRoOzBE6ll+vRDW1n00FIvGfckmoIZtQHpurca7iNTAoufv8+t0L9i7IItdrUuw==", "dev": true, "requires": { - "@babel/core": "^7.13.10", - "@babel/plugin-transform-react-jsx": "^7.12.7", - "@babel/plugin-transform-runtime": "^7.13.10", - "@babel/preset-env": "^7.13.10", - "@babel/preset-typescript": "^7.13.0", - "@babel/runtime": "^7.13.10", - "@wordpress/babel-plugin-import-jsx-pragma": "file:packages/babel-plugin-import-jsx-pragma", - "@wordpress/browserslist-config": "file:packages/browserslist-config", - "@wordpress/element": "file:packages/element", - "@wordpress/warning": "file:packages/warning", - "browserslist": "^4.16.6", - "core-js": "^3.12.1" - } - }, - "@wordpress/base-styles": { - "version": "file:packages/base-styles", - "dev": true - }, - "@wordpress/blob": { - "version": "file:packages/blob", - "requires": { - "@babel/runtime": "^7.13.10" - } - }, - "@wordpress/block-directory": { - "version": "file:packages/block-directory", - "requires": { - "@babel/runtime": "^7.13.10", - "@wordpress/a11y": "file:packages/a11y", - "@wordpress/api-fetch": "file:packages/api-fetch", - "@wordpress/block-editor": "file:packages/block-editor", - "@wordpress/blocks": "file:packages/blocks", - "@wordpress/components": "file:packages/components", - "@wordpress/compose": "file:packages/compose", - "@wordpress/core-data": "file:packages/core-data", - "@wordpress/data": "file:packages/data", - "@wordpress/data-controls": "file:packages/data-controls", - "@wordpress/edit-post": "file:packages/edit-post", - "@wordpress/editor": "file:packages/editor", - "@wordpress/element": "file:packages/element", - "@wordpress/hooks": "file:packages/hooks", - "@wordpress/html-entities": "file:packages/html-entities", - "@wordpress/i18n": "file:packages/i18n", - "@wordpress/icons": "file:packages/icons", - "@wordpress/notices": "file:packages/notices", - "@wordpress/plugins": "file:packages/plugins", - "@wordpress/url": "file:packages/url", - "lodash": "^4.17.21" - } - }, - "@wordpress/block-editor": { - "version": "file:packages/block-editor", - "requires": { - "@babel/runtime": "^7.13.10", - "@wordpress/a11y": "file:packages/a11y", - "@wordpress/blob": "file:packages/blob", - "@wordpress/block-serialization-default-parser": "file:packages/block-serialization-default-parser", - "@wordpress/blocks": "file:packages/blocks", - "@wordpress/components": "file:packages/components", - "@wordpress/compose": "file:packages/compose", - "@wordpress/data": "file:packages/data", - "@wordpress/data-controls": "file:packages/data-controls", - "@wordpress/deprecated": "file:packages/deprecated", - "@wordpress/dom": "file:packages/dom", - "@wordpress/element": "file:packages/element", - "@wordpress/hooks": "file:packages/hooks", - "@wordpress/html-entities": "file:packages/html-entities", - "@wordpress/i18n": "file:packages/i18n", - "@wordpress/icons": "file:packages/icons", - "@wordpress/is-shallow-equal": "file:packages/is-shallow-equal", - "@wordpress/keyboard-shortcuts": "file:packages/keyboard-shortcuts", - "@wordpress/keycodes": "file:packages/keycodes", - "@wordpress/notices": "file:packages/notices", - "@wordpress/rich-text": "file:packages/rich-text", - "@wordpress/shortcode": "file:packages/shortcode", - "@wordpress/token-list": "file:packages/token-list", - "@wordpress/url": "file:packages/url", - "@wordpress/warning": "file:packages/warning", - "@wordpress/wordcount": "file:packages/wordcount", - "classnames": "^2.3.1", - "css-mediaquery": "^0.1.2", - "diff": "^4.0.2", - "dom-scroll-into-view": "^1.2.1", - "inherits": "^2.0.3", - "lodash": "^4.17.21", - "memize": "^1.1.0", - "react-autosize-textarea": "^7.1.0", - "react-spring": "^8.0.19", - "redux-multi": "^0.1.12", - "rememo": "^3.0.0", - "tinycolor2": "^1.4.2", - "traverse": "^0.6.6" + "@babel/preset-flow": "^7.12.1", + "@babel/preset-react": "^7.12.10", + "@pmmmwh/react-refresh-webpack-plugin": "^0.5.1", + "@storybook/addons": "6.4.9", + "@storybook/core": "6.4.9", + "@storybook/core-common": "6.4.9", + "@storybook/csf": "0.0.2--canary.87bc651.0", + "@storybook/node-logger": "6.4.9", + "@storybook/react-docgen-typescript-plugin": "1.0.2-canary.253f8c1.0", + "@storybook/semver": "^7.3.2", + "@storybook/store": "6.4.9", + "@types/webpack-env": "^1.16.0", + "babel-plugin-add-react-displayname": "^0.0.5", + "babel-plugin-named-asset-import": "^0.3.1", + "babel-plugin-react-docgen": "^4.2.1", + "core-js": "^3.8.2", + "global": "^4.4.0", + "lodash": "^4.17.21", + "prop-types": "^15.7.2", + "react-dev-utils": "^11.0.4", + "react-refresh": "^0.10.0", + "read-pkg-up": "^7.0.1", + "regenerator-runtime": "^0.13.7", + "ts-dedent": "^2.0.0", + "webpack": "4" + }, + "dependencies": { + "@storybook/csf": { + "version": "0.0.2--canary.87bc651.0", + "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.0.2--canary.87bc651.0.tgz", + "integrity": "sha512-ajk1Uxa+rBpFQHKrCcTmJyQBXZ5slfwHVEaKlkuFaW77it8RgbPJp/ccna3sgoi8oZ7FkkOyvv1Ve4SmwFqRqw==", + "dev": true, + "requires": { + "lodash": "^4.17.15" + } + }, + "@storybook/semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/@storybook/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-SWeszlsiPsMI0Ps0jVNtH64cI5c0UF3f7KgjVKJoNP30crQ6wUSddY2hsdeczZXEKVJGEn50Q60flcGsQGIcrg==", + "dev": true, + "requires": { + "core-js": "^3.6.5", + "find-up": "^4.1.0" + } + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==" + } + } + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "dev": true + }, + "terser-webpack-plugin": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", + "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", + "dev": true, + "requires": { + "cacache": "^12.0.2", + "find-cache-dir": "^2.1.0", + "is-wsl": "^1.1.0", + "schema-utils": "^1.0.0", + "serialize-javascript": "^4.0.0", + "source-map": "^0.6.1", + "terser": "^4.1.2", + "webpack-sources": "^1.4.0", + "worker-farm": "^1.7.0" + } + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" + }, + "webpack": { + "version": "4.46.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz", + "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/wasm-edit": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "acorn": "^6.4.1", + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^4.5.0", + "eslint-scope": "^4.0.3", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^2.4.0", + "loader-utils": "^1.2.3", + "memory-fs": "^0.4.1", + "micromatch": "^3.1.10", + "mkdirp": "^0.5.3", + "neo-async": "^2.6.1", + "node-libs-browser": "^2.2.1", + "schema-utils": "^1.0.0", + "tapable": "^1.1.3", + "terser-webpack-plugin": "^1.4.3", + "watchpack": "^1.7.4", + "webpack-sources": "^1.4.1" + } + }, + "webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dev": true, + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + } } }, - "@wordpress/block-library": { - "version": "file:packages/block-library", + "@storybook/react-docgen-typescript-plugin": { + "version": "1.0.2-canary.253f8c1.0", + "resolved": "https://registry.npmjs.org/@storybook/react-docgen-typescript-plugin/-/react-docgen-typescript-plugin-1.0.2-canary.253f8c1.0.tgz", + "integrity": "sha512-mmoRG/rNzAiTbh+vGP8d57dfcR2aP+5/Ll03KKFyfy5FqWFm/Gh7u27ikx1I3LmVMI8n6jh5SdWMkMKon7/tDw==", + "dev": true, "requires": { - "@babel/runtime": "^7.13.10", - "@wordpress/a11y": "file:packages/a11y", - "@wordpress/api-fetch": "file:packages/api-fetch", - "@wordpress/autop": "file:packages/autop", - "@wordpress/blob": "file:packages/blob", - "@wordpress/block-editor": "file:packages/block-editor", - "@wordpress/blocks": "file:packages/blocks", - "@wordpress/components": "file:packages/components", - "@wordpress/compose": "file:packages/compose", - "@wordpress/core-data": "file:packages/core-data", - "@wordpress/data": "file:packages/data", - "@wordpress/date": "file:packages/date", - "@wordpress/deprecated": "file:packages/deprecated", - "@wordpress/dom": "file:packages/dom", - "@wordpress/element": "file:packages/element", - "@wordpress/escape-html": "file:packages/escape-html", - "@wordpress/hooks": "file:packages/hooks", - "@wordpress/html-entities": "file:packages/html-entities", - "@wordpress/i18n": "file:packages/i18n", - "@wordpress/icons": "file:packages/icons", - "@wordpress/is-shallow-equal": "file:packages/is-shallow-equal", - "@wordpress/keycodes": "file:packages/keycodes", - "@wordpress/notices": "file:packages/notices", - "@wordpress/primitives": "file:packages/primitives", - "@wordpress/reusable-blocks": "file:packages/reusable-blocks", - "@wordpress/rich-text": "file:packages/rich-text", - "@wordpress/server-side-render": "file:packages/server-side-render", - "@wordpress/url": "file:packages/url", - "@wordpress/viewport": "file:packages/viewport", - "classnames": "^2.3.1", - "fast-average-color": "4.3.0", - "lodash": "^4.17.21", - "memize": "^1.1.0", - "micromodal": "^0.4.6", - "moment": "^2.22.1", - "react-easy-crop": "^3.0.0", - "tinycolor2": "^1.4.2" + "debug": "^4.1.1", + "endent": "^2.0.1", + "find-cache-dir": "^3.3.1", + "flat-cache": "^3.0.4", + "micromatch": "^4.0.2", + "react-docgen-typescript": "^2.0.0", + "tslib": "^2.0.0" + }, + "dependencies": { + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + } + }, + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "dev": true + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + } } }, - "@wordpress/block-serialization-default-parser": { - "version": "file:packages/block-serialization-default-parser", + "@storybook/router": { + "version": "6.4.9", + "resolved": "https://registry.npmjs.org/@storybook/router/-/router-6.4.9.tgz", + "integrity": "sha512-GT2KtVHo/mBjxDBFB5ZtVJVf8vC+3p5kRlQC4jao68caVp7H24ikPOkcY54VnQwwe4A1aXpGbJXUyTisEPFlhQ==", + "dev": true, "requires": { - "@babel/runtime": "^7.13.10" + "@storybook/client-logger": "6.4.9", + "core-js": "^3.8.2", + "fast-deep-equal": "^3.1.3", + "global": "^4.4.0", + "history": "5.0.0", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "qs": "^6.10.0", + "react-router": "^6.0.0", + "react-router-dom": "^6.0.0", + "ts-dedent": "^2.0.0" + }, + "dependencies": { + "history": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/history/-/history-5.0.0.tgz", + "integrity": "sha512-3NyRMKIiFSJmIPdq7FxkNMJkQ7ZEtVblOQ38VtKaA0zZMW1Eo6Q6W8oDKEflr1kNNTItSnk4JMCO1deeSgbLLg==", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.6" + } + }, + "qs": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.2.tgz", + "integrity": "sha512-mSIdjzqznWgfd4pMii7sHtaYF8rx8861hBO80SraY5GT0XQibWZWJSid0avzHGkDIZLImux2S5mXO0Hfct2QCw==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + } } }, - "@wordpress/block-serialization-spec-parser": { - "version": "file:packages/block-serialization-spec-parser", + "@storybook/source-loader": { + "version": "6.4.9", + "resolved": "https://registry.npmjs.org/@storybook/source-loader/-/source-loader-6.4.9.tgz", + "integrity": "sha512-J/Jpcc15hnWa2DB/EZ4gVJvdsY3b3CDIGW/NahuNXk36neS+g4lF3qqVNAEqQ1pPZ0O8gMgazyZPGm0MHwUWlw==", + "dev": true, "requires": { - "pegjs": "^0.10.0", - "phpegjs": "^1.0.0-beta7" + "@storybook/addons": "6.4.9", + "@storybook/client-logger": "6.4.9", + "@storybook/csf": "0.0.2--canary.87bc651.0", + "core-js": "^3.8.2", + "estraverse": "^5.2.0", + "global": "^4.4.0", + "loader-utils": "^2.0.0", + "lodash": "^4.17.21", + "prettier": "^2.2.1", + "regenerator-runtime": "^0.13.7" + }, + "dependencies": { + "@storybook/csf": { + "version": "0.0.2--canary.87bc651.0", + "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.0.2--canary.87bc651.0.tgz", + "integrity": "sha512-ajk1Uxa+rBpFQHKrCcTmJyQBXZ5slfwHVEaKlkuFaW77it8RgbPJp/ccna3sgoi8oZ7FkkOyvv1Ve4SmwFqRqw==", + "dev": true, + "requires": { + "lodash": "^4.17.15" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "prettier": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", + "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", + "dev": true + } } }, - "@wordpress/blocks": { - "version": "file:packages/blocks", + "@storybook/store": { + "version": "6.4.9", + "resolved": "https://registry.npmjs.org/@storybook/store/-/store-6.4.9.tgz", + "integrity": "sha512-H30KfiM2XyGMJcLaOepCEUsU7S3C/f7t46s6Nhw0lc5w/6HTQc2jGV3GgG3lUAUAzEQoxmmu61w3N2a6eyRzmg==", + "dev": true, "requires": { - "@babel/runtime": "^7.13.10", - "@wordpress/autop": "file:packages/autop", - "@wordpress/blob": "file:packages/blob", - "@wordpress/block-serialization-default-parser": "file:packages/block-serialization-default-parser", - "@wordpress/compose": "file:packages/compose", - "@wordpress/data": "file:packages/data", - "@wordpress/deprecated": "file:packages/deprecated", - "@wordpress/dom": "file:packages/dom", - "@wordpress/element": "file:packages/element", - "@wordpress/hooks": "file:packages/hooks", - "@wordpress/html-entities": "file:packages/html-entities", - "@wordpress/i18n": "file:packages/i18n", - "@wordpress/icons": "file:packages/icons", - "@wordpress/is-shallow-equal": "file:packages/is-shallow-equal", - "@wordpress/shortcode": "file:packages/shortcode", - "hpq": "^1.3.0", + "@storybook/addons": "6.4.9", + "@storybook/client-logger": "6.4.9", + "@storybook/core-events": "6.4.9", + "@storybook/csf": "0.0.2--canary.87bc651.0", + "core-js": "^3.8.2", + "fast-deep-equal": "^3.1.3", + "global": "^4.4.0", "lodash": "^4.17.21", - "rememo": "^3.0.0", - "showdown": "^1.9.1", - "simple-html-tokenizer": "^0.5.7", - "tinycolor2": "^1.4.2", - "uuid": "^8.3.0" + "memoizerific": "^1.11.3", + "regenerator-runtime": "^0.13.7", + "slash": "^3.0.0", + "stable": "^0.1.8", + "synchronous-promise": "^2.0.15", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + }, + "dependencies": { + "@storybook/csf": { + "version": "0.0.2--canary.87bc651.0", + "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.0.2--canary.87bc651.0.tgz", + "integrity": "sha512-ajk1Uxa+rBpFQHKrCcTmJyQBXZ5slfwHVEaKlkuFaW77it8RgbPJp/ccna3sgoi8oZ7FkkOyvv1Ve4SmwFqRqw==", + "dev": true, + "requires": { + "lodash": "^4.17.15" + } + } } }, - "@wordpress/browserslist-config": { - "version": "file:packages/browserslist-config", - "dev": true - }, - "@wordpress/components": { - "version": "file:packages/components", + "@storybook/theming": { + "version": "6.4.9", + "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-6.4.9.tgz", + "integrity": "sha512-Do6GH6nKjxfnBg6djcIYAjss5FW9SRKASKxLYxX2RyWJBpz0m/8GfcGcRyORy0yFTk6jByA3Hs+WFH3GnEbWkw==", + "dev": true, "requires": { - "@babel/runtime": "^7.13.10", - "@emotion/cache": "^11.1.3", - "@emotion/css": "^11.1.3", - "@emotion/react": "^11.1.5", - "@emotion/styled": "^11.3.0", - "@emotion/utils": "1.0.0", - "@wordpress/a11y": "file:packages/a11y", - "@wordpress/compose": "file:packages/compose", - "@wordpress/date": "file:packages/date", - "@wordpress/deprecated": "file:packages/deprecated", - "@wordpress/dom": "file:packages/dom", - "@wordpress/element": "file:packages/element", - "@wordpress/hooks": "file:packages/hooks", - "@wordpress/i18n": "file:packages/i18n", - "@wordpress/icons": "file:packages/icons", - "@wordpress/is-shallow-equal": "file:packages/is-shallow-equal", - "@wordpress/keycodes": "file:packages/keycodes", - "@wordpress/primitives": "file:packages/primitives", - "@wordpress/rich-text": "file:packages/rich-text", - "@wordpress/warning": "file:packages/warning", - "classnames": "^2.3.1", - "dom-scroll-into-view": "^1.2.1", - "downshift": "^6.0.15", - "gradient-parser": "^0.1.5", - "highlight-words-core": "^1.2.2", - "lodash": "^4.17.21", - "memize": "^1.1.0", - "moment": "^2.22.1", - "re-resizable": "^6.4.0", - "react-dates": "^17.1.1", - "react-resize-aware": "^3.1.0", - "react-spring": "^8.0.20", - "react-use-gesture": "^9.0.0", - "reakit": "^1.3.8", - "rememo": "^3.0.0", - "tinycolor2": "^1.4.2", - "uuid": "^8.3.0" + "@emotion/core": "^10.1.1", + "@emotion/is-prop-valid": "^0.8.6", + "@emotion/styled": "^10.0.27", + "@storybook/client-logger": "6.4.9", + "core-js": "^3.8.2", + "deep-object-diff": "^1.1.0", + "emotion-theming": "^10.0.27", + "global": "^4.4.0", + "memoizerific": "^1.11.3", + "polished": "^4.0.5", + "resolve-from": "^5.0.0", + "ts-dedent": "^2.0.0" + }, + "dependencies": { + "@emotion/serialize": { + "version": "0.11.16", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-0.11.16.tgz", + "integrity": "sha512-G3J4o8by0VRrO+PFeSc3js2myYNOXVJ3Ya+RGVxnshRYgsvErfAOglKAiy1Eo1vhzxqtUvjCyS5gtewzkmvSSg==", + "dev": true, + "requires": { + "@emotion/hash": "0.8.0", + "@emotion/memoize": "0.7.4", + "@emotion/unitless": "0.7.5", + "@emotion/utils": "0.11.3", + "csstype": "^2.5.7" + } + }, + "@emotion/styled": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-10.3.0.tgz", + "integrity": "sha512-GgcUpXBBEU5ido+/p/mCT2/Xx+Oqmp9JzQRuC+a4lYM4i4LBBn/dWvc0rQ19N9ObA8/T4NWMrPNe79kMBDJqoQ==", + "dev": true, + "requires": { + "@emotion/styled-base": "^10.3.0", + "babel-plugin-emotion": "^10.0.27" + } + }, + "@emotion/styled-base": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@emotion/styled-base/-/styled-base-10.3.0.tgz", + "integrity": "sha512-PBRqsVKR7QRNkmfH78hTSSwHWcwDpecH9W6heujWAcyp2wdz/64PP73s7fWS1dIPm8/Exc8JAzYS8dEWXjv60w==", + "dev": true, + "requires": { + "@babel/runtime": "^7.5.5", + "@emotion/is-prop-valid": "0.8.8", + "@emotion/serialize": "^0.11.15", + "@emotion/utils": "0.11.3" + } + }, + "@emotion/utils": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-0.11.3.tgz", + "integrity": "sha512-0o4l6pZC+hI88+bzuaX/6BgOvQVhbt2PfmxauVaYOGgbsAw14wdKyvMCZXnsnsHys94iadcF+RG/wZyx6+ZZBw==", + "dev": true + }, + "csstype": { + "version": "2.6.19", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.19.tgz", + "integrity": "sha512-ZVxXaNy28/k3kJg0Fou5MiYpp88j7H9hLZp8PDC3jV0WFjfH5E9xHb56L0W59cPbKbcHXeP4qyT8PrHp8t6LcQ==", + "dev": true + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + } } }, - "@wordpress/compose": { - "version": "file:packages/compose", + "@storybook/ui": { + "version": "6.4.9", + "resolved": "https://registry.npmjs.org/@storybook/ui/-/ui-6.4.9.tgz", + "integrity": "sha512-lJbsaMTH4SyhqUTmt+msSYI6fKSSfOnrzZVu6bQ73+MfRyGKh1ki2Nyhh+w8BiGEIOz02WlEpZC0y11FfgEgXw==", + "dev": true, "requires": { - "@babel/runtime": "^7.13.10", - "@types/lodash": "4.14.149", - "@types/mousetrap": "^1.6.8", - "@wordpress/deprecated": "file:packages/deprecated", - "@wordpress/dom": "file:packages/dom", - "@wordpress/element": "file:packages/element", - "@wordpress/is-shallow-equal": "file:packages/is-shallow-equal", - "@wordpress/keycodes": "file:packages/keycodes", - "@wordpress/priority-queue": "file:packages/priority-queue", - "clipboard": "^2.0.1", + "@emotion/core": "^10.1.1", + "@storybook/addons": "6.4.9", + "@storybook/api": "6.4.9", + "@storybook/channels": "6.4.9", + "@storybook/client-logger": "6.4.9", + "@storybook/components": "6.4.9", + "@storybook/core-events": "6.4.9", + "@storybook/router": "6.4.9", + "@storybook/semver": "^7.3.2", + "@storybook/theming": "6.4.9", + "copy-to-clipboard": "^3.3.1", + "core-js": "^3.8.2", + "core-js-pure": "^3.8.2", + "downshift": "^6.0.15", + "emotion-theming": "^10.0.27", + "fuse.js": "^3.6.1", + "global": "^4.4.0", "lodash": "^4.17.21", - "mousetrap": "^1.6.5", - "react-resize-aware": "^3.1.0", - "use-memo-one": "^1.1.1" + "markdown-to-jsx": "^7.1.3", + "memoizerific": "^1.11.3", + "polished": "^4.0.5", + "qs": "^6.10.0", + "react-draggable": "^4.4.3", + "react-helmet-async": "^1.0.7", + "react-sizeme": "^3.0.1", + "regenerator-runtime": "^0.13.7", + "resolve-from": "^5.0.0", + "store2": "^2.12.0" + }, + "dependencies": { + "@storybook/semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/@storybook/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-SWeszlsiPsMI0Ps0jVNtH64cI5c0UF3f7KgjVKJoNP30crQ6wUSddY2hsdeczZXEKVJGEn50Q60flcGsQGIcrg==", + "dev": true, + "requires": { + "core-js": "^3.6.5", + "find-up": "^4.1.0" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "qs": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.2.tgz", + "integrity": "sha512-mSIdjzqznWgfd4pMii7sHtaYF8rx8861hBO80SraY5GT0XQibWZWJSid0avzHGkDIZLImux2S5mXO0Hfct2QCw==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + } } }, - "@wordpress/core-data": { - "version": "file:packages/core-data", - "requires": { - "@babel/runtime": "^7.13.10", - "@wordpress/api-fetch": "file:packages/api-fetch", - "@wordpress/blocks": "file:packages/blocks", - "@wordpress/data": "file:packages/data", - "@wordpress/data-controls": "file:packages/data-controls", - "@wordpress/deprecated": "file:packages/deprecated", - "@wordpress/element": "file:packages/element", - "@wordpress/html-entities": "file:packages/html-entities", - "@wordpress/i18n": "file:packages/i18n", - "@wordpress/is-shallow-equal": "file:packages/is-shallow-equal", - "@wordpress/url": "file:packages/url", - "equivalent-key-map": "^0.2.2", - "lodash": "^4.17.21", - "rememo": "^3.0.0", - "uuid": "^8.3.0" - } + "@svgr/babel-plugin-add-jsx-attribute": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.0.0.tgz", + "integrity": "sha512-MdPdhdWLtQsjd29Wa4pABdhWbaRMACdM1h31BY+c6FghTZqNGT7pEYdBoaGeKtdTOBC/XNFQaKVj+r/Ei2ryWA==", + "dev": true }, - "@wordpress/create-block": { - "version": "file:packages/create-block", - "dev": true, - "requires": { - "@wordpress/lazy-import": "file:packages/lazy-import", - "chalk": "^4.0.0", - "check-node-version": "^4.1.0", - "commander": "^4.1.0", - "execa": "^4.0.2", - "fast-glob": "^2.2.7", - "inquirer": "^7.1.0", - "lodash": "^4.17.21", - "make-dir": "^3.0.0", - "mustache": "^4.0.0", - "npm-package-arg": "^8.0.1", - "rimraf": "^3.0.2", - "write-pkg": "^4.0.0" - } + "@svgr/babel-plugin-remove-jsx-attribute": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-6.0.0.tgz", + "integrity": "sha512-aVdtfx9jlaaxc3unA6l+M9YRnKIZjOhQPthLKqmTXC8UVkBLDRGwPKo+r8n3VZN8B34+yVajzPTZ+ptTSuZZCw==", + "dev": true }, - "@wordpress/create-block-tutorial-template": { - "version": "file:packages/create-block-tutorial-template", + "@svgr/babel-plugin-remove-jsx-empty-expression": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-6.0.0.tgz", + "integrity": "sha512-Ccj42ApsePD451AZJJf1QzTD1B/BOU392URJTeXFxSK709i0KUsGtbwyiqsKu7vsYxpTM0IA5clAKDyf9RCZyA==", "dev": true }, - "@wordpress/custom-templated-path-webpack-plugin": { - "version": "file:packages/custom-templated-path-webpack-plugin", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } + "@svgr/babel-plugin-replace-jsx-attribute-value": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.0.0.tgz", + "integrity": "sha512-88V26WGyt1Sfd1emBYmBJRWMmgarrExpKNVmI9vVozha4kqs6FzQJ/Kp5+EYli1apgX44518/0+t9+NU36lThQ==", + "dev": true }, - "@wordpress/customize-widgets": { - "version": "file:packages/customize-widgets", - "requires": { - "@babel/runtime": "^7.11.2", - "@wordpress/a11y": "file:packages/a11y", - "@wordpress/block-editor": "file:packages/block-editor", - "@wordpress/block-library": "file:packages/block-library", - "@wordpress/blocks": "file:packages/blocks", - "@wordpress/components": "file:packages/components", - "@wordpress/compose": "file:packages/compose", - "@wordpress/core-data": "file:packages/core-data", - "@wordpress/data": "file:packages/data", - "@wordpress/dom": "file:packages/dom", - "@wordpress/element": "file:packages/element", - "@wordpress/hooks": "file:packages/hooks", - "@wordpress/i18n": "file:packages/i18n", - "@wordpress/icons": "file:packages/icons", - "@wordpress/is-shallow-equal": "file:packages/is-shallow-equal", - "@wordpress/keyboard-shortcuts": "file:packages/keyboard-shortcuts", - "@wordpress/keycodes": "file:packages/keycodes", - "@wordpress/media-utils": "file:packages/media-utils", - "@wordpress/widgets": "file:packages/widgets", - "classnames": "^2.3.1", - "lodash": "^4.17.21" - } + "@svgr/babel-plugin-svg-dynamic-title": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.0.0.tgz", + "integrity": "sha512-F7YXNLfGze+xv0KMQxrl2vkNbI9kzT9oDK55/kUuymh1ACyXkMV+VZWX1zEhSTfEKh7VkHVZGmVtHg8eTZ6PRg==", + "dev": true }, - "@wordpress/data": { - "version": "file:packages/data", - "requires": { - "@babel/runtime": "^7.13.10", - "@wordpress/compose": "file:packages/compose", - "@wordpress/deprecated": "file:packages/deprecated", - "@wordpress/element": "file:packages/element", - "@wordpress/is-shallow-equal": "file:packages/is-shallow-equal", - "@wordpress/priority-queue": "file:packages/priority-queue", - "@wordpress/redux-routine": "file:packages/redux-routine", - "equivalent-key-map": "^0.2.2", - "is-promise": "^4.0.0", - "lodash": "^4.17.21", - "memize": "^1.1.0", - "turbo-combine-reducers": "^1.0.2", - "use-memo-one": "^1.1.1" - } + "@svgr/babel-plugin-svg-em-dimensions": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.0.0.tgz", + "integrity": "sha512-+rghFXxdIqJNLQK08kwPBD3Z22/0b2tEZ9lKiL/yTfuyj1wW8HUXu4bo/XkogATIYuXSghVQOOCwURXzHGKyZA==", + "dev": true }, - "@wordpress/data-controls": { - "version": "file:packages/data-controls", - "requires": { - "@babel/runtime": "^7.13.10", - "@wordpress/api-fetch": "file:packages/api-fetch", - "@wordpress/data": "file:packages/data", - "@wordpress/deprecated": "file:packages/deprecated" - } + "@svgr/babel-plugin-transform-react-native-svg": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.0.0.tgz", + "integrity": "sha512-VaphyHZ+xIKv5v0K0HCzyfAaLhPGJXSk2HkpYfXIOKb7DjLBv0soHDxNv6X0vr2titsxE7klb++u7iOf7TSrFQ==", + "dev": true }, - "@wordpress/date": { - "version": "file:packages/date", + "@svgr/babel-plugin-transform-svg-component": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.2.0.tgz", + "integrity": "sha512-bhYIpsORb++wpsp91fymbFkf09Z/YEKR0DnFjxvN+8JHeCUD2unnh18jIMKnDJTWtvpTaGYPXELVe4OOzFI0xg==", + "dev": true + }, + "@svgr/babel-preset": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-6.2.0.tgz", + "integrity": "sha512-4WQNY0J71JIaL03DRn0vLiz87JXx0b9dYm2aA8XHlQJQoixMl4r/soYHm8dsaJZ3jWtkCiOYy48dp9izvXhDkQ==", + "dev": true, "requires": { - "@babel/runtime": "^7.13.10", - "moment": "^2.22.1", - "moment-timezone": "^0.5.31" + "@svgr/babel-plugin-add-jsx-attribute": "^6.0.0", + "@svgr/babel-plugin-remove-jsx-attribute": "^6.0.0", + "@svgr/babel-plugin-remove-jsx-empty-expression": "^6.0.0", + "@svgr/babel-plugin-replace-jsx-attribute-value": "^6.0.0", + "@svgr/babel-plugin-svg-dynamic-title": "^6.0.0", + "@svgr/babel-plugin-svg-em-dimensions": "^6.0.0", + "@svgr/babel-plugin-transform-react-native-svg": "^6.0.0", + "@svgr/babel-plugin-transform-svg-component": "^6.2.0" } }, - "@wordpress/dependency-extraction-webpack-plugin": { - "version": "file:packages/dependency-extraction-webpack-plugin", + "@svgr/core": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-6.2.1.tgz", + "integrity": "sha512-NWufjGI2WUyrg46mKuySfviEJ6IxHUOm/8a3Ph38VCWSp+83HBraCQrpEM3F3dB6LBs5x8OElS8h3C0oOJaJAA==", "dev": true, "requires": { - "json2php": "^0.0.4", - "webpack-sources": "^2.2.0" + "@svgr/plugin-jsx": "^6.2.1", + "camelcase": "^6.2.0", + "cosmiconfig": "^7.0.1" + }, + "dependencies": { + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + }, + "cosmiconfig": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", + "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", + "dev": true, + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + } + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true + } } }, - "@wordpress/deprecated": { - "version": "file:packages/deprecated", + "@svgr/hast-util-to-babel-ast": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.2.1.tgz", + "integrity": "sha512-pt7MMkQFDlWJVy9ULJ1h+hZBDGFfSCwlBNW1HkLnVi7jUhyEXUaGYWi1x6bM2IXuAR9l265khBT4Av4lPmaNLQ==", + "dev": true, "requires": { - "@babel/runtime": "^7.13.10", - "@wordpress/hooks": "file:packages/hooks" + "@babel/types": "^7.15.6", + "entities": "^3.0.1" + }, + "dependencies": { + "entities": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", + "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", + "dev": true + } } }, - "@wordpress/docgen": { - "version": "file:packages/docgen", + "@svgr/plugin-jsx": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-6.2.1.tgz", + "integrity": "sha512-u+MpjTsLaKo6r3pHeeSVsh9hmGRag2L7VzApWIaS8imNguqoUwDq/u6U/NDmYs/KAsrmtBjOEaAAPbwNGXXp1g==", "dev": true, "requires": { - "@babel/core": "^7.13.10", - "comment-parser": "^1.1.1", - "lodash": "^4.17.21", - "mdast-util-inject": "1.1.0", - "optionator": "0.8.2", - "remark": "10.0.1", - "remark-parse": "6.0.3", - "unified": "7.1.0" + "@babel/core": "^7.15.5", + "@svgr/babel-preset": "^6.2.0", + "@svgr/hast-util-to-babel-ast": "^6.2.1", + "svg-parser": "^2.0.2" } }, - "@wordpress/dom": { - "version": "file:packages/dom", + "@svgr/plugin-svgo": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-6.2.0.tgz", + "integrity": "sha512-oDdMQONKOJEbuKwuy4Np6VdV6qoaLLvoY86hjvQEgU82Vx1MSWRyYms6Sl0f+NtqxLI/rDVufATbP/ev996k3Q==", + "dev": true, "requires": { - "@babel/runtime": "^7.13.10", - "lodash": "^4.17.21" + "cosmiconfig": "^7.0.1", + "deepmerge": "^4.2.2", + "svgo": "^2.5.0" + }, + "dependencies": { + "@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "dev": true + }, + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true + }, + "cosmiconfig": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", + "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", + "dev": true, + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + } + }, + "css-select": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.2.1.tgz", + "integrity": "sha512-/aUslKhzkTNCQUB2qTX84lVmfia9NyjP3WpDGtj/WxhwBzWBYUV3DgUpurHTme8UTPcPlAD1DJ+b0nN/t50zDQ==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^5.1.0", + "domhandler": "^4.3.0", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + } + }, + "css-what": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", + "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", + "dev": true + }, + "dom-serializer": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", + "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + } + }, + "domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", + "dev": true + }, + "domhandler": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", + "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", + "dev": true, + "requires": { + "domelementtype": "^2.2.0" + } + }, + "domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "nth-check": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", + "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", + "dev": true, + "requires": { + "boolbase": "^1.0.0" + } + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "dev": true, + "requires": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + } + }, + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true + } } }, - "@wordpress/dom-ready": { - "version": "file:packages/dom-ready", + "@svgr/webpack": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-6.2.1.tgz", + "integrity": "sha512-h09ngMNd13hnePwgXa+Y5CgOjzlCvfWLHg+MBnydEedAnuLRzUHUJmGS3o2OsrhxTOOqEsPOFt5v/f6C5Qulcw==", + "dev": true, "requires": { - "@babel/runtime": "^7.13.10" + "@babel/core": "^7.15.5", + "@babel/plugin-transform-react-constant-elements": "^7.14.5", + "@babel/preset-env": "^7.15.6", + "@babel/preset-react": "^7.14.5", + "@babel/preset-typescript": "^7.15.0", + "@svgr/core": "^6.2.1", + "@svgr/plugin-jsx": "^6.2.1", + "@svgr/plugin-svgo": "^6.2.0" } }, - "@wordpress/e2e-test-utils": { - "version": "file:packages/e2e-test-utils", + "@szmarczak/http-timer": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.5.tgz", + "integrity": "sha512-PyRA9sm1Yayuj5OIoJ1hGt2YISX45w9WcFbh6ddT0Z/0yaFxOtGLInr4jUfU1EAFVs0Yfyfev4RNwBlUaHdlDQ==", "dev": true, "requires": { - "@babel/runtime": "^7.13.10", - "@wordpress/keycodes": "file:packages/keycodes", - "@wordpress/url": "file:packages/url", - "lodash": "^4.17.21", - "node-fetch": "^2.6.0" + "defer-to-connect": "^2.0.0" } }, - "@wordpress/e2e-tests": { - "version": "file:packages/e2e-tests", - "dev": true, + "@tannin/compile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@tannin/compile/-/compile-1.1.0.tgz", + "integrity": "sha512-n8m9eNDfoNZoxdvWiTfW/hSPhehzLJ3zW7f8E7oT6mCROoMNWCB4TYtv041+2FMAxweiE0j7i1jubQU4MEC/Gg==", "requires": { - "@wordpress/e2e-test-utils": "file:packages/e2e-test-utils", - "@wordpress/jest-console": "file:packages/jest-console", - "@wordpress/jest-puppeteer-axe": "file:packages/jest-puppeteer-axe", - "@wordpress/scripts": "file:packages/scripts", - "@wordpress/url": "file:packages/url", - "chalk": "^4.0.0", - "expect-puppeteer": "^4.4.0", - "lodash": "^4.17.21", - "puppeteer-testing-library": "^0.5.0", - "uuid": "^8.3.0" + "@tannin/evaluate": "^1.2.0", + "@tannin/postfix": "^1.1.0" } }, - "@wordpress/edit-navigation": { - "version": "file:packages/edit-navigation", - "requires": { - "@babel/runtime": "^7.13.10", - "@wordpress/api-fetch": "file:packages/api-fetch", - "@wordpress/block-editor": "file:packages/block-editor", - "@wordpress/block-library": "file:packages/block-library", - "@wordpress/blocks": "file:packages/blocks", - "@wordpress/components": "file:packages/components", - "@wordpress/compose": "file:packages/compose", - "@wordpress/core-data": "file:packages/core-data", - "@wordpress/data": "file:packages/data", - "@wordpress/data-controls": "file:packages/data-controls", - "@wordpress/dom-ready": "file:packages/dom-ready", - "@wordpress/element": "file:packages/element", - "@wordpress/hooks": "file:packages/hooks", - "@wordpress/html-entities": "file:packages/html-entities", - "@wordpress/i18n": "file:packages/i18n", - "@wordpress/icons": "file:packages/icons", - "@wordpress/interface": "file:packages/interface", - "@wordpress/keyboard-shortcuts": "file:packages/keyboard-shortcuts", - "@wordpress/media-utils": "file:packages/media-utils", - "@wordpress/notices": "file:packages/notices", - "@wordpress/url": "file:packages/url", - "classnames": "^2.3.1", - "lodash": "^4.17.21", - "rememo": "^3.0.0", - "uuid": "^8.3.0" - } + "@tannin/evaluate": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@tannin/evaluate/-/evaluate-1.2.0.tgz", + "integrity": "sha512-3ioXvNowbO/wSrxsDG5DKIMxC81P0QrQTYai8zFNY+umuoHWRPbQ/TuuDEOju9E+jQDXmj6yI5GyejNuh8I+eg==" }, - "@wordpress/edit-post": { - "version": "file:packages/edit-post", + "@tannin/plural-forms": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@tannin/plural-forms/-/plural-forms-1.1.0.tgz", + "integrity": "sha512-xl9R2mDZO/qiHam1AgMnAES6IKIg7OBhcXqy6eDsRCdXuxAFPcjrej9HMjyCLE0DJ/8cHf0i5OQTstuBRhpbHw==", "requires": { - "@babel/runtime": "^7.13.10", - "@wordpress/a11y": "file:packages/a11y", - "@wordpress/api-fetch": "file:packages/api-fetch", - "@wordpress/block-editor": "file:packages/block-editor", - "@wordpress/block-library": "file:packages/block-library", - "@wordpress/blocks": "file:packages/blocks", - "@wordpress/components": "file:packages/components", - "@wordpress/compose": "file:packages/compose", - "@wordpress/core-data": "file:packages/core-data", - "@wordpress/data": "file:packages/data", - "@wordpress/data-controls": "file:packages/data-controls", - "@wordpress/editor": "file:packages/editor", - "@wordpress/element": "file:packages/element", - "@wordpress/hooks": "file:packages/hooks", - "@wordpress/i18n": "file:packages/i18n", - "@wordpress/icons": "file:packages/icons", - "@wordpress/interface": "file:packages/interface", - "@wordpress/keyboard-shortcuts": "file:packages/keyboard-shortcuts", - "@wordpress/keycodes": "file:packages/keycodes", - "@wordpress/media-utils": "file:packages/media-utils", - "@wordpress/notices": "file:packages/notices", - "@wordpress/plugins": "file:packages/plugins", - "@wordpress/primitives": "file:packages/primitives", - "@wordpress/url": "file:packages/url", - "@wordpress/viewport": "file:packages/viewport", - "@wordpress/warning": "file:packages/warning", - "classnames": "^2.3.1", - "framer-motion": "^4.1.3", - "lodash": "^4.17.21", - "memize": "^1.1.0", - "rememo": "^3.0.0", - "uuid": "8.3.0" + "@tannin/compile": "^1.1.0" } }, - "@wordpress/edit-site": { - "version": "file:packages/edit-site", - "requires": { - "@babel/runtime": "^7.13.10", - "@wordpress/a11y": "file:packages/a11y", - "@wordpress/api-fetch": "file:packages/api-fetch", - "@wordpress/block-editor": "file:packages/block-editor", - "@wordpress/block-library": "file:packages/block-library", - "@wordpress/blocks": "file:packages/blocks", - "@wordpress/components": "file:packages/components", - "@wordpress/compose": "file:packages/compose", - "@wordpress/core-data": "file:packages/core-data", - "@wordpress/data": "file:packages/data", - "@wordpress/data-controls": "file:packages/data-controls", - "@wordpress/editor": "file:packages/editor", - "@wordpress/element": "file:packages/element", - "@wordpress/hooks": "file:packages/hooks", - "@wordpress/html-entities": "file:packages/html-entities", - "@wordpress/i18n": "file:packages/i18n", - "@wordpress/icons": "file:packages/icons", - "@wordpress/interface": "file:packages/interface", - "@wordpress/keyboard-shortcuts": "file:packages/keyboard-shortcuts", - "@wordpress/keycodes": "file:packages/keycodes", - "@wordpress/media-utils": "file:packages/media-utils", - "@wordpress/notices": "file:packages/notices", - "@wordpress/plugins": "file:packages/plugins", - "@wordpress/primitives": "file:packages/primitives", - "@wordpress/url": "file:packages/url", - "classnames": "^2.3.1", - "downloadjs": "^1.4.7", - "file-saver": "^2.0.2", - "jszip": "^3.2.2", - "lodash": "^4.17.21", - "rememo": "^3.0.0" - } + "@tannin/postfix": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@tannin/postfix/-/postfix-1.1.0.tgz", + "integrity": "sha512-oocsqY7g0cR+Gur5jRQLSrX2OtpMLMse1I10JQBm8CdGMrDkh1Mg2gjsiquMHRtBs4Qwu5wgEp5GgIYHk4SNPw==" }, - "@wordpress/edit-widgets": { - "version": "file:packages/edit-widgets", + "@testing-library/dom": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-7.29.0.tgz", + "integrity": "sha512-0hhuJSmw/zLc6ewR9cVm84TehuTd7tbqBX9pRNSp8znJ9gTmSgesdbiGZtt8R6dL+2rgaPFp9Yjr7IU1HWm49w==", + "dev": true, "requires": { - "@babel/runtime": "^7.13.10", - "@wordpress/a11y": "file:packages/a11y", - "@wordpress/api-fetch": "file:packages/api-fetch", - "@wordpress/block-editor": "file:packages/block-editor", - "@wordpress/block-library": "file:packages/block-library", - "@wordpress/blocks": "file:packages/blocks", - "@wordpress/components": "file:packages/components", - "@wordpress/compose": "file:packages/compose", - "@wordpress/core-data": "file:packages/core-data", - "@wordpress/data": "file:packages/data", - "@wordpress/data-controls": "file:packages/data-controls", - "@wordpress/element": "file:packages/element", - "@wordpress/hooks": "file:packages/hooks", - "@wordpress/i18n": "file:packages/i18n", - "@wordpress/icons": "file:packages/icons", - "@wordpress/interface": "file:packages/interface", - "@wordpress/keyboard-shortcuts": "file:packages/keyboard-shortcuts", - "@wordpress/keycodes": "file:packages/keycodes", - "@wordpress/media-utils": "file:packages/media-utils", - "@wordpress/notices": "file:packages/notices", - "@wordpress/plugins": "file:packages/plugins", - "@wordpress/reusable-blocks": "file:packages/reusable-blocks", - "@wordpress/server-side-render": "file:packages/server-side-render", - "@wordpress/url": "file:packages/url", - "@wordpress/widgets": "file:packages/widgets", - "classnames": "^2.3.1", - "lodash": "^4.17.21", - "rememo": "^3.0.0", - "uuid": "^8.3.0" + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^4.2.0", + "aria-query": "^4.2.2", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.4", + "lz-string": "^1.4.4", + "pretty-format": "^26.6.2" + }, + "dependencies": { + "@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + } + }, + "@types/istanbul-reports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", + "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", + "dev": true, + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "aria-query": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", + "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", + "dev": true, + "requires": { + "@babel/runtime": "^7.10.2", + "@babel/runtime-corejs3": "^7.10.2" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "pretty-format": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", + "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^17.0.1" + } + }, + "react-is": { + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.1.tgz", + "integrity": "sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, - "@wordpress/editor": { - "version": "file:packages/editor", + "@testing-library/jest-dom": { + "version": "5.16.1", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.16.1.tgz", + "integrity": "sha512-ajUJdfDIuTCadB79ukO+0l8O+QwN0LiSxDaYUTI4LndbbUsGi6rWU1SCexXzBA2NSjlVB9/vbkasQIL3tmPBjw==", + "dev": true, "requires": { - "@babel/runtime": "^7.13.10", - "@wordpress/a11y": "file:packages/a11y", - "@wordpress/api-fetch": "file:packages/api-fetch", - "@wordpress/autop": "file:packages/autop", - "@wordpress/blob": "file:packages/blob", - "@wordpress/block-editor": "file:packages/block-editor", - "@wordpress/blocks": "file:packages/blocks", - "@wordpress/components": "file:packages/components", - "@wordpress/compose": "file:packages/compose", - "@wordpress/core-data": "file:packages/core-data", - "@wordpress/data": "file:packages/data", - "@wordpress/data-controls": "file:packages/data-controls", - "@wordpress/date": "file:packages/date", - "@wordpress/deprecated": "file:packages/deprecated", - "@wordpress/element": "file:packages/element", - "@wordpress/hooks": "file:packages/hooks", - "@wordpress/html-entities": "file:packages/html-entities", - "@wordpress/i18n": "file:packages/i18n", - "@wordpress/icons": "file:packages/icons", - "@wordpress/is-shallow-equal": "file:packages/is-shallow-equal", - "@wordpress/keyboard-shortcuts": "file:packages/keyboard-shortcuts", - "@wordpress/keycodes": "file:packages/keycodes", - "@wordpress/media-utils": "file:packages/media-utils", - "@wordpress/notices": "file:packages/notices", - "@wordpress/reusable-blocks": "file:packages/reusable-blocks", - "@wordpress/rich-text": "file:packages/rich-text", - "@wordpress/server-side-render": "file:packages/server-side-render", - "@wordpress/url": "file:packages/url", - "@wordpress/wordcount": "file:packages/wordcount", - "classnames": "^2.3.1", - "lodash": "^4.17.21", - "memize": "^1.1.0", - "react-autosize-textarea": "^7.1.0", - "rememo": "^3.0.0" + "@babel/runtime": "^7.9.2", + "@types/testing-library__jest-dom": "^5.9.1", + "aria-query": "^5.0.0", + "chalk": "^3.0.0", + "css": "^3.0.0", + "css.escape": "^1.5.1", + "dom-accessibility-api": "^0.5.6", + "lodash": "^4.17.15", + "redent": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "aria-query": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.0.0.tgz", + "integrity": "sha512-V+SM7AbUwJ+EBnB8+DXs0hPZHO0W6pqBcc0dW90OwtVG02PswOu/teuARoLQjdDOH+t9pJgGnW5/Qmouf3gPJg==", + "dev": true + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "css": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/css/-/css-3.0.0.tgz", + "integrity": "sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ==", + "dev": true, + "requires": { + "inherits": "^2.0.4", + "source-map": "^0.6.1", + "source-map-resolve": "^0.6.0" + } + }, + "dom-accessibility-api": { + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.10.tgz", + "integrity": "sha512-Xu9mD0UjrJisTmv7lmVSDMagQcU9R5hwAbxsaAE/35XPnPLJobbuREfV/rraiSaEj/UOvgrzQs66zyTWTlyd+g==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "requires": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-resolve": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz", + "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==", + "dev": true, + "requires": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0" + } + }, + "strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "requires": { + "min-indent": "^1.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, - "@wordpress/element": { - "version": "file:packages/element", + "@testing-library/react": { + "version": "11.2.2", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-11.2.2.tgz", + "integrity": "sha512-jaxm0hwUjv+hzC+UFEywic7buDC9JQ1q3cDsrWVSDAPmLotfA6E6kUHlYm/zOeGCac6g48DR36tFHxl7Zb+N5A==", + "dev": true, "requires": { - "@babel/runtime": "^7.13.10", - "@types/react": "^16.9.0", - "@types/react-dom": "^16.9.0", - "@wordpress/escape-html": "file:packages/escape-html", - "lodash": "^4.17.21", - "react": "^17.0.1", - "react-dom": "^17.0.1" + "@babel/runtime": "^7.12.5", + "@testing-library/dom": "^7.28.1" } }, - "@wordpress/env": { - "version": "file:packages/env", + "@testing-library/react-native": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@testing-library/react-native/-/react-native-9.0.0.tgz", + "integrity": "sha512-UE3FWOsDUr+2l3Pg6JTpn2rV5uzYsxIus6ZyN1uMOTmn30bIuBBDDlWQtdWGJx92YcY4xgJA4vViCEKv7wVzJA==", "dev": true, "requires": { - "chalk": "^4.0.0", - "copy-dir": "^1.3.0", - "docker-compose": "^0.22.2", - "extract-zip": "^1.6.7", - "got": "^10.7.0", - "inquirer": "^7.1.0", - "js-yaml": "^3.13.1", - "ora": "^4.0.2", - "rimraf": "^3.0.2", - "simple-git": "^2.35.0", - "terminal-link": "^2.0.0", - "yargs": "^14.0.0" + "pretty-format": "^27.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + }, + "pretty-format": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.4.6.tgz", + "integrity": "sha512-NblstegA1y/RJW2VyML+3LlpFjzx62cUrtBIKIWDXEDkjNeleA7Od7nrzcs/VLQvAeV4CgSYhrN39DRN88Qi/g==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + } + }, + "react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + } } }, - "@wordpress/escape-html": { - "version": "file:packages/escape-html", - "requires": { - "@babel/runtime": "^7.13.10" - } + "@testing-library/user-event": { + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.1.1.tgz", + "integrity": "sha512-XrjH/iEUqNl9lF2HX9YhPNV7Amntkcnpw0Bo1KkRzowNDcgSN9i0nm4Q8Oi5wupgdfPaJNMAWa61A+voD6Kmwg==", + "dev": true }, - "@wordpress/eslint-plugin": { - "version": "file:packages/eslint-plugin", - "dev": true, - "requires": { - "@typescript-eslint/eslint-plugin": "^4.15.0", - "@typescript-eslint/parser": "^4.15.0", - "@wordpress/prettier-config": "file:packages/prettier-config", - "babel-eslint": "^10.1.0", - "cosmiconfig": "^7.0.0", - "eslint-config-prettier": "^7.1.0", - "eslint-plugin-import": "^2.23.4", - "eslint-plugin-jest": "^24.1.3", - "eslint-plugin-jsdoc": "^34.1.0", - "eslint-plugin-jsx-a11y": "^6.4.1", - "eslint-plugin-prettier": "^3.3.0", - "eslint-plugin-react": "^7.22.0", - "eslint-plugin-react-hooks": "^4.2.0", - "globals": "^12.0.0", - "prettier": "npm:wp-prettier@2.2.1-beta-1", - "requireindex": "^1.2.0" - } + "@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true }, - "@wordpress/format-library": { - "version": "file:packages/format-library", - "requires": { - "@babel/runtime": "^7.13.10", - "@wordpress/a11y": "file:packages/a11y", - "@wordpress/block-editor": "file:packages/block-editor", - "@wordpress/components": "file:packages/components", - "@wordpress/compose": "file:packages/compose", - "@wordpress/data": "file:packages/data", - "@wordpress/dom": "file:packages/dom", - "@wordpress/element": "file:packages/element", - "@wordpress/html-entities": "file:packages/html-entities", - "@wordpress/i18n": "file:packages/i18n", - "@wordpress/icons": "file:packages/icons", - "@wordpress/keycodes": "file:packages/keycodes", - "@wordpress/rich-text": "file:packages/rich-text", - "@wordpress/url": "file:packages/url", - "lodash": "^4.17.21" - } + "@trysound/sax": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.1.1.tgz", + "integrity": "sha512-Z6DoceYb/1xSg5+e+ZlPZ9v0N16ZvZ+wYMraFue4HYrE4ttONKtsvruIRf6t9TBR0YvSOfi1hUU0fJfBLCDYow==", + "dev": true }, - "@wordpress/hooks": { - "version": "file:packages/hooks", - "requires": { - "@babel/runtime": "^7.13.10" - } + "@types/anymatch": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@types/anymatch/-/anymatch-1.3.1.tgz", + "integrity": "sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA==", + "dev": true }, - "@wordpress/html-entities": { - "version": "file:packages/html-entities", - "requires": { - "@babel/runtime": "^7.13.10" - } + "@types/aria-query": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-4.2.0.tgz", + "integrity": "sha512-iIgQNzCm0v7QMhhe4Jjn9uRh+I6GoPmt03CbEtwx3ao8/EfoQcmgtqH4vQ5Db/lxiIGaWDv6nwvunuh0RyX0+A==", + "dev": true }, - "@wordpress/i18n": { - "version": "file:packages/i18n", + "@types/babel__core": { + "version": "7.1.18", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.18.tgz", + "integrity": "sha512-S7unDjm/C7z2A2R9NzfKCK1I+BAALDtxEmsJBwlB3EzNfb929ykjL++1CK9LO++EIp2fQrC8O+BwjKvz6UeDyQ==", + "dev": true, "requires": { - "@babel/runtime": "^7.13.10", - "@wordpress/hooks": "file:packages/hooks", - "gettext-parser": "^1.3.1", - "lodash": "^4.17.21", - "memize": "^1.1.0", - "sprintf-js": "^1.1.1", - "tannin": "^1.2.0" + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" } }, - "@wordpress/icons": { - "version": "file:packages/icons", + "@types/babel__generator": { + "version": "7.6.4", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", + "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", + "dev": true, "requires": { - "@babel/runtime": "^7.13.10", - "@wordpress/element": "file:packages/element", - "@wordpress/primitives": "file:packages/primitives" + "@babel/types": "^7.0.0" } }, - "@wordpress/interface": { - "version": "file:packages/interface", + "@types/babel__template": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", + "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "dev": true, "requires": { - "@babel/runtime": "^7.13.10", - "@wordpress/components": "file:packages/components", - "@wordpress/compose": "file:packages/compose", - "@wordpress/data": "file:packages/data", - "@wordpress/deprecated": "file:packages/deprecated", - "@wordpress/element": "file:packages/element", - "@wordpress/i18n": "file:packages/i18n", - "@wordpress/icons": "file:packages/icons", - "@wordpress/plugins": "file:packages/plugins", - "@wordpress/viewport": "file:packages/viewport", - "classnames": "^2.3.1", - "lodash": "^4.17.21" + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" } }, - "@wordpress/is-shallow-equal": { - "version": "file:packages/is-shallow-equal", + "@types/babel__traverse": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.11.tgz", + "integrity": "sha512-ddHK5icION5U6q11+tV2f9Mo6CZVuT8GJKld2q9LqHSZbvLbH34Kcu2yFGckZut453+eQU6btIA3RihmnRgI+Q==", + "dev": true, "requires": { - "@babel/runtime": "^7.13.10" + "@babel/types": "^7.3.0" } }, - "@wordpress/jest-console": { - "version": "file:packages/jest-console", + "@types/cacheable-request": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.1.tgz", + "integrity": "sha512-ykFq2zmBGOCbpIXtoVbz4SKY5QriWPh3AjyU4G74RYbtt5yOc5OfaY75ftjg7mikMOla1CTGpX3lLbuJh8DTrQ==", "dev": true, "requires": { - "@babel/runtime": "^7.13.10", - "jest-matcher-utils": "^26.6.2", - "lodash": "^4.17.21" + "@types/http-cache-semantics": "*", + "@types/keyv": "*", + "@types/node": "*", + "@types/responselike": "*" } }, - "@wordpress/jest-preset-default": { - "version": "file:packages/jest-preset-default", + "@types/cheerio": { + "version": "0.22.29", + "resolved": "https://registry.npmjs.org/@types/cheerio/-/cheerio-0.22.29.tgz", + "integrity": "sha512-rNX1PsrDPxiNiyLnRKiW2NXHJFHqx0Fl3J2WsZq0MTBspa/FgwlqhXJE2crIcc+/2IglLHtSWw7g053oUR8fOg==", "dev": true, "requires": { - "@wojtekmaj/enzyme-adapter-react-17": "^0.6.1", - "@wordpress/jest-console": "file:packages/jest-console", - "babel-jest": "^26.6.3", - "enzyme": "^3.11.0", - "enzyme-to-json": "^3.4.4" + "@types/node": "*" } }, - "@wordpress/jest-puppeteer-axe": { - "version": "file:packages/jest-puppeteer-axe", + "@types/classnames": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@types/classnames/-/classnames-2.3.1.tgz", + "integrity": "sha512-zeOWb0JGBoVmlQoznvqXbE0tEC/HONsnoUNH19Hc96NFsTAwTXbTqb8FMYkru1F/iqp7a18Ws3nWJvtA1sHD1A==", "dev": true, "requires": { - "@axe-core/puppeteer": "^4.0.0", - "@babel/runtime": "^7.13.10" + "classnames": "*" } }, - "@wordpress/keyboard-shortcuts": { - "version": "file:packages/keyboard-shortcuts", + "@types/color-convert": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/color-convert/-/color-convert-2.0.0.tgz", + "integrity": "sha512-m7GG7IKKGuJUXvkZ1qqG3ChccdIM/qBBo913z+Xft0nKCX4hAU/IxKwZBU4cpRZ7GS5kV4vOblUkILtSShCPXQ==", + "dev": true, "requires": { - "@babel/runtime": "^7.13.10", - "@wordpress/compose": "file:packages/compose", - "@wordpress/data": "file:packages/data", - "@wordpress/element": "file:packages/element", - "@wordpress/keycodes": "file:packages/keycodes", - "lodash": "^4.17.21", - "rememo": "^3.0.0" + "@types/color-name": "*" } }, - "@wordpress/keycodes": { - "version": "file:packages/keycodes", - "requires": { - "@babel/runtime": "^7.13.10", - "@wordpress/i18n": "file:packages/i18n", - "lodash": "^4.17.21" - } + "@types/color-name": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", + "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", + "dev": true }, - "@wordpress/lazy-import": { - "version": "file:packages/lazy-import", + "@types/eslint": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.28.0.tgz", + "integrity": "sha512-07XlgzX0YJUn4iG1ocY4IX9DzKSmMGUs6ESKlxWhZRaa0fatIWaHWUVapcuGa8r5HFnTqzj+4OCjd5f7EZ/i/A==", "dev": true, "requires": { - "execa": "^4.0.2", - "npm-package-arg": "^8.0.1", - "semver": "^7.3.2" + "@types/estree": "*", + "@types/json-schema": "*" } }, - "@wordpress/library-export-default-webpack-plugin": { - "version": "file:packages/library-export-default-webpack-plugin", + "@types/eslint-scope": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.1.tgz", + "integrity": "sha512-SCFeogqiptms4Fg29WpOTk5nHIzfpKCemSN63ksBQYKTcXoJEmJagV+DhVmbapZzY4/5YaOV1nZwrsU79fFm1g==", "dev": true, "requires": { - "lodash": "^4.17.21", - "webpack-sources": "^2.2.0" - } - }, - "@wordpress/list-reusable-blocks": { - "version": "file:packages/list-reusable-blocks", - "requires": { - "@babel/runtime": "^7.13.10", - "@wordpress/api-fetch": "file:packages/api-fetch", - "@wordpress/components": "file:packages/components", - "@wordpress/compose": "file:packages/compose", - "@wordpress/element": "file:packages/element", - "@wordpress/i18n": "file:packages/i18n", - "lodash": "^4.17.21" - } - }, - "@wordpress/media-utils": { - "version": "file:packages/media-utils", - "requires": { - "@babel/runtime": "^7.13.10", - "@wordpress/api-fetch": "file:packages/api-fetch", - "@wordpress/blob": "file:packages/blob", - "@wordpress/element": "file:packages/element", - "@wordpress/i18n": "file:packages/i18n", - "lodash": "^4.17.21" + "@types/eslint": "*", + "@types/estree": "*" } }, - "@wordpress/notices": { - "version": "file:packages/notices", - "requires": { - "@babel/runtime": "^7.13.10", - "@wordpress/a11y": "file:packages/a11y", - "@wordpress/data": "file:packages/data", - "lodash": "^4.17.21" - } + "@types/estree": { + "version": "0.0.50", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz", + "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==", + "dev": true }, - "@wordpress/npm-package-json-lint-config": { - "version": "file:packages/npm-package-json-lint-config", + "@types/events": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", + "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==", "dev": true }, - "@wordpress/nux": { - "version": "file:packages/nux", + "@types/glob": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz", + "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==", + "dev": true, "requires": { - "@babel/runtime": "^7.13.10", - "@wordpress/components": "file:packages/components", - "@wordpress/compose": "file:packages/compose", - "@wordpress/data": "file:packages/data", - "@wordpress/deprecated": "file:packages/deprecated", - "@wordpress/element": "file:packages/element", - "@wordpress/i18n": "file:packages/i18n", - "@wordpress/icons": "file:packages/icons", - "lodash": "^4.17.21", - "rememo": "^3.0.0" + "@types/events": "*", + "@types/minimatch": "*", + "@types/node": "*" } }, - "@wordpress/plugins": { - "version": "file:packages/plugins", + "@types/graceful-fs": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.3.tgz", + "integrity": "sha512-AiHRaEB50LQg0pZmm659vNBb9f4SJ0qrAnteuzhSeAUcJKxoYgEnprg/83kppCnc2zvtCKbdZry1a5pVY3lOTQ==", "requires": { - "@babel/runtime": "^7.13.10", - "@wordpress/compose": "file:packages/compose", - "@wordpress/element": "file:packages/element", - "@wordpress/hooks": "file:packages/hooks", - "@wordpress/icons": "file:packages/icons", - "lodash": "^4.17.21", - "memize": "^1.1.0" + "@types/node": "*" } }, - "@wordpress/postcss-plugins-preset": { - "version": "file:packages/postcss-plugins-preset", + "@types/hammerjs": { + "version": "2.0.41", + "resolved": "https://registry.npmjs.org/@types/hammerjs/-/hammerjs-2.0.41.tgz", + "integrity": "sha512-ewXv/ceBaJprikMcxCmWU1FKyMAQ2X7a9Gtmzw8fcg2kIePI1crERDM818W+XYrxqdBBOdlf2rm137bU+BltCA==" + }, + "@types/hast": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.1.tgz", + "integrity": "sha512-viwwrB+6xGzw+G1eWpF9geV3fnsDgXqHG+cqgiHrvQfDUW5hzhCyV7Sy3UJxhfRFBsgky2SSW33qi/YrIkjX5Q==", "dev": true, "requires": { - "@wordpress/base-styles": "file:packages/base-styles", - "autoprefixer": "^10.2.5" + "@types/unist": "*" } }, - "@wordpress/postcss-themes": { - "version": "file:packages/postcss-themes", + "@types/highlight-words-core": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/highlight-words-core/-/highlight-words-core-1.2.1.tgz", + "integrity": "sha512-9VZUA5omXBfn+hDxFjUDu1FOJTBM3LmvqfDey+Z6Aa8B8/JmF5SMj6FBrjfgJ/Q3YXOZd3qyTDfJyMZSs/wCUA==", "dev": true }, - "@wordpress/prettier-config": { - "version": "file:packages/prettier-config", + "@types/html-minifier-terser": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz", + "integrity": "sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w==", "dev": true }, - "@wordpress/primitives": { - "version": "file:packages/primitives", - "requires": { - "@babel/runtime": "^7.13.10", - "@wordpress/element": "file:packages/element", - "classnames": "^2.3.1" - } - }, - "@wordpress/priority-queue": { - "version": "file:packages/priority-queue", - "requires": { - "@babel/runtime": "^7.13.10" - } + "@types/http-cache-semantics": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.0.tgz", + "integrity": "sha512-c3Xy026kOF7QOTn00hbIllV1dLR9hG9NkSrLQgCVs8NF6sBU+VGWjD3wLPhmh1TYAc7ugCFsvHYMN4VcBN1U1A==", + "dev": true }, - "@wordpress/project-management-automation": { - "version": "file:packages/project-management-automation", + "@types/http-proxy": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.7.tgz", + "integrity": "sha512-9hdj6iXH64tHSLTY+Vt2eYOGzSogC+JQ2H7bdPWkuh7KXP5qLllWx++t+K9Wk556c3dkDdPws/SpMRi0sdCT1w==", "dev": true, "requires": { - "@actions/core": "^1.4.0", - "@actions/github": "^5.0.0", - "@babel/runtime": "^7.13.10" - } - }, - "@wordpress/react-i18n": { - "version": "file:packages/react-i18n", - "requires": { - "@babel/runtime": "^7.13.10", - "@wordpress/element": "file:packages/element", - "@wordpress/i18n": "file:packages/i18n", - "utility-types": "^3.10.0" - } - }, - "@wordpress/react-native-aztec": { - "version": "file:packages/react-native-aztec", - "requires": { - "@wordpress/element": "file:packages/element", - "@wordpress/keycodes": "file:packages/keycodes" - } - }, - "@wordpress/react-native-bridge": { - "version": "file:packages/react-native-bridge", - "requires": { - "@wordpress/react-native-aztec": "file:packages/react-native-aztec" + "@types/node": "*" } }, - "@wordpress/react-native-editor": { - "version": "file:packages/react-native-editor", - "requires": { - "@babel/runtime": "^7.13.10", - "@react-native-community/blur": "3.6.0", - "@react-native-community/masked-view": "git+https://github.com/wordpress-mobile/react-native-masked-view.git#v0.1.11-wp", - "@react-native-community/slider": "git+https://github.com/wordpress-mobile/react-native-slider.git#v3.0.2-wp", - "@react-navigation/core": "5.12.0", - "@react-navigation/native": "5.7.0", - "@react-navigation/routers": "5.4.9", - "@react-navigation/stack": "5.6.2", - "@wordpress/api-fetch": "file:packages/api-fetch", - "@wordpress/block-editor": "file:packages/block-editor", - "@wordpress/block-library": "file:packages/block-library", - "@wordpress/blocks": "file:packages/blocks", - "@wordpress/components": "file:packages/components", - "@wordpress/data": "file:packages/data", - "@wordpress/edit-post": "file:packages/edit-post", - "@wordpress/element": "file:packages/element", - "@wordpress/hooks": "file:packages/hooks", - "@wordpress/i18n": "file:packages/i18n", - "@wordpress/react-native-aztec": "file:packages/react-native-aztec", - "@wordpress/react-native-bridge": "file:packages/react-native-bridge", - "core-js": "^3.12.1", - "fast-average-color": "^4.3.0", - "jed": "^1.1.1", - "jsdom-jscore-rn": "git+https://github.com/iamcco/jsdom-jscore-rn.git#a562f3d57c27c13e5bfc8cf82d496e69a3ba2800", - "node-fetch": "^2.6.0", - "react-native": "0.64.0", - "react-native-gesture-handler": "git+https://github.com/wordpress-mobile/react-native-gesture-handler.git#1.10.1-wp", - "react-native-get-random-values": "git+https://github.com/wordpress-mobile/react-native-get-random-values.git#v1.4.0-wp", - "react-native-hr": "git+https://github.com/Riglerr/react-native-hr.git#2d01a5cf77212d100e8b99e0310cce5234f977b3", - "react-native-hsv-color-picker": "git+https://github.com/wordpress-mobile/react-native-hsv-color-picker.git#v1.0.1-wp", - "react-native-keyboard-aware-scroll-view": "git+https://github.com/wordpress-mobile/react-native-keyboard-aware-scroll-view.git#v0.8.8-wp", - "react-native-linear-gradient": "git+https://github.com/wordpress-mobile/react-native-linear-gradient.git#v2.5.6-wp", - "react-native-modal": "^11.10.0", - "react-native-prompt-android": "git+https://github.com/wordpress-mobile/react-native-prompt-android.git#v1.0.0-wp", - "react-native-reanimated": "git+https://github.com/wordpress-mobile/react-native-reanimated.git#1.9.0-wp", - "react-native-safe-area": "^0.5.0", - "react-native-safe-area-context": "git+https://github.com/wordpress-mobile/react-native-safe-area-context.git#v3.2.0-wp", - "react-native-sass-transformer": "^1.1.1", - "react-native-screens": "git+https://github.com/wordpress-mobile/react-native-screens.git#2.9.0-wp", - "react-native-svg": "git+https://github.com/wordpress-mobile/react-native-svg.git#v9.13.7-wp", - "react-native-url-polyfill": "^1.1.2", - "react-native-video": "git+https://github.com/wordpress-mobile/react-native-video.git#5.0.2-wp" - } + "@types/invariant": { + "version": "2.2.35", + "resolved": "https://registry.npmjs.org/@types/invariant/-/invariant-2.2.35.tgz", + "integrity": "sha512-DxX1V9P8zdJPYQat1gHyY0xj3efl8gnMVjiM9iCY6y27lj+PoQWkgjt8jDqmovPqULkKVpKRg8J36iQiA+EtEg==" }, - "@wordpress/readable-js-assets-webpack-plugin": { - "version": "file:packages/readable-js-assets-webpack-plugin", + "@types/is-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/is-function/-/is-function-1.0.0.tgz", + "integrity": "sha512-iTs9HReBu7evG77Q4EC8hZnqRt57irBDkK9nvmHroiOIVwYMQc4IvYvdRgwKfYepunIY7Oh/dBuuld+Gj9uo6w==", "dev": true }, - "@wordpress/redux-routine": { - "version": "file:packages/redux-routine", - "requires": { - "@babel/runtime": "^7.13.10", - "is-promise": "^4.0.0", - "lodash": "^4.17.21", - "redux": "^4.1.0", - "rungen": "^0.3.2" - } + "@types/istanbul-lib-coverage": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz", + "integrity": "sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg==" }, - "@wordpress/reusable-blocks": { - "version": "file:packages/reusable-blocks", + "@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", "requires": { - "@wordpress/block-editor": "file:packages/block-editor", - "@wordpress/blocks": "file:packages/blocks", - "@wordpress/components": "file:packages/components", - "@wordpress/compose": "file:packages/compose", - "@wordpress/core-data": "file:packages/core-data", - "@wordpress/data": "file:packages/data", - "@wordpress/element": "file:packages/element", - "@wordpress/i18n": "file:packages/i18n", - "@wordpress/icons": "file:packages/icons", - "@wordpress/notices": "file:packages/notices", - "@wordpress/url": "file:packages/url", - "lodash": "^4.17.21" + "@types/istanbul-lib-coverage": "*" } }, - "@wordpress/rich-text": { - "version": "file:packages/rich-text", + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", "requires": { - "@babel/runtime": "^7.13.10", - "@wordpress/compose": "file:packages/compose", - "@wordpress/data": "file:packages/data", - "@wordpress/dom": "file:packages/dom", - "@wordpress/element": "file:packages/element", - "@wordpress/escape-html": "file:packages/escape-html", - "@wordpress/is-shallow-equal": "file:packages/is-shallow-equal", - "@wordpress/keycodes": "file:packages/keycodes", - "classnames": "^2.3.1", - "lodash": "^4.17.21", - "memize": "^1.1.0", - "rememo": "^3.0.0" + "@types/istanbul-lib-report": "*" } }, - "@wordpress/scripts": { - "version": "file:packages/scripts", + "@types/jest": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.4.0.tgz", + "integrity": "sha512-gHl8XuC1RZ8H2j5sHv/JqsaxXkDDM9iDOgu0Wp8sjs4u/snb2PVehyWXJPr+ORA0RPpgw231mnutWI1+0hgjIQ==", "dev": true, "requires": { - "@svgr/webpack": "^5.2.0", - "@wordpress/babel-preset-default": "file:packages/babel-preset-default", - "@wordpress/dependency-extraction-webpack-plugin": "file:packages/dependency-extraction-webpack-plugin", - "@wordpress/eslint-plugin": "file:packages/eslint-plugin", - "@wordpress/jest-preset-default": "file:packages/jest-preset-default", - "@wordpress/npm-package-json-lint-config": "file:packages/npm-package-json-lint-config", - "@wordpress/postcss-plugins-preset": "file:packages/postcss-plugins-preset", - "@wordpress/prettier-config": "file:packages/prettier-config", - "@wordpress/stylelint-config": "file:packages/stylelint-config", - "babel-jest": "^26.6.3", - "babel-loader": "^8.2.2", - "chalk": "^4.0.0", - "check-node-version": "^4.1.0", - "clean-webpack-plugin": "^3.0.0", - "cross-spawn": "^5.1.0", - "css-loader": "^5.1.3", - "cwd": "^0.10.0", - "dir-glob": "^3.0.1", - "eslint": "^7.17.0", - "eslint-plugin-markdown": "^2.2.0", - "expect-puppeteer": "^4.4.0", - "file-loader": "^6.2.0", - "filenamify": "^4.2.0", - "ignore-emit-webpack-plugin": "^2.0.6", - "jest": "^26.6.3", - "jest-circus": "^26.6.3", - "jest-dev-server": "^4.4.0", - "jest-environment-node": "^26.6.2", - "markdownlint": "^0.23.1", - "markdownlint-cli": "^0.27.1", - "merge-deep": "^3.0.3", - "mini-css-extract-plugin": "^1.3.9", - "minimist": "^1.2.0", - "npm-package-json-lint": "^5.0.0", - "optimize-css-assets-webpack-plugin": "^6.0.1", - "postcss": "^8.2.15", - "postcss-loader": "^4.2.0", - "prettier": "npm:wp-prettier@2.2.1-beta-1", - "puppeteer-core": "^10.1.0", - "read-pkg-up": "^1.0.1", - "resolve-bin": "^0.4.0", - "sass": "^1.35.2", - "sass-loader": "^10.1.1", - "source-map-loader": "^0.2.4", - "stylelint": "^13.8.0", - "terser-webpack-plugin": "^3.0.3", - "thread-loader": "^3.0.1", - "url-loader": "^4.1.1", - "webpack": "^4.46.0", - "webpack-bundle-analyzer": "^4.2.0", - "webpack-cli": "^3.3.11", - "webpack-livereload-plugin": "^2.3.0", - "webpack-sources": "^2.2.0" + "jest-diff": "^27.0.0", + "pretty-format": "^27.0.0" }, "dependencies": { - "eslint-plugin-markdown": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-markdown/-/eslint-plugin-markdown-2.2.0.tgz", - "integrity": "sha512-Ctuc7aP1tU92qnFwVO1wDLEzf1jqMxwRkcSTw7gjbvnEqfh5CKUcTXM0sxg8CB2KDXrqpTuMZPgJ1XE9Olr7KA==", + "@jest/types": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.4.2.tgz", + "integrity": "sha512-j35yw0PMTPpZsUoOBiuHzr1zTYoad1cVIE0ajEjcrJONxxrko/IRGKkXx3os0Nsi4Hu3+5VmDbVfq5WhG/pWAg==", "dev": true, "requires": { - "mdast-util-from-markdown": "^0.8.5" + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" } }, - "mdast-util-from-markdown": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz", - "integrity": "sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==", + "@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", "dev": true, "requires": { - "@types/mdast": "^3.0.0", - "mdast-util-to-string": "^2.0.0", - "micromark": "~2.11.0", - "parse-entities": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" + "@types/yargs-parser": "*" } }, - "mdast-util-to-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", - "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, - "parse-entities": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", - "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + }, + "diff-sequences": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.4.0.tgz", + "integrity": "sha512-YqiQzkrsmHMH5uuh8OdQFU9/ZpADnwzml8z0O5HvRNda+5UZsaX/xN+AAxfR2hWq1Y7HZnAzO9J5lJXOuDz2Ww==", + "dev": true + }, + "jest-diff": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.4.2.tgz", + "integrity": "sha512-ujc9ToyUZDh9KcqvQDkk/gkbf6zSaeEg9AiBxtttXW59H/AcqEYp1ciXAtJp+jXWva5nAf/ePtSsgWwE5mqp4Q==", "dev": true, "requires": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" + "chalk": "^4.0.0", + "diff-sequences": "^27.4.0", + "jest-get-type": "^27.4.0", + "pretty-format": "^27.4.2" } }, - "unist-util-stringify-position": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", - "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", + "jest-get-type": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.4.0.tgz", + "integrity": "sha512-tk9o+ld5TWq41DkK14L4wox4s2D9MtTpKaAVzXfr5CUKm5ZK2ExcaFE0qls2W71zE/6R2TxxrK9w2r6svAFDBQ==", + "dev": true + }, + "pretty-format": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.4.2.tgz", + "integrity": "sha512-p0wNtJ9oLuvgOQDEIZ9zQjZffK7KtyR6Si0jnXULIDwrlNF8Cuir3AZP0hHv0jmKuNN/edOnbMjnzd4uTcmWiw==", "dev": true, "requires": { - "@types/unist": "^2.0.2" + "@jest/types": "^27.4.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" } + }, + "react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true } } }, - "@wordpress/server-side-render": { - "version": "file:packages/server-side-render", - "requires": { - "@babel/runtime": "^7.13.10", - "@wordpress/api-fetch": "file:packages/api-fetch", - "@wordpress/blocks": "file:packages/blocks", - "@wordpress/components": "file:packages/components", - "@wordpress/compose": "file:packages/compose", - "@wordpress/data": "file:packages/data", - "@wordpress/deprecated": "file:packages/deprecated", - "@wordpress/element": "file:packages/element", - "@wordpress/i18n": "file:packages/i18n", - "@wordpress/url": "file:packages/url", - "lodash": "^4.17.21" - } + "@types/json-schema": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.4.tgz", + "integrity": "sha512-8+KAKzEvSUdeo+kmqnKrqgeE+LcA0tjYWFY7RPProVYwnqDjukzO+3b6dLD56rYX5TdWejnEOLJYOIeh4CXKuA==", + "dev": true }, - "@wordpress/shortcode": { - "version": "file:packages/shortcode", - "requires": { - "@babel/runtime": "^7.13.10", - "lodash": "^4.17.21", - "memize": "^1.1.0" - } + "@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", + "dev": true }, - "@wordpress/stylelint-config": { - "version": "file:packages/stylelint-config", + "@types/keyv": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.1.tgz", + "integrity": "sha512-MPtoySlAZQ37VoLaPcTHCu1RWJ4llDkULYZIzOYxlhxBqYPB0RsRlmMU0R6tahtFe27mIdkHV+551ZWV4PLmVw==", "dev": true, "requires": { - "stylelint-config-recommended": "^3.0.0", - "stylelint-config-recommended-scss": "^4.2.0", - "stylelint-scss": "^3.17.2" - } - }, - "@wordpress/token-list": { - "version": "file:packages/token-list", - "requires": { - "@babel/runtime": "^7.13.10", - "lodash": "^4.17.21" + "@types/node": "*" } }, - "@wordpress/url": { - "version": "file:packages/url", - "requires": { - "@babel/runtime": "^7.13.10", - "lodash": "^4.17.21", - "react-native-url-polyfill": "^1.1.2" - } + "@types/lodash": { + "version": "4.14.172", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.172.tgz", + "integrity": "sha512-/BHF5HAx3em7/KkzVKm3LrsD6HZAXuXO1AJZQ3cRRBZj4oHZDviWPYu0aEplAqDFNHZPW6d3G7KN+ONcCCC7pw==" }, - "@wordpress/viewport": { - "version": "file:packages/viewport", + "@types/mdast": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.3.tgz", + "integrity": "sha512-SXPBMnFVQg1s00dlMCc/jCdvPqdE4mXaMMCeRlxLDmTAEoegHT53xKtkDnzDTOcmMHUfcjyf36/YYZ6SxRdnsw==", + "dev": true, "requires": { - "@babel/runtime": "^7.13.10", - "@wordpress/compose": "file:packages/compose", - "@wordpress/data": "file:packages/data", - "lodash": "^4.17.21" + "@types/unist": "*" } }, - "@wordpress/warning": { - "version": "file:packages/warning" + "@types/minimatch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", + "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", + "dev": true }, - "@wordpress/widgets": { - "version": "file:packages/widgets", - "requires": { - "@babel/runtime": "^7.13.10", - "@wordpress/api-fetch": "file:packages/api-fetch", - "@wordpress/block-editor": "file:packages/block-editor", - "@wordpress/blocks": "file:packages/blocks", - "@wordpress/components": "file:packages/components", - "@wordpress/compose": "file:packages/compose", - "@wordpress/core-data": "file:packages/core-data", - "@wordpress/data": "file:packages/data", - "@wordpress/element": "file:packages/element", - "@wordpress/i18n": "file:packages/i18n", - "@wordpress/icons": "file:packages/icons", - "@wordpress/notices": "file:packages/notices", - "@wordpress/url": "file:packages/url", - "classnames": "^2.3.1", - "lodash": "^4.17.21" - } + "@types/minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-aaI6OtKcrwCX8G7aWbNh7i8GOfY=", + "dev": true }, - "@wordpress/wordcount": { - "version": "file:packages/wordcount", + "@types/mousetrap": { + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/@types/mousetrap/-/mousetrap-1.6.8.tgz", + "integrity": "sha512-zTqjvgCUT5EoXqbqmd8iJMb4NJqyV/V7pK7AIKq7qcaAsJIpGlTVJS1HQM6YkdHCdnkNSbhcQI7MXYxFfE3iCA==" + }, + "@types/node": { + "version": "14.14.22", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.22.tgz", + "integrity": "sha512-g+f/qj/cNcqKkc3tFqlXOYjrmZA+jNBiDzbP3kH+B+otKFqAdPgVTGP1IeKRdMml/aE69as5S4FqtxAbl+LaMw==" + }, + "@types/node-fetch": { + "version": "2.5.12", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.12.tgz", + "integrity": "sha512-MKgC4dlq4kKNa/mYrwpKfzQMB5X3ee5U6fSprkKpToBqBmX4nFZL9cW5jl6sWn+xpRJ7ypWh2yyqqr8UUCstSw==", + "dev": true, "requires": { - "@babel/runtime": "^7.13.10", - "lodash": "^4.17.21" + "@types/node": "*", + "form-data": "^3.0.0" + }, + "dependencies": { + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + } } }, - "@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "@types/normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==" + }, + "@types/npm-package-arg": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@types/npm-package-arg/-/npm-package-arg-6.1.1.tgz", + "integrity": "sha512-452/1Kp9IdM/oR10AyqAgZOxUt7eLbm+EMJ194L6oarMYdZNiFIFAOJ7IIr0OrZXTySgfHjJezh2oiyk2kc3ag==", "dev": true }, - "@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "@types/npmlog": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@types/npmlog/-/npmlog-4.1.3.tgz", + "integrity": "sha512-1TcL7YDYCtnHmLhTWbum+IIwLlvpaHoEKS2KNIngEwLzwgDeHaebaEHHbQp8IqzNQ9IYiboLKUjAf7MZqG63+w==", "dev": true }, - "@yarnpkg/lockfile": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", - "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "@types/overlayscrollbars": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/@types/overlayscrollbars/-/overlayscrollbars-1.12.0.tgz", + "integrity": "sha512-h/pScHNKi4mb+TrJGDon8Yb06ujFG0mSg12wIO0sWMUF3dQIe2ExRRdNRviaNt9IjxIiOfnRr7FsQAdHwK4sMg==", "dev": true }, - "@zkochan/cmd-shim": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@zkochan/cmd-shim/-/cmd-shim-3.1.0.tgz", - "integrity": "sha512-o8l0+x7C7sMZU3v9GuJIAU10qQLtwR1dtRQIOmlNMtyaqhmpXOzx1HWiYoWfmmf9HHZoAkXpc9TM9PQYF9d4Jg==", + "@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" + }, + "@types/parse5": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-5.0.3.tgz", + "integrity": "sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==", + "dev": true + }, + "@types/prettier": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.4.tgz", + "integrity": "sha512-ReVR2rLTV1kvtlWFyuot+d1pkpG2Fw/XKE3PDAdj57rbM97ttSp9JZ2UsP+2EHTylra9cUf6JA7tGwW1INzUrA==", + "dev": true + }, + "@types/pretty-hrtime": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/pretty-hrtime/-/pretty-hrtime-1.0.1.tgz", + "integrity": "sha512-VjID5MJb1eGKthz2qUerWT8+R4b9N+CHvGCzg9fn4kWZgaF9AhdYikQio3R7wV8YY1NsQKPaCwKz1Yff+aHNUQ==", + "dev": true + }, + "@types/prop-types": { + "version": "15.7.4", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.4.tgz", + "integrity": "sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ==" + }, + "@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "dev": true + }, + "@types/reach__router": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/@types/reach__router/-/reach__router-1.3.8.tgz", + "integrity": "sha512-cjjT0FPdwuvhLWpCDt2WCh4sdBqNzJe3XhxXmRQGsY3IvT58M8sE4E7A0QaFYuJs3ar+McSJTiJxdYKWAXbBhw==", "dev": true, "requires": { - "is-windows": "^1.0.0", - "mkdirp-promise": "^5.0.1", - "mz": "^2.5.0" + "@types/react": "*" } }, - "JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "@types/react": { + "version": "17.0.37", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.37.tgz", + "integrity": "sha512-2FS1oTqBGcH/s0E+CjrCCR9+JMpsu9b69RTFO+40ua43ZqP5MmQ4iUde/dMjWR909KxZwmOQIFq6AV6NjEG5xg==", + "requires": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + }, + "dependencies": { + "csstype": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.10.tgz", + "integrity": "sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA==" + } + } + }, + "@types/react-dates": { + "version": "21.8.3", + "resolved": "https://registry.npmjs.org/@types/react-dates/-/react-dates-21.8.3.tgz", + "integrity": "sha512-MSG/A5UCXepPw5a9BtdOXfCCSMcQ5+oQIkm0K2u39sf4EJbsgngUg1zcoY3amxa6Hz0EWZkZOiExK/92J6hxUw==", "dev": true, "requires": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" + "@types/react": "*", + "@types/react-outside-click-handler": "*", + "moment": "^2.26.0" + }, + "dependencies": { + "moment": { + "version": "2.29.3", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.3.tgz", + "integrity": "sha512-c6YRvhEo//6T2Jz/vVtYzqBzwvPT95JBQ+smCytzf7c50oMZRsR/a4w88aD34I+/QVSfnoAnSBFPJHItlOMJVw==", + "dev": true + } } }, - "abab": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", - "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", - "dev": true + "@types/react-dom": { + "version": "17.0.11", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.11.tgz", + "integrity": "sha512-f96K3k+24RaLGVu/Y2Ng3e1EbZ8/cVJvypZWd7cy0ofCBaf2lcM46xNhycMZ2xGwbBjRql7hOlZ+e2WlJ5MH3Q==", + "requires": { + "@types/react": "*" + } }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true + "@types/react-outside-click-handler": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@types/react-outside-click-handler/-/react-outside-click-handler-1.3.1.tgz", + "integrity": "sha512-0BNan5zIIDyO5k9LFSG+60ZxQ/0wf+LTF9BJx3oOUdOaJlZk6RCe52jRB75mlvLLJx2YLa61+NidOwBfptWMKw==", + "dev": true, + "requires": { + "@types/react": "*" + } }, - "abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "@types/react-syntax-highlighter": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/@types/react-syntax-highlighter/-/react-syntax-highlighter-11.0.5.tgz", + "integrity": "sha512-VIOi9i2Oj5XsmWWoB72p3KlZoEbdRAcechJa8Ztebw7bDl2YmR+odxIqhtJGp1q2EozHs02US+gzxJ9nuf56qg==", + "dev": true, "requires": { - "event-target-shim": "^5.0.0" + "@types/react": "*" } }, - "absolute-path": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/absolute-path/-/absolute-path-0.0.0.tgz", - "integrity": "sha1-p4di+9rftSl76ZsV01p4Wy8JW/c=" + "@types/requestidlecallback": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@types/requestidlecallback/-/requestidlecallback-0.3.4.tgz", + "integrity": "sha512-aTSyiZuRemRLTQkJPb25L7A4/eR2Teo5l4yJ1V6P3+MFxEZckTDkNKNtr/V1zEOMzS6H8DgxF22U6jPAPrzQvw==", + "dev": true }, - "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "@types/responselike": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", + "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", + "dev": true, "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - }, - "dependencies": { - "mime-db": { - "version": "1.47.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz", - "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==" - }, - "mime-types": { - "version": "2.1.30", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz", - "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==", - "requires": { - "mime-db": "1.47.0" - } - } + "@types/node": "*" } }, - "acorn": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", - "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==", + "@types/retry": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.1.tgz", + "integrity": "sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g==", "dev": true }, - "acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "@types/scheduler": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" + }, + "@types/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-D/2EJvAlCEtYFEYmmlGwbGXuK886HzyCc3nZX/tkFTQdEU8jZDAgiv08P162yB17y4ZXZoq7yFAnW4GDBb9Now==", + "dev": true + }, + "@types/source-list-map": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz", + "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==", + "dev": true + }, + "@types/sprintf-js": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@types/sprintf-js/-/sprintf-js-1.1.2.tgz", + "integrity": "sha512-hkgzYF+qnIl8uTO8rmUSVSfQ8BIfMXC4yJAF4n8BE758YsKBZvFC4NumnAegj7KmylP0liEZNpb9RRGFMbFejA==", + "dev": true + }, + "@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", + "dev": true + }, + "@types/tapable": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.5.tgz", + "integrity": "sha512-/gG2M/Imw7cQFp8PGvz/SwocNrmKFjFsm5Pb8HdbHkZ1K8pmuPzOX4VeVoiEecFCVf4CsN1r3/BRvx+6sNqwtQ==", + "dev": true + }, + "@types/testing-library__jest-dom": { + "version": "5.14.2", + "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.2.tgz", + "integrity": "sha512-vehbtyHUShPxIa9SioxDwCvgxukDMH//icJG90sXQBUm5lJOHLT5kNeU9tnivhnA/TkOFMzGIXN2cTc4hY8/kg==", "dev": true, "requires": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" + "@types/jest": "*" + } + }, + "@types/uglify-js": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.9.2.tgz", + "integrity": "sha512-d6dIfpPbF+8B7WiCi2ELY7m0w1joD8cRW4ms88Emdb2w062NeEpbNCeWwVCgzLRpVG+5e74VFSg4rgJ2xXjEiQ==", + "dev": true, + "requires": { + "source-map": "^0.6.1" }, "dependencies": { - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true } } }, - "acorn-jsx": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", - "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", + "@types/unist": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz", + "integrity": "sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==", "dev": true }, - "acorn-walk": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.1.1.tgz", - "integrity": "sha512-wdlPY2tm/9XBr7QkKlq0WQVgiuGTX6YWPyRyBviSoScBuLfTVQhvwg6wJ369GJ/1nPfTLMfnrFIfjqVg6d+jQQ==", + "@types/uuid": { + "version": "8.3.1", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.1.tgz", + "integrity": "sha512-Y2mHTRAbqfFkpjldbkHGY8JIzRN6XqYRliG8/24FcHm2D2PwW24fl5xMRTVGdrb7iMrwCaIEbLWerGIkXuFWVg==", "dev": true }, - "address": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/address/-/address-1.1.2.tgz", - "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==", - "dev": true + "@types/vfile": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/vfile/-/vfile-3.0.2.tgz", + "integrity": "sha512-b3nLFGaGkJ9rzOcuXRfHkZMdjsawuDD0ENL9fzTophtBg8FJHSGbH7daXkEpcwy3v7Xol3pAvsmlYyFhR4pqJw==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/unist": "*", + "@types/vfile-message": "*" + } }, - "agent-base": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", - "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", + "@types/vfile-message": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/vfile-message/-/vfile-message-1.0.1.tgz", + "integrity": "sha512-mlGER3Aqmq7bqR1tTTIVHq8KSAFFRyGbrxuM8C/H82g6k7r2fS+IMEkIu3D7JHzG10NvPdR8DNx0jr0pwpp4dA==", "dev": true, "requires": { - "es6-promisify": "^5.0.0" + "@types/node": "*", + "@types/unist": "*" } }, - "agentkeepalive": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-3.5.2.tgz", - "integrity": "sha512-e0L/HNe6qkQ7H19kTlRRqUibEAwDK5AFk6y3PtMsuut2VAH6+Q4xZml1tNDJD7kSAyqmbG/K08K5WEJYtUrSlQ==", + "@types/webpack": { + "version": "4.41.16", + "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.16.tgz", + "integrity": "sha512-w80nXwCcXwwgv7rkTXb8lET6nWPNNUJxa36lrA2DEkD5TcPpHrlGAPrjdpZnkFX/FXSSuN5IIxCYowAB1Vobtw==", "dev": true, "requires": { - "humanize-ms": "^1.2.1" + "@types/anymatch": "*", + "@types/node": "*", + "@types/tapable": "*", + "@types/uglify-js": "*", + "@types/webpack-sources": "*", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } } }, - "aggregate-error": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.0.0.tgz", - "integrity": "sha512-yKD9kEoJIR+2IFqhMwayIBgheLYbB3PS2OBhWae1L/ODTd/JF/30cW0bc9TqzRL3k4U41Dieu3BF4I29p8xesA==", + "@types/webpack-env": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/@types/webpack-env/-/webpack-env-1.16.2.tgz", + "integrity": "sha512-vKx7WNQNZDyJveYcHAm9ZxhqSGLYwoyLhrHjLBOkw3a7cT76sTdjgtwyijhk1MaHyRIuSztcVwrUOO/NEu68Dw==", + "dev": true + }, + "@types/webpack-sources": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-0.1.7.tgz", + "integrity": "sha512-XyaHrJILjK1VHVC4aVlKsdNN5KBTwufMb43cQs+flGxtPAf/1Qwl8+Q0tp5BwEGaI8D6XT1L+9bSWXckgkjTLw==", "dev": true, "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^3.2.0" + "@types/node": "*", + "@types/source-list-map": "*", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } } }, - "airbnb-js-shims": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/airbnb-js-shims/-/airbnb-js-shims-2.2.1.tgz", - "integrity": "sha512-wJNXPH66U2xjgo1Zwyjf9EydvJ2Si94+vSdk6EERcBfB2VZkeltpqIats0cqIZMLCXP3zcyaUKGYQeIBT6XjsQ==", + "@types/yargs": { + "version": "15.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.4.tgz", + "integrity": "sha512-9T1auFmbPZoxHz0enUFlUuKRy3it01R+hlggyVUMtnCTQRunsQYifnSGb8hET4Xo8yiC0o0r1paW3ud5+rbURg==", + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-13.1.0.tgz", + "integrity": "sha512-gCubfBUZ6KxzoibJ+SCUc/57Ms1jz5NjHe4+dI2krNmU5zCPAphyLJYyTOg06ueIyfj+SaCUqmzun7ImlxDcKg==" + }, + "@types/yauzl": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.2.tgz", + "integrity": "sha512-8uALY5LTvSuHgloDVUvWP3pIauILm+8/0pDMokuDYIoNsOkSwd5AiHBTSEJjKTDcZr5z8UpgOWZkxBF4iJftoA==", "dev": true, + "optional": true, "requires": { - "array-includes": "^3.0.3", - "array.prototype.flat": "^1.2.1", - "array.prototype.flatmap": "^1.2.1", - "es5-shim": "^4.5.13", - "es6-shim": "^0.35.5", - "function.prototype.name": "^1.1.0", - "globalthis": "^1.0.0", - "object.entries": "^1.1.0", - "object.fromentries": "^2.0.0 || ^1.0.0", - "object.getownpropertydescriptors": "^2.0.3", - "object.values": "^1.1.0", - "promise.allsettled": "^1.0.0", - "promise.prototype.finally": "^3.1.0", - "string.prototype.matchall": "^4.0.0 || ^3.0.1", - "string.prototype.padend": "^3.0.0", - "string.prototype.padstart": "^3.0.0", - "symbol.prototype.description": "^1.0.0" + "@types/node": "*" + } + }, + "@typescript-eslint/eslint-plugin": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.3.0.tgz", + "integrity": "sha512-ARUEJHJrq85aaiCqez7SANeahDsJTD3AEua34EoQN9pHS6S5Bq9emcIaGGySt/4X2zSi+vF5hAH52sEen7IO7g==", + "dev": true, + "requires": { + "@typescript-eslint/experimental-utils": "5.3.0", + "@typescript-eslint/scope-manager": "5.3.0", + "debug": "^4.3.2", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.1.8", + "regexpp": "^3.2.0", + "semver": "^7.3.5", + "tsutils": "^3.21.0" }, "dependencies": { - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dev": true, "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "ms": "2.1.2" } }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@typescript-eslint/experimental-utils": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.3.0.tgz", + "integrity": "sha512-NFVxYTjKj69qB0FM+piah1x3G/63WB8vCBMnlnEHUsiLzXSTWb9FmFn36FD9Zb4APKBLY3xRArOGSMQkuzTF1w==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.3.0", + "@typescript-eslint/types": "5.3.0", + "@typescript-eslint/typescript-estree": "5.3.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + }, + "dependencies": { + "@types/json-schema": { + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", + "dev": true }, - "es-abstract": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", - "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.3", - "is-string": "^1.0.6", - "object-inspect": "^1.10.3", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" - }, - "dependencies": { - "get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - } - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - } + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" } }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", "dev": true, "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "eslint-visitor-keys": "^2.0.0" } }, - "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true - }, - "is-callable": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true - }, - "is-regex": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", - "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", + } + } + }, + "@typescript-eslint/parser": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.3.0.tgz", + "integrity": "sha512-rKu/yAReip7ovx8UwOAszJVO5MgBquo8WjIQcp1gx4pYQCwYzag+I5nVNHO4MqyMkAo0gWt2gWUi+36gWAVKcw==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.3.0", + "@typescript-eslint/types": "5.3.0", + "@typescript-eslint/typescript-estree": "5.3.0", + "debug": "^4.3.2" + }, + "dependencies": { + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "has-symbols": "^1.0.2" + "ms": "2.1.2" } }, - "is-string": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", - "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@typescript-eslint/scope-manager": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.3.0.tgz", + "integrity": "sha512-22Uic9oRlTsPppy5Tcwfj+QET5RWEnZ5414Prby465XxQrQFZ6nnm5KnXgnsAJefG4hEgMnaxTB3kNEyjdjj6A==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.3.0", + "@typescript-eslint/visitor-keys": "5.3.0" + } + }, + "@typescript-eslint/types": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.3.0.tgz", + "integrity": "sha512-fce5pG41/w8O6ahQEhXmMV+xuh4+GayzqEogN24EK+vECA3I6pUwKuLi5QbXO721EMitpQne5VKXofPonYlAQg==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.3.0.tgz", + "integrity": "sha512-FJ0nqcaUOpn/6Z4Jwbtf+o0valjBLkqc3MWkMvrhA2TvzFXtcclIM8F4MBEmYa2kgcI8EZeSAzwoSrIC8JYkug==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.3.0", + "@typescript-eslint/visitor-keys": "5.3.0", + "debug": "^4.3.2", + "globby": "^11.0.4", + "is-glob": "^4.0.3", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "dependencies": { + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true }, - "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dev": true, "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - }, - "dependencies": { - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - } + "ms": "2.1.2" } }, - "object.entries": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.4.tgz", - "integrity": "sha512-h4LWKWE+wKQGhtMjZEBud7uLGhqyLwj8fpHOarZhD2uY3C9cRtk57VQ89ke3moByLXMedqs3XCHzyb4AmA2DjA==", + "globby": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", + "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.2" + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" } }, - "string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "is-extglob": "^2.1.1" } }, - "string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true } } }, - "airbnb-prop-types": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/airbnb-prop-types/-/airbnb-prop-types-2.16.0.tgz", - "integrity": "sha512-7WHOFolP/6cS96PhKNrslCLMYAI8yB1Pp6u6XmxozQOiZbsI5ycglZr5cHhBFfuRcQQjzCMith5ZPZdYiJCxUg==", + "@typescript-eslint/visitor-keys": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.3.0.tgz", + "integrity": "sha512-oVIAfIQuq0x2TFDNLVavUn548WL+7hdhxYn+9j3YdJJXB7mH9dAmZNJsPDa7Jc+B9WGqoiex7GUDbyMxV0a/aw==", + "dev": true, "requires": { - "array.prototype.find": "^2.1.1", - "function.prototype.name": "^1.1.2", - "is-regex": "^1.1.0", - "object-is": "^1.1.2", - "object.assign": "^4.1.0", - "object.entries": "^1.1.2", - "prop-types": "^15.7.2", - "prop-types-exact": "^1.2.0", - "react-is": "^16.13.1" + "@typescript-eslint/types": "5.3.0", + "eslint-visitor-keys": "^3.0.0" }, "dependencies": { - "array.prototype.find": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/array.prototype.find/-/array.prototype.find-2.1.1.tgz", - "integrity": "sha512-mi+MYNJYLTx2eNYy+Yh6raoQacCsNeeMUaspFPh9Y141lFSsWxxB8V9mM2ye+eqiRs917J6/pJ4M9ZPzenWckA==", - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.4" - } - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "requires": { - "object-keys": "^1.0.12" - } - }, - "es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - }, - "dependencies": { - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - } - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "function.prototype.name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.3.tgz", - "integrity": "sha512-H51qkbNSp8mtkJt+nyW1gyStBiKZxfRqySNUR99ylq6BPXHKI4SEvIlTKp4odLfjRKJV04DFWMU3G/YRlQOsag==", - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "functions-have-names": "^1.2.1" - }, - "dependencies": { - "es-abstract": { - "version": "1.18.0-next.2", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.2.tgz", - "integrity": "sha512-Ih4ZMFHEtZupnUh6497zEL4y2+w8+1ljnCyaTa+adcoafI1GOvMwFlDjBLfWR7y9VLfrjRJe9ocuHY1PSR9jjw==", - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.1", - "object-inspect": "^1.9.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.3", - "string.prototype.trimstart": "^1.0.3" - }, - "dependencies": { - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - } - } - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - } - } - }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" - }, - "is-callable": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", - "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==" - }, - "is-regex": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", - "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", - "requires": { - "has-symbols": "^1.0.1" - } - }, - "is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", - "requires": { - "has-symbols": "^1.0.1" - } - }, - "object-inspect": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", - "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==" - }, - "object-is": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.4.tgz", - "integrity": "sha512-1ZvAZ4wlF7IyPVOcE1Omikt7UpaFlOQq0HlSti+ZvDH3UiD2brwGMwDbyV43jao2bKJ+4+WdPJHSd7kgzKYVqg==", - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" - } - }, - "object.entries": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.3.tgz", - "integrity": "sha512-ym7h7OZebNS96hn5IJeyUmaWhaSM4SVtAPPfNLQEI2MYWCO2egsITb9nab2+i/Pwibx+R0mtn+ltKJXRSeTMGg==", - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "has": "^1.0.3" - }, - "dependencies": { - "es-abstract": { - "version": "1.18.0-next.2", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.2.tgz", - "integrity": "sha512-Ih4ZMFHEtZupnUh6497zEL4y2+w8+1ljnCyaTa+adcoafI1GOvMwFlDjBLfWR7y9VLfrjRJe9ocuHY1PSR9jjw==", - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.1", - "object-inspect": "^1.9.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.3", - "string.prototype.trimstart": "^1.0.3" - }, - "dependencies": { - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - } - } - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - } - } - }, - "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "string.prototype.trimend": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz", - "integrity": "sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw==", - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" - } + "eslint-visitor-keys": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.0.0.tgz", + "integrity": "sha512-mJOZa35trBTb3IyRmo8xmKBZlxf+N7OnUl4+ZhJHs/r+0770Wh/LEACE2pqMGMe27G/4y8P2bYGk4J70IC5k1Q==", + "dev": true } } }, - "ajv": { - "version": "6.10.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", - "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", + "@use-gesture/core": { + "version": "10.2.6", + "resolved": "https://registry.npmjs.org/@use-gesture/core/-/core-10.2.6.tgz", + "integrity": "sha512-+GpVSEoCLv1OeZ+qgAV+tLUKit1LKgKO3PgIiEVZqNr4A/YTXzbC1unlThpfzwyj5Dx22UxHDh0UfgRrQ9Lb1w==" + }, + "@use-gesture/react": { + "version": "10.2.6", + "resolved": "https://registry.npmjs.org/@use-gesture/react/-/react-10.2.6.tgz", + "integrity": "sha512-s/QDhKvsQVaSNq1ljRBMR2PWRkOp9BmoI+kgZR1DsHUSp5XDORtU33D5TZfJoWnD5X3E9SmePikPl66dDaEeDA==", + "requires": { + "@use-gesture/core": "10.2.6" + } + }, + "@webassemblyjs/ast": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", + "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", "dev": true, "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" } }, - "ajv-errors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", - "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", + "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", "dev": true }, - "ajv-keywords": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz", - "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==", + "@webassemblyjs/helper-api-error": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", + "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", "dev": true }, - "alphanum-sort": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", - "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", + "@webassemblyjs/helper-buffer": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", + "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", "dev": true }, - "anser": { - "version": "1.4.10", - "resolved": "https://registry.npmjs.org/anser/-/anser-1.4.10.tgz", - "integrity": "sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww==" - }, - "ansi-align": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", - "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", + "@webassemblyjs/helper-code-frame": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", + "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", "dev": true, "requires": { - "string-width": "^3.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } + "@webassemblyjs/wast-printer": "1.9.0" } }, - "ansi-escapes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", - "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==", + "@webassemblyjs/helper-fsm": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", + "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", "dev": true }, - "ansi-fragments": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/ansi-fragments/-/ansi-fragments-0.2.1.tgz", - "integrity": "sha512-DykbNHxuXQwUDRv5ibc2b0x7uw7wmwOGLBUd5RmaQ5z8Lhx19vwvKV+FAsM5rEA6dEcHxX+/Ad5s9eF2k2bB+w==", + "@webassemblyjs/helper-module-context": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", + "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", + "dev": true, "requires": { - "colorette": "^1.0.7", - "slice-ansi": "^2.0.0", - "strip-ansi": "^5.0.0" + "@webassemblyjs/ast": "1.9.0" + } + }, + "@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "dev": true, + "requires": { + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" }, "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" - }, - "slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", - "requires": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" - } + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", + "dev": true }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "requires": { - "ansi-regex": "^4.1.0" - } + "@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", + "dev": true } } }, - "ansi-html": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", - "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", - "dev": true - }, - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", + "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", "dev": true }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "@webassemblyjs/helper-wasm-section": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", + "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", + "dev": true, "requires": { - "color-convert": "^1.9.0" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0" } }, - "ansi-to-html": { - "version": "0.6.15", - "resolved": "https://registry.npmjs.org/ansi-to-html/-/ansi-to-html-0.6.15.tgz", - "integrity": "sha512-28ijx2aHJGdzbs+O5SNQF65r6rrKYnkuwTYm8lZlChuoJ9P1vVzIpWO20sQTqTPDXYp6NFwk326vApTtLVFXpQ==", + "@webassemblyjs/ieee754": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", + "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", "dev": true, "requires": { - "entities": "^2.0.0" - }, - "dependencies": { - "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", + "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", + "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", + "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/helper-wasm-section": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-opt": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", + "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", + "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", + "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "@webassemblyjs/wast-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", + "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/floating-point-hex-parser": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-code-frame": "1.9.0", + "@webassemblyjs/helper-fsm": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", + "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "@webpack-cli/configtest": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.1.0.tgz", + "integrity": "sha512-ttOkEkoalEHa7RaFYpM0ErK1xc4twg3Am9hfHhL7MVqlHebnkYd2wuI/ZqTDj0cVzZho6PdinY0phFZV3O0Mzg==", + "dev": true + }, + "@webpack-cli/info": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.4.0.tgz", + "integrity": "sha512-F6b+Man0rwE4n0409FyAJHStYA5OIZERxmnUfLVwv0mc0V1wLad3V7jqRlMkgKBeAq07jUvglacNaa6g9lOpuw==", + "dev": true, + "requires": { + "envinfo": "^7.7.3" + }, + "dependencies": { + "envinfo": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", + "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", "dev": true } } }, - "any-observable": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/any-observable/-/any-observable-0.3.0.tgz", - "integrity": "sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog==", + "@webpack-cli/serve": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.6.0.tgz", + "integrity": "sha512-ZkVeqEmRpBV2GHvjjUZqEai2PpUbuq8Bqd//vEYsp63J8WyexI8ppCqVS3Zs0QADf6aWuPdU+0XsPI647PVlQA==", "dev": true }, - "any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=", + "@wojtekmaj/enzyme-adapter-react-17": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@wojtekmaj/enzyme-adapter-react-17/-/enzyme-adapter-react-17-0.6.3.tgz", + "integrity": "sha512-Kp1ZJxtHkKEnUksaWrcMABNTOgL4wOt8VI6k2xOek2aH9PtZcWRXJNUEgnKrdJrqg5UqIjRslbVF9uUqwQJtFg==", + "dev": true, + "requires": { + "@wojtekmaj/enzyme-adapter-utils": "^0.1.1", + "enzyme-shallow-equal": "^1.0.0", + "has": "^1.0.0", + "object.assign": "^4.1.0", + "object.values": "^1.1.0", + "prop-types": "^15.7.0", + "react-is": "^17.0.2", + "react-test-renderer": "^17.0.0" + }, + "dependencies": { + "react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + } + } + }, + "@wojtekmaj/enzyme-adapter-utils": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@wojtekmaj/enzyme-adapter-utils/-/enzyme-adapter-utils-0.1.1.tgz", + "integrity": "sha512-bNPWtN/d8huKOkC6j1E3EkSamnRrHHT7YuR6f9JppAQqtoAm3v4/vERe4J14jQKmHLCyEBHXrlgb7H6l817hVg==", + "dev": true, + "requires": { + "function.prototype.name": "^1.1.0", + "has": "^1.0.0", + "object.assign": "^4.1.0", + "object.fromentries": "^2.0.0", + "prop-types": "^15.7.0" + } + }, + "@wordpress/a11y": { + "version": "file:packages/a11y", + "requires": { + "@babel/runtime": "^7.16.0", + "@wordpress/dom-ready": "file:packages/dom-ready", + "@wordpress/i18n": "file:packages/i18n" + } + }, + "@wordpress/annotations": { + "version": "file:packages/annotations", + "requires": { + "@babel/runtime": "^7.16.0", + "@wordpress/data": "file:packages/data", + "@wordpress/hooks": "file:packages/hooks", + "@wordpress/i18n": "file:packages/i18n", + "@wordpress/rich-text": "file:packages/rich-text", + "lodash": "^4.17.21", + "rememo": "^3.0.0", + "uuid": "^8.3.0" + } + }, + "@wordpress/api-fetch": { + "version": "file:packages/api-fetch", + "requires": { + "@babel/runtime": "^7.16.0", + "@wordpress/i18n": "file:packages/i18n", + "@wordpress/url": "file:packages/url" + } + }, + "@wordpress/autop": { + "version": "file:packages/autop", + "requires": { + "@babel/runtime": "^7.16.0" + } + }, + "@wordpress/babel-plugin-import-jsx-pragma": { + "version": "file:packages/babel-plugin-import-jsx-pragma", "dev": true }, - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "@wordpress/babel-plugin-makepot": { + "version": "file:packages/babel-plugin-makepot", + "dev": true, "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" + "gettext-parser": "^1.3.1", + "lodash": "^4.17.21" } }, - "app-root-dir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/app-root-dir/-/app-root-dir-1.0.2.tgz", - "integrity": "sha1-OBh+wt6nV3//Az/8sSFyaS/24Rg=", + "@wordpress/babel-preset-default": { + "version": "file:packages/babel-preset-default", + "dev": true, + "requires": { + "@babel/core": "^7.16.0", + "@babel/plugin-transform-react-jsx": "^7.16.0", + "@babel/plugin-transform-runtime": "^7.16.0", + "@babel/preset-env": "^7.16.0", + "@babel/preset-typescript": "^7.16.0", + "@babel/runtime": "^7.16.0", + "@wordpress/babel-plugin-import-jsx-pragma": "file:packages/babel-plugin-import-jsx-pragma", + "@wordpress/browserslist-config": "file:packages/browserslist-config", + "@wordpress/element": "file:packages/element", + "@wordpress/warning": "file:packages/warning", + "browserslist": "^4.17.6", + "core-js": "^3.19.1" + } + }, + "@wordpress/base-styles": { + "version": "file:packages/base-styles", "dev": true }, - "app-root-path": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-2.2.1.tgz", - "integrity": "sha512-91IFKeKk7FjfmezPKkwtaRvSpnUc4gDwPAjA1YZ9Gn0q0PPeW+vbeUsZuyDwjI7+QTHhcLen2v25fi/AmhvbJA==" + "@wordpress/blob": { + "version": "file:packages/blob", + "requires": { + "@babel/runtime": "^7.16.0" + } }, - "appdirsjs": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/appdirsjs/-/appdirsjs-1.2.4.tgz", - "integrity": "sha512-WO5StDORR6JF/xYnXk/Fm0yu+iULaV5ULKuUw0Tu+jbgiTlSquaWBCgbpnsHLMXldf+fM3Gxn5p7vjond7He6w==" + "@wordpress/block-directory": { + "version": "file:packages/block-directory", + "requires": { + "@babel/runtime": "^7.16.0", + "@wordpress/a11y": "file:packages/a11y", + "@wordpress/api-fetch": "file:packages/api-fetch", + "@wordpress/block-editor": "file:packages/block-editor", + "@wordpress/blocks": "file:packages/blocks", + "@wordpress/components": "file:packages/components", + "@wordpress/compose": "file:packages/compose", + "@wordpress/core-data": "file:packages/core-data", + "@wordpress/data": "file:packages/data", + "@wordpress/edit-post": "file:packages/edit-post", + "@wordpress/editor": "file:packages/editor", + "@wordpress/element": "file:packages/element", + "@wordpress/hooks": "file:packages/hooks", + "@wordpress/html-entities": "file:packages/html-entities", + "@wordpress/i18n": "file:packages/i18n", + "@wordpress/icons": "file:packages/icons", + "@wordpress/notices": "file:packages/notices", + "@wordpress/plugins": "file:packages/plugins", + "@wordpress/url": "file:packages/url", + "lodash": "^4.17.21" + } }, - "appium": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/appium/-/appium-1.20.2.tgz", - "integrity": "sha512-4uQ47RmQn01L1X1rjCUcs6KHL0nWuOpTZ4v5roeHZfj5mRo29w8nUD9TKKh7yuu1uNsuQaWbjOlIuzjo6TtiOQ==", - "dev": true, + "@wordpress/block-editor": { + "version": "file:packages/block-editor", "requires": { - "@babel/runtime": "^7.6.0", - "appium-android-driver": "^4.20.0", - "appium-base-driver": "^7.0.0", - "appium-espresso-driver": "^1.0.0", - "appium-fake-driver": "^1.x", - "appium-flutter-driver": "^0", - "appium-geckodriver": "^0.3.0", - "appium-ios-driver": "4.x", - "appium-mac-driver": "1.x", - "appium-mac2-driver": "^0", - "appium-safari-driver": "^2.1.0", - "appium-support": "2.x", - "appium-tizen-driver": "^1.1.1-beta.4", - "appium-uiautomator2-driver": "^1.61.2", - "appium-windows-driver": "1.x", - "appium-xcuitest-driver": "^3.33.1", - "appium-youiengine-driver": "^1.2.0", - "argparse": "^2.0.1", - "async-lock": "^1.0.0", - "asyncbox": "2.x", - "axios": "^0.21.0", - "bluebird": "3.x", - "continuation-local-storage": "3.x", - "find-root": "^1.1.0", - "lodash": "^4.17.11", - "longjohn": "^0.2.12", - "npmlog": "4.x", - "semver": "^7.0.0", - "source-map-support": "0.x", - "teen_process": "1.x", - "winston": "3.x", - "word-wrap": "^1.2.3" + "@babel/runtime": "^7.16.0", + "@react-spring/web": "^9.4.5", + "@wordpress/a11y": "file:packages/a11y", + "@wordpress/api-fetch": "file:packages/api-fetch", + "@wordpress/blob": "file:packages/blob", + "@wordpress/blocks": "file:packages/blocks", + "@wordpress/components": "file:packages/components", + "@wordpress/compose": "file:packages/compose", + "@wordpress/data": "file:packages/data", + "@wordpress/date": "file:packages/date", + "@wordpress/deprecated": "file:packages/deprecated", + "@wordpress/dom": "file:packages/dom", + "@wordpress/element": "file:packages/element", + "@wordpress/hooks": "file:packages/hooks", + "@wordpress/html-entities": "file:packages/html-entities", + "@wordpress/i18n": "file:packages/i18n", + "@wordpress/icons": "file:packages/icons", + "@wordpress/is-shallow-equal": "file:packages/is-shallow-equal", + "@wordpress/keyboard-shortcuts": "file:packages/keyboard-shortcuts", + "@wordpress/keycodes": "file:packages/keycodes", + "@wordpress/notices": "file:packages/notices", + "@wordpress/rich-text": "file:packages/rich-text", + "@wordpress/shortcode": "file:packages/shortcode", + "@wordpress/style-engine": "file:packages/style-engine", + "@wordpress/token-list": "file:packages/token-list", + "@wordpress/url": "file:packages/url", + "@wordpress/warning": "file:packages/warning", + "@wordpress/wordcount": "file:packages/wordcount", + "classnames": "^2.3.1", + "colord": "^2.7.0", + "diff": "^4.0.2", + "dom-scroll-into-view": "^1.2.1", + "inherits": "^2.0.3", + "lodash": "^4.17.21", + "react-autosize-textarea": "^7.1.0", + "react-easy-crop": "^3.0.0", + "rememo": "^3.0.0", + "traverse": "^0.6.6" }, "dependencies": { - "101": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/101/-/101-1.6.3.tgz", - "integrity": "sha512-4dmQ45yY0Dx24Qxp+zAsNLlMF6tteCyfVzgbulvSyC7tCyd3V8sW76sS0tHq8NpcbXfWTKasfyfzU1Kd86oKzw==", - "dev": true, + "@react-spring/animated": { + "version": "9.4.5", + "resolved": "https://registry.npmjs.org/@react-spring/animated/-/animated-9.4.5.tgz", + "integrity": "sha512-KWqrtvJSMx6Fj9nMJkhTwM9r6LIriExDRV6YHZV9HKQsaolUFppgkOXpC+rsL1JEtEvKv6EkLLmSqHTnuYjiIA==", "requires": { - "clone": "^1.0.2", - "deep-eql": "^0.1.3", - "keypather": "^1.10.2" + "@react-spring/shared": "~9.4.5", + "@react-spring/types": "~9.4.5" } }, - "@babel/polyfill": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.12.1.tgz", - "integrity": "sha512-X0pi0V6gxLi6lFZpGmeNa4zxtwEmCs42isWLNjZZDE0Y8yVfgu0T2OAHlzBbdYlqbW/YXVvoBHpATEM+goCj8g==", - "dev": true, + "@react-spring/core": { + "version": "9.4.5", + "resolved": "https://registry.npmjs.org/@react-spring/core/-/core-9.4.5.tgz", + "integrity": "sha512-83u3FzfQmGMJFwZLAJSwF24/ZJctwUkWtyPD7KYtNagrFeQKUH1I05ZuhmCmqW+2w1KDW1SFWQ43RawqfXKiiQ==", "requires": { - "core-js": "^2.6.5", - "regenerator-runtime": "^0.13.4" + "@react-spring/animated": "~9.4.5", + "@react-spring/rafz": "~9.4.5", + "@react-spring/shared": "~9.4.5", + "@react-spring/types": "~9.4.5" } }, - "@babel/runtime": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", - "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", - "dev": true, + "@react-spring/rafz": { + "version": "9.4.5", + "resolved": "https://registry.npmjs.org/@react-spring/rafz/-/rafz-9.4.5.tgz", + "integrity": "sha512-swGsutMwvnoyTRxvqhfJBtGM8Ipx6ks0RkIpNX9F/U7XmyPvBMGd3GgX/mqxZUpdlsuI1zr/jiYw+GXZxAlLcQ==" + }, + "@react-spring/shared": { + "version": "9.4.5", + "resolved": "https://registry.npmjs.org/@react-spring/shared/-/shared-9.4.5.tgz", + "integrity": "sha512-JhMh3nFKsqyag0KM5IIM8BQANGscTdd0mMv3BXsUiMZrcjQTskyfnv5qxEeGWbJGGar52qr5kHuBHtCjQOzniA==", "requires": { - "regenerator-runtime": "^0.13.4" + "@react-spring/rafz": "~9.4.5", + "@react-spring/types": "~9.4.5" } }, - "@dabh/diagnostics": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.2.tgz", - "integrity": "sha512-+A1YivoVDNNVCdfozHSR8v/jyuuLTMXwjWuxPFlFlUapXoGc+Gj9mDlTDDfrwl7rXCl2tNZ0kE8sIBO6YOn96Q==", - "dev": true, + "@react-spring/types": { + "version": "9.4.5", + "resolved": "https://registry.npmjs.org/@react-spring/types/-/types-9.4.5.tgz", + "integrity": "sha512-mpRIamoHwql0ogxEUh9yr4TP0xU5CWyZxVQeccGkHHF8kPMErtDXJlxyo0lj+telRF35XNihtPTWoflqtyARmg==" + }, + "@react-spring/web": { + "version": "9.4.5", + "resolved": "https://registry.npmjs.org/@react-spring/web/-/web-9.4.5.tgz", + "integrity": "sha512-NGAkOtKmOzDEctL7MzRlQGv24sRce++0xAY7KlcxmeVkR7LRSGkoXHaIfm9ObzxPMcPHQYQhf3+X9jepIFNHQA==", "requires": { - "colorspace": "1.1.x", - "enabled": "2.0.x", - "kuler": "^2.0.0" + "@react-spring/animated": "~9.4.5", + "@react-spring/core": "~9.4.5", + "@react-spring/shared": "~9.4.5", + "@react-spring/types": "~9.4.5" } }, - "@jimp/bmp": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@jimp/bmp/-/bmp-0.14.0.tgz", - "integrity": "sha512-5RkX6tSS7K3K3xNEb2ygPuvyL9whjanhoaB/WmmXlJS6ub4DjTqrapu8j4qnIWmO4YYtFeTbDTXV6v9P1yMA5A==", - "dev": true, + "colord": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.7.0.tgz", + "integrity": "sha512-pZJBqsHz+pYyw3zpX6ZRXWoCHM1/cvFikY9TV8G3zcejCaKE0lhankoj8iScyrrePA8C7yJ5FStfA9zbcOnw7Q==" + } + } + }, + "@wordpress/block-library": { + "version": "file:packages/block-library", + "requires": { + "@babel/runtime": "^7.16.0", + "@wordpress/a11y": "file:packages/a11y", + "@wordpress/api-fetch": "file:packages/api-fetch", + "@wordpress/autop": "file:packages/autop", + "@wordpress/blob": "file:packages/blob", + "@wordpress/block-editor": "file:packages/block-editor", + "@wordpress/blocks": "file:packages/blocks", + "@wordpress/components": "file:packages/components", + "@wordpress/compose": "file:packages/compose", + "@wordpress/core-data": "file:packages/core-data", + "@wordpress/data": "file:packages/data", + "@wordpress/date": "file:packages/date", + "@wordpress/deprecated": "file:packages/deprecated", + "@wordpress/dom": "file:packages/dom", + "@wordpress/element": "file:packages/element", + "@wordpress/hooks": "file:packages/hooks", + "@wordpress/html-entities": "file:packages/html-entities", + "@wordpress/i18n": "file:packages/i18n", + "@wordpress/icons": "file:packages/icons", + "@wordpress/keycodes": "file:packages/keycodes", + "@wordpress/notices": "file:packages/notices", + "@wordpress/primitives": "file:packages/primitives", + "@wordpress/reusable-blocks": "file:packages/reusable-blocks", + "@wordpress/rich-text": "file:packages/rich-text", + "@wordpress/server-side-render": "file:packages/server-side-render", + "@wordpress/url": "file:packages/url", + "@wordpress/viewport": "file:packages/viewport", + "classnames": "^2.3.1", + "colord": "^2.7.0", + "fast-average-color": "4.3.0", + "lodash": "^4.17.21", + "memize": "^1.1.0", + "micromodal": "^0.4.10", + "moment": "^2.22.1" + }, + "dependencies": { + "colord": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.8.0.tgz", + "integrity": "sha512-kNkVV4KFta3TYQv0bzs4xNwLaeag261pxgzGQSh4cQ1rEhYjcTJfFRP0SDlbhLONg0eSoLzrDd79PosjbltufA==" + } + } + }, + "@wordpress/block-serialization-default-parser": { + "version": "file:packages/block-serialization-default-parser", + "requires": { + "@babel/runtime": "^7.16.0" + } + }, + "@wordpress/block-serialization-spec-parser": { + "version": "file:packages/block-serialization-spec-parser", + "requires": { + "pegjs": "^0.10.0", + "phpegjs": "^1.0.0-beta7" + } + }, + "@wordpress/blocks": { + "version": "file:packages/blocks", + "requires": { + "@babel/runtime": "^7.16.0", + "@wordpress/autop": "file:packages/autop", + "@wordpress/blob": "file:packages/blob", + "@wordpress/block-serialization-default-parser": "file:packages/block-serialization-default-parser", + "@wordpress/compose": "file:packages/compose", + "@wordpress/data": "file:packages/data", + "@wordpress/deprecated": "file:packages/deprecated", + "@wordpress/dom": "file:packages/dom", + "@wordpress/element": "file:packages/element", + "@wordpress/hooks": "file:packages/hooks", + "@wordpress/html-entities": "file:packages/html-entities", + "@wordpress/i18n": "file:packages/i18n", + "@wordpress/is-shallow-equal": "file:packages/is-shallow-equal", + "@wordpress/shortcode": "file:packages/shortcode", + "colord": "^2.7.0", + "hpq": "^1.3.0", + "lodash": "^4.17.21", + "memize": "^1.1.0", + "rememo": "^3.0.0", + "showdown": "^1.9.1", + "simple-html-tokenizer": "^0.5.7", + "uuid": "^8.3.0" + }, + "dependencies": { + "colord": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.8.0.tgz", + "integrity": "sha512-kNkVV4KFta3TYQv0bzs4xNwLaeag261pxgzGQSh4cQ1rEhYjcTJfFRP0SDlbhLONg0eSoLzrDd79PosjbltufA==" + } + } + }, + "@wordpress/browserslist-config": { + "version": "file:packages/browserslist-config", + "dev": true + }, + "@wordpress/components": { + "version": "file:packages/components", + "requires": { + "@babel/runtime": "^7.16.0", + "@emotion/cache": "^11.7.1", + "@emotion/css": "^11.7.1", + "@emotion/react": "^11.7.1", + "@emotion/serialize": "^1.0.2", + "@emotion/styled": "^11.6.0", + "@emotion/utils": "1.0.0", + "@floating-ui/react-dom": "0.6.3", + "@use-gesture/react": "^10.2.6", + "@wordpress/a11y": "file:packages/a11y", + "@wordpress/compose": "file:packages/compose", + "@wordpress/date": "file:packages/date", + "@wordpress/deprecated": "file:packages/deprecated", + "@wordpress/dom": "file:packages/dom", + "@wordpress/element": "file:packages/element", + "@wordpress/escape-html": "file:packages/escape-html", + "@wordpress/hooks": "file:packages/hooks", + "@wordpress/i18n": "file:packages/i18n", + "@wordpress/icons": "file:packages/icons", + "@wordpress/is-shallow-equal": "file:packages/is-shallow-equal", + "@wordpress/keycodes": "file:packages/keycodes", + "@wordpress/primitives": "file:packages/primitives", + "@wordpress/rich-text": "file:packages/rich-text", + "@wordpress/warning": "file:packages/warning", + "classnames": "^2.3.1", + "colord": "^2.7.0", + "dom-scroll-into-view": "^1.2.1", + "downshift": "^6.0.15", + "framer-motion": "^6.2.8", + "gradient-parser": "^0.1.5", + "highlight-words-core": "^1.2.2", + "lodash": "^4.17.21", + "memize": "^1.1.0", + "moment": "^2.26.0", + "re-resizable": "^6.4.0", + "react-colorful": "^5.3.1", + "react-dates": "^21.8.0", + "reakit": "^1.3.8", + "uuid": "^8.3.0" + }, + "dependencies": { + "@emotion/serialize": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.0.2.tgz", + "integrity": "sha512-95MgNJ9+/ajxU7QIAruiOAdYNjxZX7G2mhgrtDWswA21VviYIRP1R5QilZ/bDY42xiKsaktP4egJb3QdYQZi1A==", "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0", - "bmp-js": "^0.1.0" + "@emotion/hash": "^0.8.0", + "@emotion/memoize": "^0.7.4", + "@emotion/unitless": "^0.7.5", + "@emotion/utils": "^1.0.0", + "csstype": "^3.0.2" } }, - "@jimp/core": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@jimp/core/-/core-0.14.0.tgz", - "integrity": "sha512-S62FcKdtLtj3yWsGfJRdFXSutjvHg7aQNiFogMbwq19RP4XJWqS2nOphu7ScB8KrSlyy5nPF2hkWNhLRLyD82w==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0", - "any-base": "^1.1.0", - "buffer": "^5.2.0", - "exif-parser": "^0.1.12", - "file-type": "^9.0.0", - "load-bmfont": "^1.3.1", - "mkdirp": "^0.5.1", - "phin": "^2.9.1", - "pixelmatch": "^4.0.2", - "tinycolor2": "^1.4.1" - }, - "dependencies": { - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - } + "colord": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.8.0.tgz", + "integrity": "sha512-kNkVV4KFta3TYQv0bzs4xNwLaeag261pxgzGQSh4cQ1rEhYjcTJfFRP0SDlbhLONg0eSoLzrDd79PosjbltufA==" + }, + "csstype": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.10.tgz", + "integrity": "sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA==" + }, + "moment": { + "version": "2.29.3", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.3.tgz", + "integrity": "sha512-c6YRvhEo//6T2Jz/vVtYzqBzwvPT95JBQ+smCytzf7c50oMZRsR/a4w88aD34I+/QVSfnoAnSBFPJHItlOMJVw==" + }, + "react-dates": { + "version": "21.8.0", + "resolved": "https://registry.npmjs.org/react-dates/-/react-dates-21.8.0.tgz", + "integrity": "sha512-PPriGqi30CtzZmoHiGdhlA++YPYPYGCZrhydYmXXQ6RAvAsaONcPtYgXRTLozIOrsQ5mSo40+DiA5eOFHnZ6xw==", + "requires": { + "airbnb-prop-types": "^2.15.0", + "consolidated-events": "^1.1.1 || ^2.0.0", + "enzyme-shallow-equal": "^1.0.0", + "is-touch-device": "^1.0.1", + "lodash": "^4.1.1", + "object.assign": "^4.1.0", + "object.values": "^1.1.0", + "prop-types": "^15.7.2", + "raf": "^3.4.1", + "react-moment-proptypes": "^1.6.0", + "react-outside-click-handler": "^1.2.4", + "react-portal": "^4.2.0", + "react-with-direction": "^1.3.1", + "react-with-styles": "^4.1.0", + "react-with-styles-interface-css": "^6.0.0" } }, - "@jimp/custom": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@jimp/custom/-/custom-0.14.0.tgz", - "integrity": "sha512-kQJMeH87+kWJdVw8F9GQhtsageqqxrvzg7yyOw3Tx/s7v5RToe8RnKyMM+kVtBJtNAG+Xyv/z01uYQ2jiZ3GwA==", - "dev": true, + "react-with-styles": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/react-with-styles/-/react-with-styles-4.2.0.tgz", + "integrity": "sha512-tZCTY27KriRNhwHIbg1NkSdTTOSfXDg6Z7s+Q37mtz0Ym7Sc7IOr3PzVt4qJhJMW6Nkvfi3g34FuhtiGAJCBQA==", "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/core": "^0.14.0" + "airbnb-prop-types": "^2.14.0", + "hoist-non-react-statics": "^3.2.1", + "object.assign": "^4.1.0", + "prop-types": "^15.7.2", + "react-with-direction": "^1.3.1" } }, - "@jimp/gif": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@jimp/gif/-/gif-0.14.0.tgz", - "integrity": "sha512-DHjoOSfCaCz72+oGGEh8qH0zE6pUBaBxPxxmpYJjkNyDZP7RkbBkZJScIYeQ7BmJxmGN4/dZn+MxamoQlr+UYg==", - "dev": true, + "react-with-styles-interface-css": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/react-with-styles-interface-css/-/react-with-styles-interface-css-6.0.0.tgz", + "integrity": "sha512-6khSG1Trf4L/uXOge/ZAlBnq2O2PEXlQEqAhCRbvzaQU4sksIkdwpCPEl6d+DtP3+IdhyffTWuHDO9lhe1iYvA==", "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0", - "gifwrap": "^0.9.2", - "omggif": "^1.0.9" - } - }, - "@jimp/jpeg": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@jimp/jpeg/-/jpeg-0.14.0.tgz", - "integrity": "sha512-561neGbr+87S/YVQYnZSTyjWTHBm9F6F1obYHiyU3wVmF+1CLbxY3FQzt4YolwyQHIBv36Bo0PY2KkkU8BEeeQ==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0", - "jpeg-js": "^0.4.0" - } - }, - "@jimp/plugin-blit": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@jimp/plugin-blit/-/plugin-blit-0.14.0.tgz", - "integrity": "sha512-YoYOrnVHeX3InfgbJawAU601iTZMwEBZkyqcP1V/S33Qnz9uzH1Uj1NtC6fNgWzvX6I4XbCWwtr4RrGFb5CFrw==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0" - } - }, - "@jimp/plugin-blur": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@jimp/plugin-blur/-/plugin-blur-0.14.0.tgz", - "integrity": "sha512-9WhZcofLrT0hgI7t0chf7iBQZib//0gJh9WcQMUt5+Q1Bk04dWs8vTgLNj61GBqZXgHSPzE4OpCrrLDBG8zlhQ==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0" - } - }, - "@jimp/plugin-circle": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@jimp/plugin-circle/-/plugin-circle-0.14.0.tgz", - "integrity": "sha512-o5L+wf6QA44tvTum5HeLyLSc5eVfIUd5ZDVi5iRfO4o6GT/zux9AxuTSkKwnjhsG8bn1dDmywAOQGAx7BjrQVA==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0" - } - }, - "@jimp/plugin-color": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@jimp/plugin-color/-/plugin-color-0.14.0.tgz", - "integrity": "sha512-JJz512SAILYV0M5LzBb9sbOm/XEj2fGElMiHAxb7aLI6jx+n0agxtHpfpV/AePTLm1vzzDxx6AJxXbKv355hBQ==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0", - "tinycolor2": "^1.4.1" - } - }, - "@jimp/plugin-contain": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@jimp/plugin-contain/-/plugin-contain-0.14.0.tgz", - "integrity": "sha512-RX2q233lGyaxiMY6kAgnm9ScmEkNSof0hdlaJAVDS1OgXphGAYAeSIAwzESZN4x3ORaWvkFefeVH9O9/698Evg==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0" - } - }, - "@jimp/plugin-cover": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@jimp/plugin-cover/-/plugin-cover-0.14.0.tgz", - "integrity": "sha512-0P/5XhzWES4uMdvbi3beUgfvhn4YuQ/ny8ijs5kkYIw6K8mHcl820HahuGpwWMx56DJLHRl1hFhJwo9CeTRJtQ==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0" - } - }, - "@jimp/plugin-crop": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@jimp/plugin-crop/-/plugin-crop-0.14.0.tgz", - "integrity": "sha512-Ojtih+XIe6/XSGtpWtbAXBozhCdsDMmy+THUJAGu2x7ZgKrMS0JotN+vN2YC3nwDpYkM+yOJImQeptSfZb2Sug==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0" + "array.prototype.flat": "^1.2.1", + "global-cache": "^1.2.1" } + } + } + }, + "@wordpress/compose": { + "version": "file:packages/compose", + "requires": { + "@babel/runtime": "^7.16.0", + "@types/lodash": "^4.14.172", + "@types/mousetrap": "^1.6.8", + "@wordpress/deprecated": "file:packages/deprecated", + "@wordpress/dom": "file:packages/dom", + "@wordpress/element": "file:packages/element", + "@wordpress/is-shallow-equal": "file:packages/is-shallow-equal", + "@wordpress/keycodes": "file:packages/keycodes", + "@wordpress/priority-queue": "file:packages/priority-queue", + "clipboard": "^2.0.8", + "lodash": "^4.17.21", + "mousetrap": "^1.6.5", + "use-memo-one": "^1.1.1" + } + }, + "@wordpress/core-data": { + "version": "file:packages/core-data", + "requires": { + "@babel/runtime": "^7.16.0", + "@wordpress/api-fetch": "file:packages/api-fetch", + "@wordpress/blocks": "file:packages/blocks", + "@wordpress/data": "file:packages/data", + "@wordpress/deprecated": "file:packages/deprecated", + "@wordpress/element": "file:packages/element", + "@wordpress/html-entities": "file:packages/html-entities", + "@wordpress/i18n": "file:packages/i18n", + "@wordpress/is-shallow-equal": "file:packages/is-shallow-equal", + "@wordpress/url": "file:packages/url", + "equivalent-key-map": "^0.2.2", + "lodash": "^4.17.21", + "memize": "^1.1.0", + "rememo": "^3.0.0", + "uuid": "^8.3.0" + } + }, + "@wordpress/create-block": { + "version": "file:packages/create-block", + "dev": true, + "requires": { + "@wordpress/lazy-import": "file:packages/lazy-import", + "chalk": "^4.0.0", + "check-node-version": "^4.1.0", + "commander": "^9.2.0", + "execa": "^4.0.2", + "fast-glob": "^3.2.7", + "inquirer": "^7.1.0", + "lodash": "^4.17.21", + "make-dir": "^3.0.0", + "mustache": "^4.0.0", + "npm-package-arg": "^8.1.5", + "rimraf": "^3.0.2", + "write-pkg": "^4.0.0" + } + }, + "@wordpress/create-block-tutorial-template": { + "version": "file:packages/create-block-tutorial-template", + "dev": true + }, + "@wordpress/customize-widgets": { + "version": "file:packages/customize-widgets", + "requires": { + "@babel/runtime": "^7.16.0", + "@wordpress/block-editor": "file:packages/block-editor", + "@wordpress/block-library": "file:packages/block-library", + "@wordpress/blocks": "file:packages/blocks", + "@wordpress/components": "file:packages/components", + "@wordpress/compose": "file:packages/compose", + "@wordpress/core-data": "file:packages/core-data", + "@wordpress/data": "file:packages/data", + "@wordpress/dom": "file:packages/dom", + "@wordpress/element": "file:packages/element", + "@wordpress/hooks": "file:packages/hooks", + "@wordpress/i18n": "file:packages/i18n", + "@wordpress/icons": "file:packages/icons", + "@wordpress/interface": "file:packages/interface", + "@wordpress/is-shallow-equal": "file:packages/is-shallow-equal", + "@wordpress/keyboard-shortcuts": "file:packages/keyboard-shortcuts", + "@wordpress/keycodes": "file:packages/keycodes", + "@wordpress/media-utils": "file:packages/media-utils", + "@wordpress/preferences": "file:packages/preferences", + "@wordpress/widgets": "file:packages/widgets", + "classnames": "^2.3.1", + "lodash": "^4.17.21" + } + }, + "@wordpress/data": { + "version": "file:packages/data", + "requires": { + "@babel/runtime": "^7.16.0", + "@wordpress/compose": "file:packages/compose", + "@wordpress/deprecated": "file:packages/deprecated", + "@wordpress/element": "file:packages/element", + "@wordpress/is-shallow-equal": "file:packages/is-shallow-equal", + "@wordpress/priority-queue": "file:packages/priority-queue", + "@wordpress/redux-routine": "file:packages/redux-routine", + "equivalent-key-map": "^0.2.2", + "is-promise": "^4.0.0", + "lodash": "^4.17.21", + "redux": "^4.1.2", + "turbo-combine-reducers": "^1.0.2", + "use-memo-one": "^1.1.1" + } + }, + "@wordpress/data-controls": { + "version": "file:packages/data-controls", + "requires": { + "@babel/runtime": "^7.16.0", + "@wordpress/api-fetch": "file:packages/api-fetch", + "@wordpress/data": "file:packages/data", + "@wordpress/deprecated": "file:packages/deprecated" + } + }, + "@wordpress/date": { + "version": "file:packages/date", + "requires": { + "@babel/runtime": "^7.16.0", + "moment": "^2.22.1", + "moment-timezone": "^0.5.31" + } + }, + "@wordpress/dependency-extraction-webpack-plugin": { + "version": "file:packages/dependency-extraction-webpack-plugin", + "dev": true, + "requires": { + "json2php": "^0.0.4", + "webpack-sources": "^3.2.2" + } + }, + "@wordpress/deprecated": { + "version": "file:packages/deprecated", + "requires": { + "@babel/runtime": "^7.16.0", + "@wordpress/hooks": "file:packages/hooks" + } + }, + "@wordpress/docgen": { + "version": "file:packages/docgen", + "dev": true, + "requires": { + "@babel/core": "^7.16.0", + "comment-parser": "^1.1.1", + "lodash": "^4.17.21", + "mdast-util-inject": "1.1.0", + "optionator": "0.8.2", + "remark": "10.0.1", + "remark-parse": "6.0.3", + "unified": "7.1.0" + } + }, + "@wordpress/dom": { + "version": "file:packages/dom", + "requires": { + "@babel/runtime": "^7.16.0", + "@wordpress/deprecated": "^3.8.0", + "lodash": "^4.17.21" + } + }, + "@wordpress/dom-ready": { + "version": "file:packages/dom-ready", + "requires": { + "@babel/runtime": "^7.16.0" + } + }, + "@wordpress/e2e-test-utils": { + "version": "file:packages/e2e-test-utils", + "dev": true, + "requires": { + "@babel/runtime": "^7.16.0", + "@wordpress/api-fetch": "file:packages/api-fetch", + "@wordpress/keycodes": "file:packages/keycodes", + "@wordpress/url": "file:packages/url", + "form-data": "^4.0.0", + "lodash": "^4.17.21", + "node-fetch": "^2.6.0" + } + }, + "@wordpress/e2e-test-utils-playwright": { + "version": "file:packages/e2e-test-utils-playwright", + "dev": true, + "requires": { + "@wordpress/api-fetch": "file:packages/api-fetch", + "@wordpress/keycodes": "file:packages/keycodes", + "@wordpress/url": "file:packages/url", + "form-data": "^4.0.0", + "lodash": "^4.17.21", + "role-selector": "0.5.0" + } + }, + "@wordpress/e2e-tests": { + "version": "file:packages/e2e-tests", + "dev": true, + "requires": { + "@wordpress/e2e-test-utils": "file:packages/e2e-test-utils", + "@wordpress/jest-console": "file:packages/jest-console", + "@wordpress/jest-puppeteer-axe": "file:packages/jest-puppeteer-axe", + "@wordpress/scripts": "file:packages/scripts", + "@wordpress/url": "file:packages/url", + "chalk": "^4.0.0", + "expect-puppeteer": "^4.4.0", + "filenamify": "^4.2.0", + "jest-message-util": "^27.4.2", + "jest-snapshot": "^27.4.5", + "lodash": "^4.17.21", + "puppeteer-testing-library": "^0.5.0", + "uuid": "^8.3.0" + } + }, + "@wordpress/edit-navigation": { + "version": "file:packages/edit-navigation", + "requires": { + "@babel/runtime": "^7.16.0", + "@wordpress/api-fetch": "file:packages/api-fetch", + "@wordpress/block-editor": "file:packages/block-editor", + "@wordpress/block-library": "file:packages/block-library", + "@wordpress/blocks": "file:packages/blocks", + "@wordpress/components": "file:packages/components", + "@wordpress/compose": "file:packages/compose", + "@wordpress/core-data": "file:packages/core-data", + "@wordpress/data": "file:packages/data", + "@wordpress/dom": "file:packages/dom", + "@wordpress/element": "file:packages/element", + "@wordpress/hooks": "file:packages/hooks", + "@wordpress/html-entities": "file:packages/html-entities", + "@wordpress/i18n": "file:packages/i18n", + "@wordpress/icons": "file:packages/icons", + "@wordpress/interface": "file:packages/interface", + "@wordpress/keyboard-shortcuts": "file:packages/keyboard-shortcuts", + "@wordpress/keycodes": "file:packages/keycodes", + "@wordpress/notices": "file:packages/notices", + "@wordpress/plugins": "file:packages/plugins", + "@wordpress/preferences": "file:packages/preferences", + "@wordpress/url": "file:packages/url", + "classnames": "^2.3.1", + "lodash": "^4.17.21" + } + }, + "@wordpress/edit-post": { + "version": "file:packages/edit-post", + "requires": { + "@babel/runtime": "^7.16.0", + "@wordpress/a11y": "file:packages/a11y", + "@wordpress/api-fetch": "file:packages/api-fetch", + "@wordpress/block-editor": "file:packages/block-editor", + "@wordpress/block-library": "file:packages/block-library", + "@wordpress/blocks": "file:packages/blocks", + "@wordpress/components": "file:packages/components", + "@wordpress/compose": "file:packages/compose", + "@wordpress/core-data": "file:packages/core-data", + "@wordpress/data": "file:packages/data", + "@wordpress/deprecated": "file:packages/deprecated", + "@wordpress/editor": "file:packages/editor", + "@wordpress/element": "file:packages/element", + "@wordpress/hooks": "file:packages/hooks", + "@wordpress/i18n": "file:packages/i18n", + "@wordpress/icons": "file:packages/icons", + "@wordpress/interface": "file:packages/interface", + "@wordpress/keyboard-shortcuts": "file:packages/keyboard-shortcuts", + "@wordpress/keycodes": "file:packages/keycodes", + "@wordpress/media-utils": "file:packages/media-utils", + "@wordpress/notices": "file:packages/notices", + "@wordpress/plugins": "file:packages/plugins", + "@wordpress/preferences": "file:packages/preferences", + "@wordpress/url": "file:packages/url", + "@wordpress/viewport": "file:packages/viewport", + "@wordpress/warning": "file:packages/warning", + "classnames": "^2.3.1", + "lodash": "^4.17.21", + "memize": "^1.1.0", + "rememo": "^3.0.0" + } + }, + "@wordpress/edit-site": { + "version": "file:packages/edit-site", + "requires": { + "@babel/runtime": "^7.16.0", + "@wordpress/a11y": "file:packages/a11y", + "@wordpress/api-fetch": "file:packages/api-fetch", + "@wordpress/block-editor": "file:packages/block-editor", + "@wordpress/block-library": "file:packages/block-library", + "@wordpress/blocks": "file:packages/blocks", + "@wordpress/components": "file:packages/components", + "@wordpress/compose": "file:packages/compose", + "@wordpress/core-data": "file:packages/core-data", + "@wordpress/data": "file:packages/data", + "@wordpress/deprecated": "file:packages/deprecated", + "@wordpress/editor": "file:packages/editor", + "@wordpress/element": "file:packages/element", + "@wordpress/hooks": "file:packages/hooks", + "@wordpress/html-entities": "file:packages/html-entities", + "@wordpress/i18n": "file:packages/i18n", + "@wordpress/icons": "file:packages/icons", + "@wordpress/interface": "file:packages/interface", + "@wordpress/keyboard-shortcuts": "file:packages/keyboard-shortcuts", + "@wordpress/keycodes": "file:packages/keycodes", + "@wordpress/media-utils": "file:packages/media-utils", + "@wordpress/notices": "file:packages/notices", + "@wordpress/plugins": "file:packages/plugins", + "@wordpress/preferences": "file:packages/preferences", + "@wordpress/reusable-blocks": "file:packages/reusable-blocks", + "@wordpress/style-engine": "file:packages/style-engine", + "@wordpress/url": "file:packages/url", + "@wordpress/viewport": "file:packages/viewport", + "classnames": "^2.3.1", + "downloadjs": "^1.4.7", + "history": "^5.1.0", + "lodash": "^4.17.21", + "react-autosize-textarea": "^7.1.0", + "rememo": "^3.0.0" + } + }, + "@wordpress/edit-widgets": { + "version": "file:packages/edit-widgets", + "requires": { + "@babel/runtime": "^7.16.0", + "@wordpress/api-fetch": "file:packages/api-fetch", + "@wordpress/block-editor": "file:packages/block-editor", + "@wordpress/block-library": "file:packages/block-library", + "@wordpress/blocks": "file:packages/blocks", + "@wordpress/components": "file:packages/components", + "@wordpress/compose": "file:packages/compose", + "@wordpress/core-data": "file:packages/core-data", + "@wordpress/data": "file:packages/data", + "@wordpress/deprecated": "file:packages/deprecated", + "@wordpress/dom": "file:packages/dom", + "@wordpress/element": "file:packages/element", + "@wordpress/hooks": "file:packages/hooks", + "@wordpress/i18n": "file:packages/i18n", + "@wordpress/icons": "file:packages/icons", + "@wordpress/interface": "file:packages/interface", + "@wordpress/keyboard-shortcuts": "file:packages/keyboard-shortcuts", + "@wordpress/keycodes": "file:packages/keycodes", + "@wordpress/media-utils": "file:packages/media-utils", + "@wordpress/notices": "file:packages/notices", + "@wordpress/plugins": "file:packages/plugins", + "@wordpress/preferences": "file:packages/preferences", + "@wordpress/reusable-blocks": "file:packages/reusable-blocks", + "@wordpress/url": "file:packages/url", + "@wordpress/widgets": "file:packages/widgets", + "classnames": "^2.3.1", + "lodash": "^4.17.21" + } + }, + "@wordpress/editor": { + "version": "file:packages/editor", + "requires": { + "@babel/runtime": "^7.16.0", + "@wordpress/a11y": "file:packages/a11y", + "@wordpress/api-fetch": "file:packages/api-fetch", + "@wordpress/blob": "file:packages/blob", + "@wordpress/block-editor": "file:packages/block-editor", + "@wordpress/blocks": "file:packages/blocks", + "@wordpress/components": "file:packages/components", + "@wordpress/compose": "file:packages/compose", + "@wordpress/core-data": "file:packages/core-data", + "@wordpress/data": "file:packages/data", + "@wordpress/date": "file:packages/date", + "@wordpress/deprecated": "file:packages/deprecated", + "@wordpress/element": "file:packages/element", + "@wordpress/hooks": "file:packages/hooks", + "@wordpress/html-entities": "file:packages/html-entities", + "@wordpress/i18n": "file:packages/i18n", + "@wordpress/icons": "file:packages/icons", + "@wordpress/keyboard-shortcuts": "file:packages/keyboard-shortcuts", + "@wordpress/keycodes": "file:packages/keycodes", + "@wordpress/media-utils": "file:packages/media-utils", + "@wordpress/notices": "file:packages/notices", + "@wordpress/preferences": "file:packages/preferences", + "@wordpress/reusable-blocks": "file:packages/reusable-blocks", + "@wordpress/rich-text": "file:packages/rich-text", + "@wordpress/server-side-render": "file:packages/server-side-render", + "@wordpress/url": "file:packages/url", + "@wordpress/wordcount": "file:packages/wordcount", + "classnames": "^2.3.1", + "lodash": "^4.17.21", + "memize": "^1.1.0", + "react-autosize-textarea": "^7.1.0", + "rememo": "^3.0.0" + } + }, + "@wordpress/element": { + "version": "file:packages/element", + "requires": { + "@babel/runtime": "^7.16.0", + "@types/react": "^17.0.37", + "@types/react-dom": "^17.0.11", + "@wordpress/escape-html": "file:packages/escape-html", + "lodash": "^4.17.21", + "react": "^17.0.2", + "react-dom": "^17.0.2" + } + }, + "@wordpress/env": { + "version": "file:packages/env", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "copy-dir": "^1.3.0", + "docker-compose": "^0.22.2", + "extract-zip": "^1.6.7", + "got": "^10.7.0", + "inquirer": "^7.1.0", + "js-yaml": "^3.13.1", + "ora": "^4.0.2", + "rimraf": "^3.0.2", + "simple-git": "^3.5.0", + "terminal-link": "^2.0.0", + "yargs": "^17.3.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true }, - "@jimp/plugin-displace": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@jimp/plugin-displace/-/plugin-displace-0.14.0.tgz", - "integrity": "sha512-c75uQUzMgrHa8vegkgUvgRL/PRvD7paFbFJvzW0Ugs8Wl+CDMGIPYQ3j7IVaQkIS+cAxv+NJ3TIRBQyBrfVEOg==", + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0" + "color-convert": "^2.0.1" } }, - "@jimp/plugin-dither": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@jimp/plugin-dither/-/plugin-dither-0.14.0.tgz", - "integrity": "sha512-g8SJqFLyYexXQQsoh4dc1VP87TwyOgeTElBcxSXX2LaaMZezypmxQfLTzOFzZoK8m39NuaoH21Ou1Ftsq7LzVQ==", + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" } }, - "@jimp/plugin-fisheye": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@jimp/plugin-fisheye/-/plugin-fisheye-0.14.0.tgz", - "integrity": "sha512-BFfUZ64EikCaABhCA6mR3bsltWhPpS321jpeIQfJyrILdpFsZ/OccNwCgpW1XlbldDHIoNtXTDGn3E+vCE7vDg==", + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0" + "color-name": "~1.1.4" } }, - "@jimp/plugin-flip": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@jimp/plugin-flip/-/plugin-flip-0.14.0.tgz", - "integrity": "sha512-WtL1hj6ryqHhApih+9qZQYA6Ye8a4HAmdTzLbYdTMrrrSUgIzFdiZsD0WeDHpgS/+QMsWwF+NFmTZmxNWqKfXw==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0" - } + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, - "@jimp/plugin-gaussian": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@jimp/plugin-gaussian/-/plugin-gaussian-0.14.0.tgz", - "integrity": "sha512-uaLwQ0XAQoydDlF9tlfc7iD9drYPriFe+jgYnWm8fbw5cN+eOIcnneEX9XCOOzwgLPkNCxGox6Kxjn8zY6GxtQ==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0" - } + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, - "@jimp/plugin-invert": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@jimp/plugin-invert/-/plugin-invert-0.14.0.tgz", - "integrity": "sha512-UaQW9X9vx8orQXYSjT5VcITkJPwDaHwrBbxxPoDG+F/Zgv4oV9fP+udDD6qmkgI9taU+44Fy+zm/J/gGcMWrdg==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0" - } + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true }, - "@jimp/plugin-mask": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@jimp/plugin-mask/-/plugin-mask-0.14.0.tgz", - "integrity": "sha512-tdiGM69OBaKtSPfYSQeflzFhEpoRZ+BvKfDEoivyTjauynbjpRiwB1CaiS8En1INTDwzLXTT0Be9SpI3LkJoEA==", + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" } }, - "@jimp/plugin-normalize": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@jimp/plugin-normalize/-/plugin-normalize-0.14.0.tgz", - "integrity": "sha512-AfY8sqlsbbdVwFGcyIPy5JH/7fnBzlmuweb+Qtx2vn29okq6+HelLjw2b+VT2btgGUmWWHGEHd86oRGSoWGyEQ==", + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0" + "ansi-regex": "^5.0.1" } }, - "@jimp/plugin-print": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@jimp/plugin-print/-/plugin-print-0.14.0.tgz", - "integrity": "sha512-MwP3sH+VS5AhhSTXk7pui+tEJFsxnTKFY3TraFJb8WFbA2Vo2qsRCZseEGwpTLhENB7p/JSsLvWoSSbpmxhFAQ==", + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0", - "load-bmfont": "^1.4.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" } }, - "@jimp/plugin-resize": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@jimp/plugin-resize/-/plugin-resize-0.14.0.tgz", - "integrity": "sha512-qFeMOyXE/Bk6QXN0GQo89+CB2dQcXqoxUcDb2Ah8wdYlKqpi53skABkgVy5pW3EpiprDnzNDboMltdvDslNgLQ==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0" - } + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true }, - "@jimp/plugin-rotate": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@jimp/plugin-rotate/-/plugin-rotate-0.14.0.tgz", - "integrity": "sha512-aGaicts44bvpTcq5Dtf93/8TZFu5pMo/61lWWnYmwJJU1RqtQlxbCLEQpMyRhKDNSfPbuP8nyGmaqXlM/82J0Q==", + "yargs": { + "version": "17.3.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.3.0.tgz", + "integrity": "sha512-GQl1pWyDoGptFPJx9b9L6kmR33TGusZvXIZUT+BOz9f7X2L94oeAskFYLEg/FkhV06zZPBYLvLZRWeYId29lew==", "dev": true, "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0" + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.0.0" } }, - "@jimp/plugin-scale": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@jimp/plugin-scale/-/plugin-scale-0.14.0.tgz", - "integrity": "sha512-ZcJk0hxY5ZKZDDwflqQNHEGRblgaR+piePZm7dPwPUOSeYEH31P0AwZ1ziceR74zd8N80M0TMft+e3Td6KGBHw==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0" - } - }, - "@jimp/plugin-shadow": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@jimp/plugin-shadow/-/plugin-shadow-0.14.0.tgz", - "integrity": "sha512-p2igcEr/iGrLiTu0YePNHyby0WYAXM14c5cECZIVnq/UTOOIQ7xIcWZJ1lRbAEPxVVXPN1UibhZAbr3HAb5BjQ==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0" - } - }, - "@jimp/plugin-threshold": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@jimp/plugin-threshold/-/plugin-threshold-0.14.0.tgz", - "integrity": "sha512-N4BlDgm/FoOMV/DQM2rSpzsgqAzkP0DXkWZoqaQrlRxQBo4zizQLzhEL00T/YCCMKnddzgEhnByaocgaaa0fKw==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0" - } - }, - "@jimp/plugins": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@jimp/plugins/-/plugins-0.14.0.tgz", - "integrity": "sha512-vDO3XT/YQlFlFLq5TqNjQkISqjBHT8VMhpWhAfJVwuXIpilxz5Glu4IDLK6jp4IjPR6Yg2WO8TmRY/HI8vLrOw==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/plugin-blit": "^0.14.0", - "@jimp/plugin-blur": "^0.14.0", - "@jimp/plugin-circle": "^0.14.0", - "@jimp/plugin-color": "^0.14.0", - "@jimp/plugin-contain": "^0.14.0", - "@jimp/plugin-cover": "^0.14.0", - "@jimp/plugin-crop": "^0.14.0", - "@jimp/plugin-displace": "^0.14.0", - "@jimp/plugin-dither": "^0.14.0", - "@jimp/plugin-fisheye": "^0.14.0", - "@jimp/plugin-flip": "^0.14.0", - "@jimp/plugin-gaussian": "^0.14.0", - "@jimp/plugin-invert": "^0.14.0", - "@jimp/plugin-mask": "^0.14.0", - "@jimp/plugin-normalize": "^0.14.0", - "@jimp/plugin-print": "^0.14.0", - "@jimp/plugin-resize": "^0.14.0", - "@jimp/plugin-rotate": "^0.14.0", - "@jimp/plugin-scale": "^0.14.0", - "@jimp/plugin-shadow": "^0.14.0", - "@jimp/plugin-threshold": "^0.14.0", - "timm": "^1.6.1" - } - }, - "@jimp/png": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@jimp/png/-/png-0.14.0.tgz", - "integrity": "sha512-0RV/mEIDOrPCcNfXSPmPBqqSZYwGADNRVUTyMt47RuZh7sugbYdv/uvKmQSiqRdR0L1sfbCBMWUEa5G/8MSbdA==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.14.0", - "pngjs": "^3.3.3" - }, - "dependencies": { - "pngjs": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", - "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==", - "dev": true - } - } - }, - "@jimp/tiff": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@jimp/tiff/-/tiff-0.14.0.tgz", - "integrity": "sha512-zBYDTlutc7j88G/7FBCn3kmQwWr0rmm1e0FKB4C3uJ5oYfT8645lftUsvosKVUEfkdmOaMAnhrf4ekaHcb5gQw==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "utif": "^2.0.1" - } - }, - "@jimp/types": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@jimp/types/-/types-0.14.0.tgz", - "integrity": "sha512-hx3cXAW1KZm+b+XCrY3LXtdWy2U+hNtq0rPyJ7NuXCjU7lZR3vIkpz1DLJ3yDdS70hTi5QDXY3Cd9kd6DtloHQ==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/bmp": "^0.14.0", - "@jimp/gif": "^0.14.0", - "@jimp/jpeg": "^0.14.0", - "@jimp/png": "^0.14.0", - "@jimp/tiff": "^0.14.0", - "timm": "^1.6.1" - } - }, - "@jimp/utils": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-0.14.0.tgz", - "integrity": "sha512-MY5KFYUru0y74IsgM/9asDwb3ERxWxXEu3CRCZEvE7DtT86y1bR1XgtlSliMrptjz4qbivNGMQSvUBpEFJDp1A==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "regenerator-runtime": "^0.13.3" - } - }, - "@sindresorhus/is": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.0.0.tgz", - "integrity": "sha512-FyD2meJpDPjyNQejSjvnhpgI/azsQkA4lGbuu5BQZfjvJ9cbRZXzeWL2HceCekW4lixO9JPesIIQkSoLjeJHNQ==", - "dev": true - }, - "@szmarczak/http-timer": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.5.tgz", - "integrity": "sha512-PyRA9sm1Yayuj5OIoJ1hGt2YISX45w9WcFbh6ddT0Z/0yaFxOtGLInr4jUfU1EAFVs0Yfyfev4RNwBlUaHdlDQ==", - "dev": true, - "requires": { - "defer-to-connect": "^2.0.0" - } - }, - "@types/archiver": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@types/archiver/-/archiver-5.1.0.tgz", - "integrity": "sha512-baFOhanb/hxmcOd1Uey2TfFg43kTSmM6py1Eo7Rjbv/ivcl7PXLhY0QgXGf50Hx/eskGCFqPfhs/7IZLb15C5g==", - "dev": true, - "requires": { - "@types/glob": "*" - } - }, - "@types/atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@types/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-8GAYQ1jDRUQkSpHzJUqXwAkYFOxuWAOGLhIR4aPd/Y/yL12Q/9m7LsKpHKlfKdNE/362Hc9wPI1Yh6opDfxVJg==", - "dev": true - }, - "@types/cacheable-request": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.1.tgz", - "integrity": "sha512-ykFq2zmBGOCbpIXtoVbz4SKY5QriWPh3AjyU4G74RYbtt5yOc5OfaY75ftjg7mikMOla1CTGpX3lLbuJh8DTrQ==", - "dev": true, - "requires": { - "@types/http-cache-semantics": "*", - "@types/keyv": "*", - "@types/node": "*", - "@types/responselike": "*" - } - }, - "@types/caseless": { - "version": "0.12.2", - "resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.2.tgz", - "integrity": "sha512-6ckxMjBBD8URvjB6J3NcnuAn5Pkl7t3TizAg+xdlzzQGSPSmBcXf8KoIH0ua/i+tio+ZRUHEXp0HEmvaR4kt0w==", - "dev": true - }, - "@types/fs-extra": { - "version": "9.0.6", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.6.tgz", - "integrity": "sha512-ecNRHw4clCkowNOBJH1e77nvbPxHYnWIXMv1IAoG/9+MYGkgoyr3Ppxr7XYFNL41V422EDhyV4/4SSK8L2mlig==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", - "dev": true, - "requires": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "@types/http-cache-semantics": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.0.tgz", - "integrity": "sha512-c3Xy026kOF7QOTn00hbIllV1dLR9hG9NkSrLQgCVs8NF6sBU+VGWjD3wLPhmh1TYAc7ugCFsvHYMN4VcBN1U1A==", - "dev": true - }, - "@types/keyv": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.1.tgz", - "integrity": "sha512-MPtoySlAZQ37VoLaPcTHCu1RWJ4llDkULYZIzOYxlhxBqYPB0RsRlmMU0R6tahtFe27mIdkHV+551ZWV4PLmVw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/lodash": { - "version": "4.14.166", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.166.tgz", - "integrity": "sha512-A3YT/c1oTlyvvW/GQqG86EyqWNrT/tisOIh2mW3YCgcx71TNjiTZA3zYZWA5BCmtsOTXjhliy4c4yEkErw6njA==", - "dev": true - }, - "@types/lodash.clonedeep": { - "version": "4.5.6", - "resolved": "https://registry.npmjs.org/@types/lodash.clonedeep/-/lodash.clonedeep-4.5.6.tgz", - "integrity": "sha512-cE1jYr2dEg1wBImvXlNtp0xDoS79rfEdGozQVgliDZj1uERH4k+rmEMTudP9b4VQ8O6nRb5gPqft0QzEQGMQgA==", - "dev": true, - "requires": { - "@types/lodash": "*" - } - }, - "@types/lodash.isobject": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@types/lodash.isobject/-/lodash.isobject-3.0.6.tgz", - "integrity": "sha512-2lwGbaIXMR5hjO56nCvI7W6bmY3Y3uJvbHWqO9MtOE1StyhZ1VtLINQ0MLC87rrB3zHHp+u4DHeal70rx1kvjw==", - "dev": true, - "requires": { - "@types/lodash": "*" - } - }, - "@types/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@types/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-8G41YFhmOl8Ck6NrwLK5hhnbz6ADfuDJP+zusDnX3PoYhfC60+H/rQE6zmdO4yFzPCPJPY4oGZK2spbXm6gYEA==", - "dev": true, - "requires": { - "@types/lodash": "*" - } - }, - "@types/lodash.merge": { - "version": "4.6.6", - "resolved": "https://registry.npmjs.org/@types/lodash.merge/-/lodash.merge-4.6.6.tgz", - "integrity": "sha512-IB90krzMf7YpfgP3u/EvZEdXVvm4e3gJbUvh5ieuI+o+XqiNEt6fCzqNRaiLlPVScLI59RxIGZMQ3+Ko/DJ8vQ==", - "dev": true, - "requires": { - "@types/lodash": "*" - } - }, - "@types/lodash.zip": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/@types/lodash.zip/-/lodash.zip-4.2.6.tgz", - "integrity": "sha512-mKAcnkyFaihVR1oK83ZBQqSSQ1hpAY+uD5QaDkf//xtvr4NlNwqJEDg/oQoqLJg5YdSEwVWlQq0Aq4oLvD3zuw==", - "dev": true, - "requires": { - "@types/lodash": "*" - } - }, - "@types/minimatch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", - "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", - "dev": true - }, - "@types/node": { - "version": "14.14.17", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.17.tgz", - "integrity": "sha512-G0lD1/7qD60TJ/mZmhog76k7NcpLWkPVGgzkRy3CTlnFu4LUQh5v2Wa661z6vnXmD8EQrnALUyf0VRtrACYztw==", - "dev": true - }, - "@types/puppeteer": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@types/puppeteer/-/puppeteer-2.1.5.tgz", - "integrity": "sha512-ZZKAcX5XVEtSK+CLxz6FhofPt8y1D3yDtjGZHDFBZ4bGe8v2aaS6qBDHY4crruvpb4jsO7HKrPEx39IIqsZAUg==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/puppeteer-core": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@types/puppeteer-core/-/puppeteer-core-2.1.0.tgz", - "integrity": "sha512-q1s+x/3HuXQN1Xo9eVhCfRJ2SNfHA/a641iSZQRNnRH55t4jX7TsNWxQN0drLqwbz/Kp8nodJ5rTNYEIKX//gg==", - "dev": true, - "requires": { - "@types/puppeteer": "^2" - } - }, - "@types/request": { - "version": "2.48.5", - "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.5.tgz", - "integrity": "sha512-/LO7xRVnL3DxJ1WkPGDQrp4VTV1reX9RkC85mJ+Qzykj2Bdw+mG15aAfDahc76HtknjzE16SX/Yddn6MxVbmGQ==", - "dev": true, - "requires": { - "@types/caseless": "*", - "@types/node": "*", - "@types/tough-cookie": "*", - "form-data": "^2.5.0" - }, - "dependencies": { - "form-data": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", - "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - } - } - }, - "@types/responselike": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", - "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/tough-cookie": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.0.tgz", - "integrity": "sha512-I99sngh224D0M7XgW1s120zxCt3VYQ3IQsuw3P3jbq5GG4yc79+ZjyKznyOGIQrflfylLgcfekeZW/vk0yng6A==", - "dev": true - }, - "@types/ua-parser-js": { - "version": "0.7.35", - "resolved": "https://registry.npmjs.org/@types/ua-parser-js/-/ua-parser-js-0.7.35.tgz", - "integrity": "sha512-PsPx0RLbo2Un8+ff2buzYJnZjzwhD3jQHPOG2PtVIeOhkRDddMcKU8vJtHpzzfLB95dkUi0qAkfLg2l2Fd0yrQ==", - "dev": true - }, - "@types/uuid": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.0.tgz", - "integrity": "sha512-eQ9qFW/fhfGJF8WKHGEHZEyVWfZxrT+6CLIJGBcZPfxUh/+BnEj+UCGYMlr9qZuX/2AltsvwrGqp0LhEW8D0zQ==", - "dev": true - }, - "@types/yauzl": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.1.tgz", - "integrity": "sha512-A1b8SU4D10uoPjwb0lnHmmu8wZhR9d+9o2PKBQT2jU5YPTKsxac6M2qGAdY7VcL+dHHhARVUDmeg0rOrcd9EjA==", - "dev": true, - "optional": true, - "requires": { - "@types/node": "*" - } - }, - "@wdio/config": { - "version": "6.10.11", - "resolved": "https://registry.npmjs.org/@wdio/config/-/config-6.10.11.tgz", - "integrity": "sha512-yyv1UhJtASykXO6/q6JHmmySMa4NUQirOUVQZSG+viHdTIt/noMXmqD3BKFvev10ZG/k0DnxhXTnU+2aT/7BTA==", - "dev": true, - "requires": { - "@wdio/logger": "6.10.10", - "deepmerge": "^4.0.0", - "glob": "^7.1.2" - } - }, - "@wdio/logger": { - "version": "6.10.10", - "resolved": "https://registry.npmjs.org/@wdio/logger/-/logger-6.10.10.tgz", - "integrity": "sha512-2nh0hJz9HeZE0VIEMI+oPgjr/Q37ohrR9iqsl7f7GW5ik+PnKYCT9Eab5mR1GNMG60askwbskgGC1S9ygtvrSw==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "loglevel": "^1.6.0", - "loglevel-plugin-prefix": "^0.8.4", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } - } - }, - "@wdio/protocols": { - "version": "6.10.6", - "resolved": "https://registry.npmjs.org/@wdio/protocols/-/protocols-6.10.6.tgz", - "integrity": "sha512-CLLVdc82S+Zij7f9djL90JC1bE5gtaOn+EF2pY4n8XdypqPUa1orQip8stQtX/wXEX0Ak45MEcSU9nCY+CzNnQ==", - "dev": true - }, - "@wdio/repl": { - "version": "6.10.11", - "resolved": "https://registry.npmjs.org/@wdio/repl/-/repl-6.10.11.tgz", - "integrity": "sha512-Ig3WLUi7anpEd8bvRnunZ9PHbVXtkvUQH2wPbEuDcJ3kPwPkKWQl9IK7AyDrIl81RX2S++iBBa4r27IREXWNOQ==", - "dev": true, - "requires": { - "@wdio/utils": "6.10.11" - } - }, - "@wdio/utils": { - "version": "6.10.11", - "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-6.10.11.tgz", - "integrity": "sha512-x4yc08UWPvP1j7sPKt4Wwyd+z85pVaSYZ+6iyodbXpflCo9uxnQgSmLdDnGDxksREeBVkndsBqhdJHsuI8eWsw==", - "dev": true, - "requires": { - "@wdio/logger": "6.10.10" - } - }, - "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", - "dev": true, - "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - } - }, - "adbkit-apkreader": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/adbkit-apkreader/-/adbkit-apkreader-3.2.0.tgz", - "integrity": "sha512-QwsxPYCqWSmCAiW/A4gq0eytb4jtZc7WNbECIhLCRfGEB38oXzIV/YkTpkOTQFKSg3S4Svb6y///qOUH7UrWWw==", - "dev": true, - "requires": { - "bluebird": "^3.4.7", - "debug": "~4.1.1", - "yauzl": "^2.7.0" - } - }, - "agent-base": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz", - "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==", - "dev": true - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "dependencies": { - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - } - } - }, - "ansi-gray": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", - "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=", - "dev": true, - "requires": { - "ansi-wrap": "0.1.0" - } - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "ansi-wrap": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", - "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=", - "dev": true - }, - "any-base": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/any-base/-/any-base-1.1.0.tgz", - "integrity": "sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg==", - "dev": true - }, - "appium-adb": { - "version": "8.9.2", - "resolved": "https://registry.npmjs.org/appium-adb/-/appium-adb-8.9.2.tgz", - "integrity": "sha512-yp2260MwbYcyfCYwD+oeIKdPm3xQvrA1qq4z0RUf492FJiDycf2tNQyO/R3rUY51vV+CASNI9tgzXBY689aFBw==", - "dev": true, - "requires": { - "@babel/runtime": "^7.0.0", - "adbkit-apkreader": "^3.1.2", - "appium-support": "^2.48.1", - "async-lock": "^1.0.0", - "asyncbox": "^2.6.0", - "bluebird": "^3.4.7", - "ini": "^1.3.5", - "lodash": "^4.0.0", - "lru-cache": "^6.0.0", - "semver": "^7.0.0", - "source-map-support": "^0.5.5", - "teen_process": "^1.11.0", - "utf7": "^1.0.2" - } - }, - "appium-android-driver": { - "version": "4.41.1", - "resolved": "https://registry.npmjs.org/appium-android-driver/-/appium-android-driver-4.41.1.tgz", - "integrity": "sha512-Tg79UXlGAO/YGvksM+8OQrlMYByHXpnc83IpKAiJfMKhEi/DmwiZLk2kOy0QVqrvlJVdBtEoUjo2bfQ52H+ZRw==", - "dev": true, - "requires": { - "@babel/runtime": "^7.0.0", - "appium-adb": "^8.8.0", - "appium-base-driver": "^7.0.0", - "appium-chromedriver": "^4.13.0", - "appium-support": "^2.47.1", - "async-lock": "^1.2.2", - "asyncbox": "^2.8.0", - "axios": "^0.20.0", - "bluebird": "^3.4.7", - "io.appium.settings": "^3.1.0", - "jimp": "^0.16.1", - "lodash": "^4.17.4", - "lru-cache": "^6.0.0", - "moment": "^2.24.0", - "moment-timezone": "^0.5.26", - "portfinder": "^1.0.6", - "portscanner": "2.2.0", - "semver": "^7.0.0", - "shared-preferences-builder": "^0.0.4", - "source-map-support": "^0.5.5", - "teen_process": "^1.9.0", - "ws": "^7.0.0", - "yargs": "^16.0.0" - }, - "dependencies": { - "axios": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.20.0.tgz", - "integrity": "sha512-ANA4rr2BDcmmAQLOKft2fufrtuvlqR+cXNNinUmvfeSNCOF98PZL+7M/v1zIdGo7OLjEA9J2gXJL+j4zGsl0bA==", - "dev": true, - "requires": { - "follow-redirects": "^1.10.0" - } - } - } - }, - "appium-base-driver": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/appium-base-driver/-/appium-base-driver-7.4.0.tgz", - "integrity": "sha512-+gh03W6XUsKSprw+8O7uG1i07NI7tpoPHMHM57T2oR05KygxqvrLaQrxej50AtKPWmHHiMaMV4lxxf/YKtKp6g==", - "dev": true, - "requires": { - "@babel/runtime": "^7.0.0", - "appium-support": "^2.48.0", - "async-lock": "^1.0.0", - "asyncbox": "^2.3.1", - "axios": "^0.21.0", - "bluebird": "^3.5.3", - "body-parser": "^1.18.2", - "colors": "^1.1.2", - "es6-error": "^4.1.1", - "express": "^4.16.2", - "http-status-codes": "^2.1.1", - "lodash": "^4.0.0", - "lru-cache": "^6.0.0", - "method-override": "^3.0.0", - "morgan": "^1.9.0", - "serve-favicon": "^2.4.5", - "source-map-support": "^0.5.5", - "validate.js": "^0.13.0", - "webdriverio": "^6.0.2", - "ws": "^7.0.0" - } - }, - "appium-chromedriver": { - "version": "4.26.2", - "resolved": "https://registry.npmjs.org/appium-chromedriver/-/appium-chromedriver-4.26.2.tgz", - "integrity": "sha512-flBp6H4Ed+YTzk7Bm4lVDS7eeRqMmz7D3xcfZYQhNwaTPgK4Vdde2F/7vU6c2A2Z73UcX3plgNWz4JJ3KtII7w==", - "dev": true, - "requires": { - "@babel/runtime": "^7.0.0", - "appium-base-driver": "^7.1.0", - "appium-support": "^2.46.0", - "asyncbox": "^2.0.2", - "axios": "^0.21.0", - "bluebird": "^3.5.1", - "compare-versions": "^3.4.0", - "fancy-log": "^1.3.2", - "lodash": "^4.17.4", - "semver": "^7.0.0", - "source-map-support": "^0.5.5", - "teen_process": "^1.15.0", - "xmldom": "^0.4.0", - "xpath": "^0.0.32" - }, - "dependencies": { - "xmldom": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.4.0.tgz", - "integrity": "sha512-2E93k08T30Ugs+34HBSTQLVtpi6mCddaY8uO+pMNk1pqSjV5vElzn4mmh6KLxN3hki8rNcHSYzILoh3TEWORvA==", - "dev": true - } - } - }, - "appium-espresso-driver": { - "version": "1.41.0", - "resolved": "https://registry.npmjs.org/appium-espresso-driver/-/appium-espresso-driver-1.41.0.tgz", - "integrity": "sha512-EJU2NepjadwDPXQbHRyy4ydE5d7CuR+15a68tJHGI6olfTjcXm5fNyAd2JI4rCQMwGW4bsa1IXGuNG0QrS5TWg==", - "dev": true, - "requires": { - "@babel/runtime": "^7.4.3", - "appium-adb": "^8.9.0", - "appium-android-driver": "^4.40.0", - "appium-base-driver": "^7.0.0", - "appium-support": "^2.46.0", - "asyncbox": "^2.3.1", - "bluebird": "^3.5.0", - "lodash": "^4.17.11", - "portscanner": "^2.1.1", - "source-map-support": "^0.5.8", - "validate.js": "^0.13.0", - "yargs": "^16.0.2" - } - }, - "appium-fake-driver": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/appium-fake-driver/-/appium-fake-driver-1.0.1.tgz", - "integrity": "sha512-gbDPWleCCOixH2ImlvS6CsEKEuePpSFFdbMkDA2Ie2H5EEdAAMUZEtI9DwlcTTKNcrwM58SNdPraQTnopFlHrQ==", - "dev": true, - "requires": { - "@babel/runtime": "^7.0.0", - "appium-base-driver": "^7.0.0", - "appium-support": "^2.11.1", - "asyncbox": "^2.3.2", - "bluebird": "^3.5.1", - "lodash": "^4.17.4", - "source-map-support": "^0.5.5", - "xmldom": "^0.3.0", - "xpath": "0.0.27", - "yargs": "^15.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "xmldom": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.3.0.tgz", - "integrity": "sha512-z9s6k3wxE+aZHgXYxSTpGDo7BYOUfJsIRyoZiX6HTjwpwfS2wpQBQKa2fD+ShLyPkqDYo5ud7KitmLZ2Cd6r0g==", - "dev": true - }, - "xpath": { - "version": "0.0.27", - "resolved": "https://registry.npmjs.org/xpath/-/xpath-0.0.27.tgz", - "integrity": "sha512-fg03WRxtkCV6ohClePNAECYsmpKKTv5L8y/X3Dn1hQrec3POx2jHZ/0P2qQ6HvsrU1BmeqXcof3NGGueG6LxwQ==", - "dev": true - }, - "y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dev": true, - "requires": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - } - }, - "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } - }, - "appium-flutter-driver": { - "version": "0.0.25", - "resolved": "https://registry.npmjs.org/appium-flutter-driver/-/appium-flutter-driver-0.0.25.tgz", - "integrity": "sha512-ZM8y1XuuNb7P9FqvDlL7iFAWmVXhgb8IAGUlcUdi/N+5/tpT5CueE6uq8IJpfpGQKAVoOzbUT34Ie1YXvHL/sQ==", - "dev": true, - "requires": { - "appium-base-driver": "^5.0.0", - "appium-uiautomator2-driver": "^1.35.1", - "appium-xcuitest-driver": "^3.17.0", - "rpc-websockets": "^5.1.1" - }, - "dependencies": { - "appium-base-driver": { - "version": "5.8.1", - "resolved": "https://registry.npmjs.org/appium-base-driver/-/appium-base-driver-5.8.1.tgz", - "integrity": "sha512-k5ybExgP0kJx7vsR0Y8GeEay+Vr0yCs0muzYtdrIDbqOCz5bFX0skyZubSSsm/lOE4KvgHhm4cRwWJM0DlHvRA==", - "dev": true, - "requires": { - "@babel/runtime": "^7.0.0", - "appium-support": "^2.46.0", - "async-lock": "^1.0.0", - "asyncbox": "^2.3.1", - "axios": "^0.19.2", - "bluebird": "^3.5.3", - "body-parser": "^1.18.2", - "colors": "^1.1.2", - "es6-error": "^4.1.1", - "express": "^4.16.2", - "http-status-codes": "^1.3.0", - "lodash": "^4.0.0", - "lru-cache": "^5.0.0", - "method-override": "^3.0.0", - "morgan": "^1.9.0", - "request": "^2.88.2", - "request-promise": "^4.2.5", - "serve-favicon": "^2.4.5", - "source-map-support": "^0.5.5", - "validate.js": "^0.13.0", - "webdriverio": "^6.0.2", - "ws": "^7.0.0" - } - }, - "axios": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.2.tgz", - "integrity": "sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA==", - "dev": true, - "requires": { - "follow-redirects": "1.5.10" - } - }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "follow-redirects": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", - "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", - "dev": true, - "requires": { - "debug": "=3.1.0" - } - }, - "http-status-codes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/http-status-codes/-/http-status-codes-1.4.0.tgz", - "integrity": "sha512-JrT3ua+WgH8zBD3HEJYbeEgnuQaAnUeRRko/YojPAJjGmIfGD3KPU/asLdsLwKjfxOmQe5nXMQ0pt/7MyapVbQ==", - "dev": true - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - } - } - }, - "appium-geckodriver": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/appium-geckodriver/-/appium-geckodriver-0.3.2.tgz", - "integrity": "sha512-2yQ6al64mU6PEfDBvMxe8gM+kcT9Y7+uT2jlgD1Z74r0qRItPQRn+TixMO0HSxv3+RLoXBP3/WhMQO+IO+gDeA==", - "dev": true, - "requires": { - "@babel/runtime": "^7.0.0", - "appium-base-driver": "^7.1.0", - "appium-support": "^2.46.0", - "asyncbox": "^2.0.2", - "bluebird": "^3.5.1", - "lodash": "^4.17.4", - "portscanner": "2.2.0", - "source-map-support": "^0.5.5", - "teen_process": "^1.15.0", - "yargs": "^16.1.0" - } - }, - "appium-idb": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/appium-idb/-/appium-idb-0.5.0.tgz", - "integrity": "sha512-6IayLxBbN/2fOzbxjpOt/ntoFlFfcyZbURKyeH9XJyAjjN5iIG+i8EWGof6tMM5BHDC1mOJcPZkFaQtYi/Y5Iw==", - "dev": true, - "requires": { - "@babel/runtime": "^7.0.0", - "appium-support": "^2.41.0", - "asyncbox": "^2.5.2", - "bluebird": "^3.1.1", - "lodash": "^4.0.0", - "source-map-support": "^0.5.5", - "teen_process": "^1.11.0" - } - }, - "appium-ios-device": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/appium-ios-device/-/appium-ios-device-1.7.1.tgz", - "integrity": "sha512-kMsj/jjYqNRNgKpl7waXzWv9ydioMmGy1hGvdbhLHFI8oNMw71KJlK0rQtJ2Abw1H2zf92bpjpmoCBmO+UyICQ==", - "dev": true, - "requires": { - "@babel/runtime": "^7.0.0", - "appium-support": "^2.35.0", - "bluebird": "^3.1.1", - "lodash": "^4.17.15", - "semver": "^7.0.0", - "source-map-support": "^0.5.5" - } - }, - "appium-ios-driver": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/appium-ios-driver/-/appium-ios-driver-4.8.0.tgz", - "integrity": "sha512-jjZWJ5DR0x8J9HCCf4EDihwJmd+BV0SEIUOQyVLQj1FZq99DWIIBnpTDbu1LaU9WIMNC2a8JqvKp/T/6XnzQGg==", - "dev": true, - "requires": { - "@babel/runtime": "^7.0.0", - "appium-base-driver": "^7.0.0", - "appium-ios-simulator": "^3.24.0", - "appium-remote-debugger": "^5.7.0", - "appium-support": "^2.41.0", - "appium-xcode": "^3.1.0", - "asyncbox": "^2.3.1", - "axios": "^0.20.0", - "bluebird": "^3.5.1", - "colors": "^1.1.2", - "js2xmlparser2": "^0.2.0", - "lodash": "^4.13.1", - "moment": "^2.24.0", - "moment-timezone": "^0.5.26", - "node-idevice": "^0.1.6", - "pem": "^1.8.3", - "portfinder": "^1.0.13", - "safari-launcher": "^2.0.5", - "source-map-support": "^0.5.5", - "teen_process": "^1.6.0", - "through": "^2.3.8", - "xmldom": "^0.3.0", - "xpath": "^0.0.24", - "yargs": "^16.0.0" - }, - "dependencies": { - "@wdio/config": { - "version": "5.22.4", - "resolved": "https://registry.npmjs.org/@wdio/config/-/config-5.22.4.tgz", - "integrity": "sha512-i5dJQWb80darcRA//tfG0guMeQCeRUXroZNnHjGNb1qzvTRZmcIIhdxaD+DbK/5dWEx6aoMfoi6wjVp/CXwdAg==", - "dev": true, - "requires": { - "@wdio/logger": "5.16.10", - "deepmerge": "^4.0.0", - "glob": "^7.1.2" - } - }, - "@wdio/logger": { - "version": "5.16.10", - "resolved": "https://registry.npmjs.org/@wdio/logger/-/logger-5.16.10.tgz", - "integrity": "sha512-hRKhxgd9uB48Dtj2xe2ckxU4KwI/RO8IwguySuaI2SLFj6EDbdonwzpVkq111/fjBuq7R1NauAaNcm3AMEbIFA==", - "dev": true, - "requires": { - "chalk": "^3.0.0", - "loglevel": "^1.6.0", - "loglevel-plugin-prefix": "^0.8.4", - "strip-ansi": "^6.0.0" - } - }, - "@wdio/protocols": { - "version": "5.22.1", - "resolved": "https://registry.npmjs.org/@wdio/protocols/-/protocols-5.22.1.tgz", - "integrity": "sha512-GdoWb/HTrb09Qb0S/7sLp1NU94LAhTsF1NnFj5sEFSUpecrl0S07pnhVg54pUImectN/woaqSl7uJGjlSGZcdQ==", - "dev": true - }, - "@wdio/repl": { - "version": "5.23.0", - "resolved": "https://registry.npmjs.org/@wdio/repl/-/repl-5.23.0.tgz", - "integrity": "sha512-cKG9m0XuqcQenQmoup0yJX1fkDQEdY06QXuwt636ZQf6XgDoeoAdNOgnRnNruQ0+JsC2eqHFoSNto1q8wcLH/g==", - "dev": true, - "requires": { - "@wdio/utils": "5.23.0" - } - }, - "@wdio/utils": { - "version": "5.23.0", - "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-5.23.0.tgz", - "integrity": "sha512-dWPEkDiaNUqJXPO6L2di2apI7Rle7Er4euh67Wlb5+3MrPNjCKhiF8gHcpQeL8oe6A1MH/f89kpSEEXe4BMkAw==", - "dev": true, - "requires": { - "@wdio/logger": "5.16.10", - "deepmerge": "^4.0.0" - } - }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "appium-ios-device": { - "version": "0.10.5", - "resolved": "https://registry.npmjs.org/appium-ios-device/-/appium-ios-device-0.10.5.tgz", - "integrity": "sha512-O0H+iyOVPG9NbLEPLi+fR/yGZEqTa0fESzNWgDfa8JizkgvDbbItzv5ZJbiYPSZ/+hhNLfdkHF0KAVIaFYJMJg==", - "dev": true, - "requires": { - "@babel/runtime": "^7.0.0", - "appium-support": "^2.30.0", - "bluebird": "^3.1.1", - "semver": "^6.1.2", - "source-map-support": "^0.5.5" - } - }, - "appium-remote-debugger": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/appium-remote-debugger/-/appium-remote-debugger-5.7.0.tgz", - "integrity": "sha512-dAudf+YgQbCktUjHgrFejEmOZaARdw7CAbGQ85MQJHAjjYaoCuO1rD7ro7hRmj/WsUMh1TdFGL+94yOEsoRujw==", - "dev": true, - "requires": { - "@babel/runtime": "^7.0.0", - "appium-base-driver": "^4.0.0", - "appium-ios-device": "^0.10.0", - "appium-support": "^2.28.0", - "asyncbox": "^2.5.2", - "bluebird": "^3.4.7", - "lodash": "^4.17.11", - "source-map-support": "^0.5.5" - }, - "dependencies": { - "appium-base-driver": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/appium-base-driver/-/appium-base-driver-4.5.1.tgz", - "integrity": "sha512-g7sI5mzmGdZhIFg3+A5f9ewtihYKS0b33wZWbN6R/PYYTEmXbNhFPGfVqzoAzFANuLjlTlvEEsqGcUtjrMO2Bw==", - "dev": true, - "requires": { - "@babel/runtime": "^7.0.0", - "appium-support": "^2.33.1", - "async-lock": "^1.0.0", - "asyncbox": "^2.3.1", - "bluebird": "^3.5.3", - "body-parser": "^1.18.2", - "colors": "^1.1.2", - "es6-error": "^4.1.1", - "express": "^4.16.2", - "http-status-codes": "^1.3.0", - "lodash": "^4.0.0", - "lru-cache": "^5.0.0", - "method-override": "^3.0.0", - "morgan": "^1.9.0", - "request": "^2.83.0", - "request-promise": "^4.2.2", - "sanitize-filename": "^1.6.1", - "serve-favicon": "^2.4.5", - "source-map-support": "^0.5.5", - "uuid-js": "^0.7.5", - "validate.js": "^0.13.0", - "webdriverio": "^5.10.9", - "ws": "^7.0.0" - } - } - } - }, - "archiver": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/archiver/-/archiver-3.1.1.tgz", - "integrity": "sha512-5Hxxcig7gw5Jod/8Gq0OneVgLYET+oNHcxgWItq4TbhOzRLKNAFUb9edAftiMKXvXfCB0vbGrJdZDNq0dWMsxg==", - "dev": true, - "requires": { - "archiver-utils": "^2.1.0", - "async": "^2.6.3", - "buffer-crc32": "^0.2.1", - "glob": "^7.1.4", - "readable-stream": "^3.4.0", - "tar-stream": "^2.1.0", - "zip-stream": "^2.1.2" - } - }, - "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "dev": true, - "requires": { - "lodash": "^4.17.14" - } - }, - "axios": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.20.0.tgz", - "integrity": "sha512-ANA4rr2BDcmmAQLOKft2fufrtuvlqR+cXNNinUmvfeSNCOF98PZL+7M/v1zIdGo7OLjEA9J2gXJL+j4zGsl0bA==", - "dev": true, - "requires": { - "follow-redirects": "^1.10.0" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "compress-commons": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-2.1.1.tgz", - "integrity": "sha512-eVw6n7CnEMFzc3duyFVrQEuY1BlHR3rYsSztyG32ibGMW722i3C6IizEGMFmfMU+A+fALvBIwxN3czffTcdA+Q==", - "dev": true, - "requires": { - "buffer-crc32": "^0.2.13", - "crc32-stream": "^3.0.1", - "normalize-path": "^3.0.0", - "readable-stream": "^2.3.6" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - } - } - }, - "crc32-stream": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-3.0.1.tgz", - "integrity": "sha512-mctvpXlbzsvK+6z8kJwSJ5crm7yBwrQMTybJzMw1O4lLGJqjlDCXY2Zw7KheiA6XBEcBmfLx1D88mjRGVJtY9w==", - "dev": true, - "requires": { - "crc": "^3.4.4", - "readable-stream": "^3.4.0" - } - }, - "http-status-codes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/http-status-codes/-/http-status-codes-1.4.0.tgz", - "integrity": "sha512-JrT3ua+WgH8zBD3HEJYbeEgnuQaAnUeRRko/YojPAJjGmIfGD3KPU/asLdsLwKjfxOmQe5nXMQ0pt/7MyapVbQ==", - "dev": true - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "rgb2hex": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/rgb2hex/-/rgb2hex-0.1.10.tgz", - "integrity": "sha512-vKz+kzolWbL3rke/xeTE2+6vHmZnNxGyDnaVW4OckntAIcc7DcZzWkQSfxMDwqHS8vhgySnIFyBUH7lIk6PxvQ==", - "dev": true - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "serialize-error": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-5.0.0.tgz", - "integrity": "sha512-/VtpuyzYf82mHYTtI4QKtwHa79vAdU5OQpNPAmE/0UDdlGT0ZxHwC+J6gXkw29wwoVI8fMPsfcVHOwXtUQYYQA==", - "dev": true, - "requires": { - "type-fest": "^0.8.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - }, - "webdriver": { - "version": "5.23.0", - "resolved": "https://registry.npmjs.org/webdriver/-/webdriver-5.23.0.tgz", - "integrity": "sha512-r7IrbZ2SuTIRyWV8mv4a4hZoFcT9Qt4MznOkdRWPE1sPpZ8lyLZsIEjKCEbHelOzPwURqk+biwGrm4z2OZRAiw==", - "dev": true, - "requires": { - "@types/request": "^2.48.4", - "@wdio/config": "5.22.4", - "@wdio/logger": "5.16.10", - "@wdio/protocols": "5.22.1", - "@wdio/utils": "5.23.0", - "lodash.merge": "^4.6.1", - "request": "^2.83.0" - } - }, - "webdriverio": { - "version": "5.23.0", - "resolved": "https://registry.npmjs.org/webdriverio/-/webdriverio-5.23.0.tgz", - "integrity": "sha512-hxt6Nuu2bBrTsVk7GfoFRTh63l4fRVXlK9U30RtPbHoWO5tcFdyUz2UTgeHEZ54ea1DQEVPfsgFiLnJULkWp1Q==", - "dev": true, - "requires": { - "@wdio/config": "5.22.4", - "@wdio/logger": "5.16.10", - "@wdio/repl": "5.23.0", - "@wdio/utils": "5.23.0", - "archiver": "^3.0.0", - "css-value": "^0.0.1", - "grapheme-splitter": "^1.0.2", - "lodash.clonedeep": "^4.5.0", - "lodash.isobject": "^3.0.2", - "lodash.isplainobject": "^4.0.6", - "lodash.zip": "^4.2.0", - "resq": "^1.6.0", - "rgb2hex": "^0.1.0", - "serialize-error": "^5.0.0", - "webdriver": "5.23.0" - } - }, - "xmldom": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.3.0.tgz", - "integrity": "sha512-z9s6k3wxE+aZHgXYxSTpGDo7BYOUfJsIRyoZiX6HTjwpwfS2wpQBQKa2fD+ShLyPkqDYo5ud7KitmLZ2Cd6r0g==", - "dev": true - }, - "xpath": { - "version": "0.0.24", - "resolved": "https://registry.npmjs.org/xpath/-/xpath-0.0.24.tgz", - "integrity": "sha1-Gt4WLhzFI8jTn8fQavwW6iFvKfs=", - "dev": true - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, - "zip-stream": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-2.1.3.tgz", - "integrity": "sha512-EkXc2JGcKhO5N5aZ7TmuNo45budRaFGHOmz24wtJR7znbNqDPmdZtUauKX6et8KAVseAMBOyWJqEpXcHTBsh7Q==", - "dev": true, - "requires": { - "archiver-utils": "^2.1.0", - "compress-commons": "^2.1.1", - "readable-stream": "^3.4.0" - } - } - } - }, - "appium-ios-simulator": { - "version": "3.27.0", - "resolved": "https://registry.npmjs.org/appium-ios-simulator/-/appium-ios-simulator-3.27.0.tgz", - "integrity": "sha512-JCg1Q98QSLZOpghLPeQ6jhvJg4PCJ6pQm94iDV7n9L8Gq5YP7teLCZTKoTtPHKC5mC5LbOq/JPL3zuAl+/LpkA==", - "dev": true, - "requires": { - "@babel/runtime": "^7.0.0", - "appium-support": "^2.44.0", - "appium-xcode": "^3.1.0", - "async-lock": "^1.0.0", - "asyncbox": "^2.3.1", - "bluebird": "^3.5.1", - "lodash": "^4.2.1", - "node-simctl": "^6.4.0", - "semver": "^7.0.0", - "source-map-support": "^0.5.3", - "teen_process": "^1.3.0", - "xmldom": "^0.4.0" - }, - "dependencies": { - "xmldom": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.4.0.tgz", - "integrity": "sha512-2E93k08T30Ugs+34HBSTQLVtpi6mCddaY8uO+pMNk1pqSjV5vElzn4mmh6KLxN3hki8rNcHSYzILoh3TEWORvA==", - "dev": true - } - } - }, - "appium-mac-driver": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/appium-mac-driver/-/appium-mac-driver-1.10.1.tgz", - "integrity": "sha512-EEl9iKgL7HUI6Tc8iyOLPOxHeKf1NKgekNGVR6TTQkiyV6zzYFsdutRZBvB7KfYVuRCtvAvgP5TE3K3Y0kU7SA==", - "dev": true, - "requires": { - "@babel/runtime": "^7.0.0", - "appium-base-driver": "^7.2.3", - "appium-support": "^2.36.0", - "asyncbox": "^2.3.1", - "bluebird": "^3.5.1", - "lodash": "^4.17.4", - "source-map-support": "^0.5.5", - "teen_process": "^1.15.0", - "yargs": "^16.0.3" - } - }, - "appium-mac2-driver": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/appium-mac2-driver/-/appium-mac2-driver-0.8.1.tgz", - "integrity": "sha512-uqd+uxO3DrNb22hJTME/zgm/f4IJjRPvlcp5W3zdcMYmcZmeE4H9NaemPAl29l2NLEgrrMgMzCYuJiwnMX3ifA==", - "dev": true, - "requires": { - "@babel/runtime": "^7.0.0", - "appium-base-driver": "^7.1.0", - "appium-support": "^2.46.0", - "asyncbox": "^2.0.2", - "bluebird": "^3.5.1", - "lodash": "^4.17.4", - "portscanner": "2.2.0", - "source-map-support": "^0.5.5", - "teen_process": "^1.15.0", - "yargs": "^16.1.0" - } - }, - "appium-remote-debugger": { - "version": "8.13.2", - "resolved": "https://registry.npmjs.org/appium-remote-debugger/-/appium-remote-debugger-8.13.2.tgz", - "integrity": "sha512-ke418dyTWUYt9tsMnrhq0DpDfsVUofmPR0lkq3OWY3Jov46Myype2Hl8PwjJFMBn9wFcxNv1sghcLhoWYenSzA==", - "dev": true, - "requires": { - "@babel/runtime": "^7.0.0", - "appium-base-driver": "^7.0.0", - "appium-ios-device": "^1.7.0", - "appium-support": "^2.41.0", - "async-lock": "^1.2.2", - "asyncbox": "^2.6.0", - "bluebird": "^3.4.7", - "lodash": "^4.17.11", - "source-map-support": "^0.5.5" - } - }, - "appium-safari-driver": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/appium-safari-driver/-/appium-safari-driver-2.2.0.tgz", - "integrity": "sha512-QD1xIVEnzoeCCATHdUhqAGBPJjPUXnIgNMUDishj3gCsIApdvBFsY0kIJGhJ27aWEUPMx/TzrM3n9JYXJc9JwQ==", - "dev": true, - "requires": { - "@babel/runtime": "^7.0.0", - "appium-base-driver": "^7.1.0", - "appium-support": "^2.46.0", - "asyncbox": "^2.0.2", - "bluebird": "^3.5.1", - "lodash": "^4.17.4", - "portscanner": "2.2.0", - "source-map-support": "^0.5.5", - "teen_process": "^1.15.0", - "yargs": "^16.1.0" - } - }, - "appium-sdb": { - "version": "1.0.1-beta.1", - "resolved": "https://registry.npmjs.org/appium-sdb/-/appium-sdb-1.0.1-beta.1.tgz", - "integrity": "sha512-jciaEYrtZR7+NeB/KXrVLfQfvCQRdMpI4ZvrJWqyDOcUkzw5emH6nTGPTbkvnG9cf4opWM/e4wsgmHYnjgjByQ==", - "dev": true, - "requires": { - "@babel/runtime": "^7.0.0", - "appium-support": "^2.4.0", - "asyncbox": "^2.3.1", - "lodash": "^4.17.11", - "source-map-support": "^0.5.9", - "teen_process": "^1.3.1" - } - }, - "appium-support": { - "version": "2.49.0", - "resolved": "https://registry.npmjs.org/appium-support/-/appium-support-2.49.0.tgz", - "integrity": "sha512-PtUsfpCjdGqZTTuRyH5U9iOGq9SpEVHg0H6/2HrazkX6ZvSQ+kIVYHTAGIXVeBJecfN9/syqgMmEekVgD15BGA==", - "dev": true, - "requires": { - "@babel/runtime": "^7.0.0", - "archiver": "^5.0.0", - "axios": "^0.20.0", - "base64-stream": "^1.0.0", - "bluebird": "^3.5.1", - "bplist-creator": "^0", - "bplist-parser": "^0.2", - "form-data": "^3.0.0", - "get-stream": "^6.0.0", - "glob": "^7.1.2", - "jimp": "^0.14.0", - "jsftp": "^2.1.2", - "klaw": "^3.0.0", - "lockfile": "^1.0.4", - "lodash": "^4.2.1", - "mjpeg-server": "^0.3.0", - "mkdirp": "^1.0.0", - "moment": "^2.24.0", - "mv": "^2.1.1", - "ncp": "^2.0.0", - "npmlog": "^4.1.2", - "plist": "^3.0.1", - "pluralize": "^8.0.0", - "pngjs": "^5.0.0", - "rimraf": "^3.0.0", - "sanitize-filename": "^1.6.1", - "semver": "^7.0.0", - "shell-quote": "^1.7.2", - "source-map-support": "^0.5.5", - "teen_process": "^1.5.1", - "uuid": "^8.0.0", - "which": "^2.0.0", - "yauzl": "^2.7.0" - }, - "dependencies": { - "axios": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.20.0.tgz", - "integrity": "sha512-ANA4rr2BDcmmAQLOKft2fufrtuvlqR+cXNNinUmvfeSNCOF98PZL+7M/v1zIdGo7OLjEA9J2gXJL+j4zGsl0bA==", - "dev": true, - "requires": { - "follow-redirects": "^1.10.0" - } - }, - "jimp": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/jimp/-/jimp-0.14.0.tgz", - "integrity": "sha512-8BXU+J8+SPmwwyq9ELihpSV4dWPTiOKBWCEgtkbnxxAVMjXdf3yGmyaLSshBfXc8sP/JQ9OZj5R8nZzz2wPXgA==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/custom": "^0.14.0", - "@jimp/plugins": "^0.14.0", - "@jimp/types": "^0.14.0", - "regenerator-runtime": "^0.13.3" - } - } - } - }, - "appium-tizen-driver": { - "version": "1.1.1-beta.5", - "resolved": "https://registry.npmjs.org/appium-tizen-driver/-/appium-tizen-driver-1.1.1-beta.5.tgz", - "integrity": "sha512-LKnGb84Fzcer8Bw772oR/WdKy1Eo2ILm8TPiU7ienFVdp0eDwmpFnfXl7vCzTnusohT4SDPnOOquMhkh4UMOfQ==", - "dev": true, - "requires": { - "@babel/runtime": "^7.0.0", - "appium-base-driver": "^4.0.0", - "appium-sdb": "^1.0.1-beta.1", - "appium-support": "^2.8.0", - "asyncbox": "^2.0.4", - "bluebird": "^3.4.7", - "fancy-log": "^1.3.2", - "jimp": "^0.5.3", - "lodash": "^4.17.9", - "source-map-support": "^0.5.9", - "teen_process": "^1.9.0", - "yargs": "^12.0.2" - }, - "dependencies": { - "@jimp/bmp": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@jimp/bmp/-/bmp-0.5.4.tgz", - "integrity": "sha512-P/ezH1FuoM3FwS0Dm2ZGkph4x5/rPBzFLEZor7KQkmGUnYEIEG4o0BUcAWFmJOp2HgzbT6O2SfrpJNBOcVACzQ==", - "dev": true, - "requires": { - "@jimp/utils": "^0.5.0", - "bmp-js": "^0.1.0", - "core-js": "^2.5.7" - } - }, - "@jimp/core": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@jimp/core/-/core-0.5.4.tgz", - "integrity": "sha512-n3uvHy2ndUKItmbhnRO8xmU8J6KR+v6CQxO9sbeUDpSc3VXc1PkqrA8ZsCVFCjnDFcGBXL+MJeCTyQzq5W9Crw==", - "dev": true, - "requires": { - "@jimp/utils": "^0.5.0", - "any-base": "^1.1.0", - "buffer": "^5.2.0", - "core-js": "^2.5.7", - "exif-parser": "^0.1.12", - "file-type": "^9.0.0", - "load-bmfont": "^1.3.1", - "mkdirp": "0.5.1", - "phin": "^2.9.1", - "pixelmatch": "^4.0.2", - "tinycolor2": "^1.4.1" - } - }, - "@jimp/custom": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@jimp/custom/-/custom-0.5.4.tgz", - "integrity": "sha512-tLfyJoyouDl2J3RPFGfDzTtE+4S8ljqJUmLzy/cmx1n7+xS5TpLPdPskp7UaeAfNTqdF4CNAm94KYoxTZdj2mg==", - "dev": true, - "requires": { - "@jimp/core": "^0.5.4", - "core-js": "^2.5.7" - } - }, - "@jimp/gif": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@jimp/gif/-/gif-0.5.0.tgz", - "integrity": "sha512-HVB4c7b8r/yCpjhCjVNPRFLuujTav5UPmcQcFJjU6aIxmne6e29rAjRJEv3UMamHDGSu/96PzOsPZBO5U+ZGww==", - "dev": true, - "requires": { - "@jimp/utils": "^0.5.0", - "core-js": "^2.5.7", - "omggif": "^1.0.9" - } - }, - "@jimp/jpeg": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@jimp/jpeg/-/jpeg-0.5.4.tgz", - "integrity": "sha512-YaPWm+YSGCThNE/jLMckM3Qs6uaMxd/VsHOnEaqu5tGA4GFbfVaWHjKqkNGAFuiNV+HdgKlNcCOF3of+elvzqQ==", - "dev": true, - "requires": { - "@jimp/utils": "^0.5.0", - "core-js": "^2.5.7", - "jpeg-js": "^0.3.4" - } - }, - "@jimp/plugin-blit": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@jimp/plugin-blit/-/plugin-blit-0.5.4.tgz", - "integrity": "sha512-WqDYOugv76hF1wnKy7+xPGf9PUbcm9vPW28/jHWn1hjbb2GnusJ2fVEFad76J/1SPfhrQ2Uebf2QCWJuLmOqZg==", - "dev": true, - "requires": { - "@jimp/utils": "^0.5.0", - "core-js": "^2.5.7" - } - }, - "@jimp/plugin-blur": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@jimp/plugin-blur/-/plugin-blur-0.5.0.tgz", - "integrity": "sha512-5k0PXCA1RTJdITL7yMAyZ5tGQjKLHqFvwdXj/PCoBo5PuMyr0x6qfxmQEySixGk/ZHdDxMi80vYxHdKHjNNgjg==", - "dev": true, - "requires": { - "@jimp/utils": "^0.5.0", - "core-js": "^2.5.7" - } - }, - "@jimp/plugin-color": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/@jimp/plugin-color/-/plugin-color-0.5.5.tgz", - "integrity": "sha512-hWeOqNCmLguGYLhSvBrpfCvlijsMEVaLZAOod62s1rzWnujozyKOzm2eZe+W3To6mHbp5RGJNVrIwHBWMab4ug==", - "dev": true, - "requires": { - "@jimp/utils": "^0.5.0", - "core-js": "^2.5.7", - "tinycolor2": "^1.4.1" - } - }, - "@jimp/plugin-contain": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@jimp/plugin-contain/-/plugin-contain-0.5.4.tgz", - "integrity": "sha512-8YJh4FI3S69unri0nJsWeqVLeVGA77N2R0Ws16iSuCCD/5UnWd9FeWRrSbKuidBG6TdMBaG2KUqSYZeHeH9GOQ==", - "dev": true, - "requires": { - "@jimp/utils": "^0.5.0", - "core-js": "^2.5.7" - } - }, - "@jimp/plugin-cover": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@jimp/plugin-cover/-/plugin-cover-0.5.4.tgz", - "integrity": "sha512-2Rur7b44WiDDgizUI2M2uYWc1RmfhU5KjKS1xXruobjQ0tXkf5xlrPXSushq0hB6Ne0Ss6wv0+/6eQ8WeGHU2w==", - "dev": true, - "requires": { - "@jimp/utils": "^0.5.0", - "core-js": "^2.5.7" - } - }, - "@jimp/plugin-crop": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@jimp/plugin-crop/-/plugin-crop-0.5.4.tgz", - "integrity": "sha512-6t0rqn4VazquGk48tO6hFBrQ+nkvC+A1RnR6UM/m8ZtG2/yjpwF0MXcpgJI1Fb+a4Ug7BY1fu2GPcZOhnAVK/g==", - "dev": true, - "requires": { - "@jimp/utils": "^0.5.0", - "core-js": "^2.5.7" - } - }, - "@jimp/plugin-displace": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@jimp/plugin-displace/-/plugin-displace-0.5.0.tgz", - "integrity": "sha512-Bec7SQvnmKia4hOXEDjeNVx7vo/1bWqjuV6NO8xbNQcAO3gaCl91c9FjMDhsfAVb0Ou6imhbIuFPrLxorXsecQ==", - "dev": true, - "requires": { - "@jimp/utils": "^0.5.0", - "core-js": "^2.5.7" - } - }, - "@jimp/plugin-dither": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@jimp/plugin-dither/-/plugin-dither-0.5.0.tgz", - "integrity": "sha512-We2WJQsD/Lm8oqBFp/vUv9/5r2avyenL+wNNu/s2b1HqA5O4sPGrjHy9K6vIov0NroQGCQ3bNznLkTmjiHKBcg==", - "dev": true, - "requires": { - "@jimp/utils": "^0.5.0", - "core-js": "^2.5.7" - } - }, - "@jimp/plugin-flip": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@jimp/plugin-flip/-/plugin-flip-0.5.0.tgz", - "integrity": "sha512-D/ehBQxLMNR7oNd80KXo4tnSET5zEm5mR70khYOTtTlfti/DlLp3qOdjPOzfLyAdqO7Ly4qCaXrIsnia+pfPrA==", - "dev": true, - "requires": { - "@jimp/utils": "^0.5.0", - "core-js": "^2.5.7" - } - }, - "@jimp/plugin-gaussian": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@jimp/plugin-gaussian/-/plugin-gaussian-0.5.0.tgz", - "integrity": "sha512-Ln4kgxblv0/YzLBDb/J8DYPLhDzKH87Y8yHh5UKv3H+LPKnLaEG3L4iKTE9ivvdocnjmrtTFMYcWv2ERSPeHcg==", - "dev": true, - "requires": { - "@jimp/utils": "^0.5.0", - "core-js": "^2.5.7" - } - }, - "@jimp/plugin-invert": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@jimp/plugin-invert/-/plugin-invert-0.5.0.tgz", - "integrity": "sha512-/vyKeIi3T7puf+8ruWovTjzDC585EnTwJ+lGOOUYiNPsdn4JDFe1B3xd+Ayv9aCQbXDIlPElZaM9vd/+wqDiIQ==", - "dev": true, - "requires": { - "@jimp/utils": "^0.5.0", - "core-js": "^2.5.7" - } - }, - "@jimp/plugin-mask": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@jimp/plugin-mask/-/plugin-mask-0.5.4.tgz", - "integrity": "sha512-mUJ04pCrUWaJGXPjgoVbzhIQB8cVobj2ZEFlGO3BEAjyylYMrdJlNlsER8dd7UuJ2L/a4ocWtFDdsnuicnBghQ==", - "dev": true, - "requires": { - "@jimp/utils": "^0.5.0", - "core-js": "^2.5.7" - } - }, - "@jimp/plugin-normalize": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@jimp/plugin-normalize/-/plugin-normalize-0.5.4.tgz", - "integrity": "sha512-Q5W0oEz9wxsjuhvHAJynI/OqXZcmqEAuRONQId7Aw5ulCXSOg9C4y2a67EO7aZAt55T+zMVxI9UpVUpzVvO6hw==", - "dev": true, - "requires": { - "@jimp/utils": "^0.5.0", - "core-js": "^2.5.7" - } - }, - "@jimp/plugin-print": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@jimp/plugin-print/-/plugin-print-0.5.4.tgz", - "integrity": "sha512-DOZr5TY9WyMWFBD37oz7KpTEBVioFIHQF/gH5b3O5jjFyj4JPMkw7k3kVBve9lIrzIYrvLqe0wH59vyAwpeEFg==", - "dev": true, - "requires": { - "@jimp/utils": "^0.5.0", - "core-js": "^2.5.7", - "load-bmfont": "^1.4.0" - } - }, - "@jimp/plugin-resize": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@jimp/plugin-resize/-/plugin-resize-0.5.4.tgz", - "integrity": "sha512-lXNprNAT0QY1D1vG/1x6urUTlWuZe2dfL29P81ApW2Yfcio471+oqo45moX5FLS0q24xU600g7cHGf2/TzqSfA==", - "dev": true, - "requires": { - "@jimp/utils": "^0.5.0", - "core-js": "^2.5.7" - } - }, - "@jimp/plugin-rotate": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@jimp/plugin-rotate/-/plugin-rotate-0.5.4.tgz", - "integrity": "sha512-SIdUpMc8clObMchy8TnjgHgcXEQM992z5KavgiuOnCuBlsmSHtE3MrXTOyMW0Dn3gqapV9Y5vygrLm/BVtCCsg==", - "dev": true, - "requires": { - "@jimp/utils": "^0.5.0", - "core-js": "^2.5.7" - } - }, - "@jimp/plugin-scale": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@jimp/plugin-scale/-/plugin-scale-0.5.0.tgz", - "integrity": "sha512-5InIOr3cNtrS5aQ/uaosNf28qLLc0InpNGKFmGFTv8oqZqLch6PtDTjDBZ1GGWsPdA/ljy4Qyy7mJO1QBmgQeQ==", - "dev": true, - "requires": { - "@jimp/utils": "^0.5.0", - "core-js": "^2.5.7" - } - }, - "@jimp/plugins": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/@jimp/plugins/-/plugins-0.5.5.tgz", - "integrity": "sha512-9oF6LbSM/K7YkFCcxaPaD8NUkL/ZY8vT8NIGfQ/NpX+tKQtcsLHcRavHpUC+M1xXShv/QGx9OdBV/jgiu82QYg==", - "dev": true, - "requires": { - "@jimp/plugin-blit": "^0.5.4", - "@jimp/plugin-blur": "^0.5.0", - "@jimp/plugin-color": "^0.5.5", - "@jimp/plugin-contain": "^0.5.4", - "@jimp/plugin-cover": "^0.5.4", - "@jimp/plugin-crop": "^0.5.4", - "@jimp/plugin-displace": "^0.5.0", - "@jimp/plugin-dither": "^0.5.0", - "@jimp/plugin-flip": "^0.5.0", - "@jimp/plugin-gaussian": "^0.5.0", - "@jimp/plugin-invert": "^0.5.0", - "@jimp/plugin-mask": "^0.5.4", - "@jimp/plugin-normalize": "^0.5.4", - "@jimp/plugin-print": "^0.5.4", - "@jimp/plugin-resize": "^0.5.4", - "@jimp/plugin-rotate": "^0.5.4", - "@jimp/plugin-scale": "^0.5.0", - "core-js": "^2.5.7", - "timm": "^1.6.1" - } - }, - "@jimp/png": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@jimp/png/-/png-0.5.4.tgz", - "integrity": "sha512-J2NU7368zihF1HUZdmpXsL/Hhyf+I3ubmK+6Uz3Uoyvtk1VS7dO3L0io6fJQutfWmPZ4bvu6Ry022oHjbi6QCA==", - "dev": true, - "requires": { - "@jimp/utils": "^0.5.0", - "core-js": "^2.5.7", - "pngjs": "^3.3.3" - } - }, - "@jimp/tiff": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@jimp/tiff/-/tiff-0.5.4.tgz", - "integrity": "sha512-hr7Zq3eWjAZ+itSwuAObIWMRNv7oHVM3xuEDC2ouP7HfE7woBtyhCyfA7u12KlgtM57gKWeogXqTlewRGVzx6g==", - "dev": true, - "requires": { - "core-js": "^2.5.7", - "utif": "^2.0.1" - } - }, - "@jimp/types": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@jimp/types/-/types-0.5.4.tgz", - "integrity": "sha512-nbZXM6TsdpnYHIBd8ZuoxGpvmxc2SqiggY30/bhOP/VJQoDBzm2v/20Ywz5M0snpIK2SdYG52eZPNjfjqUP39w==", - "dev": true, - "requires": { - "@jimp/bmp": "^0.5.4", - "@jimp/gif": "^0.5.0", - "@jimp/jpeg": "^0.5.4", - "@jimp/png": "^0.5.4", - "@jimp/tiff": "^0.5.4", - "core-js": "^2.5.7", - "timm": "^1.6.1" - } - }, - "@jimp/utils": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-0.5.0.tgz", - "integrity": "sha512-7H9RFVU+Li2XmEko0GGyzy7m7JjSc7qa+m8l3fUzYg2GtwASApjKF/LSG2AUQCUmDKFLdfIEVjxvKvZUJFEmpw==", - "dev": true, - "requires": { - "core-js": "^2.5.7" - } - }, - "@wdio/config": { - "version": "5.22.4", - "resolved": "https://registry.npmjs.org/@wdio/config/-/config-5.22.4.tgz", - "integrity": "sha512-i5dJQWb80darcRA//tfG0guMeQCeRUXroZNnHjGNb1qzvTRZmcIIhdxaD+DbK/5dWEx6aoMfoi6wjVp/CXwdAg==", - "dev": true, - "requires": { - "@wdio/logger": "5.16.10", - "deepmerge": "^4.0.0", - "glob": "^7.1.2" - } - }, - "@wdio/logger": { - "version": "5.16.10", - "resolved": "https://registry.npmjs.org/@wdio/logger/-/logger-5.16.10.tgz", - "integrity": "sha512-hRKhxgd9uB48Dtj2xe2ckxU4KwI/RO8IwguySuaI2SLFj6EDbdonwzpVkq111/fjBuq7R1NauAaNcm3AMEbIFA==", - "dev": true, - "requires": { - "chalk": "^3.0.0", - "loglevel": "^1.6.0", - "loglevel-plugin-prefix": "^0.8.4", - "strip-ansi": "^6.0.0" - } - }, - "@wdio/protocols": { - "version": "5.22.1", - "resolved": "https://registry.npmjs.org/@wdio/protocols/-/protocols-5.22.1.tgz", - "integrity": "sha512-GdoWb/HTrb09Qb0S/7sLp1NU94LAhTsF1NnFj5sEFSUpecrl0S07pnhVg54pUImectN/woaqSl7uJGjlSGZcdQ==", - "dev": true - }, - "@wdio/repl": { - "version": "5.23.0", - "resolved": "https://registry.npmjs.org/@wdio/repl/-/repl-5.23.0.tgz", - "integrity": "sha512-cKG9m0XuqcQenQmoup0yJX1fkDQEdY06QXuwt636ZQf6XgDoeoAdNOgnRnNruQ0+JsC2eqHFoSNto1q8wcLH/g==", - "dev": true, - "requires": { - "@wdio/utils": "5.23.0" - } - }, - "@wdio/utils": { - "version": "5.23.0", - "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-5.23.0.tgz", - "integrity": "sha512-dWPEkDiaNUqJXPO6L2di2apI7Rle7Er4euh67Wlb5+3MrPNjCKhiF8gHcpQeL8oe6A1MH/f89kpSEEXe4BMkAw==", - "dev": true, - "requires": { - "@wdio/logger": "5.16.10", - "deepmerge": "^4.0.0" - } - }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "appium-base-driver": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/appium-base-driver/-/appium-base-driver-4.5.1.tgz", - "integrity": "sha512-g7sI5mzmGdZhIFg3+A5f9ewtihYKS0b33wZWbN6R/PYYTEmXbNhFPGfVqzoAzFANuLjlTlvEEsqGcUtjrMO2Bw==", - "dev": true, - "requires": { - "@babel/runtime": "^7.0.0", - "appium-support": "^2.33.1", - "async-lock": "^1.0.0", - "asyncbox": "^2.3.1", - "bluebird": "^3.5.3", - "body-parser": "^1.18.2", - "colors": "^1.1.2", - "es6-error": "^4.1.1", - "express": "^4.16.2", - "http-status-codes": "^1.3.0", - "lodash": "^4.0.0", - "lru-cache": "^5.0.0", - "method-override": "^3.0.0", - "morgan": "^1.9.0", - "request": "^2.83.0", - "request-promise": "^4.2.2", - "sanitize-filename": "^1.6.1", - "serve-favicon": "^2.4.5", - "source-map-support": "^0.5.5", - "uuid-js": "^0.7.5", - "validate.js": "^0.13.0", - "webdriverio": "^5.10.9", - "ws": "^7.0.0" - } - }, - "archiver": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/archiver/-/archiver-3.1.1.tgz", - "integrity": "sha512-5Hxxcig7gw5Jod/8Gq0OneVgLYET+oNHcxgWItq4TbhOzRLKNAFUb9edAftiMKXvXfCB0vbGrJdZDNq0dWMsxg==", - "dev": true, - "requires": { - "archiver-utils": "^2.1.0", - "async": "^2.6.3", - "buffer-crc32": "^0.2.1", - "glob": "^7.1.4", - "readable-stream": "^3.4.0", - "tar-stream": "^2.1.0", - "zip-stream": "^2.1.2" - } - }, - "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "dev": true, - "requires": { - "lodash": "^4.17.14" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", - "dev": true, - "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "compress-commons": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-2.1.1.tgz", - "integrity": "sha512-eVw6n7CnEMFzc3duyFVrQEuY1BlHR3rYsSztyG32ibGMW722i3C6IizEGMFmfMU+A+fALvBIwxN3czffTcdA+Q==", - "dev": true, - "requires": { - "buffer-crc32": "^0.2.13", - "crc32-stream": "^3.0.1", - "normalize-path": "^3.0.0", - "readable-stream": "^2.3.6" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - } - } - }, - "crc32-stream": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-3.0.1.tgz", - "integrity": "sha512-mctvpXlbzsvK+6z8kJwSJ5crm7yBwrQMTybJzMw1O4lLGJqjlDCXY2Zw7KheiA6XBEcBmfLx1D88mjRGVJtY9w==", - "dev": true, - "requires": { - "crc": "^3.4.4", - "readable-stream": "^3.4.0" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", - "dev": true - }, - "http-status-codes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/http-status-codes/-/http-status-codes-1.4.0.tgz", - "integrity": "sha512-JrT3ua+WgH8zBD3HEJYbeEgnuQaAnUeRRko/YojPAJjGmIfGD3KPU/asLdsLwKjfxOmQe5nXMQ0pt/7MyapVbQ==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "jimp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/jimp/-/jimp-0.5.6.tgz", - "integrity": "sha512-H0nHTu6KgAgQzDxa38ew2dXbnRzKm1w5uEyhMIxqwCQVjwgarOjjkV/avbNLxfxRHAFaNp4rGIc/qm8P+uhX9A==", - "dev": true, - "requires": { - "@babel/polyfill": "^7.0.0", - "@jimp/custom": "^0.5.4", - "@jimp/plugins": "^0.5.5", - "@jimp/types": "^0.5.4", - "core-js": "^2.5.7" - } - }, - "jpeg-js": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.3.7.tgz", - "integrity": "sha512-9IXdWudL61npZjvLuVe/ktHiA41iE8qFyLB+4VDTblEsWBzeg8WQTlktdUK4CdncUqtUgUg0bbOmTE2bKBKaBQ==", - "dev": true - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "pngjs": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", - "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==", - "dev": true - }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", - "dev": true - }, - "rgb2hex": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/rgb2hex/-/rgb2hex-0.1.10.tgz", - "integrity": "sha512-vKz+kzolWbL3rke/xeTE2+6vHmZnNxGyDnaVW4OckntAIcc7DcZzWkQSfxMDwqHS8vhgySnIFyBUH7lIk6PxvQ==", - "dev": true - }, - "serialize-error": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-5.0.0.tgz", - "integrity": "sha512-/VtpuyzYf82mHYTtI4QKtwHa79vAdU5OQpNPAmE/0UDdlGT0ZxHwC+J6gXkw29wwoVI8fMPsfcVHOwXtUQYYQA==", - "dev": true, - "requires": { - "type-fest": "^0.8.0" - } - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - }, - "webdriver": { - "version": "5.23.0", - "resolved": "https://registry.npmjs.org/webdriver/-/webdriver-5.23.0.tgz", - "integrity": "sha512-r7IrbZ2SuTIRyWV8mv4a4hZoFcT9Qt4MznOkdRWPE1sPpZ8lyLZsIEjKCEbHelOzPwURqk+biwGrm4z2OZRAiw==", - "dev": true, - "requires": { - "@types/request": "^2.48.4", - "@wdio/config": "5.22.4", - "@wdio/logger": "5.16.10", - "@wdio/protocols": "5.22.1", - "@wdio/utils": "5.23.0", - "lodash.merge": "^4.6.1", - "request": "^2.83.0" - } - }, - "webdriverio": { - "version": "5.23.0", - "resolved": "https://registry.npmjs.org/webdriverio/-/webdriverio-5.23.0.tgz", - "integrity": "sha512-hxt6Nuu2bBrTsVk7GfoFRTh63l4fRVXlK9U30RtPbHoWO5tcFdyUz2UTgeHEZ54ea1DQEVPfsgFiLnJULkWp1Q==", - "dev": true, - "requires": { - "@wdio/config": "5.22.4", - "@wdio/logger": "5.16.10", - "@wdio/repl": "5.23.0", - "@wdio/utils": "5.23.0", - "archiver": "^3.0.0", - "css-value": "^0.0.1", - "grapheme-splitter": "^1.0.2", - "lodash.clonedeep": "^4.5.0", - "lodash.isobject": "^3.0.2", - "lodash.isplainobject": "^4.0.6", - "lodash.zip": "^4.2.0", - "resq": "^1.6.0", - "rgb2hex": "^0.1.0", - "serialize-error": "^5.0.0", - "webdriver": "5.23.0" - } - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, - "y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, - "yargs": { - "version": "12.0.5", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", - "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", - "dev": true, - "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.2.0", - "find-up": "^3.0.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.0.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1 || ^4.0.0", - "yargs-parser": "^11.1.1" - } - }, - "yargs-parser": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", - "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - }, - "zip-stream": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-2.1.3.tgz", - "integrity": "sha512-EkXc2JGcKhO5N5aZ7TmuNo45budRaFGHOmz24wtJR7znbNqDPmdZtUauKX6et8KAVseAMBOyWJqEpXcHTBsh7Q==", - "dev": true, - "requires": { - "archiver-utils": "^2.1.0", - "compress-commons": "^2.1.1", - "readable-stream": "^3.4.0" - } - } - } - }, - "appium-uiautomator2-driver": { - "version": "1.61.2", - "resolved": "https://registry.npmjs.org/appium-uiautomator2-driver/-/appium-uiautomator2-driver-1.61.2.tgz", - "integrity": "sha512-BPR4R898h7+XUiZDVQTZWpLSNmiX1+xL33m1MZV0pFxt4Uy1VFWWgOTcF49MTDKEiePZoWwfZtRYRsgvdBAybQ==", - "dev": true, - "requires": { - "@babel/runtime": "^7.0.0", - "appium-adb": "^8.9.0", - "appium-android-driver": "^4.40.0", - "appium-base-driver": "^7.0.0", - "appium-chromedriver": "^4.23.1", - "appium-support": "^2.49.0", - "appium-uiautomator2-server": "^4.17.4", - "asyncbox": "^2.3.1", - "axios": "^0.21.0", - "bluebird": "^3.5.1", - "css-selector-parser": "^1.4.1", - "lodash": "^4.17.4", - "portscanner": "2.2.0", - "source-map-support": "^0.5.5", - "teen_process": "^1.3.1", - "yargs": "^16.0.0" - } - }, - "appium-uiautomator2-server": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/appium-uiautomator2-server/-/appium-uiautomator2-server-4.17.4.tgz", - "integrity": "sha512-x4FqjU6usdLHtOfjbwS6MM55tYYb4IfqojGe5olC5Hw6umQ57rK6LEnnUwFcUd7NrBcTfsklMANJV6s89S4nfQ==", + "yargs-parser": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA==", "dev": true + } + } + }, + "@wordpress/escape-html": { + "version": "file:packages/escape-html", + "requires": { + "@babel/runtime": "^7.16.0" + } + }, + "@wordpress/eslint-plugin": { + "version": "file:packages/eslint-plugin", + "dev": true, + "requires": { + "@babel/eslint-parser": "^7.16.0", + "@typescript-eslint/eslint-plugin": "^5.3.0", + "@typescript-eslint/parser": "^5.3.0", + "@wordpress/babel-preset-default": "file:packages/babel-preset-default", + "@wordpress/prettier-config": "file:packages/prettier-config", + "cosmiconfig": "^7.0.0", + "eslint-config-prettier": "^8.3.0", + "eslint-plugin-import": "^2.25.2", + "eslint-plugin-jest": "^25.2.3", + "eslint-plugin-jsdoc": "^37.0.3", + "eslint-plugin-jsx-a11y": "^6.5.1", + "eslint-plugin-prettier": "^3.3.0", + "eslint-plugin-react": "^7.27.0", + "eslint-plugin-react-hooks": "^4.3.0", + "globals": "^13.12.0", + "requireindex": "^1.2.0" + } + }, + "@wordpress/format-library": { + "version": "file:packages/format-library", + "requires": { + "@babel/runtime": "^7.16.0", + "@wordpress/a11y": "file:packages/a11y", + "@wordpress/block-editor": "file:packages/block-editor", + "@wordpress/components": "file:packages/components", + "@wordpress/compose": "file:packages/compose", + "@wordpress/data": "file:packages/data", + "@wordpress/element": "file:packages/element", + "@wordpress/html-entities": "file:packages/html-entities", + "@wordpress/i18n": "file:packages/i18n", + "@wordpress/icons": "file:packages/icons", + "@wordpress/rich-text": "file:packages/rich-text", + "@wordpress/url": "file:packages/url", + "lodash": "^4.17.21" + } + }, + "@wordpress/hooks": { + "version": "file:packages/hooks", + "requires": { + "@babel/runtime": "^7.16.0" + } + }, + "@wordpress/html-entities": { + "version": "file:packages/html-entities", + "requires": { + "@babel/runtime": "^7.16.0" + } + }, + "@wordpress/i18n": { + "version": "file:packages/i18n", + "requires": { + "@babel/runtime": "^7.16.0", + "@wordpress/hooks": "file:packages/hooks", + "gettext-parser": "^1.3.1", + "lodash": "^4.17.21", + "memize": "^1.1.0", + "sprintf-js": "^1.1.1", + "tannin": "^1.2.0" + } + }, + "@wordpress/icons": { + "version": "file:packages/icons", + "requires": { + "@babel/runtime": "^7.16.0", + "@wordpress/element": "file:packages/element", + "@wordpress/primitives": "file:packages/primitives" + } + }, + "@wordpress/interface": { + "version": "file:packages/interface", + "requires": { + "@babel/runtime": "^7.16.0", + "@wordpress/a11y": "file:packages/a11y", + "@wordpress/components": "file:packages/components", + "@wordpress/compose": "file:packages/compose", + "@wordpress/data": "file:packages/data", + "@wordpress/deprecated": "file:packages/deprecated", + "@wordpress/element": "file:packages/element", + "@wordpress/i18n": "file:packages/i18n", + "@wordpress/icons": "file:packages/icons", + "@wordpress/plugins": "file:packages/plugins", + "@wordpress/preferences": "file:packages/preferences", + "@wordpress/viewport": "file:packages/viewport", + "classnames": "^2.3.1", + "lodash": "^4.17.21" + } + }, + "@wordpress/is-shallow-equal": { + "version": "file:packages/is-shallow-equal", + "requires": { + "@babel/runtime": "^7.16.0" + } + }, + "@wordpress/jest-console": { + "version": "file:packages/jest-console", + "dev": true, + "requires": { + "@babel/runtime": "^7.16.0", + "jest-matcher-utils": "^27.4.2", + "lodash": "^4.17.21" + } + }, + "@wordpress/jest-preset-default": { + "version": "file:packages/jest-preset-default", + "dev": true, + "requires": { + "@wojtekmaj/enzyme-adapter-react-17": "^0.6.1", + "@wordpress/jest-console": "file:packages/jest-console", + "babel-jest": "^27.4.5", + "enzyme": "^3.11.0", + "enzyme-to-json": "^3.4.4" + } + }, + "@wordpress/jest-puppeteer-axe": { + "version": "file:packages/jest-puppeteer-axe", + "dev": true, + "requires": { + "@axe-core/puppeteer": "^4.0.0", + "@babel/runtime": "^7.16.0" + } + }, + "@wordpress/keyboard-shortcuts": { + "version": "file:packages/keyboard-shortcuts", + "requires": { + "@babel/runtime": "^7.16.0", + "@wordpress/data": "file:packages/data", + "@wordpress/element": "file:packages/element", + "@wordpress/keycodes": "file:packages/keycodes", + "lodash": "^4.17.21", + "rememo": "^3.0.0" + } + }, + "@wordpress/keycodes": { + "version": "file:packages/keycodes", + "requires": { + "@babel/runtime": "^7.16.0", + "@wordpress/i18n": "file:packages/i18n", + "lodash": "^4.17.21" + } + }, + "@wordpress/lazy-import": { + "version": "file:packages/lazy-import", + "dev": true, + "requires": { + "execa": "^4.0.2", + "npm-package-arg": "^8.1.5", + "semver": "^7.3.5" + } + }, + "@wordpress/list-reusable-blocks": { + "version": "file:packages/list-reusable-blocks", + "requires": { + "@babel/runtime": "^7.16.0", + "@wordpress/api-fetch": "file:packages/api-fetch", + "@wordpress/components": "file:packages/components", + "@wordpress/compose": "file:packages/compose", + "@wordpress/element": "file:packages/element", + "@wordpress/i18n": "file:packages/i18n", + "lodash": "^4.17.21" + } + }, + "@wordpress/media-utils": { + "version": "file:packages/media-utils", + "requires": { + "@babel/runtime": "^7.16.0", + "@wordpress/api-fetch": "file:packages/api-fetch", + "@wordpress/blob": "file:packages/blob", + "@wordpress/element": "file:packages/element", + "@wordpress/i18n": "file:packages/i18n", + "lodash": "^4.17.21" + } + }, + "@wordpress/notices": { + "version": "file:packages/notices", + "requires": { + "@babel/runtime": "^7.16.0", + "@wordpress/a11y": "file:packages/a11y", + "@wordpress/data": "file:packages/data", + "lodash": "^4.17.21" + } + }, + "@wordpress/npm-package-json-lint-config": { + "version": "file:packages/npm-package-json-lint-config", + "dev": true + }, + "@wordpress/nux": { + "version": "file:packages/nux", + "requires": { + "@babel/runtime": "^7.16.0", + "@wordpress/components": "file:packages/components", + "@wordpress/compose": "file:packages/compose", + "@wordpress/data": "file:packages/data", + "@wordpress/deprecated": "file:packages/deprecated", + "@wordpress/element": "file:packages/element", + "@wordpress/i18n": "file:packages/i18n", + "@wordpress/icons": "file:packages/icons", + "lodash": "^4.17.21", + "rememo": "^3.0.0" + } + }, + "@wordpress/plugins": { + "version": "file:packages/plugins", + "requires": { + "@babel/runtime": "^7.16.0", + "@wordpress/compose": "file:packages/compose", + "@wordpress/element": "file:packages/element", + "@wordpress/hooks": "file:packages/hooks", + "@wordpress/icons": "file:packages/icons", + "lodash": "^4.17.21", + "memize": "^1.1.0" + } + }, + "@wordpress/postcss-plugins-preset": { + "version": "file:packages/postcss-plugins-preset", + "dev": true, + "requires": { + "@wordpress/base-styles": "file:packages/base-styles", + "autoprefixer": "^10.2.5" + } + }, + "@wordpress/postcss-themes": { + "version": "file:packages/postcss-themes", + "dev": true + }, + "@wordpress/preferences": { + "version": "file:packages/preferences", + "requires": { + "@babel/runtime": "^7.16.0", + "@wordpress/a11y": "file:packages/a11y", + "@wordpress/components": "file:packages/components", + "@wordpress/data": "file:packages/data", + "@wordpress/i18n": "file:packages/i18n", + "@wordpress/icons": "file:packages/icons", + "classnames": "^2.3.1" + } + }, + "@wordpress/preferences-persistence": { + "version": "file:packages/preferences-persistence", + "requires": { + "@babel/runtime": "^7.16.0", + "@wordpress/api-fetch": "file:packages/api-fetch" + } + }, + "@wordpress/prettier-config": { + "version": "file:packages/prettier-config", + "dev": true + }, + "@wordpress/primitives": { + "version": "file:packages/primitives", + "requires": { + "@babel/runtime": "^7.16.0", + "@wordpress/element": "file:packages/element", + "classnames": "^2.3.1" + } + }, + "@wordpress/priority-queue": { + "version": "file:packages/priority-queue", + "requires": { + "@babel/runtime": "^7.16.0" + } + }, + "@wordpress/project-management-automation": { + "version": "file:packages/project-management-automation", + "dev": true, + "requires": { + "@actions/core": "1.8.0", + "@actions/github": "^5.0.0", + "@babel/runtime": "^7.16.0", + "@octokit/request-error": "^2.1.0", + "@octokit/webhooks": "^7.1.0" + } + }, + "@wordpress/react-i18n": { + "version": "file:packages/react-i18n", + "requires": { + "@babel/runtime": "^7.16.0", + "@wordpress/element": "file:packages/element", + "@wordpress/i18n": "file:packages/i18n", + "utility-types": "^3.10.0" + } + }, + "@wordpress/react-native-aztec": { + "version": "file:packages/react-native-aztec", + "requires": { + "@wordpress/element": "file:packages/element", + "@wordpress/keycodes": "file:packages/keycodes" + } + }, + "@wordpress/react-native-bridge": { + "version": "file:packages/react-native-bridge", + "requires": { + "@wordpress/react-native-aztec": "file:packages/react-native-aztec" + } + }, + "@wordpress/react-native-editor": { + "version": "file:packages/react-native-editor", + "requires": { + "@babel/runtime": "^7.16.0", + "@react-native-clipboard/clipboard": "1.9.0", + "@react-native-community/blur": "3.6.0", + "@react-native-community/slider": "https://raw.githubusercontent.com/wordpress-mobile/react-native-slider/v3.0.2-wp-2/react-native-community-slider-3.0.2-wp-2.tgz", + "@react-native-masked-view/masked-view": "0.2.6", + "@react-navigation/core": "5.12.0", + "@react-navigation/native": "5.7.0", + "@react-navigation/routers": "5.4.9", + "@react-navigation/stack": "5.6.2", + "@wordpress/api-fetch": "file:packages/api-fetch", + "@wordpress/block-editor": "file:packages/block-editor", + "@wordpress/block-library": "file:packages/block-library", + "@wordpress/blocks": "file:packages/blocks", + "@wordpress/components": "file:packages/components", + "@wordpress/data": "file:packages/data", + "@wordpress/edit-post": "file:packages/edit-post", + "@wordpress/element": "file:packages/element", + "@wordpress/hooks": "file:packages/hooks", + "@wordpress/i18n": "file:packages/i18n", + "@wordpress/react-native-aztec": "file:packages/react-native-aztec", + "@wordpress/react-native-bridge": "file:packages/react-native-bridge", + "core-js": "^3.19.1", + "fast-average-color": "^4.3.0", + "gettext-parser": "^1.3.1", + "jed": "^1.1.1", + "jsdom-jscore-rn": "git+https://github.com/iamcco/jsdom-jscore-rn.git#a562f3d57c27c13e5bfc8cf82d496e69a3ba2800", + "node-fetch": "^2.6.0", + "react-native": "0.66.2", + "react-native-gesture-handler": "https://raw.githubusercontent.com/wordpress-mobile/react-native-gesture-handler/2.2.0-wp-4/react-native-gesture-handler-2.2.0-wp-4.tgz", + "react-native-get-random-values": "1.4.0", + "react-native-hr": "git+https://github.com/Riglerr/react-native-hr.git#2d01a5cf77212d100e8b99e0310cce5234f977b3", + "react-native-hsv-color-picker": "https://raw.githubusercontent.com/wordpress-mobile/react-native-hsv-color-picker/v1.0.1-wp-2/react-native-hsv-color-picker-1.0.1-wp-2.tgz", + "react-native-keyboard-aware-scroll-view": "https://raw.githubusercontent.com/wordpress-mobile/react-native-keyboard-aware-scroll-view/v0.8.8-wp-1/react-native-keyboard-aware-scroll-view-0.8.8-wp-1.tgz", + "react-native-linear-gradient": "https://raw.githubusercontent.com/wordpress-mobile/react-native-linear-gradient/v2.5.6-wp-2/react-native-linear-gradient-2.5.6-wp-2.tgz", + "react-native-modal": "^11.10.0", + "react-native-prompt-android": "https://raw.githubusercontent.com/wordpress-mobile/react-native-prompt-android/v1.0.0-wp-2/react-native-prompt-android-1.0.0-wp-2.tgz", + "react-native-reanimated": "https://raw.githubusercontent.com/wordpress-mobile/react-native-reanimated/2.4.1-wp-2/react-native-reanimated-2.4.1-wp-2.tgz", + "react-native-safe-area": "^0.5.0", + "react-native-safe-area-context": "3.2.0", + "react-native-sass-transformer": "^1.1.1", + "react-native-screens": "2.9.0", + "react-native-svg": "9.13.6", + "react-native-url-polyfill": "^1.1.2", + "react-native-video": "https://raw.githubusercontent.com/wordpress-mobile/react-native-video/5.2.0-wp-2/react-native-video-5.2.0-wp-2.tgz", + "react-native-webview": "11.6.2" + } + }, + "@wordpress/readable-js-assets-webpack-plugin": { + "version": "file:packages/readable-js-assets-webpack-plugin", + "dev": true + }, + "@wordpress/redux-routine": { + "version": "file:packages/redux-routine", + "requires": { + "@babel/runtime": "^7.16.0", + "is-promise": "^4.0.0", + "lodash": "^4.17.21", + "rungen": "^0.3.2" + } + }, + "@wordpress/reusable-blocks": { + "version": "file:packages/reusable-blocks", + "requires": { + "@wordpress/block-editor": "file:packages/block-editor", + "@wordpress/blocks": "file:packages/blocks", + "@wordpress/components": "file:packages/components", + "@wordpress/core-data": "file:packages/core-data", + "@wordpress/data": "file:packages/data", + "@wordpress/element": "file:packages/element", + "@wordpress/i18n": "file:packages/i18n", + "@wordpress/icons": "file:packages/icons", + "@wordpress/notices": "file:packages/notices", + "@wordpress/url": "file:packages/url", + "lodash": "^4.17.21" + } + }, + "@wordpress/rich-text": { + "version": "file:packages/rich-text", + "requires": { + "@babel/runtime": "^7.16.0", + "@wordpress/a11y": "file:packages/a11y", + "@wordpress/compose": "file:packages/compose", + "@wordpress/data": "file:packages/data", + "@wordpress/element": "file:packages/element", + "@wordpress/escape-html": "file:packages/escape-html", + "@wordpress/i18n": "file:packages/i18n", + "@wordpress/keycodes": "file:packages/keycodes", + "lodash": "^4.17.21", + "memize": "^1.1.0", + "rememo": "^3.0.0" + } + }, + "@wordpress/scripts": { + "version": "file:packages/scripts", + "dev": true, + "requires": { + "@babel/core": "^7.16.0", + "@pmmmwh/react-refresh-webpack-plugin": "^0.5.2", + "@svgr/webpack": "^6.2.1", + "@wordpress/babel-preset-default": "file:packages/babel-preset-default", + "@wordpress/browserslist-config": "file:packages/browserslist-config", + "@wordpress/dependency-extraction-webpack-plugin": "file:packages/dependency-extraction-webpack-plugin", + "@wordpress/eslint-plugin": "file:packages/eslint-plugin", + "@wordpress/jest-preset-default": "file:packages/jest-preset-default", + "@wordpress/npm-package-json-lint-config": "file:packages/npm-package-json-lint-config", + "@wordpress/postcss-plugins-preset": "file:packages/postcss-plugins-preset", + "@wordpress/prettier-config": "file:packages/prettier-config", + "@wordpress/stylelint-config": "file:packages/stylelint-config", + "adm-zip": "^0.5.9", + "babel-jest": "^27.4.5", + "babel-loader": "^8.2.3", + "browserslist": "^4.17.6", + "chalk": "^4.0.0", + "check-node-version": "^4.1.0", + "clean-webpack-plugin": "^3.0.0", + "copy-webpack-plugin": "^10.2.0", + "cross-spawn": "^5.1.0", + "css-loader": "^6.2.0", + "cssnano": "^5.0.7", + "cwd": "^0.10.0", + "dir-glob": "^3.0.1", + "eslint": "^8.3.0", + "expect-puppeteer": "^4.4.0", + "fast-glob": "^3.2.7", + "filenamify": "^4.2.0", + "jest": "^27.4.5", + "jest-dev-server": "^6.0.2", + "jest-environment-node": "^27.4.4", + "markdownlint-cli": "^0.31.1", + "merge-deep": "^3.0.3", + "mini-css-extract-plugin": "^2.5.1", + "minimist": "^1.2.0", + "npm-package-json-lint": "^5.0.0", + "npm-packlist": "^3.0.0", + "postcss": "^8.4.5", + "postcss-loader": "^6.2.1", + "prettier": "npm:wp-prettier@2.2.1-beta-1", + "puppeteer-core": "^13.2.0", + "react-refresh": "^0.10.0", + "read-pkg-up": "^7.0.1", + "resolve-bin": "^0.4.0", + "sass": "^1.35.2", + "sass-loader": "^12.1.0", + "source-map-loader": "^3.0.0", + "stylelint": "^14.2.0", + "terser-webpack-plugin": "^5.1.4", + "url-loader": "^4.1.1", + "webpack": "^5.47.1", + "webpack-bundle-analyzer": "^4.4.2", + "webpack-cli": "^4.9.1", + "webpack-dev-server": "^4.4.0" + }, + "dependencies": { + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" + } + } + }, + "@wordpress/server-side-render": { + "version": "file:packages/server-side-render", + "requires": { + "@babel/runtime": "^7.16.0", + "@wordpress/api-fetch": "file:packages/api-fetch", + "@wordpress/blocks": "file:packages/blocks", + "@wordpress/components": "file:packages/components", + "@wordpress/compose": "file:packages/compose", + "@wordpress/data": "file:packages/data", + "@wordpress/deprecated": "file:packages/deprecated", + "@wordpress/element": "file:packages/element", + "@wordpress/i18n": "file:packages/i18n", + "@wordpress/url": "file:packages/url", + "lodash": "^4.17.21" + } + }, + "@wordpress/shortcode": { + "version": "file:packages/shortcode", + "requires": { + "@babel/runtime": "^7.16.0", + "lodash": "^4.17.21", + "memize": "^1.1.0" + } + }, + "@wordpress/style-engine": { + "version": "file:packages/style-engine", + "requires": { + "@babel/runtime": "^7.16.0", + "lodash": "^4.17.21" + } + }, + "@wordpress/stylelint-config": { + "version": "file:packages/stylelint-config", + "dev": true, + "requires": { + "stylelint-config-recommended": "^6.0.0", + "stylelint-config-recommended-scss": "^5.0.2" + } + }, + "@wordpress/token-list": { + "version": "file:packages/token-list", + "requires": { + "@babel/runtime": "^7.16.0", + "lodash": "^4.17.21" + } + }, + "@wordpress/url": { + "version": "file:packages/url", + "requires": { + "@babel/runtime": "^7.16.0", + "lodash": "^4.17.21" + } + }, + "@wordpress/viewport": { + "version": "file:packages/viewport", + "requires": { + "@babel/runtime": "^7.16.0", + "@wordpress/compose": "file:packages/compose", + "@wordpress/data": "file:packages/data", + "lodash": "^4.17.21" + } + }, + "@wordpress/warning": { + "version": "file:packages/warning" + }, + "@wordpress/widgets": { + "version": "file:packages/widgets", + "requires": { + "@babel/runtime": "^7.16.0", + "@wordpress/api-fetch": "file:packages/api-fetch", + "@wordpress/block-editor": "file:packages/block-editor", + "@wordpress/blocks": "file:packages/blocks", + "@wordpress/components": "file:packages/components", + "@wordpress/compose": "file:packages/compose", + "@wordpress/core-data": "file:packages/core-data", + "@wordpress/data": "file:packages/data", + "@wordpress/element": "file:packages/element", + "@wordpress/i18n": "file:packages/i18n", + "@wordpress/icons": "file:packages/icons", + "@wordpress/notices": "file:packages/notices", + "classnames": "^2.3.1", + "lodash": "^4.17.21" + } + }, + "@wordpress/wordcount": { + "version": "file:packages/wordcount", + "requires": { + "@babel/runtime": "^7.16.0", + "lodash": "^4.17.21" + } + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "dev": true + }, + "@zkochan/cmd-shim": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@zkochan/cmd-shim/-/cmd-shim-3.1.0.tgz", + "integrity": "sha512-o8l0+x7C7sMZU3v9GuJIAU10qQLtwR1dtRQIOmlNMtyaqhmpXOzx1HWiYoWfmmf9HHZoAkXpc9TM9PQYF9d4Jg==", + "dev": true, + "requires": { + "is-windows": "^1.0.0", + "mkdirp-promise": "^5.0.1", + "mz": "^2.5.0" + } + }, + "JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "dev": true, + "requires": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + } + }, + "abab": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", + "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", + "dev": true + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "requires": { + "event-target-shim": "^5.0.0" + } + }, + "absolute-path": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/absolute-path/-/absolute-path-0.0.0.tgz", + "integrity": "sha1-p4di+9rftSl76ZsV01p4Wy8JW/c=" + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + }, + "dependencies": { + "mime-db": { + "version": "1.47.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz", + "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==" }, - "appium-webdriveragent": { - "version": "2.32.2", - "resolved": "https://registry.npmjs.org/appium-webdriveragent/-/appium-webdriveragent-2.32.2.tgz", - "integrity": "sha512-ia1bjyswSJiTaW2CKUAKIOMHqZA1NtGUu5ltEnRmSu+NhKCixVqWGKCOiJyic/vh0OtxI74DMs0V3AWGGxFlmw==", - "dev": true, + "mime-types": { + "version": "2.1.30", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz", + "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==", "requires": { - "@babel/runtime": "^7.0.0", - "appium-base-driver": "^7.0.0", - "appium-ios-simulator": "^3.14.0", - "appium-support": "^2.46.0", - "async-lock": "^1.0.0", - "asyncbox": "^2.5.3", - "axios": "^0.21.0", - "bluebird": "^3.5.5", - "lodash": "^4.17.11", - "node-simctl": "^6.0.2", - "source-map-support": "^0.5.12", - "teen_process": "^1.14.1" + "mime-db": "1.47.0" } - }, - "appium-windows-driver": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/appium-windows-driver/-/appium-windows-driver-1.17.0.tgz", - "integrity": "sha512-Wz7LzPhxZN8C1qiuQnf4kZ6SuTqkEla6i0hp77W7bCCgI2anXoJ+kAEbO0Ue/ueEOIE6bQXxhz90B2Wdl0r4Vw==", + } + } + }, + "acorn": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", + "dev": true + }, + "acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "dev": true, + "requires": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + } + } + }, + "acorn-import-assertions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", + "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", + "dev": true + }, + "acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true + }, + "address": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/address/-/address-1.1.2.tgz", + "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==", + "dev": true + }, + "adm-zip": { + "version": "0.5.9", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.9.tgz", + "integrity": "sha512-s+3fXLkeeLjZ2kLjCBwQufpI5fuN+kIGBxu6530nVQZGVol0d7Y/M88/xw9HGGUcJjKf8LutN3VPRUBq6N7Ajg==", + "dev": true + }, + "agent-base": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", + "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", + "dev": true, + "requires": { + "es6-promisify": "^5.0.0" + } + }, + "agentkeepalive": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-3.5.2.tgz", + "integrity": "sha512-e0L/HNe6qkQ7H19kTlRRqUibEAwDK5AFk6y3PtMsuut2VAH6+Q4xZml1tNDJD7kSAyqmbG/K08K5WEJYtUrSlQ==", + "dev": true, + "requires": { + "humanize-ms": "^1.2.1" + } + }, + "aggregate-error": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.0.0.tgz", + "integrity": "sha512-yKD9kEoJIR+2IFqhMwayIBgheLYbB3PS2OBhWae1L/ODTd/JF/30cW0bc9TqzRL3k4U41Dieu3BF4I29p8xesA==", + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^3.2.0" + } + }, + "airbnb-js-shims": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/airbnb-js-shims/-/airbnb-js-shims-2.2.1.tgz", + "integrity": "sha512-wJNXPH66U2xjgo1Zwyjf9EydvJ2Si94+vSdk6EERcBfB2VZkeltpqIats0cqIZMLCXP3zcyaUKGYQeIBT6XjsQ==", + "dev": true, + "requires": { + "array-includes": "^3.0.3", + "array.prototype.flat": "^1.2.1", + "array.prototype.flatmap": "^1.2.1", + "es5-shim": "^4.5.13", + "es6-shim": "^0.35.5", + "function.prototype.name": "^1.1.0", + "globalthis": "^1.0.0", + "object.entries": "^1.1.0", + "object.fromentries": "^2.0.0 || ^1.0.0", + "object.getownpropertydescriptors": "^2.0.3", + "object.values": "^1.1.0", + "promise.allsettled": "^1.0.0", + "promise.prototype.finally": "^3.1.0", + "string.prototype.matchall": "^4.0.0 || ^3.0.1", + "string.prototype.padend": "^3.0.0", + "string.prototype.padstart": "^3.0.0", + "symbol.prototype.description": "^1.0.0" + }, + "dependencies": { + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", "dev": true, "requires": { - "@babel/runtime": "^7.0.0", - "appium-base-driver": "^7.0.0", - "appium-support": "^2.49.0", - "asyncbox": "^2.3.1", - "bluebird": "^3.5.1", - "lodash": "^4.6.1", - "portscanner": "2.2.0", - "source-map-support": "^0.5.5", - "teen_process": "^1.7.0", - "yargs": "^16.0.2" + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" } }, - "appium-xcode": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/appium-xcode/-/appium-xcode-3.10.0.tgz", - "integrity": "sha512-6Db49w2UjcdMn96nUMS/EGKE/6r/sgIPcw8mr9+e4Oeb5rvROAm/VeIWmwnov3uk2JG3SGkLTQRB9tROKKRDgw==", + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "dev": true, "requires": { - "@babel/runtime": "^7.0.0", - "appium-support": "^2.4.0", - "asyncbox": "^2.3.0", - "lodash": "^4.17.4", - "plist": "^3.0.1", - "semver": "^7.0.0", - "source-map-support": "^0.5.5", - "teen_process": "^1.3.0" + "object-keys": "^1.0.12" } }, - "appium-xcuitest-driver": { - "version": "3.33.1", - "resolved": "https://registry.npmjs.org/appium-xcuitest-driver/-/appium-xcuitest-driver-3.33.1.tgz", - "integrity": "sha512-9HK5nxyrM5bOqwKNFv2J5pHkTIROaWwYwX0w/6odoREkr8x4B99Q0l86bjCE72xXAlLbBfdjukVu2nLGSlOcdA==", + "es-abstract": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", + "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", "dev": true, "requires": { - "@babel/runtime": "^7.0.0", - "appium-base-driver": "^7.0.0", - "appium-idb": "^0.5.0", - "appium-ios-device": "^1.5.0", - "appium-ios-driver": "^4.8.0", - "appium-ios-simulator": "^3.25.1", - "appium-remote-debugger": "^8.13.2", - "appium-support": "^2.47.1", - "appium-webdriveragent": "^2.32.2", - "appium-xcode": "^3.8.0", - "async-lock": "^1.0.0", - "asyncbox": "^2.3.1", - "bluebird": "^3.1.1", - "js2xmlparser2": "^0.2.0", - "lodash": "^4.17.10", - "moment": "^2.24.0", - "moment-timezone": "0.5.32", - "node-simctl": "^6.4.0", - "portscanner": "2.2.0", - "semver": "^7.0.0", - "source-map-support": "^0.5.5", - "teen_process": "^1.14.0", - "ws": "^7.0.0", - "xmldom": "^0.4.0", - "yargs": "^16.0.3" + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.1", + "is-string": "^1.0.7", + "is-weakref": "^1.0.1", + "object-inspect": "^1.11.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" }, "dependencies": { - "xmldom": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.4.0.tgz", - "integrity": "sha512-2E93k08T30Ugs+34HBSTQLVtpi6mCddaY8uO+pMNk1pqSjV5vElzn4mmh6KLxN3hki8rNcHSYzILoh3TEWORvA==", + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true } } }, - "appium-youiengine-driver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/appium-youiengine-driver/-/appium-youiengine-driver-1.2.7.tgz", - "integrity": "sha512-JFpqWvdNg7c9DT7G1vErQZv8u0/SHO/4r44YhiqoEdU66WqQ872EjxxtnIZq/o3pPQ1H28k1qdb8NKrdp5XCng==", + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, "requires": { - "@babel/runtime": "^7.11.2", - "appium-base-driver": "^7.2.3", - "appium-ios-simulator": "^3.23.0", - "appium-mac-driver": "^1.10.0", - "appium-support": "^2.49.0", - "appium-uiautomator2-driver": "^1.57.1", - "appium-xcuitest-driver": "^3.27.4", - "asyncbox": "^2.6.0", - "bluebird": "^3.7.2", - "lodash": "^4.17.20", - "node-simctl": "^6.3.2", - "selenium-webdriver": "^3.6.0", - "shelljs": "^0.8.4", - "source-map-support": "^0.5.19", - "teen_process": "^1.15.0" + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" } }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", "dev": true }, - "archiver": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.1.0.tgz", - "integrity": "sha512-iKuQUP1nuKzBC2PFlGet5twENzCfyODmvkxwDV0cEFXavwcLrIW5ssTuHi9dyTPvpWr6Faweo2eQaQiLIwyXTA==", + "is-callable": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "dev": true + }, + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, "requires": { - "archiver-utils": "^2.1.0", - "async": "^3.2.0", - "buffer-crc32": "^0.2.1", - "readable-stream": "^3.6.0", - "readdir-glob": "^1.0.0", - "tar-stream": "^2.1.4", - "zip-stream": "^4.0.4" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" } }, - "archiver-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", - "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, "requires": { - "glob": "^7.1.4", - "graceful-fs": "^4.2.0", - "lazystream": "^1.0.0", - "lodash.defaults": "^4.2.0", - "lodash.difference": "^4.5.0", - "lodash.flatten": "^4.4.0", - "lodash.isplainobject": "^4.0.6", - "lodash.union": "^4.6.0", - "normalize-path": "^3.0.0", - "readable-stream": "^2.0.0" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - } + "has-tostringtag": "^1.0.0" } }, - "are-we-there-yet": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - } + "has-symbols": "^1.0.2" } }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "object-inspect": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.1.tgz", + "integrity": "sha512-If7BjFlpkzzBeV1cqgT3OSWT3azyoxDGajR+iGnFBfVV2EWyDyWaZZW2ERDjUaY2QM8i5jI3Sj7mhsM4DDAqWA==", "dev": true }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "dev": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert-args": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/assert-args/-/assert-args-1.2.1.tgz", - "integrity": "sha1-QEEDoUUqMv53iYgR5U5ZCoqTc70=", + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", "dev": true, "requires": { - "101": "^1.2.0", - "compound-subject": "0.0.1", - "debug": "^2.2.0", - "get-prototype-of": "0.0.0", - "is-capitalized": "^1.0.0", - "is-class": "0.0.4" + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" }, "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true } } }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - }, - "async": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", - "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==", - "dev": true - }, - "async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", - "dev": true - }, - "async-listener": { - "version": "0.6.10", - "resolved": "https://registry.npmjs.org/async-listener/-/async-listener-0.6.10.tgz", - "integrity": "sha512-gpuo6xOyF4D5DE5WvyqZdPA3NGhiT6Qf07l7DCB0wwDEsLvDIbCr6j9S5aj5Ch96dLace5tXVzWBZkxU/c5ohw==", + "object.entries": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", + "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", "dev": true, "requires": { - "semver": "^5.3.0", - "shimmer": "^1.1.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" } }, - "async-lock": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/async-lock/-/async-lock-1.2.6.tgz", - "integrity": "sha512-gobUp/bRWL/uJsxi4ZK7NM770s5d2Tx5Hl7uxFIcN6yTz1Kvy2RCSKEvzhLsjAAnYaNa8lDvcjy9ybM6lXFjIg==", - "dev": true - }, - "asyncbox": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/asyncbox/-/asyncbox-2.8.0.tgz", - "integrity": "sha512-wutDUrsVaCOjNNEDskVnLAcu8nQRHRNtI/gz1LtR4GNYMF+yMiWe5YvFMOOeGlavbEmkwrTalftIaTwwCiMtog==", + "string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", "dev": true, "requires": { - "@babel/runtime": "^7.0.0", - "bluebird": "^3.5.1", - "es6-mapify": "^1.1.0", - "lodash": "^4.17.4", - "source-map-support": "^0.5.5" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" } }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true + "string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + } + } + }, + "airbnb-prop-types": { + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/airbnb-prop-types/-/airbnb-prop-types-2.16.0.tgz", + "integrity": "sha512-7WHOFolP/6cS96PhKNrslCLMYAI8yB1Pp6u6XmxozQOiZbsI5ycglZr5cHhBFfuRcQQjzCMith5ZPZdYiJCxUg==", + "requires": { + "array.prototype.find": "^2.1.1", + "function.prototype.name": "^1.1.2", + "is-regex": "^1.1.0", + "object-is": "^1.1.2", + "object.assign": "^4.1.0", + "object.entries": "^1.1.2", + "prop-types": "^15.7.2", + "prop-types-exact": "^1.2.0", + "react-is": "^16.13.1" + }, + "dependencies": { + "array.prototype.find": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/array.prototype.find/-/array.prototype.find-2.1.1.tgz", + "integrity": "sha512-mi+MYNJYLTx2eNYy+Yh6raoQacCsNeeMUaspFPh9Y141lFSsWxxB8V9mM2ye+eqiRs917J6/pJ4M9ZPzenWckA==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.4" + } }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "requires": { + "object-keys": "^1.0.12" + } }, - "aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", - "dev": true + "es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + }, + "dependencies": { + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + } + } }, - "axios": { - "version": "0.21.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", - "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", - "dev": true, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "requires": { - "follow-redirects": "^1.10.0" + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" } }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "dev": true, + "function.prototype.name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.3.tgz", + "integrity": "sha512-H51qkbNSp8mtkJt+nyW1gyStBiKZxfRqySNUR99ylq6BPXHKI4SEvIlTKp4odLfjRKJV04DFWMU3G/YRlQOsag==", "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1", + "functions-have-names": "^1.2.1" }, "dependencies": { - "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", - "dev": true + "es-abstract": { + "version": "1.18.0-next.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.2.tgz", + "integrity": "sha512-Ih4ZMFHEtZupnUh6497zEL4y2+w8+1ljnCyaTa+adcoafI1GOvMwFlDjBLfWR7y9VLfrjRJe9ocuHY1PSR9jjw==", + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.1", + "object-inspect": "^1.9.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.3", + "string.prototype.trimstart": "^1.0.3" + }, + "dependencies": { + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + } + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } } } }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" }, - "base64-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/base64-stream/-/base64-stream-1.0.0.tgz", - "integrity": "sha512-BQQZftaO48FcE1Kof9CmXMFaAdqkcNorgc8CxesZv9nMbbTF1EFyQe89UOuh//QMmdtfUDXyO8rgUalemL5ODA==", - "dev": true + "is-callable": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", + "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==" }, - "basic-auth": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", - "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", - "dev": true, + "is-regex": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", + "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", "requires": { - "safe-buffer": "5.1.2" + "has-symbols": "^1.0.1" } }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, + "is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", "requires": { - "tweetnacl": "^0.14.3" + "has-symbols": "^1.0.1" } }, - "big-integer": { - "version": "1.6.48", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.48.tgz", - "integrity": "sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w==", - "dev": true + "object-inspect": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", + "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==" }, - "bl": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.3.tgz", - "integrity": "sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg==", - "dev": true, + "object-is": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.4.tgz", + "integrity": "sha512-1ZvAZ4wlF7IyPVOcE1Omikt7UpaFlOQq0HlSti+ZvDH3UiD2brwGMwDbyV43jao2bKJ+4+WdPJHSd7kgzKYVqg==", "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" } }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - }, - "bmp-js": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/bmp-js/-/bmp-js-0.1.0.tgz", - "integrity": "sha1-4Fpj95amwf8l9Hcex62twUjAcjM=", - "dev": true - }, - "body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", - "dev": true, + "object.entries": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.3.tgz", + "integrity": "sha512-ym7h7OZebNS96hn5IJeyUmaWhaSM4SVtAPPfNLQEI2MYWCO2egsITb9nab2+i/Pwibx+R0mtn+ltKJXRSeTMGg==", "requires": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1", + "has": "^1.0.3" }, "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, + "es-abstract": { + "version": "1.18.0-next.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.2.tgz", + "integrity": "sha512-Ih4ZMFHEtZupnUh6497zEL4y2+w8+1ljnCyaTa+adcoafI1GOvMwFlDjBLfWR7y9VLfrjRJe9ocuHY1PSR9jjw==", "requires": { - "ms": "2.0.0" + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.1", + "object-inspect": "^1.9.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.3", + "string.prototype.trimstart": "^1.0.3" + }, + "dependencies": { + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + } } }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } } } }, - "bplist-creator": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.0.8.tgz", - "integrity": "sha512-Za9JKzD6fjLC16oX2wsXfc+qBEhJBJB1YPInoAQpMLhDuj5aVOv1baGeIQSq1Fr3OCqzvsoQcSBSwGId/Ja2PA==", - "dev": true, + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "string.prototype.trimend": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz", + "integrity": "sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw==", "requires": { - "stream-buffers": "~2.2.0" + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" } + } + } + }, + "ajv": { + "version": "8.7.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.7.1.tgz", + "integrity": "sha512-gPpOObTO1QjbnN1sVMjJcp1TF9nggMfO4MBR5uQl6ZVTOaEPq5i4oq/6R9q2alMMPB3eg53wFv1RuJBLuxf3Hw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "dependencies": { + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + } + } + }, + "ajv-draft-04": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ajv-draft-04/-/ajv-draft-04-1.0.0.tgz", + "integrity": "sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==", + "dev": true + }, + "ajv-errors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", + "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", + "dev": true + }, + "ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "requires": { + "ajv": "^8.0.0" + } + }, + "ajv-keywords": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz", + "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==", + "dev": true + }, + "alphanum-sort": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", + "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", + "dev": true + }, + "anser": { + "version": "1.4.10", + "resolved": "https://registry.npmjs.org/anser/-/anser-1.4.10.tgz", + "integrity": "sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww==" + }, + "ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "dev": true, + "requires": { + "string-width": "^4.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true }, - "bplist-parser": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", - "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "requires": { - "big-integer": "^1.6.44" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" } }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "ansi-regex": "^5.0.1" } + } + } + }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + }, + "ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "dev": true + }, + "ansi-fragments": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/ansi-fragments/-/ansi-fragments-0.2.1.tgz", + "integrity": "sha512-DykbNHxuXQwUDRv5ibc2b0x7uw7wmwOGLBUd5RmaQ5z8Lhx19vwvKV+FAsM5rEA6dEcHxX+/Ad5s9eF2k2bB+w==", + "requires": { + "colorette": "^1.0.7", + "slice-ansi": "^2.0.0", + "strip-ansi": "^5.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, + "slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" } }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", - "dev": true - }, - "buffer-equal": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", - "integrity": "sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs=", - "dev": true - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", - "dev": true - }, - "cacheable-lookup": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", - "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true + }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "ansi-to-html": { + "version": "0.6.15", + "resolved": "https://registry.npmjs.org/ansi-to-html/-/ansi-to-html-0.6.15.tgz", + "integrity": "sha512-28ijx2aHJGdzbs+O5SNQF65r6rrKYnkuwTYm8lZlChuoJ9P1vVzIpWO20sQTqTPDXYp6NFwk326vApTtLVFXpQ==", + "dev": true, + "requires": { + "entities": "^2.0.0" + }, + "dependencies": { + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", "dev": true - }, - "cacheable-request": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.1.tgz", - "integrity": "sha512-lt0mJ6YAnsrBErpTMWeu5kl/tg9xMAWjavYTN6VQXM1A/teBITuNcccXsCxF0tDQQJf9DfAaX5O4e0zp0KlfZw==", + } + } + }, + "any-observable": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/any-observable/-/any-observable-0.3.0.tgz", + "integrity": "sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog==", + "dev": true + }, + "any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=", + "dev": true + }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "app-root-dir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/app-root-dir/-/app-root-dir-1.0.2.tgz", + "integrity": "sha1-OBh+wt6nV3//Az/8sSFyaS/24Rg=", + "dev": true + }, + "app-root-path": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-2.2.1.tgz", + "integrity": "sha512-91IFKeKk7FjfmezPKkwtaRvSpnUc4gDwPAjA1YZ9Gn0q0PPeW+vbeUsZuyDwjI7+QTHhcLen2v25fi/AmhvbJA==" + }, + "appdirsjs": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/appdirsjs/-/appdirsjs-1.2.6.tgz", + "integrity": "sha512-D8wJNkqMCeQs3kLasatELsddox/Xqkhp+J07iXGyL54fVN7oc+nmNfYzGuCs1IEP6uBw+TfpuO3JKwc+lECy4w==" + }, + "appium": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/appium/-/appium-1.22.0.tgz", + "integrity": "sha512-k3SaI+FTRZp+KUO5GL4kJJFLvrEoTmi163/jk01Ms1VScuFkn1TQuGTMzK/ToUQOcSILMtFyHiRJB2c0q3YaVg==", + "dev": true, + "requires": { + "@babel/runtime": "^7.6.0", + "appium-android-driver": "^4.20.0", + "appium-base-driver": "^7.0.0", + "appium-espresso-driver": "^1.0.0", + "appium-fake-driver": "^1.x", + "appium-flutter-driver": "^0.x", + "appium-geckodriver": "^0.x", + "appium-ios-driver": "4.x", + "appium-mac-driver": "1.x", + "appium-mac2-driver": "^0.x", + "appium-safari-driver": "^2.1.0", + "appium-support": "2.x", + "appium-tizen-driver": "^1.1.1-beta.4", + "appium-uiautomator2-driver": "^1.37.1", + "appium-windows-driver": "1.x", + "appium-xcuitest-driver": "^3.27.6", + "appium-youiengine-driver": "^1.2.8", + "argparse": "^2.0.1", + "async-lock": "^1.0.0", + "asyncbox": "2.x", + "axios": "^0.x", + "bluebird": "3.x", + "continuation-local-storage": "3.x", + "find-root": "^1.1.0", + "lodash": "^4.17.11", + "longjohn": "^0.2.12", + "npmlog": "4.x", + "semver": "^7.0.0", + "source-map-support": "^0.x", + "teen_process": "1.x", + "winston": "3.x", + "word-wrap": "^1.2.3" + }, + "dependencies": { + "101": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/101/-/101-1.6.3.tgz", + "integrity": "sha512-4dmQ45yY0Dx24Qxp+zAsNLlMF6tteCyfVzgbulvSyC7tCyd3V8sW76sS0tHq8NpcbXfWTKasfyfzU1Kd86oKzw==", "dev": true, "requires": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^4.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^2.0.0" - }, - "dependencies": { - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - } + "clone": "^1.0.2", + "deep-eql": "^0.1.3", + "keypather": "^1.10.2" } }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "@babel/polyfill": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.12.1.tgz", + "integrity": "sha512-X0pi0V6gxLi6lFZpGmeNa4zxtwEmCs42isWLNjZZDE0Y8yVfgu0T2OAHlzBbdYlqbW/YXVvoBHpATEM+goCj8g==", "dev": true, "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "core-js": "^2.6.5", + "regenerator-runtime": "^0.13.4" } }, - "charenc": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", - "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=", - "dev": true - }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "chrome-launcher": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.13.4.tgz", - "integrity": "sha512-nnzXiDbGKjDSK6t2I+35OAPBy5Pw/39bgkb/ZAFwMhwJbdYBp6aH+vW28ZgtjdU890Q7D+3wN/tB8N66q5Gi2A==", + "@babel/runtime": { + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.6.tgz", + "integrity": "sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg==", "dev": true, "requires": { - "@types/node": "*", - "escape-string-regexp": "^1.0.5", - "is-wsl": "^2.2.0", - "lighthouse-logger": "^1.0.0", - "mkdirp": "^0.5.3", - "rimraf": "^3.0.2" - }, - "dependencies": { - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - } + "regenerator-runtime": "^0.13.4" } }, - "circular-json": { - "version": "0.5.9", - "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.5.9.tgz", - "integrity": "sha512-4ivwqHpIFJZBuhN3g/pEcdbnGUywkBblloGbkglyloVjjR3uT6tieI89MVOfbP2tHX5sgb01FuLgAOzebNlJNQ==", - "dev": true - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "@dabh/diagnostics": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.2.tgz", + "integrity": "sha512-+A1YivoVDNNVCdfozHSR8v/jyuuLTMXwjWuxPFlFlUapXoGc+Gj9mDlTDDfrwl7rXCl2tNZ0kE8sIBO6YOn96Q==", "dev": true, "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } + "colorspace": "1.1.x", + "enabled": "2.0.x", + "kuler": "^2.0.0" } }, - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", - "dev": true - }, - "clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "@jimp/bmp": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/bmp/-/bmp-0.16.1.tgz", + "integrity": "sha512-iwyNYQeBawrdg/f24x3pQ5rEx+/GwjZcCXd3Kgc+ZUd+Ivia7sIqBsOnDaMZdKCBPlfW364ekexnlOqyVa0NWg==", "dev": true, "requires": { - "mimic-response": "^1.0.0" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1", + "bmp-js": "^0.1.0" } }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, - "color": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/color/-/color-3.0.0.tgz", - "integrity": "sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w==", + "@jimp/core": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/core/-/core-0.16.1.tgz", + "integrity": "sha512-la7kQia31V6kQ4q1kI/uLimu8FXx7imWVajDGtwUG8fzePLWDFJyZl0fdIXVCL1JW2nBcRHidUot6jvlRDi2+g==", "dev": true, "requires": { - "color-convert": "^1.9.1", - "color-string": "^1.5.2" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1", + "any-base": "^1.1.0", + "buffer": "^5.2.0", + "exif-parser": "^0.1.12", + "file-type": "^9.0.0", + "load-bmfont": "^1.3.1", + "mkdirp": "^0.5.1", + "phin": "^2.9.1", + "pixelmatch": "^4.0.2", + "tinycolor2": "^1.4.1" }, "dependencies": { - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dev": true, "requires": { - "color-name": "1.1.3" + "minimist": "^1.2.5" } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true } } }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "@jimp/custom": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/custom/-/custom-0.16.1.tgz", + "integrity": "sha512-DNUAHNSiUI/j9hmbatD6WN/EBIyeq4AO0frl5ETtt51VN1SvE4t4v83ZA/V6ikxEf3hxLju4tQ5Pc3zmZkN/3A==", "dev": true, "requires": { - "color-name": "~1.1.4" + "@babel/runtime": "^7.7.2", + "@jimp/core": "^0.16.1" } }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "color-string": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.4.tgz", - "integrity": "sha512-57yF5yt8Xa3czSEW1jfQDE79Idk0+AkN/4KWad6tbdxUmAs3MvjxlWSWD4deYytcRfoZ9nhKyFl1kj5tBvidbw==", + "@jimp/gif": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/gif/-/gif-0.16.1.tgz", + "integrity": "sha512-r/1+GzIW1D5zrP4tNrfW+3y4vqD935WBXSc8X/wm23QTY9aJO9Lw6PEdzpYCEY+SOklIFKaJYUAq/Nvgm/9ryw==", "dev": true, "requires": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1", + "gifwrap": "^0.9.2", + "omggif": "^1.0.9" } }, - "color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true - }, - "colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true - }, - "colorspace": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.2.tgz", - "integrity": "sha512-vt+OoIP2d76xLhjwbBaucYlNSpPsrJWPlBTtwCpQKIu6/CSMutyzX93O/Do0qzpH3YoHEes8YEFXyZ797rEhzQ==", + "@jimp/jpeg": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/jpeg/-/jpeg-0.16.1.tgz", + "integrity": "sha512-8352zrdlCCLFdZ/J+JjBslDvml+fS3Z8gttdml0We759PnnZGqrnPRhkOEOJbNUlE+dD4ckLeIe6NPxlS/7U+w==", "dev": true, "requires": { - "color": "3.0.x", - "text-hex": "1.0.x" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1", + "jpeg-js": "0.4.2" } }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "@jimp/plugin-blit": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-blit/-/plugin-blit-0.16.1.tgz", + "integrity": "sha512-fKFNARm32RoLSokJ8WZXHHH2CGzz6ire2n1Jh6u+XQLhk9TweT1DcLHIXwQMh8oR12KgjbgsMGvrMVlVknmOAg==", "dev": true, "requires": { - "delayed-stream": "~1.0.0" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" } }, - "compare-versions": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz", - "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==", - "dev": true - }, - "compound-subject": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/compound-subject/-/compound-subject-0.0.1.tgz", - "integrity": "sha1-JxVUaYoVrmCLHfyv0wt7oeqJLEs=", - "dev": true - }, - "compress-commons": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.0.2.tgz", - "integrity": "sha512-qhd32a9xgzmpfoga1VQEiLEwdKZ6Plnpx5UCgIsf89FSolyJ7WnifY4Gtjgv5WR6hWAyRaHxC5MiEhU/38U70A==", + "@jimp/plugin-blur": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-blur/-/plugin-blur-0.16.1.tgz", + "integrity": "sha512-1WhuLGGj9MypFKRcPvmW45ht7nXkOKu+lg3n2VBzIB7r4kKNVchuI59bXaCYQumOLEqVK7JdB4glaDAbCQCLyw==", "dev": true, "requires": { - "buffer-crc32": "^0.2.13", - "crc32-stream": "^4.0.1", - "normalize-path": "^3.0.0", - "readable-stream": "^3.6.0" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" } }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "dev": true - }, - "content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "@jimp/plugin-circle": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-circle/-/plugin-circle-0.16.1.tgz", + "integrity": "sha512-JK7yi1CIU7/XL8hdahjcbGA3V7c+F+Iw+mhMQhLEi7Q0tCnZ69YJBTamMiNg3fWPVfMuvWJJKOBRVpwNTuaZRg==", "dev": true, "requires": { - "safe-buffer": "5.1.2" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" } }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "dev": true - }, - "continuation-local-storage": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/continuation-local-storage/-/continuation-local-storage-3.2.1.tgz", - "integrity": "sha512-jx44cconVqkCEEyLSKWwkvUXwO561jXMa3LPjTPsm5QR22PA0/mhe33FT4Xb5y74JDvt/Cq+5lm8S8rskLv9ZA==", + "@jimp/plugin-color": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-color/-/plugin-color-0.16.1.tgz", + "integrity": "sha512-9yQttBAO5SEFj7S6nJK54f+1BnuBG4c28q+iyzm1JjtnehjqMg6Ljw4gCSDCvoCQ3jBSYHN66pmwTV74SU1B7A==", "dev": true, "requires": { - "async-listener": "^0.6.0", - "emitter-listener": "^1.1.1" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1", + "tinycolor2": "^1.4.1" } }, - "cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", - "dev": true - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", - "dev": true - }, - "core-js": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", - "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "crc": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", - "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", + "@jimp/plugin-contain": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-contain/-/plugin-contain-0.16.1.tgz", + "integrity": "sha512-44F3dUIjBDHN+Ym/vEfg+jtjMjAqd2uw9nssN67/n4FdpuZUVs7E7wadKY1RRNuJO+WgcD5aDQcsvurXMETQTg==", "dev": true, "requires": { - "buffer": "^5.1.0" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" } }, - "crc-32": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.0.tgz", - "integrity": "sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==", + "@jimp/plugin-cover": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-cover/-/plugin-cover-0.16.1.tgz", + "integrity": "sha512-YztWCIldBAVo0zxcQXR+a/uk3/TtYnpKU2CanOPJ7baIuDlWPsG+YE4xTsswZZc12H9Kl7CiziEbDtvF9kwA/Q==", "dev": true, "requires": { - "exit-on-epipe": "~1.0.1", - "printj": "~1.1.0" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" } }, - "crc32-stream": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.1.tgz", - "integrity": "sha512-FN5V+weeO/8JaXsamelVYO1PHyeCsuL3HcG4cqsj0ceARcocxalaShCsohZMSAF+db7UYFwBy1rARK/0oFItUw==", + "@jimp/plugin-crop": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-crop/-/plugin-crop-0.16.1.tgz", + "integrity": "sha512-UQdva9oQzCVadkyo3T5Tv2CUZbf0klm2cD4cWMlASuTOYgaGaFHhT9st+kmfvXjKL8q3STkBu/zUPV6PbuV3ew==", "dev": true, "requires": { - "crc-32": "^1.2.0", - "readable-stream": "^3.4.0" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" } }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "@jimp/plugin-displace": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-displace/-/plugin-displace-0.16.1.tgz", + "integrity": "sha512-iVAWuz2+G6Heu8gVZksUz+4hQYpR4R0R/RtBzpWEl8ItBe7O6QjORAkhxzg+WdYLL2A/Yd4ekTpvK0/qW8hTVw==", "dev": true, "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" } }, - "crypt": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", - "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=", - "dev": true - }, - "css-selector-parser": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/css-selector-parser/-/css-selector-parser-1.4.1.tgz", - "integrity": "sha512-HYPSb7y/Z7BNDCOrakL4raGO2zltZkbeXyAd6Tg9obzix6QhzxCotdBl6VT0Dv4vZfJGVz3WL/xaEI9Ly3ul0g==", - "dev": true - }, - "css-shorthand-properties": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/css-shorthand-properties/-/css-shorthand-properties-1.1.1.tgz", - "integrity": "sha512-Md+Juc7M3uOdbAFwOYlTrccIZ7oCFuzrhKYQjdeUEW/sE1hv17Jp/Bws+ReOPpGVBTYCBoYo+G17V5Qo8QQ75A==", - "dev": true - }, - "css-value": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/css-value/-/css-value-0.0.1.tgz", - "integrity": "sha1-Xv1sLupeof1rasV+wEJ7GEUkJOo=", - "dev": true - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "@jimp/plugin-dither": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-dither/-/plugin-dither-0.16.1.tgz", + "integrity": "sha512-tADKVd+HDC9EhJRUDwMvzBXPz4GLoU6s5P7xkVq46tskExYSptgj5713J5Thj3NMgH9Rsqu22jNg1H/7tr3V9Q==", "dev": true, "requires": { - "assert-plus": "^1.0.0" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" } }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "@jimp/plugin-fisheye": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-fisheye/-/plugin-fisheye-0.16.1.tgz", + "integrity": "sha512-BWHnc5hVobviTyIRHhIy9VxI1ACf4CeSuCfURB6JZm87YuyvgQh5aX5UDKtOz/3haMHXBLP61ZBxlNpMD8CG4A==", "dev": true, "requires": { - "ms": "^2.1.1" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" } }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "@jimp/plugin-flip": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-flip/-/plugin-flip-0.16.1.tgz", + "integrity": "sha512-KdxTf0zErfZ8DyHkImDTnQBuHby+a5YFdoKI/G3GpBl3qxLBvC+PWkS2F/iN3H7wszP7/TKxTEvWL927pypT0w==", "dev": true, "requires": { - "mimic-response": "^3.1.0" - }, - "dependencies": { - "mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "dev": true - } + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" } }, - "deep-eql": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-0.1.3.tgz", - "integrity": "sha1-71WKyrjeJSBs1xOQbXTlaTDrafI=", + "@jimp/plugin-gaussian": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-gaussian/-/plugin-gaussian-0.16.1.tgz", + "integrity": "sha512-u9n4wjskh3N1mSqketbL6tVcLU2S5TEaFPR40K6TDv4phPLZALi1Of7reUmYpVm8mBDHt1I6kGhuCJiWvzfGyg==", "dev": true, "requires": { - "type-detect": "0.1.1" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" } }, - "deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "dev": true - }, - "defer-to-connect": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.0.tgz", - "integrity": "sha512-bYL2d05vOSf1JEZNx5vSAtPuBMkX8K9EUutg7zlKvTqKXHt7RhWJFbmd7qakVuf13i+IkGmp6FwSsONOf6VYIg==", - "dev": true - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", - "dev": true - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", - "dev": true - }, - "devtools": { - "version": "6.10.11", - "resolved": "https://registry.npmjs.org/devtools/-/devtools-6.10.11.tgz", - "integrity": "sha512-PjsxgEb4RPp3bJwq1zqcM3JNaXo9QhGiVnOsNkGzftCFr4OOKrvtdOCCST+xpQvE+5F/jNc2qWKI1WXGCBNRew==", + "@jimp/plugin-invert": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-invert/-/plugin-invert-0.16.1.tgz", + "integrity": "sha512-2DKuyVXANH8WDpW9NG+PYFbehzJfweZszFYyxcaewaPLN0GxvxVLOGOPP1NuUTcHkOdMFbE0nHDuB7f+sYF/2w==", "dev": true, "requires": { - "@types/puppeteer-core": "^2.0.0", - "@types/ua-parser-js": "^0.7.33", - "@types/uuid": "^8.3.0", - "@wdio/config": "6.10.11", - "@wdio/logger": "6.10.10", - "@wdio/protocols": "6.10.6", - "@wdio/utils": "6.10.11", - "chrome-launcher": "^0.13.1", - "edge-paths": "^2.1.0", - "puppeteer-core": "^5.1.0", - "ua-parser-js": "^0.7.21", - "uuid": "^8.0.0" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" } }, - "devtools-protocol": { - "version": "0.0.818844", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.818844.tgz", - "integrity": "sha512-AD1hi7iVJ8OD0aMLQU5VK0XH9LDlA1+BcPIgrAxPfaibx2DbWucuyOhc4oyQCbnvDDO68nN6/LcKfqTP343Jjg==", - "dev": true + "@jimp/plugin-mask": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-mask/-/plugin-mask-0.16.1.tgz", + "integrity": "sha512-snfiqHlVuj4bSFS0v96vo2PpqCDMe4JB+O++sMo5jF5mvGcGL6AIeLo8cYqPNpdO6BZpBJ8MY5El0Veckhr39Q==", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } }, - "dom-walk": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", - "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==", - "dev": true + "@jimp/plugin-normalize": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-normalize/-/plugin-normalize-0.16.1.tgz", + "integrity": "sha512-dOQfIOvGLKDKXPU8xXWzaUeB0nvkosHw6Xg1WhS1Z5Q0PazByhaxOQkSKgUryNN/H+X7UdbDvlyh/yHf3ITRaw==", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } }, - "duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true + "@jimp/plugin-print": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-print/-/plugin-print-0.16.1.tgz", + "integrity": "sha512-ceWgYN40jbN4cWRxixym+csyVymvrryuKBQ+zoIvN5iE6OyS+2d7Mn4zlNgumSczb9GGyZZESIgVcBDA1ezq0Q==", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1", + "load-bmfont": "^1.4.0" + } }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "@jimp/plugin-resize": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-resize/-/plugin-resize-0.16.1.tgz", + "integrity": "sha512-u4JBLdRI7dargC04p2Ha24kofQBk3vhaf0q8FwSYgnCRwxfvh2RxvhJZk9H7Q91JZp6wgjz/SjvEAYjGCEgAwQ==", "dev": true, "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" } }, - "edge-paths": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/edge-paths/-/edge-paths-2.1.0.tgz", - "integrity": "sha512-ZpIN1Vm5hlo9dkkST/1s8QqPNne2uwk3Plf6HcVUhnpfal0WnDRLdNj/wdQo3xRc+wnN3C25wPpPlV2E6aOunQ==", - "dev": true + "@jimp/plugin-rotate": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-rotate/-/plugin-rotate-0.16.1.tgz", + "integrity": "sha512-ZUU415gDQ0VjYutmVgAYYxC9Og9ixu2jAGMCU54mSMfuIlmohYfwARQmI7h4QB84M76c9hVLdONWjuo+rip/zg==", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true + "@jimp/plugin-scale": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-scale/-/plugin-scale-0.16.1.tgz", + "integrity": "sha512-jM2QlgThIDIc4rcyughD5O7sOYezxdafg/2Xtd1csfK3z6fba3asxDwthqPZAgitrLgiKBDp6XfzC07Y/CefUw==", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } }, - "emitter-listener": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/emitter-listener/-/emitter-listener-1.1.2.tgz", - "integrity": "sha512-Bt1sBAGFHY9DKY+4/2cV6izcKJUf5T7/gkdmkxzX/qv9CcGH8xSwVRW5mtX03SWJtRTWSOpzCuWN9rBFYZepZQ==", + "@jimp/plugin-shadow": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-shadow/-/plugin-shadow-0.16.1.tgz", + "integrity": "sha512-MeD2Is17oKzXLnsphAa1sDstTu6nxscugxAEk3ji0GV1FohCvpHBcec0nAq6/czg4WzqfDts+fcPfC79qWmqrA==", "dev": true, "requires": { - "shimmer": "^1.2.0" + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" } }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "@jimp/plugin-threshold": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-threshold/-/plugin-threshold-0.16.1.tgz", + "integrity": "sha512-iGW8U/wiCSR0+6syrPioVGoSzQFt4Z91SsCRbgNKTAk7D+XQv6OI78jvvYg4o0c2FOlwGhqz147HZV5utoSLxA==", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } }, - "enabled": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", - "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==", - "dev": true + "@jimp/plugins": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugins/-/plugins-0.16.1.tgz", + "integrity": "sha512-c+lCqa25b+4q6mJZSetlxhMoYuiltyS+ValLzdwK/47+aYsq+kcJNl+TuxIEKf59yr9+5rkbpsPkZHLF/V7FFA==", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/plugin-blit": "^0.16.1", + "@jimp/plugin-blur": "^0.16.1", + "@jimp/plugin-circle": "^0.16.1", + "@jimp/plugin-color": "^0.16.1", + "@jimp/plugin-contain": "^0.16.1", + "@jimp/plugin-cover": "^0.16.1", + "@jimp/plugin-crop": "^0.16.1", + "@jimp/plugin-displace": "^0.16.1", + "@jimp/plugin-dither": "^0.16.1", + "@jimp/plugin-fisheye": "^0.16.1", + "@jimp/plugin-flip": "^0.16.1", + "@jimp/plugin-gaussian": "^0.16.1", + "@jimp/plugin-invert": "^0.16.1", + "@jimp/plugin-mask": "^0.16.1", + "@jimp/plugin-normalize": "^0.16.1", + "@jimp/plugin-print": "^0.16.1", + "@jimp/plugin-resize": "^0.16.1", + "@jimp/plugin-rotate": "^0.16.1", + "@jimp/plugin-scale": "^0.16.1", + "@jimp/plugin-shadow": "^0.16.1", + "@jimp/plugin-threshold": "^0.16.1", + "timm": "^1.6.1" + } }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", - "dev": true + "@jimp/png": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/png/-/png-0.16.1.tgz", + "integrity": "sha512-iyWoCxEBTW0OUWWn6SveD4LePW89kO7ZOy5sCfYeDM/oTPLpR8iMIGvZpZUz1b8kvzFr27vPst4E5rJhGjwsdw==", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1", + "pngjs": "^3.3.3" + }, + "dependencies": { + "pngjs": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", + "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==", + "dev": true + } + } }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "@jimp/tiff": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/tiff/-/tiff-0.16.1.tgz", + "integrity": "sha512-3K3+xpJS79RmSkAvFMgqY5dhSB+/sxhwTFA9f4AVHUK0oKW+u6r52Z1L0tMXHnpbAdR9EJ+xaAl2D4x19XShkQ==", "dev": true, "requires": { - "once": "^1.4.0" + "@babel/runtime": "^7.7.2", + "utif": "^2.0.1" } }, - "es6-error": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", - "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", - "dev": true + "@jimp/types": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/types/-/types-0.16.1.tgz", + "integrity": "sha512-g1w/+NfWqiVW4CaXSJyD28JQqZtm2eyKMWPhBBDCJN9nLCN12/Az0WFF3JUAktzdsEC2KRN2AqB1a2oMZBNgSQ==", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/bmp": "^0.16.1", + "@jimp/gif": "^0.16.1", + "@jimp/jpeg": "^0.16.1", + "@jimp/png": "^0.16.1", + "@jimp/tiff": "^0.16.1", + "timm": "^1.6.1" + } }, - "es6-mapify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/es6-mapify/-/es6-mapify-1.2.0.tgz", - "integrity": "sha512-b4QYXTO1HD0MMFs+JtYrQEaynlyuEInBF3anGQK11rQ45akiIBs+3YUyTBq9FLzM7rD5P2xAglEOXz9gcdmdIw==", + "@jimp/utils": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-0.16.1.tgz", + "integrity": "sha512-8fULQjB0x4LzUSiSYG6ZtQl355sZjxbv8r9PPAuYHzS9sGiSHJQavNqK/nKnpDsVkU88/vRGcE7t3nMU0dEnVw==", "dev": true, "requires": { - "@babel/runtime": "^7.0.0" + "@babel/runtime": "^7.7.2", + "regenerator-runtime": "^0.13.3" } }, - "es6-promisify": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-6.1.1.tgz", - "integrity": "sha512-HBL8I3mIki5C1Cc9QjKUenHtnG0A5/xA8Q/AllRcfiwl2CZFXGK7ddBiCoRwAix4i2KxcQfjtIVcrVbB3vbmwg==", + "@sindresorhus/is": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.0.1.tgz", + "integrity": "sha512-Qm9hBEBu18wt1PO2flE7LPb30BHMQt1eQgbV76YntdNk73XZGpn3izvGTYxbGgzXKgbCjiia0uxTd3aTNQrY/g==", "dev": true }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true + "@szmarczak/http-timer": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", + "dev": true, + "requires": { + "defer-to-connect": "^2.0.0" + } }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", - "dev": true + "@types/cacheable-request": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz", + "integrity": "sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==", + "dev": true, + "requires": { + "@types/http-cache-semantics": "*", + "@types/keyv": "*", + "@types/node": "*", + "@types/responselike": "*" + } }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "@types/caseless": { + "version": "0.12.2", + "resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.2.tgz", + "integrity": "sha512-6ckxMjBBD8URvjB6J3NcnuAn5Pkl7t3TizAg+xdlzzQGSPSmBcXf8KoIH0ua/i+tio+ZRUHEXp0HEmvaR4kt0w==", "dev": true }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "@types/http-cache-semantics": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", + "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", "dev": true }, - "eventemitter3": { + "@types/keyv": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", - "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==", - "dev": true - }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.2.tgz", + "integrity": "sha512-/FvAK2p4jQOaJ6CGDHJTqZcUtbZe820qIeTg7o0Shg7drB4JHeL+V/dhSaly7NXx6u8eSee+r7coT+yuJEvDLg==", "dev": true, "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "dependencies": { - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - } + "@types/node": "*" } }, - "exif-parser": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/exif-parser/-/exif-parser-0.1.12.tgz", - "integrity": "sha1-WKnS1ywCwfbwKg70qRZicrd2CSI=", - "dev": true - }, - "exit-on-epipe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz", - "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==", + "@types/node": { + "version": "16.3.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.3.3.tgz", + "integrity": "sha512-8h7k1YgQKxKXWckzFCMfsIwn0Y61UK6tlD6y2lOb3hTOIMlK3t9/QwHOhc81TwU+RMf0As5fj7NPjroERCnejQ==", "dev": true }, - "express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "@types/puppeteer": { + "version": "5.4.4", + "resolved": "https://registry.npmjs.org/@types/puppeteer/-/puppeteer-5.4.4.tgz", + "integrity": "sha512-3Nau+qi69CN55VwZb0ATtdUAlYlqOOQ3OfQfq0Hqgc4JMFXiQT/XInlwQ9g6LbicDslE6loIFsXFklGh5XmI6Q==", "dev": true, "requires": { - "accepts": "~1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "~1.0.4", - "cookie": "0.4.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } + "@types/node": "*" } }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true + "@types/puppeteer-core": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@types/puppeteer-core/-/puppeteer-core-5.4.0.tgz", + "integrity": "sha512-yqRPuv4EFcSkTyin6Yy17pN6Qz2vwVwTCJIDYMXbE3j8vTPhv0nCQlZOl5xfi0WHUkqvQsjAR8hAfjeMCoetwg==", + "dev": true, + "requires": { + "@types/puppeteer": "*" + } }, - "extract-zip": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", - "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "@types/request": { + "version": "2.48.6", + "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.6.tgz", + "integrity": "sha512-vrZaV3Ij7j/l/3hz6OttZFtpRCu7zlq7XgkYHJP6FwVEAZkGQ095WqyJV08/GlW9eyXKVcp/xmtruHm8eHpw1g==", "dev": true, "requires": { - "@types/yauzl": "^2.9.1", - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" + "@types/caseless": "*", + "@types/node": "*", + "@types/tough-cookie": "*", + "form-data": "^2.5.0" }, "dependencies": { - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "form-data": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", + "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", "dev": true, "requires": { - "pump": "^3.0.0" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" } } } }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - }, - "fancy-log": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", - "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", + "@types/responselike": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", + "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", "dev": true, "requires": { - "ansi-gray": "^0.1.1", - "color-support": "^1.1.3", - "parse-node-version": "^1.0.0", - "time-stamp": "^1.0.0" + "@types/node": "*" } }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", - "dev": true - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "@types/tough-cookie": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.1.tgz", + "integrity": "sha512-Y0K95ThC3esLEYD6ZuqNek29lNX2EM1qxV8y2FTLUB0ff5wWrk7az+mLrnNFUnaXcgKye22+sFBRXOgpPILZNg==", "dev": true }, - "fast-safe-stringify": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz", - "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==", + "@types/which": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/which/-/which-1.3.2.tgz", + "integrity": "sha512-8oDqyLC7eD4HM307boe2QWKyuzdzWBj56xI/imSl2cpL+U3tCMaTAkMJ4ee5JBZ/FsOJlvRGeIShiZDAl1qERA==", "dev": true }, - "fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "@types/yauzl": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.2.tgz", + "integrity": "sha512-8uALY5LTvSuHgloDVUvWP3pIauILm+8/0pDMokuDYIoNsOkSwd5AiHBTSEJjKTDcZr5z8UpgOWZkxBF4iJftoA==", "dev": true, + "optional": true, "requires": { - "pend": "~1.2.0" + "@types/node": "*" } }, - "fecha": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.0.tgz", - "integrity": "sha512-aN3pcx/DSmtyoovUudctc8+6Hl4T+hI9GBBHLjA76jdZl7+b1sgh5g4k+u/GL3dTy1/pnYzKp69FpJ0OicE3Wg==", - "dev": true - }, - "file-type": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-9.0.0.tgz", - "integrity": "sha512-Qe/5NJrgIOlwijpq3B7BEpzPFcgzggOTagZmkXQY4LA6bsXKTUstK7Wp12lEJ/mLKTpvIZxmIuRcLYWT6ov9lw==", - "dev": true + "@wdio/config": { + "version": "6.12.1", + "resolved": "https://registry.npmjs.org/@wdio/config/-/config-6.12.1.tgz", + "integrity": "sha512-V5hTIW5FNlZ1W33smHF4Rd5BKjGW2KeYhyXDQfXHjqLCeRiirZ9fABCo9plaVQDnwWSUMWYaAaIAifV82/oJCQ==", + "dev": true, + "requires": { + "@wdio/logger": "6.10.10", + "deepmerge": "^4.0.0", + "glob": "^7.1.2" + } }, - "finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "@wdio/logger": { + "version": "6.10.10", + "resolved": "https://registry.npmjs.org/@wdio/logger/-/logger-6.10.10.tgz", + "integrity": "sha512-2nh0hJz9HeZE0VIEMI+oPgjr/Q37ohrR9iqsl7f7GW5ik+PnKYCT9Eab5mR1GNMG60askwbskgGC1S9ygtvrSw==", "dev": true, "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" + "chalk": "^4.0.0", + "loglevel": "^1.6.0", + "loglevel-plugin-prefix": "^0.8.4", + "strip-ansi": "^6.0.0" }, "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "dev": true, "requires": { - "ms": "2.0.0" + "ansi-regex": "^5.0.0" } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true } } }, - "find-root": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", + "@wdio/protocols": { + "version": "6.12.0", + "resolved": "https://registry.npmjs.org/@wdio/protocols/-/protocols-6.12.0.tgz", + "integrity": "sha512-UhTBZxClCsM3VjaiDp4DoSCnsa7D1QNmI2kqEBfIpyNkT3GcZhJb7L+nL0fTkzCwi7+/uLastb3/aOwH99gt0A==", "dev": true }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "@wdio/repl": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/@wdio/repl/-/repl-6.11.0.tgz", + "integrity": "sha512-FxrFKiTkFyELNGGVEH1uijyvNY7lUpmff6x+FGskFGZB4uSRs0rxkOMaEjxnxw7QP1zgQKr2xC7GyO03gIGRGg==", "dev": true, "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "@wdio/utils": "6.11.0" } }, - "fn.name": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", - "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==", - "dev": true - }, - "follow-redirects": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.1.tgz", - "integrity": "sha512-SSG5xmZh1mkPGyKzjZP8zLjltIfpW32Y5QpdNJyjcfGxK3qo3NDDkZOZSFiGn1A6SclQxY9GzEwAHQ3dmYRWpg==", - "dev": true - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true - }, - "form-data": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.0.tgz", - "integrity": "sha512-CKMFDglpbMi6PyN+brwB9Q/GOw0eAnsrEZDgcsH5Krhz5Od/haKHAX0NmQfha2zPPz0JpWzA7GJHGSnvCRLWsg==", + "@wdio/utils": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-6.11.0.tgz", + "integrity": "sha512-vf0sOQzd28WbI26d6/ORrQ4XKWTzSlWLm9W/K/eJO0NASKPEzR+E+Q2kaa+MJ4FKXUpjbt+Lxfo+C26TzBk7tg==", "dev": true, "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" + "@wdio/logger": "6.10.10" } }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", - "dev": true - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", - "dev": true - }, - "fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dev": true, + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } }, - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "adbkit-apkreader": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/adbkit-apkreader/-/adbkit-apkreader-3.2.0.tgz", + "integrity": "sha512-QwsxPYCqWSmCAiW/A4gq0eytb4jtZc7WNbECIhLCRfGEB38oXzIV/YkTpkOTQFKSg3S4Svb6y///qOUH7UrWWw==", "dev": true, "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "bluebird": "^3.4.7", + "debug": "~4.1.1", + "yauzl": "^2.7.0" } }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "agent-base": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz", + "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==", "dev": true }, - "ftp-response-parser": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ftp-response-parser/-/ftp-response-parser-1.0.1.tgz", - "integrity": "sha1-O50z+O3V+45HALj3eMRi5bFYH4k=", + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "requires": { - "readable-stream": "^1.0.31" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "dependencies": { + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true } } }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "ansi-gray": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", + "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=", "dev": true, "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" + "ansi-wrap": "0.1.0" } }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true }, - "get-port": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", - "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==", - "dev": true + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } }, - "get-prototype-of": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/get-prototype-of/-/get-prototype-of-0.0.0.tgz", - "integrity": "sha1-mHcr0QcW0W3rSzIlFsRp78oorEQ=", + "ansi-wrap": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", + "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=", "dev": true }, - "get-stream": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.0.tgz", - "integrity": "sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg==", + "any-base": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/any-base/-/any-base-1.1.0.tgz", + "integrity": "sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg==", "dev": true }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "appium-adb": { + "version": "8.13.1", + "resolved": "https://registry.npmjs.org/appium-adb/-/appium-adb-8.13.1.tgz", + "integrity": "sha512-pFveCmArgBvtWMufp1lF4zk2GzW6YW8uIZmwtaiRl4B7H3qYipjOGVRW3HYj/iYa2XgbZ2T4JE+jzEpR1+sqIA==", "dev": true, "requires": { - "assert-plus": "^1.0.0" + "@babel/runtime": "^7.0.0", + "adbkit-apkreader": "^3.1.2", + "appium-support": "^2.48.1", + "async-lock": "^1.0.0", + "asyncbox": "^2.6.0", + "bluebird": "^3.4.7", + "ini": "^2.0.0", + "lodash": "^4.0.0", + "lru-cache": "^6.0.0", + "semver": "^7.0.0", + "source-map-support": "^0.x", + "teen_process": "^1.11.0", + "utf7": "^1.0.2" } }, - "gifwrap": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/gifwrap/-/gifwrap-0.9.2.tgz", - "integrity": "sha512-fcIswrPaiCDAyO8xnWvHSZdWChjKXUanKKpAiWWJ/UTkEi/aYKn5+90e7DE820zbEaVR9CE2y4z9bzhQijZ0BA==", + "appium-android-driver": { + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/appium-android-driver/-/appium-android-driver-4.49.0.tgz", + "integrity": "sha512-8KeV/YMPn1KnS2cLMAQI04CewCxlqT9BaLNJ66L2/HMsxyAwE98PvLQoXsMTcXjHaRbD7X/yXUIzK/r0J6/owQ==", "dev": true, "requires": { - "image-q": "^1.1.1", - "omggif": "^1.0.10" + "@babel/runtime": "^7.0.0", + "appium-adb": "^8.11.0", + "appium-base-driver": "^7.0.0", + "appium-chromedriver": "^4.13.0", + "appium-support": "^2.47.1", + "asyncbox": "^2.8.0", + "axios": "^0.x", + "bluebird": "^3.4.7", + "io.appium.settings": "^3.3.0", + "jimp": "^0.16.1", + "lodash": "^4.17.4", + "lru-cache": "^6.0.0", + "moment": "^2.24.0", + "moment-timezone": "^0.5.26", + "portfinder": "^1.0.6", + "portscanner": "2.2.0", + "semver": "^7.0.0", + "shared-preferences-builder": "^0.0.4", + "source-map-support": "^0.5.5", + "teen_process": "^1.9.0", + "ws": "^8.0.0" + }, + "dependencies": { + "ws": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.2.tgz", + "integrity": "sha512-Q6B6H2oc8QY3llc3cB8kVmQ6pnJWVQbP7Q5algTcIxx7YEpc0oU4NBVHlztA7Ekzfhw2r0rPducMUiCGWKQRzw==", + "dev": true + } } }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "appium-base-driver": { + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/appium-base-driver/-/appium-base-driver-7.10.0.tgz", + "integrity": "sha512-JHc/QHt57eLY3pIzDTr6BLgDmTvDw+zGljaHN1UJ71Q1epo9TNYKp5UUuPbCvoTruIEtKVkeqNhO1m2BnptR6g==", "dev": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "@babel/runtime": "^7.0.0", + "appium-support": "^2.54.1", + "async-lock": "^1.0.0", + "asyncbox": "^2.3.1", + "axios": "^0.x", + "bluebird": "^3.5.3", + "body-parser": "^1.18.2", + "colors": "^1.1.2", + "es6-error": "^4.1.1", + "express": "^4.16.2", + "http-status-codes": "^2.1.1", + "lodash": "^4.0.0", + "lru-cache": "^6.0.0", + "method-override": "^3.0.0", + "morgan": "^1.9.0", + "serve-favicon": "^2.4.5", + "source-map-support": "^0.x", + "validate.js": "^0.13.0", + "webdriverio": "^6.0.2", + "ws": "^8.0.0" + }, + "dependencies": { + "ws": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.1.tgz", + "integrity": "sha512-XkgWpJU3sHU7gX8f13NqTn6KQ85bd1WU7noBHTT8fSohx7OS1TPY8k+cyRPCzFkia7C4mM229yeHr1qK9sM4JQ==", + "dev": true + } } }, - "global": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", - "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", + "appium-chromedriver": { + "version": "4.27.3", + "resolved": "https://registry.npmjs.org/appium-chromedriver/-/appium-chromedriver-4.27.3.tgz", + "integrity": "sha512-6yonhwM+DJ7fOJlu/q+UNtSwQ6SiTs6T8XTwP5ce1kEQAdANknOqkLVseqlvDyb1ICgcb2kUHRwtAYdnQZoqeQ==", "dev": true, "requires": { - "min-document": "^2.19.0", - "process": "^0.11.10" + "@babel/runtime": "^7.0.0", + "appium-base-driver": "^7.1.0", + "appium-support": "^2.46.0", + "asyncbox": "^2.0.2", + "axios": "^0.x", + "bluebird": "^3.5.1", + "compare-versions": "^3.4.0", + "fancy-log": "^1.3.2", + "lodash": "^4.17.4", + "semver": "^7.0.0", + "source-map-support": "^0.x", + "teen_process": "^1.15.0", + "xmldom": "^0.x", + "xpath": "^0.x" } }, - "got": { - "version": "11.8.1", - "resolved": "https://registry.npmjs.org/got/-/got-11.8.1.tgz", - "integrity": "sha512-9aYdZL+6nHmvJwHALLwKSUZ0hMwGaJGYv3hoPLPgnT8BoBXm1SjnZeky+91tfwJaDzun2s4RsBRy48IEYv2q2Q==", + "appium-espresso-driver": { + "version": "1.45.3", + "resolved": "https://registry.npmjs.org/appium-espresso-driver/-/appium-espresso-driver-1.45.3.tgz", + "integrity": "sha512-CzWOsCD4z/67XmIfZzptiWYfHjGwjSOiltXwgTEi6WAL4WzBtz0tORu4+oYXNssen8EZ/ljgckcIA8GPB+5aKA==", "dev": true, "requires": { - "@sindresorhus/is": "^4.0.0", - "@szmarczak/http-timer": "^4.0.5", - "@types/cacheable-request": "^6.0.1", - "@types/responselike": "^1.0.0", - "cacheable-lookup": "^5.0.3", - "cacheable-request": "^7.0.1", - "decompress-response": "^6.0.0", - "http2-wrapper": "^1.0.0-beta.5.2", - "lowercase-keys": "^2.0.0", - "p-cancelable": "^2.0.0", - "responselike": "^2.0.0" + "@babel/runtime": "^7.4.3", + "appium-adb": "^8.9.0", + "appium-android-driver": "^4.45.0", + "appium-base-driver": "^7.0.0", + "appium-support": "^2.46.0", + "asyncbox": "^2.3.1", + "bluebird": "^3.5.0", + "lodash": "^4.17.11", + "portscanner": "^2.1.1", + "source-map-support": "^0.5.8", + "validate.js": "^0.x" } }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, - "grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", - "dev": true - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true - }, - "har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "appium-fake-driver": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/appium-fake-driver/-/appium-fake-driver-1.0.2.tgz", + "integrity": "sha512-mPyAbhoSupDMHrqq3gKdt4W8Boa349O2p/oirsNCyzNAJrHBlpFrLajRhjhLhPS5k0Snasas7l+jYkzZKqAt9Q==", "dev": true, "requires": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" + "@babel/runtime": "^7.0.0", + "appium-base-driver": "^7.0.0", + "appium-support": "^2.11.1", + "asyncbox": "^2.3.2", + "bluebird": "^3.5.1", + "lodash": "^4.17.4", + "source-map-support": "^0.x", + "xmldom": "^0.x", + "xpath": "^0.x" } }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "appium-flutter-driver": { + "version": "0.0.32", + "resolved": "https://registry.npmjs.org/appium-flutter-driver/-/appium-flutter-driver-0.0.32.tgz", + "integrity": "sha512-Hl00luaY9duDQbg/LSXxJDYX/CXL+ZZxtiQ7Ms1F4GEt6SF6v9J4yd3vo6MWR8/nJmksP0XbyqaGRdrUOlMu8g==", "dev": true, "requires": { - "function-bind": "^1.1.1" + "appium-adb": "^8.8.0", + "appium-base-driver": "^7.4.1", + "appium-ios-device": "^1.7.1", + "appium-support": "^2.47.1", + "appium-uiautomator2-driver": "^1.35.1", + "appium-xcuitest-driver": "^3.17.0", + "asyncbox": "^2.3.1", + "bluebird": "^3.1.1", + "portscanner": "2.2.0", + "rpc-websockets": "^5.1.1" } }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true + "appium-geckodriver": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/appium-geckodriver/-/appium-geckodriver-0.3.3.tgz", + "integrity": "sha512-bPv3a+2nl73kUSaOFKdFfoSTgUyF+XE8dn43fv9gpvNne4MbIGKfdGJFQ23xQ9bc4kr9qvVeIwVwJGcYXsgqoQ==", + "dev": true, + "requires": { + "@babel/runtime": "^7.0.0", + "appium-base-driver": "^7.1.0", + "appium-support": "^2.46.0", + "asyncbox": "^2.0.2", + "bluebird": "^3.5.1", + "lodash": "^4.17.4", + "portscanner": "2.2.0", + "source-map-support": "^0.5.5", + "teen_process": "^1.15.0" + } }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "dev": true + "appium-idb": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/appium-idb/-/appium-idb-0.5.1.tgz", + "integrity": "sha512-xijrqWSxJtKtWvXPVVR/FkVJtfQ5DwVCCA5R0nV0jMOtET55CoKKx0TO7KIiuZaHfQv/dbBCR8u7SEe3MF5Q9Q==", + "dev": true, + "requires": { + "@babel/runtime": "^7.0.0", + "appium-support": "^2.41.0", + "asyncbox": "^2.5.2", + "bluebird": "^3.1.1", + "lodash": "^4.0.0", + "source-map-support": "^0.5.5", + "teen_process": "^1.11.0" + } }, - "http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", - "dev": true + "appium-ios-device": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/appium-ios-device/-/appium-ios-device-1.7.1.tgz", + "integrity": "sha512-kMsj/jjYqNRNgKpl7waXzWv9ydioMmGy1hGvdbhLHFI8oNMw71KJlK0rQtJ2Abw1H2zf92bpjpmoCBmO+UyICQ==", + "dev": true, + "requires": { + "@babel/runtime": "^7.0.0", + "appium-support": "^2.35.0", + "bluebird": "^3.1.1", + "lodash": "^4.17.15", + "semver": "^7.0.0", + "source-map-support": "^0.5.5" + } }, - "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "appium-ios-driver": { + "version": "4.8.3", + "resolved": "https://registry.npmjs.org/appium-ios-driver/-/appium-ios-driver-4.8.3.tgz", + "integrity": "sha512-eC7dsZGHBkyHxsNGtX3eHl4BmQGEwcUKwddfAXig01EkWx7CkJ7rI+3L2H2IW9wt8yo8QZFuNTIw2HDLwKT3Kw==", "dev": true, "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" + "@babel/runtime": "^7.0.0", + "appium-base-driver": "^7.0.0", + "appium-ios-simulator": "^3.24.0", + "appium-remote-debugger": "^5.7.0", + "appium-support": "^2.41.0", + "appium-xcode": "^3.1.0", + "asyncbox": "^2.3.1", + "axios": "^0.x", + "bluebird": "^3.5.1", + "colors": "^1.1.2", + "js2xmlparser2": "^0.2.0", + "lodash": "^4.13.1", + "moment": "^2.24.0", + "moment-timezone": "^0.x", + "node-idevice": "^0.1.6", + "pem": "^1.8.3", + "portfinder": "^1.0.13", + "safari-launcher": "^2.0.5", + "source-map-support": "^0.x", + "teen_process": "^1.6.0", + "through": "^2.3.8", + "xmldom": "^0.x", + "xpath": "^0.x" }, "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "@wdio/config": { + "version": "5.22.4", + "resolved": "https://registry.npmjs.org/@wdio/config/-/config-5.22.4.tgz", + "integrity": "sha512-i5dJQWb80darcRA//tfG0guMeQCeRUXroZNnHjGNb1qzvTRZmcIIhdxaD+DbK/5dWEx6aoMfoi6wjVp/CXwdAg==", + "dev": true, + "requires": { + "@wdio/logger": "5.16.10", + "deepmerge": "^4.0.0", + "glob": "^7.1.2" + } + }, + "@wdio/logger": { + "version": "5.16.10", + "resolved": "https://registry.npmjs.org/@wdio/logger/-/logger-5.16.10.tgz", + "integrity": "sha512-hRKhxgd9uB48Dtj2xe2ckxU4KwI/RO8IwguySuaI2SLFj6EDbdonwzpVkq111/fjBuq7R1NauAaNcm3AMEbIFA==", + "dev": true, + "requires": { + "chalk": "^3.0.0", + "loglevel": "^1.6.0", + "loglevel-plugin-prefix": "^0.8.4", + "strip-ansi": "^6.0.0" + } + }, + "@wdio/protocols": { + "version": "5.22.1", + "resolved": "https://registry.npmjs.org/@wdio/protocols/-/protocols-5.22.1.tgz", + "integrity": "sha512-GdoWb/HTrb09Qb0S/7sLp1NU94LAhTsF1NnFj5sEFSUpecrl0S07pnhVg54pUImectN/woaqSl7uJGjlSGZcdQ==", + "dev": true + }, + "@wdio/repl": { + "version": "5.23.0", + "resolved": "https://registry.npmjs.org/@wdio/repl/-/repl-5.23.0.tgz", + "integrity": "sha512-cKG9m0XuqcQenQmoup0yJX1fkDQEdY06QXuwt636ZQf6XgDoeoAdNOgnRnNruQ0+JsC2eqHFoSNto1q8wcLH/g==", + "dev": true, + "requires": { + "@wdio/utils": "5.23.0" + } + }, + "@wdio/utils": { + "version": "5.23.0", + "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-5.23.0.tgz", + "integrity": "sha512-dWPEkDiaNUqJXPO6L2di2apI7Rle7Er4euh67Wlb5+3MrPNjCKhiF8gHcpQeL8oe6A1MH/f89kpSEEXe4BMkAw==", + "dev": true, + "requires": { + "@wdio/logger": "5.16.10", + "deepmerge": "^4.0.0" + } + }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "appium-ios-device": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/appium-ios-device/-/appium-ios-device-0.10.5.tgz", + "integrity": "sha512-O0H+iyOVPG9NbLEPLi+fR/yGZEqTa0fESzNWgDfa8JizkgvDbbItzv5ZJbiYPSZ/+hhNLfdkHF0KAVIaFYJMJg==", + "dev": true, + "requires": { + "@babel/runtime": "^7.0.0", + "appium-support": "^2.30.0", + "bluebird": "^3.1.1", + "semver": "^6.1.2", + "source-map-support": "^0.5.5" + } + }, + "appium-remote-debugger": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/appium-remote-debugger/-/appium-remote-debugger-5.7.0.tgz", + "integrity": "sha512-dAudf+YgQbCktUjHgrFejEmOZaARdw7CAbGQ85MQJHAjjYaoCuO1rD7ro7hRmj/WsUMh1TdFGL+94yOEsoRujw==", + "dev": true, + "requires": { + "@babel/runtime": "^7.0.0", + "appium-base-driver": "^4.0.0", + "appium-ios-device": "^0.10.0", + "appium-support": "^2.28.0", + "asyncbox": "^2.5.2", + "bluebird": "^3.4.7", + "lodash": "^4.17.11", + "source-map-support": "^0.5.5" + }, + "dependencies": { + "appium-base-driver": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/appium-base-driver/-/appium-base-driver-4.5.1.tgz", + "integrity": "sha512-g7sI5mzmGdZhIFg3+A5f9ewtihYKS0b33wZWbN6R/PYYTEmXbNhFPGfVqzoAzFANuLjlTlvEEsqGcUtjrMO2Bw==", + "dev": true, + "requires": { + "@babel/runtime": "^7.0.0", + "appium-support": "^2.33.1", + "async-lock": "^1.0.0", + "asyncbox": "^2.3.1", + "bluebird": "^3.5.3", + "body-parser": "^1.18.2", + "colors": "^1.1.2", + "es6-error": "^4.1.1", + "express": "^4.16.2", + "http-status-codes": "^1.3.0", + "lodash": "^4.0.0", + "lru-cache": "^5.0.0", + "method-override": "^3.0.0", + "morgan": "^1.9.0", + "request": "^2.83.0", + "request-promise": "^4.2.2", + "sanitize-filename": "^1.6.1", + "serve-favicon": "^2.4.5", + "source-map-support": "^0.5.5", + "uuid-js": "^0.7.5", + "validate.js": "^0.13.0", + "webdriverio": "^5.10.9", + "ws": "^7.0.0" + } + } + } + }, + "archiver": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-3.1.1.tgz", + "integrity": "sha512-5Hxxcig7gw5Jod/8Gq0OneVgLYET+oNHcxgWItq4TbhOzRLKNAFUb9edAftiMKXvXfCB0vbGrJdZDNq0dWMsxg==", + "dev": true, + "requires": { + "archiver-utils": "^2.1.0", + "async": "^2.6.3", + "buffer-crc32": "^0.2.1", + "glob": "^7.1.4", + "readable-stream": "^3.4.0", + "tar-stream": "^2.1.0", + "zip-stream": "^2.1.2" + } + }, + "async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "compress-commons": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-2.1.1.tgz", + "integrity": "sha512-eVw6n7CnEMFzc3duyFVrQEuY1BlHR3rYsSztyG32ibGMW722i3C6IizEGMFmfMU+A+fALvBIwxN3czffTcdA+Q==", + "dev": true, + "requires": { + "buffer-crc32": "^0.2.13", + "crc32-stream": "^3.0.1", + "normalize-path": "^3.0.0", + "readable-stream": "^2.3.6" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + } + } + }, + "crc32-stream": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-3.0.1.tgz", + "integrity": "sha512-mctvpXlbzsvK+6z8kJwSJ5crm7yBwrQMTybJzMw1O4lLGJqjlDCXY2Zw7KheiA6XBEcBmfLx1D88mjRGVJtY9w==", + "dev": true, + "requires": { + "crc": "^3.4.4", + "readable-stream": "^3.4.0" + } + }, + "http-status-codes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/http-status-codes/-/http-status-codes-1.4.0.tgz", + "integrity": "sha512-JrT3ua+WgH8zBD3HEJYbeEgnuQaAnUeRRko/YojPAJjGmIfGD3KPU/asLdsLwKjfxOmQe5nXMQ0pt/7MyapVbQ==", + "dev": true + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "rgb2hex": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/rgb2hex/-/rgb2hex-0.1.10.tgz", + "integrity": "sha512-vKz+kzolWbL3rke/xeTE2+6vHmZnNxGyDnaVW4OckntAIcc7DcZzWkQSfxMDwqHS8vhgySnIFyBUH7lIk6PxvQ==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "serialize-error": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-5.0.0.tgz", + "integrity": "sha512-/VtpuyzYf82mHYTtI4QKtwHa79vAdU5OQpNPAmE/0UDdlGT0ZxHwC+J6gXkw29wwoVI8fMPsfcVHOwXtUQYYQA==", + "dev": true, + "requires": { + "type-fest": "^0.8.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + }, + "webdriver": { + "version": "5.23.0", + "resolved": "https://registry.npmjs.org/webdriver/-/webdriver-5.23.0.tgz", + "integrity": "sha512-r7IrbZ2SuTIRyWV8mv4a4hZoFcT9Qt4MznOkdRWPE1sPpZ8lyLZsIEjKCEbHelOzPwURqk+biwGrm4z2OZRAiw==", + "dev": true, + "requires": { + "@types/request": "^2.48.4", + "@wdio/config": "5.22.4", + "@wdio/logger": "5.16.10", + "@wdio/protocols": "5.22.1", + "@wdio/utils": "5.23.0", + "lodash.merge": "^4.6.1", + "request": "^2.83.0" + } + }, + "webdriverio": { + "version": "5.23.0", + "resolved": "https://registry.npmjs.org/webdriverio/-/webdriverio-5.23.0.tgz", + "integrity": "sha512-hxt6Nuu2bBrTsVk7GfoFRTh63l4fRVXlK9U30RtPbHoWO5tcFdyUz2UTgeHEZ54ea1DQEVPfsgFiLnJULkWp1Q==", + "dev": true, + "requires": { + "@wdio/config": "5.22.4", + "@wdio/logger": "5.16.10", + "@wdio/repl": "5.23.0", + "@wdio/utils": "5.23.0", + "archiver": "^3.0.0", + "css-value": "^0.0.1", + "grapheme-splitter": "^1.0.2", + "lodash.clonedeep": "^4.5.0", + "lodash.isobject": "^3.0.2", + "lodash.isplainobject": "^4.0.6", + "lodash.zip": "^4.2.0", + "resq": "^1.6.0", + "rgb2hex": "^0.1.0", + "serialize-error": "^5.0.0", + "webdriver": "5.23.0" + } + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true + }, + "zip-stream": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-2.1.3.tgz", + "integrity": "sha512-EkXc2JGcKhO5N5aZ7TmuNo45budRaFGHOmz24wtJR7znbNqDPmdZtUauKX6et8KAVseAMBOyWJqEpXcHTBsh7Q==", + "dev": true, + "requires": { + "archiver-utils": "^2.1.0", + "compress-commons": "^2.1.1", + "readable-stream": "^3.4.0" + } } } }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "http-status-codes": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/http-status-codes/-/http-status-codes-2.1.4.tgz", - "integrity": "sha512-MZVIsLKGVOVE1KEnldppe6Ij+vmemMuApDfjhVSLzyYP+td0bREEYyAoIw9yFePoBXManCuBqmiNP5FqJS5Xkg==", - "dev": true - }, - "http2-wrapper": { - "version": "1.0.0-beta.5.2", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.0-beta.5.2.tgz", - "integrity": "sha512-xYz9goEyBnC8XwXDTuC/MZ6t+MrKVQZOk4s7+PaDkwIsQd8IwqvM+0M6bA/2lvG8GHXcPdf+MejTUeO2LCPCeQ==", - "dev": true, - "requires": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.0.0" - } - }, - "https-proxy-agent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", - "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==", + "appium-ios-simulator": { + "version": "3.28.1", + "resolved": "https://registry.npmjs.org/appium-ios-simulator/-/appium-ios-simulator-3.28.1.tgz", + "integrity": "sha512-JqtpDXeYpJ0iA5Uwx4bbLFGiA/vpuejMa7VG5qbQ1nrGQ7+EZuETpKl+w8oWUmDi2fvOwwVLbeCSuDp0ysSPzg==", "dev": true, "requires": { - "agent-base": "5", - "debug": "4" + "@babel/runtime": "^7.0.0", + "appium-support": "^2.44.0", + "appium-xcode": "^3.1.0", + "async-lock": "^1.0.0", + "asyncbox": "^2.3.1", + "bluebird": "^3.5.1", + "lodash": "^4.2.1", + "node-simctl": "^6.4.0", + "semver": "^7.0.0", + "source-map-support": "^0.5.3", + "teen_process": "^1.3.0", + "xmldom": "^0.x" } }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "appium-mac-driver": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/appium-mac-driver/-/appium-mac-driver-1.10.2.tgz", + "integrity": "sha512-gsCcFvh7yWvCWpW1Zrmb8jMXLdJ6T1F5oJBkX6uh+qW354nKD/45Pm0skuWNSObXIc4VN9xCBc7CLsOBVMoX7Q==", "dev": true, "requires": { - "safer-buffer": ">= 2.1.2 < 3" + "@babel/runtime": "^7.0.0", + "appium-base-driver": "^7.2.3", + "appium-support": "^2.36.0", + "asyncbox": "^2.3.1", + "bluebird": "^3.5.1", + "lodash": "^4.17.4", + "source-map-support": "^0.5.5", + "teen_process": "^1.15.0" } }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true - }, - "image-q": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/image-q/-/image-q-1.1.1.tgz", - "integrity": "sha1-/IQJlmRGC5DKhi2TALa/u7+/gFY=", - "dev": true - }, - "immediate": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "appium-mac2-driver": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/appium-mac2-driver/-/appium-mac2-driver-0.14.1.tgz", + "integrity": "sha512-gq7A0Q2w7cUF3ZTC+jWSSGEjRhF2ifFr/3IcOMxLwXY6LmgD7eavPdVYZ+DYw8a7dRkUZdnSWuWcyfSCCxplQQ==", "dev": true, "requires": { - "once": "^1.3.0", - "wrappy": "1" + "@babel/runtime": "^7.0.0", + "appium-base-driver": "^7.1.0", + "appium-support": "^2.46.0", + "asyncbox": "^2.0.2", + "axios": "^0.x", + "bluebird": "^3.5.1", + "lodash": "^4.17.4", + "portscanner": "2.2.0", + "source-map-support": "^0.5.5", + "teen_process": "^1.15.0" } }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "dev": true - }, - "invert-kv": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", - "dev": true - }, - "io.appium.settings": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/io.appium.settings/-/io.appium.settings-3.2.1.tgz", - "integrity": "sha512-tAk+rdk0cUTrYYwubWfSV6ovBMs/m2fnqdXWDo9DgJvHR7jes8TsDD0h0VB9tBr6iONmRxJuMfIwmO20ZqXSGg==", - "dev": true - }, - "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "dev": true - }, - "is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "dev": true - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-capitalized": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-capitalized/-/is-capitalized-1.0.0.tgz", - "integrity": "sha1-TIRktNkdPk7rRIid0s2PGwrEwTY=", - "dev": true - }, - "is-class": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/is-class/-/is-class-0.0.4.tgz", - "integrity": "sha1-4FdFFwW7NOOePjNZjJOpg3KWtzY=", - "dev": true - }, - "is-core-module": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", - "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "appium-remote-debugger": { + "version": "8.13.2", + "resolved": "https://registry.npmjs.org/appium-remote-debugger/-/appium-remote-debugger-8.13.2.tgz", + "integrity": "sha512-ke418dyTWUYt9tsMnrhq0DpDfsVUofmPR0lkq3OWY3Jov46Myype2Hl8PwjJFMBn9wFcxNv1sghcLhoWYenSzA==", "dev": true, "requires": { - "has": "^1.0.3" + "@babel/runtime": "^7.0.0", + "appium-base-driver": "^7.0.0", + "appium-ios-device": "^1.7.0", + "appium-support": "^2.41.0", + "async-lock": "^1.2.2", + "asyncbox": "^2.6.0", + "bluebird": "^3.4.7", + "lodash": "^4.17.11", + "source-map-support": "^0.5.5" } }, - "is-docker": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz", - "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "appium-safari-driver": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/appium-safari-driver/-/appium-safari-driver-2.2.1.tgz", + "integrity": "sha512-aOE4TWs6945e4uYzo45JN6idQn8m5E7Pl2y3M5wCB5qjIocTqY43Oq9zPgORFZEmaOON7n0Y4d4mCLsptNrwxA==", "dev": true, "requires": { - "number-is-nan": "^1.0.0" + "@babel/runtime": "^7.0.0", + "appium-base-driver": "^7.1.0", + "appium-support": "^2.46.0", + "asyncbox": "^2.0.2", + "bluebird": "^3.5.1", + "lodash": "^4.17.4", + "node-simctl": "^6.4.0", + "portscanner": "2.2.0", + "source-map-support": "^0.5.5", + "teen_process": "^1.15.0" } }, - "is-function": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", - "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==", - "dev": true - }, - "is-number-like": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/is-number-like/-/is-number-like-1.0.8.tgz", - "integrity": "sha512-6rZi3ezCyFcn5L71ywzz2bS5b2Igl1En3eTlZlvKjpz1n3IZLAYMbKYAIQgFmEu0GENg92ziU/faEOA/aixjbA==", + "appium-sdb": { + "version": "1.0.1-beta.1", + "resolved": "https://registry.npmjs.org/appium-sdb/-/appium-sdb-1.0.1-beta.1.tgz", + "integrity": "sha512-jciaEYrtZR7+NeB/KXrVLfQfvCQRdMpI4ZvrJWqyDOcUkzw5emH6nTGPTbkvnG9cf4opWM/e4wsgmHYnjgjByQ==", "dev": true, "requires": { - "lodash.isfinite": "^3.3.2" + "@babel/runtime": "^7.0.0", + "appium-support": "^2.4.0", + "asyncbox": "^2.3.1", + "lodash": "^4.17.11", + "source-map-support": "^0.5.9", + "teen_process": "^1.3.1" } }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "appium-support": { + "version": "2.54.1", + "resolved": "https://registry.npmjs.org/appium-support/-/appium-support-2.54.1.tgz", + "integrity": "sha512-Nhbduhtj9CwDAhOH77Ux5nyXpccIw9kz2WW0eLwIn2BoEEIcRjEcAdIvXQ2qTqURhVAHd4VyATllf1oAVYFbkQ==", "dev": true, "requires": { - "is-docker": "^2.0.0" + "@babel/runtime": "^7.0.0", + "archiver": "^5.0.0", + "axios": "^0.x", + "base64-stream": "^1.0.0", + "bluebird": "^3.5.1", + "bplist-creator": "^0", + "bplist-parser": "^0.x", + "form-data": "^4.0.0", + "get-stream": "^6.0.0", + "glob": "^7.1.2", + "jimp": "^0.x", + "jsftp": "^2.1.2", + "klaw": "^3.0.0", + "lockfile": "^1.0.4", + "lodash": "^4.2.1", + "mkdirp": "^1.0.0", + "moment": "^2.24.0", + "mv": "^2.1.1", + "ncp": "^2.0.0", + "npmlog": "^5.0.0", + "plist": "^3.0.1", + "pluralize": "^8.0.0", + "pngjs": "^6.0.0", + "rimraf": "^3.0.0", + "sanitize-filename": "^1.6.1", + "semver": "^7.0.0", + "shell-quote": "^1.7.2", + "source-map-support": "^0.5.5", + "teen_process": "^1.5.1", + "uuid": "^8.0.0", + "which": "^2.0.0", + "yauzl": "^2.7.0" + }, + "dependencies": { + "gauge": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.1.tgz", + "integrity": "sha512-6STz6KdQgxO4S/ko+AbjlFGGdGcknluoqU+79GOFCDqqyYj5OanQf9AjxwN0jCidtT+ziPMmPSt9E4hfQ0CwIQ==", + "dev": true, + "requires": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1 || ^2.0.0", + "strip-ansi": "^3.0.1 || ^4.0.0", + "wide-align": "^1.1.2" + } + }, + "npmlog": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.0.tgz", + "integrity": "sha512-ftpIiLjerL2tUg3dCqN8pOSoB90gqZlzv/gaZoxHaKjeLClrfJIEQ1Pdxi6qSzflz916Bljdy8dTWQ4J7hAFSQ==", + "dev": true, + "requires": { + "are-we-there-yet": "^1.1.5", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + } } }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "jimp": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/jimp/-/jimp-0.16.1.tgz", - "integrity": "sha512-+EKVxbR36Td7Hfd23wKGIeEyHbxShZDX6L8uJkgVW3ESA9GiTEPK08tG1XI2r/0w5Ch0HyJF5kPqF9K7EmGjaw==", + "appium-tizen-driver": { + "version": "1.1.1-beta.5", + "resolved": "https://registry.npmjs.org/appium-tizen-driver/-/appium-tizen-driver-1.1.1-beta.5.tgz", + "integrity": "sha512-LKnGb84Fzcer8Bw772oR/WdKy1Eo2ILm8TPiU7ienFVdp0eDwmpFnfXl7vCzTnusohT4SDPnOOquMhkh4UMOfQ==", "dev": true, "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/custom": "^0.16.1", - "@jimp/plugins": "^0.16.1", - "@jimp/types": "^0.16.1", - "regenerator-runtime": "^0.13.3" + "@babel/runtime": "^7.0.0", + "appium-base-driver": "^4.0.0", + "appium-sdb": "^1.0.1-beta.1", + "appium-support": "^2.8.0", + "asyncbox": "^2.0.4", + "bluebird": "^3.4.7", + "fancy-log": "^1.3.2", + "jimp": "^0.5.3", + "lodash": "^4.17.9", + "source-map-support": "^0.5.9", + "teen_process": "^1.9.0", + "yargs": "^12.0.2" }, "dependencies": { "@jimp/bmp": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/bmp/-/bmp-0.16.1.tgz", - "integrity": "sha512-iwyNYQeBawrdg/f24x3pQ5rEx+/GwjZcCXd3Kgc+ZUd+Ivia7sIqBsOnDaMZdKCBPlfW364ekexnlOqyVa0NWg==", + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/@jimp/bmp/-/bmp-0.5.4.tgz", + "integrity": "sha512-P/ezH1FuoM3FwS0Dm2ZGkph4x5/rPBzFLEZor7KQkmGUnYEIEG4o0BUcAWFmJOp2HgzbT6O2SfrpJNBOcVACzQ==", "dev": true, "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1", - "bmp-js": "^0.1.0" + "@jimp/utils": "^0.5.0", + "bmp-js": "^0.1.0", + "core-js": "^2.5.7" } }, "@jimp/core": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/core/-/core-0.16.1.tgz", - "integrity": "sha512-la7kQia31V6kQ4q1kI/uLimu8FXx7imWVajDGtwUG8fzePLWDFJyZl0fdIXVCL1JW2nBcRHidUot6jvlRDi2+g==", + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/@jimp/core/-/core-0.5.4.tgz", + "integrity": "sha512-n3uvHy2ndUKItmbhnRO8xmU8J6KR+v6CQxO9sbeUDpSc3VXc1PkqrA8ZsCVFCjnDFcGBXL+MJeCTyQzq5W9Crw==", "dev": true, "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1", + "@jimp/utils": "^0.5.0", "any-base": "^1.1.0", "buffer": "^5.2.0", + "core-js": "^2.5.7", "exif-parser": "^0.1.12", "file-type": "^9.0.0", "load-bmfont": "^1.3.1", - "mkdirp": "^0.5.1", + "mkdirp": "0.5.1", "phin": "^2.9.1", "pixelmatch": "^4.0.2", "tinycolor2": "^1.4.1" } }, "@jimp/custom": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/custom/-/custom-0.16.1.tgz", - "integrity": "sha512-DNUAHNSiUI/j9hmbatD6WN/EBIyeq4AO0frl5ETtt51VN1SvE4t4v83ZA/V6ikxEf3hxLju4tQ5Pc3zmZkN/3A==", + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/@jimp/custom/-/custom-0.5.4.tgz", + "integrity": "sha512-tLfyJoyouDl2J3RPFGfDzTtE+4S8ljqJUmLzy/cmx1n7+xS5TpLPdPskp7UaeAfNTqdF4CNAm94KYoxTZdj2mg==", "dev": true, "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/core": "^0.16.1" + "@jimp/core": "^0.5.4", + "core-js": "^2.5.7" } }, "@jimp/gif": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/gif/-/gif-0.16.1.tgz", - "integrity": "sha512-r/1+GzIW1D5zrP4tNrfW+3y4vqD935WBXSc8X/wm23QTY9aJO9Lw6PEdzpYCEY+SOklIFKaJYUAq/Nvgm/9ryw==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@jimp/gif/-/gif-0.5.0.tgz", + "integrity": "sha512-HVB4c7b8r/yCpjhCjVNPRFLuujTav5UPmcQcFJjU6aIxmne6e29rAjRJEv3UMamHDGSu/96PzOsPZBO5U+ZGww==", "dev": true, "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1", - "gifwrap": "^0.9.2", + "@jimp/utils": "^0.5.0", + "core-js": "^2.5.7", "omggif": "^1.0.9" } }, "@jimp/jpeg": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/jpeg/-/jpeg-0.16.1.tgz", - "integrity": "sha512-8352zrdlCCLFdZ/J+JjBslDvml+fS3Z8gttdml0We759PnnZGqrnPRhkOEOJbNUlE+dD4ckLeIe6NPxlS/7U+w==", + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/@jimp/jpeg/-/jpeg-0.5.4.tgz", + "integrity": "sha512-YaPWm+YSGCThNE/jLMckM3Qs6uaMxd/VsHOnEaqu5tGA4GFbfVaWHjKqkNGAFuiNV+HdgKlNcCOF3of+elvzqQ==", "dev": true, "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1", - "jpeg-js": "0.4.2" + "@jimp/utils": "^0.5.0", + "core-js": "^2.5.7", + "jpeg-js": "^0.3.4" } }, "@jimp/plugin-blit": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-blit/-/plugin-blit-0.16.1.tgz", - "integrity": "sha512-fKFNARm32RoLSokJ8WZXHHH2CGzz6ire2n1Jh6u+XQLhk9TweT1DcLHIXwQMh8oR12KgjbgsMGvrMVlVknmOAg==", + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/@jimp/plugin-blit/-/plugin-blit-0.5.4.tgz", + "integrity": "sha512-WqDYOugv76hF1wnKy7+xPGf9PUbcm9vPW28/jHWn1hjbb2GnusJ2fVEFad76J/1SPfhrQ2Uebf2QCWJuLmOqZg==", "dev": true, "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1" + "@jimp/utils": "^0.5.0", + "core-js": "^2.5.7" } }, "@jimp/plugin-blur": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-blur/-/plugin-blur-0.16.1.tgz", - "integrity": "sha512-1WhuLGGj9MypFKRcPvmW45ht7nXkOKu+lg3n2VBzIB7r4kKNVchuI59bXaCYQumOLEqVK7JdB4glaDAbCQCLyw==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1" - } - }, - "@jimp/plugin-circle": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-circle/-/plugin-circle-0.16.1.tgz", - "integrity": "sha512-JK7yi1CIU7/XL8hdahjcbGA3V7c+F+Iw+mhMQhLEi7Q0tCnZ69YJBTamMiNg3fWPVfMuvWJJKOBRVpwNTuaZRg==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@jimp/plugin-blur/-/plugin-blur-0.5.0.tgz", + "integrity": "sha512-5k0PXCA1RTJdITL7yMAyZ5tGQjKLHqFvwdXj/PCoBo5PuMyr0x6qfxmQEySixGk/ZHdDxMi80vYxHdKHjNNgjg==", "dev": true, "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1" + "@jimp/utils": "^0.5.0", + "core-js": "^2.5.7" } }, "@jimp/plugin-color": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-color/-/plugin-color-0.16.1.tgz", - "integrity": "sha512-9yQttBAO5SEFj7S6nJK54f+1BnuBG4c28q+iyzm1JjtnehjqMg6Ljw4gCSDCvoCQ3jBSYHN66pmwTV74SU1B7A==", + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/@jimp/plugin-color/-/plugin-color-0.5.5.tgz", + "integrity": "sha512-hWeOqNCmLguGYLhSvBrpfCvlijsMEVaLZAOod62s1rzWnujozyKOzm2eZe+W3To6mHbp5RGJNVrIwHBWMab4ug==", "dev": true, "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1", + "@jimp/utils": "^0.5.0", + "core-js": "^2.5.7", "tinycolor2": "^1.4.1" } }, "@jimp/plugin-contain": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-contain/-/plugin-contain-0.16.1.tgz", - "integrity": "sha512-44F3dUIjBDHN+Ym/vEfg+jtjMjAqd2uw9nssN67/n4FdpuZUVs7E7wadKY1RRNuJO+WgcD5aDQcsvurXMETQTg==", + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/@jimp/plugin-contain/-/plugin-contain-0.5.4.tgz", + "integrity": "sha512-8YJh4FI3S69unri0nJsWeqVLeVGA77N2R0Ws16iSuCCD/5UnWd9FeWRrSbKuidBG6TdMBaG2KUqSYZeHeH9GOQ==", "dev": true, "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1" + "@jimp/utils": "^0.5.0", + "core-js": "^2.5.7" } }, "@jimp/plugin-cover": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-cover/-/plugin-cover-0.16.1.tgz", - "integrity": "sha512-YztWCIldBAVo0zxcQXR+a/uk3/TtYnpKU2CanOPJ7baIuDlWPsG+YE4xTsswZZc12H9Kl7CiziEbDtvF9kwA/Q==", + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/@jimp/plugin-cover/-/plugin-cover-0.5.4.tgz", + "integrity": "sha512-2Rur7b44WiDDgizUI2M2uYWc1RmfhU5KjKS1xXruobjQ0tXkf5xlrPXSushq0hB6Ne0Ss6wv0+/6eQ8WeGHU2w==", "dev": true, "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1" + "@jimp/utils": "^0.5.0", + "core-js": "^2.5.7" } }, "@jimp/plugin-crop": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-crop/-/plugin-crop-0.16.1.tgz", - "integrity": "sha512-UQdva9oQzCVadkyo3T5Tv2CUZbf0klm2cD4cWMlASuTOYgaGaFHhT9st+kmfvXjKL8q3STkBu/zUPV6PbuV3ew==", + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/@jimp/plugin-crop/-/plugin-crop-0.5.4.tgz", + "integrity": "sha512-6t0rqn4VazquGk48tO6hFBrQ+nkvC+A1RnR6UM/m8ZtG2/yjpwF0MXcpgJI1Fb+a4Ug7BY1fu2GPcZOhnAVK/g==", "dev": true, "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1" + "@jimp/utils": "^0.5.0", + "core-js": "^2.5.7" } }, "@jimp/plugin-displace": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-displace/-/plugin-displace-0.16.1.tgz", - "integrity": "sha512-iVAWuz2+G6Heu8gVZksUz+4hQYpR4R0R/RtBzpWEl8ItBe7O6QjORAkhxzg+WdYLL2A/Yd4ekTpvK0/qW8hTVw==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@jimp/plugin-displace/-/plugin-displace-0.5.0.tgz", + "integrity": "sha512-Bec7SQvnmKia4hOXEDjeNVx7vo/1bWqjuV6NO8xbNQcAO3gaCl91c9FjMDhsfAVb0Ou6imhbIuFPrLxorXsecQ==", "dev": true, "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1" + "@jimp/utils": "^0.5.0", + "core-js": "^2.5.7" } }, "@jimp/plugin-dither": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-dither/-/plugin-dither-0.16.1.tgz", - "integrity": "sha512-tADKVd+HDC9EhJRUDwMvzBXPz4GLoU6s5P7xkVq46tskExYSptgj5713J5Thj3NMgH9Rsqu22jNg1H/7tr3V9Q==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1" - } - }, - "@jimp/plugin-fisheye": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-fisheye/-/plugin-fisheye-0.16.1.tgz", - "integrity": "sha512-BWHnc5hVobviTyIRHhIy9VxI1ACf4CeSuCfURB6JZm87YuyvgQh5aX5UDKtOz/3haMHXBLP61ZBxlNpMD8CG4A==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@jimp/plugin-dither/-/plugin-dither-0.5.0.tgz", + "integrity": "sha512-We2WJQsD/Lm8oqBFp/vUv9/5r2avyenL+wNNu/s2b1HqA5O4sPGrjHy9K6vIov0NroQGCQ3bNznLkTmjiHKBcg==", "dev": true, "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1" + "@jimp/utils": "^0.5.0", + "core-js": "^2.5.7" } }, "@jimp/plugin-flip": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-flip/-/plugin-flip-0.16.1.tgz", - "integrity": "sha512-KdxTf0zErfZ8DyHkImDTnQBuHby+a5YFdoKI/G3GpBl3qxLBvC+PWkS2F/iN3H7wszP7/TKxTEvWL927pypT0w==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@jimp/plugin-flip/-/plugin-flip-0.5.0.tgz", + "integrity": "sha512-D/ehBQxLMNR7oNd80KXo4tnSET5zEm5mR70khYOTtTlfti/DlLp3qOdjPOzfLyAdqO7Ly4qCaXrIsnia+pfPrA==", "dev": true, "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1" + "@jimp/utils": "^0.5.0", + "core-js": "^2.5.7" } }, "@jimp/plugin-gaussian": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-gaussian/-/plugin-gaussian-0.16.1.tgz", - "integrity": "sha512-u9n4wjskh3N1mSqketbL6tVcLU2S5TEaFPR40K6TDv4phPLZALi1Of7reUmYpVm8mBDHt1I6kGhuCJiWvzfGyg==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@jimp/plugin-gaussian/-/plugin-gaussian-0.5.0.tgz", + "integrity": "sha512-Ln4kgxblv0/YzLBDb/J8DYPLhDzKH87Y8yHh5UKv3H+LPKnLaEG3L4iKTE9ivvdocnjmrtTFMYcWv2ERSPeHcg==", "dev": true, "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1" + "@jimp/utils": "^0.5.0", + "core-js": "^2.5.7" } }, "@jimp/plugin-invert": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-invert/-/plugin-invert-0.16.1.tgz", - "integrity": "sha512-2DKuyVXANH8WDpW9NG+PYFbehzJfweZszFYyxcaewaPLN0GxvxVLOGOPP1NuUTcHkOdMFbE0nHDuB7f+sYF/2w==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@jimp/plugin-invert/-/plugin-invert-0.5.0.tgz", + "integrity": "sha512-/vyKeIi3T7puf+8ruWovTjzDC585EnTwJ+lGOOUYiNPsdn4JDFe1B3xd+Ayv9aCQbXDIlPElZaM9vd/+wqDiIQ==", "dev": true, "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1" + "@jimp/utils": "^0.5.0", + "core-js": "^2.5.7" } }, "@jimp/plugin-mask": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-mask/-/plugin-mask-0.16.1.tgz", - "integrity": "sha512-snfiqHlVuj4bSFS0v96vo2PpqCDMe4JB+O++sMo5jF5mvGcGL6AIeLo8cYqPNpdO6BZpBJ8MY5El0Veckhr39Q==", + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/@jimp/plugin-mask/-/plugin-mask-0.5.4.tgz", + "integrity": "sha512-mUJ04pCrUWaJGXPjgoVbzhIQB8cVobj2ZEFlGO3BEAjyylYMrdJlNlsER8dd7UuJ2L/a4ocWtFDdsnuicnBghQ==", "dev": true, "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1" + "@jimp/utils": "^0.5.0", + "core-js": "^2.5.7" } }, "@jimp/plugin-normalize": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-normalize/-/plugin-normalize-0.16.1.tgz", - "integrity": "sha512-dOQfIOvGLKDKXPU8xXWzaUeB0nvkosHw6Xg1WhS1Z5Q0PazByhaxOQkSKgUryNN/H+X7UdbDvlyh/yHf3ITRaw==", + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/@jimp/plugin-normalize/-/plugin-normalize-0.5.4.tgz", + "integrity": "sha512-Q5W0oEz9wxsjuhvHAJynI/OqXZcmqEAuRONQId7Aw5ulCXSOg9C4y2a67EO7aZAt55T+zMVxI9UpVUpzVvO6hw==", "dev": true, "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1" + "@jimp/utils": "^0.5.0", + "core-js": "^2.5.7" } }, "@jimp/plugin-print": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-print/-/plugin-print-0.16.1.tgz", - "integrity": "sha512-ceWgYN40jbN4cWRxixym+csyVymvrryuKBQ+zoIvN5iE6OyS+2d7Mn4zlNgumSczb9GGyZZESIgVcBDA1ezq0Q==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1", - "load-bmfont": "^1.4.0" - } - }, - "@jimp/plugin-resize": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-resize/-/plugin-resize-0.16.1.tgz", - "integrity": "sha512-u4JBLdRI7dargC04p2Ha24kofQBk3vhaf0q8FwSYgnCRwxfvh2RxvhJZk9H7Q91JZp6wgjz/SjvEAYjGCEgAwQ==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1" - } - }, - "@jimp/plugin-rotate": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-rotate/-/plugin-rotate-0.16.1.tgz", - "integrity": "sha512-ZUU415gDQ0VjYutmVgAYYxC9Og9ixu2jAGMCU54mSMfuIlmohYfwARQmI7h4QB84M76c9hVLdONWjuo+rip/zg==", + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/@jimp/plugin-print/-/plugin-print-0.5.4.tgz", + "integrity": "sha512-DOZr5TY9WyMWFBD37oz7KpTEBVioFIHQF/gH5b3O5jjFyj4JPMkw7k3kVBve9lIrzIYrvLqe0wH59vyAwpeEFg==", "dev": true, "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1" + "@jimp/utils": "^0.5.0", + "core-js": "^2.5.7", + "load-bmfont": "^1.4.0" } }, - "@jimp/plugin-scale": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-scale/-/plugin-scale-0.16.1.tgz", - "integrity": "sha512-jM2QlgThIDIc4rcyughD5O7sOYezxdafg/2Xtd1csfK3z6fba3asxDwthqPZAgitrLgiKBDp6XfzC07Y/CefUw==", + "@jimp/plugin-resize": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/@jimp/plugin-resize/-/plugin-resize-0.5.4.tgz", + "integrity": "sha512-lXNprNAT0QY1D1vG/1x6urUTlWuZe2dfL29P81ApW2Yfcio471+oqo45moX5FLS0q24xU600g7cHGf2/TzqSfA==", "dev": true, "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1" + "@jimp/utils": "^0.5.0", + "core-js": "^2.5.7" } }, - "@jimp/plugin-shadow": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-shadow/-/plugin-shadow-0.16.1.tgz", - "integrity": "sha512-MeD2Is17oKzXLnsphAa1sDstTu6nxscugxAEk3ji0GV1FohCvpHBcec0nAq6/czg4WzqfDts+fcPfC79qWmqrA==", + "@jimp/plugin-rotate": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/@jimp/plugin-rotate/-/plugin-rotate-0.5.4.tgz", + "integrity": "sha512-SIdUpMc8clObMchy8TnjgHgcXEQM992z5KavgiuOnCuBlsmSHtE3MrXTOyMW0Dn3gqapV9Y5vygrLm/BVtCCsg==", "dev": true, "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1" + "@jimp/utils": "^0.5.0", + "core-js": "^2.5.7" } }, - "@jimp/plugin-threshold": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-threshold/-/plugin-threshold-0.16.1.tgz", - "integrity": "sha512-iGW8U/wiCSR0+6syrPioVGoSzQFt4Z91SsCRbgNKTAk7D+XQv6OI78jvvYg4o0c2FOlwGhqz147HZV5utoSLxA==", + "@jimp/plugin-scale": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@jimp/plugin-scale/-/plugin-scale-0.5.0.tgz", + "integrity": "sha512-5InIOr3cNtrS5aQ/uaosNf28qLLc0InpNGKFmGFTv8oqZqLch6PtDTjDBZ1GGWsPdA/ljy4Qyy7mJO1QBmgQeQ==", "dev": true, "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1" + "@jimp/utils": "^0.5.0", + "core-js": "^2.5.7" } }, "@jimp/plugins": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/plugins/-/plugins-0.16.1.tgz", - "integrity": "sha512-c+lCqa25b+4q6mJZSetlxhMoYuiltyS+ValLzdwK/47+aYsq+kcJNl+TuxIEKf59yr9+5rkbpsPkZHLF/V7FFA==", + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/@jimp/plugins/-/plugins-0.5.5.tgz", + "integrity": "sha512-9oF6LbSM/K7YkFCcxaPaD8NUkL/ZY8vT8NIGfQ/NpX+tKQtcsLHcRavHpUC+M1xXShv/QGx9OdBV/jgiu82QYg==", "dev": true, "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/plugin-blit": "^0.16.1", - "@jimp/plugin-blur": "^0.16.1", - "@jimp/plugin-circle": "^0.16.1", - "@jimp/plugin-color": "^0.16.1", - "@jimp/plugin-contain": "^0.16.1", - "@jimp/plugin-cover": "^0.16.1", - "@jimp/plugin-crop": "^0.16.1", - "@jimp/plugin-displace": "^0.16.1", - "@jimp/plugin-dither": "^0.16.1", - "@jimp/plugin-fisheye": "^0.16.1", - "@jimp/plugin-flip": "^0.16.1", - "@jimp/plugin-gaussian": "^0.16.1", - "@jimp/plugin-invert": "^0.16.1", - "@jimp/plugin-mask": "^0.16.1", - "@jimp/plugin-normalize": "^0.16.1", - "@jimp/plugin-print": "^0.16.1", - "@jimp/plugin-resize": "^0.16.1", - "@jimp/plugin-rotate": "^0.16.1", - "@jimp/plugin-scale": "^0.16.1", - "@jimp/plugin-shadow": "^0.16.1", - "@jimp/plugin-threshold": "^0.16.1", + "@jimp/plugin-blit": "^0.5.4", + "@jimp/plugin-blur": "^0.5.0", + "@jimp/plugin-color": "^0.5.5", + "@jimp/plugin-contain": "^0.5.4", + "@jimp/plugin-cover": "^0.5.4", + "@jimp/plugin-crop": "^0.5.4", + "@jimp/plugin-displace": "^0.5.0", + "@jimp/plugin-dither": "^0.5.0", + "@jimp/plugin-flip": "^0.5.0", + "@jimp/plugin-gaussian": "^0.5.0", + "@jimp/plugin-invert": "^0.5.0", + "@jimp/plugin-mask": "^0.5.4", + "@jimp/plugin-normalize": "^0.5.4", + "@jimp/plugin-print": "^0.5.4", + "@jimp/plugin-resize": "^0.5.4", + "@jimp/plugin-rotate": "^0.5.4", + "@jimp/plugin-scale": "^0.5.0", + "core-js": "^2.5.7", "timm": "^1.6.1" } }, "@jimp/png": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/png/-/png-0.16.1.tgz", - "integrity": "sha512-iyWoCxEBTW0OUWWn6SveD4LePW89kO7ZOy5sCfYeDM/oTPLpR8iMIGvZpZUz1b8kvzFr27vPst4E5rJhGjwsdw==", + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/@jimp/png/-/png-0.5.4.tgz", + "integrity": "sha512-J2NU7368zihF1HUZdmpXsL/Hhyf+I3ubmK+6Uz3Uoyvtk1VS7dO3L0io6fJQutfWmPZ4bvu6Ry022oHjbi6QCA==", "dev": true, "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1", + "@jimp/utils": "^0.5.0", + "core-js": "^2.5.7", "pngjs": "^3.3.3" } }, "@jimp/tiff": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/tiff/-/tiff-0.16.1.tgz", - "integrity": "sha512-3K3+xpJS79RmSkAvFMgqY5dhSB+/sxhwTFA9f4AVHUK0oKW+u6r52Z1L0tMXHnpbAdR9EJ+xaAl2D4x19XShkQ==", + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/@jimp/tiff/-/tiff-0.5.4.tgz", + "integrity": "sha512-hr7Zq3eWjAZ+itSwuAObIWMRNv7oHVM3xuEDC2ouP7HfE7woBtyhCyfA7u12KlgtM57gKWeogXqTlewRGVzx6g==", "dev": true, "requires": { - "@babel/runtime": "^7.7.2", + "core-js": "^2.5.7", "utif": "^2.0.1" } }, "@jimp/types": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/types/-/types-0.16.1.tgz", - "integrity": "sha512-g1w/+NfWqiVW4CaXSJyD28JQqZtm2eyKMWPhBBDCJN9nLCN12/Az0WFF3JUAktzdsEC2KRN2AqB1a2oMZBNgSQ==", + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/@jimp/types/-/types-0.5.4.tgz", + "integrity": "sha512-nbZXM6TsdpnYHIBd8ZuoxGpvmxc2SqiggY30/bhOP/VJQoDBzm2v/20Ywz5M0snpIK2SdYG52eZPNjfjqUP39w==", "dev": true, "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/bmp": "^0.16.1", - "@jimp/gif": "^0.16.1", - "@jimp/jpeg": "^0.16.1", - "@jimp/png": "^0.16.1", - "@jimp/tiff": "^0.16.1", + "@jimp/bmp": "^0.5.4", + "@jimp/gif": "^0.5.0", + "@jimp/jpeg": "^0.5.4", + "@jimp/png": "^0.5.4", + "@jimp/tiff": "^0.5.4", + "core-js": "^2.5.7", "timm": "^1.6.1" } - }, - "@jimp/utils": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-0.16.1.tgz", - "integrity": "sha512-8fULQjB0x4LzUSiSYG6ZtQl355sZjxbv8r9PPAuYHzS9sGiSHJQavNqK/nKnpDsVkU88/vRGcE7t3nMU0dEnVw==", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "regenerator-runtime": "^0.13.3" - } - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "pngjs": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", - "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==", - "dev": true - } - } - }, - "jpeg-js": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.2.tgz", - "integrity": "sha512-+az2gi/hvex7eLTMTlbRLOhH6P6WFdk2ITI8HJsaH2VqYO0I594zXSYEP+tf4FW+8Cy68ScDXoAsQdyQanv3sw==", - "dev": true - }, - "js2xmlparser2": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/js2xmlparser2/-/js2xmlparser2-0.2.0.tgz", - "integrity": "sha1-p8ogibg9AjMdYxiS3WdDhkElAz8=", - "dev": true - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true - }, - "jsftp": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/jsftp/-/jsftp-2.1.3.tgz", - "integrity": "sha512-r79EVB8jaNAZbq8hvanL8e8JGu2ZNr2bXdHC4ZdQhRImpSPpnWwm5DYVzQ5QxJmtGtKhNNuvqGgbNaFl604fEQ==", - "dev": true, - "requires": { - "debug": "^3.1.0", - "ftp-response-parser": "^1.0.1", - "once": "^1.4.0", - "parse-listing": "^1.1.3", - "stream-combiner": "^0.2.2", - "unorm": "^1.4.1" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - }, - "dependencies": { - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - } - } - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "jszip": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.5.0.tgz", - "integrity": "sha512-WRtu7TPCmYePR1nazfrtuF216cIVon/3GWOvHS9QR5bIwSbnxtdpma6un3jyGGNhHsKCSzn5Ypk+EkDRvTGiFA==", - "dev": true, - "requires": { - "lie": "~3.3.0", - "pako": "~1.0.2", - "readable-stream": "~2.3.6", - "set-immediate-shim": "~1.0.1" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - } - } - }, - "keypather": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/keypather/-/keypather-1.10.2.tgz", - "integrity": "sha1-4ESWMtSz5RbyHMAUznxWRP3c5hQ=", - "dev": true, - "requires": { - "101": "^1.0.0" - } - }, - "keyv": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.3.tgz", - "integrity": "sha512-zdGa2TOpSZPq5mU6iowDARnMBZgtCqJ11dJROFi6tg6kTn4nuUdU09lFyLFSaHrWqpIJ+EBq4E8/Dc0Vx5vLdA==", - "dev": true, - "requires": { - "json-buffer": "3.0.1" - } - }, - "klaw": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz", - "integrity": "sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.9" - } - }, - "kuler": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", - "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==", - "dev": true - }, - "lazystream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", - "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", - "dev": true, - "requires": { - "readable-stream": "^2.0.5" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - } - } - }, - "lcid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", - "dev": true, - "requires": { - "invert-kv": "^2.0.0" - } - }, - "lie": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", - "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", - "dev": true, - "requires": { - "immediate": "~3.0.5" - } - }, - "lighthouse-logger": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.2.0.tgz", - "integrity": "sha512-wzUvdIeJZhRsG6gpZfmSCfysaxNEr43i+QT+Hie94wvHDKFLi4n7C2GqZ4sTC+PH5b5iktmXJvU87rWvhP3lHw==", - "dev": true, - "requires": { - "debug": "^2.6.8", - "marky": "^1.2.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "load-bmfont": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/load-bmfont/-/load-bmfont-1.4.1.tgz", - "integrity": "sha512-8UyQoYmdRDy81Brz6aLAUhfZLwr5zV0L3taTQ4hju7m6biuwiWiJXjPhBJxbUQJA8PrkvJ/7Enqmwk2sM14soA==", - "dev": true, - "requires": { - "buffer-equal": "0.0.1", - "mime": "^1.3.4", - "parse-bmfont-ascii": "^1.0.3", - "parse-bmfont-binary": "^1.0.5", - "parse-bmfont-xml": "^1.1.4", - "phin": "^2.9.1", - "xhr": "^2.0.1", - "xtend": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "lockfile": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lockfile/-/lockfile-1.0.4.tgz", - "integrity": "sha512-cvbTwETRfsFh4nHsL1eGWapU1XFi5Ot9E85sWAwia7Y7EgB7vfqcZhTKZ+l7hCGxSPoushMv5GKhT5PdLv03WA==", - "dev": true, - "requires": { - "signal-exit": "^3.0.2" - } - }, - "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", - "dev": true - }, - "lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "dev": true - }, - "lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=", - "dev": true - }, - "lodash.difference": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", - "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=", - "dev": true - }, - "lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", - "dev": true - }, - "lodash.isfinite": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz", - "integrity": "sha1-+4m2WpqAKBgz8LdHizpRBPiY67M=", - "dev": true - }, - "lodash.isobject": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-3.0.2.tgz", - "integrity": "sha1-PI+41bW/S/kK4G4U8qUwpO2TXh0=", - "dev": true - }, - "lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", - "dev": true - }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "lodash.union": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", - "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=", - "dev": true - }, - "lodash.zip": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.zip/-/lodash.zip-4.2.0.tgz", - "integrity": "sha1-7GZi5IlkCO1KtsVCo5kLcswIACA=", - "dev": true - }, - "logform": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/logform/-/logform-2.2.0.tgz", - "integrity": "sha512-N0qPlqfypFx7UHNn4B3lzS/b0uLqt2hmuoa+PpuXNYgozdJYAyauF5Ky0BWVjrxDlMWiT3qN4zPq3vVAfZy7Yg==", - "dev": true, - "requires": { - "colors": "^1.2.1", - "fast-safe-stringify": "^2.0.4", - "fecha": "^4.2.0", - "ms": "^2.1.1", - "triple-beam": "^1.3.0" - } - }, - "loglevel": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.1.tgz", - "integrity": "sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw==", - "dev": true - }, - "loglevel-plugin-prefix": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/loglevel-plugin-prefix/-/loglevel-plugin-prefix-0.8.4.tgz", - "integrity": "sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g==", - "dev": true - }, - "longjohn": { - "version": "0.2.12", - "resolved": "https://registry.npmjs.org/longjohn/-/longjohn-0.2.12.tgz", - "integrity": "sha1-fKdEawg2VcN351EiE9x1TVKmSn4=", - "dev": true, - "requires": { - "source-map-support": "0.3.2 - 1.0.0" - } - }, - "lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", - "dev": true, - "requires": { - "p-defer": "^1.0.0" - } - }, - "marky": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.1.tgz", - "integrity": "sha512-md9k+Gxa3qLH6sUKpeC2CNkJK/Ld+bEz5X96nYwloqphQE0CKCVEKco/6jxEZixinqNdz5RFi/KaCyfbMDMAXQ==", - "dev": true - }, - "md5": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", - "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", - "dev": true, - "requires": { - "charenc": "0.0.2", - "crypt": "0.0.2", - "is-buffer": "~1.1.6" - } - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", - "dev": true - }, - "mem": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", - "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", - "dev": true, - "requires": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^2.0.0", - "p-is-promise": "^2.0.0" - } - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", - "dev": true - }, - "method-override": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/method-override/-/method-override-3.0.0.tgz", - "integrity": "sha512-IJ2NNN/mSl9w3kzWB92rcdHpz+HjkxhDJWNDBqSlas+zQdP8wBiJzITPg08M/k2uVvMow7Sk41atndNtt/PHSA==", - "dev": true, - "requires": { - "debug": "3.1.0", - "methods": "~1.1.2", - "parseurl": "~1.3.2", - "vary": "~1.1.2" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + }, + "@jimp/utils": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-0.5.0.tgz", + "integrity": "sha512-7H9RFVU+Li2XmEko0GGyzy7m7JjSc7qa+m8l3fUzYg2GtwASApjKF/LSG2AUQCUmDKFLdfIEVjxvKvZUJFEmpw==", "dev": true, "requires": { - "ms": "2.0.0" + "core-js": "^2.5.7" } }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "@wdio/config": { + "version": "5.22.4", + "resolved": "https://registry.npmjs.org/@wdio/config/-/config-5.22.4.tgz", + "integrity": "sha512-i5dJQWb80darcRA//tfG0guMeQCeRUXroZNnHjGNb1qzvTRZmcIIhdxaD+DbK/5dWEx6aoMfoi6wjVp/CXwdAg==", + "dev": true, + "requires": { + "@wdio/logger": "5.16.10", + "deepmerge": "^4.0.0", + "glob": "^7.1.2" + } + }, + "@wdio/logger": { + "version": "5.16.10", + "resolved": "https://registry.npmjs.org/@wdio/logger/-/logger-5.16.10.tgz", + "integrity": "sha512-hRKhxgd9uB48Dtj2xe2ckxU4KwI/RO8IwguySuaI2SLFj6EDbdonwzpVkq111/fjBuq7R1NauAaNcm3AMEbIFA==", + "dev": true, + "requires": { + "chalk": "^3.0.0", + "loglevel": "^1.6.0", + "loglevel-plugin-prefix": "^0.8.4", + "strip-ansi": "^6.0.0" + } + }, + "@wdio/protocols": { + "version": "5.22.1", + "resolved": "https://registry.npmjs.org/@wdio/protocols/-/protocols-5.22.1.tgz", + "integrity": "sha512-GdoWb/HTrb09Qb0S/7sLp1NU94LAhTsF1NnFj5sEFSUpecrl0S07pnhVg54pUImectN/woaqSl7uJGjlSGZcdQ==", "dev": true - } - } - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", - "dev": true - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true - }, - "mime-db": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", - "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", - "dev": true - }, - "mime-types": { - "version": "2.1.27", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", - "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", - "dev": true, - "requires": { - "mime-db": "1.44.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true - }, - "min-document": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", - "dev": true, - "requires": { - "dom-walk": "^0.1.0" - } - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "mjpeg-server": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/mjpeg-server/-/mjpeg-server-0.3.0.tgz", - "integrity": "sha1-rx3hP3VkJwi6bsFw36xAi9xdlzc=", - "dev": true - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, - "mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "dev": true - }, - "moment": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", - "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", - "dev": true - }, - "moment-timezone": { - "version": "0.5.32", - "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.32.tgz", - "integrity": "sha512-Z8QNyuQHQAmWucp8Knmgei8YNo28aLjJq6Ma+jy1ZSpSk5nyfRT8xgUbSQvD2+2UajISfenndwvFuH3NGS+nvA==", - "dev": true, - "requires": { - "moment": ">= 2.9.0" - } - }, - "morgan": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", - "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", - "dev": true, - "requires": { - "basic-auth": "~2.0.1", - "debug": "2.6.9", - "depd": "~2.0.0", - "on-finished": "~2.3.0", - "on-headers": "~1.0.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + }, + "@wdio/repl": { + "version": "5.23.0", + "resolved": "https://registry.npmjs.org/@wdio/repl/-/repl-5.23.0.tgz", + "integrity": "sha512-cKG9m0XuqcQenQmoup0yJX1fkDQEdY06QXuwt636ZQf6XgDoeoAdNOgnRnNruQ0+JsC2eqHFoSNto1q8wcLH/g==", "dev": true, "requires": { - "ms": "2.0.0" + "@wdio/utils": "5.23.0" } }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "@wdio/utils": { + "version": "5.23.0", + "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-5.23.0.tgz", + "integrity": "sha512-dWPEkDiaNUqJXPO6L2di2apI7Rle7Er4euh67Wlb5+3MrPNjCKhiF8gHcpQeL8oe6A1MH/f89kpSEEXe4BMkAw==", + "dev": true, + "requires": { + "@wdio/logger": "5.16.10", + "deepmerge": "^4.0.0" + } + }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", "dev": true }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "appium-base-driver": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/appium-base-driver/-/appium-base-driver-4.5.1.tgz", + "integrity": "sha512-g7sI5mzmGdZhIFg3+A5f9ewtihYKS0b33wZWbN6R/PYYTEmXbNhFPGfVqzoAzFANuLjlTlvEEsqGcUtjrMO2Bw==", + "dev": true, + "requires": { + "@babel/runtime": "^7.0.0", + "appium-support": "^2.33.1", + "async-lock": "^1.0.0", + "asyncbox": "^2.3.1", + "bluebird": "^3.5.3", + "body-parser": "^1.18.2", + "colors": "^1.1.2", + "es6-error": "^4.1.1", + "express": "^4.16.2", + "http-status-codes": "^1.3.0", + "lodash": "^4.0.0", + "lru-cache": "^5.0.0", + "method-override": "^3.0.0", + "morgan": "^1.9.0", + "request": "^2.83.0", + "request-promise": "^4.2.2", + "sanitize-filename": "^1.6.1", + "serve-favicon": "^2.4.5", + "source-map-support": "^0.5.5", + "uuid-js": "^0.7.5", + "validate.js": "^0.13.0", + "webdriverio": "^5.10.9", + "ws": "^7.0.0" + } + }, + "archiver": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-3.1.1.tgz", + "integrity": "sha512-5Hxxcig7gw5Jod/8Gq0OneVgLYET+oNHcxgWItq4TbhOzRLKNAFUb9edAftiMKXvXfCB0vbGrJdZDNq0dWMsxg==", + "dev": true, + "requires": { + "archiver-utils": "^2.1.0", + "async": "^2.6.3", + "buffer-crc32": "^0.2.1", + "glob": "^7.1.4", + "readable-stream": "^3.4.0", + "tar-stream": "^2.1.0", + "zip-stream": "^2.1.2" + } + }, + "async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "compress-commons": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-2.1.1.tgz", + "integrity": "sha512-eVw6n7CnEMFzc3duyFVrQEuY1BlHR3rYsSztyG32ibGMW722i3C6IizEGMFmfMU+A+fALvBIwxN3czffTcdA+Q==", + "dev": true, + "requires": { + "buffer-crc32": "^0.2.13", + "crc32-stream": "^3.0.1", + "normalize-path": "^3.0.0", + "readable-stream": "^2.3.6" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + } + } + }, + "crc32-stream": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-3.0.1.tgz", + "integrity": "sha512-mctvpXlbzsvK+6z8kJwSJ5crm7yBwrQMTybJzMw1O4lLGJqjlDCXY2Zw7KheiA6XBEcBmfLx1D88mjRGVJtY9w==", + "dev": true, + "requires": { + "crc": "^3.4.4", + "readable-stream": "^3.4.0" + } + }, + "http-status-codes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/http-status-codes/-/http-status-codes-1.4.0.tgz", + "integrity": "sha512-JrT3ua+WgH8zBD3HEJYbeEgnuQaAnUeRRko/YojPAJjGmIfGD3KPU/asLdsLwKjfxOmQe5nXMQ0pt/7MyapVbQ==", "dev": true - } - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "mv": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", - "integrity": "sha1-rmzg1vbV4KT32JN5jQPB6pVZtqI=", - "dev": true, - "requires": { - "mkdirp": "~0.5.1", - "ncp": "~2.0.0", - "rimraf": "~2.4.0" - }, - "dependencies": { - "glob": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", + }, + "jimp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/jimp/-/jimp-0.5.6.tgz", + "integrity": "sha512-H0nHTu6KgAgQzDxa38ew2dXbnRzKm1w5uEyhMIxqwCQVjwgarOjjkV/avbNLxfxRHAFaNp4rGIc/qm8P+uhX9A==", "dev": true, "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "@babel/polyfill": "^7.0.0", + "@jimp/custom": "^0.5.4", + "@jimp/plugins": "^0.5.5", + "@jimp/types": "^0.5.4", + "core-js": "^2.5.7" + } + }, + "jpeg-js": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.3.7.tgz", + "integrity": "sha512-9IXdWudL61npZjvLuVe/ktHiA41iE8qFyLB+4VDTblEsWBzeg8WQTlktdUK4CdncUqtUgUg0bbOmTE2bKBKaBQ==", + "dev": true + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" } }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "dev": true, "requires": { - "minimist": "^1.2.5" + "minimist": "0.0.8" } }, - "rimraf": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", - "integrity": "sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto=", + "pngjs": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", + "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==", + "dev": true + }, + "rgb2hex": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/rgb2hex/-/rgb2hex-0.1.10.tgz", + "integrity": "sha512-vKz+kzolWbL3rke/xeTE2+6vHmZnNxGyDnaVW4OckntAIcc7DcZzWkQSfxMDwqHS8vhgySnIFyBUH7lIk6PxvQ==", + "dev": true + }, + "serialize-error": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-5.0.0.tgz", + "integrity": "sha512-/VtpuyzYf82mHYTtI4QKtwHa79vAdU5OQpNPAmE/0UDdlGT0ZxHwC+J6gXkw29wwoVI8fMPsfcVHOwXtUQYYQA==", "dev": true, "requires": { - "glob": "^6.0.1" + "type-fest": "^0.8.0" } - } - } - }, - "ncp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", - "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=", - "dev": true - }, - "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", - "dev": true - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", - "dev": true - }, - "node-idevice": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/node-idevice/-/node-idevice-0.1.6.tgz", - "integrity": "sha1-lBGqdotEv7fNJezlyKHItLbx+kQ=", - "dev": true - }, - "node-simctl": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/node-simctl/-/node-simctl-6.4.1.tgz", - "integrity": "sha512-RkEvbv2SJYDJF5eBJ0rRGZRU/LOypLmUAPLI/s7KqJAk0rSbG45x2OF2eqbK9+pfzL7N9XPorIcqtS75cYIydw==", - "dev": true, - "requires": { - "@babel/runtime": "^7.0.0", - "asyncbox": "^2.3.1", - "bluebird": "^3.5.1", - "lodash": "^4.2.1", - "npmlog": "^4.1.2", - "rimraf": "^3.0.0", - "semver": "^7.0.0", - "source-map-support": "^0.5.5", - "teen_process": "^1.5.1", - "uuid": "^8.0.0", - "which": "^2.0.0" - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "normalize-url": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", - "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==", - "dev": true - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, - "requires": { - "path-key": "^2.0.0" - } - }, - "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "dev": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + }, + "webdriver": { + "version": "5.23.0", + "resolved": "https://registry.npmjs.org/webdriver/-/webdriver-5.23.0.tgz", + "integrity": "sha512-r7IrbZ2SuTIRyWV8mv4a4hZoFcT9Qt4MznOkdRWPE1sPpZ8lyLZsIEjKCEbHelOzPwURqk+biwGrm4z2OZRAiw==", + "dev": true, + "requires": { + "@types/request": "^2.48.4", + "@wdio/config": "5.22.4", + "@wdio/logger": "5.16.10", + "@wdio/protocols": "5.22.1", + "@wdio/utils": "5.23.0", + "lodash.merge": "^4.6.1", + "request": "^2.83.0" + } + }, + "webdriverio": { + "version": "5.23.0", + "resolved": "https://registry.npmjs.org/webdriverio/-/webdriverio-5.23.0.tgz", + "integrity": "sha512-hxt6Nuu2bBrTsVk7GfoFRTh63l4fRVXlK9U30RtPbHoWO5tcFdyUz2UTgeHEZ54ea1DQEVPfsgFiLnJULkWp1Q==", + "dev": true, + "requires": { + "@wdio/config": "5.22.4", + "@wdio/logger": "5.16.10", + "@wdio/repl": "5.23.0", + "@wdio/utils": "5.23.0", + "archiver": "^3.0.0", + "css-value": "^0.0.1", + "grapheme-splitter": "^1.0.2", + "lodash.clonedeep": "^4.5.0", + "lodash.isobject": "^3.0.2", + "lodash.isplainobject": "^4.0.6", + "lodash.zip": "^4.2.0", + "resq": "^1.6.0", + "rgb2hex": "^0.1.0", + "serialize-error": "^5.0.0", + "webdriver": "5.23.0" + } + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "zip-stream": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-2.1.3.tgz", + "integrity": "sha512-EkXc2JGcKhO5N5aZ7TmuNo45budRaFGHOmz24wtJR7znbNqDPmdZtUauKX6et8KAVseAMBOyWJqEpXcHTBsh7Q==", + "dev": true, + "requires": { + "archiver-utils": "^2.1.0", + "compress-commons": "^2.1.1", + "readable-stream": "^3.4.0" + } + } } }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - }, - "omggif": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/omggif/-/omggif-1.0.10.tgz", - "integrity": "sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==", - "dev": true - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "appium-uiautomator2-driver": { + "version": "1.69.0", + "resolved": "https://registry.npmjs.org/appium-uiautomator2-driver/-/appium-uiautomator2-driver-1.69.0.tgz", + "integrity": "sha512-vT2UKPXEYYOD2phIkHyyf/6siYibfmSkn9kz7rqzIOFvqY4GMZfdynHu4UWAGrdZWU9nRahYP1KfcTnOEM/n9A==", "dev": true, "requires": { - "ee-first": "1.1.1" + "@babel/runtime": "^7.0.0", + "appium-adb": "^8.10.0", + "appium-android-driver": "^4.49.0", + "appium-base-driver": "^7.0.0", + "appium-chromedriver": "^4.23.1", + "appium-support": "^2.49.0", + "appium-uiautomator2-server": "^4.23.0", + "asyncbox": "^2.3.1", + "axios": "^0.x", + "bluebird": "^3.5.1", + "css-selector-parser": "^1.4.1", + "lodash": "^4.17.4", + "portscanner": "2.2.0", + "source-map-support": "^0.5.5", + "teen_process": "^1.3.1" } }, - "on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "appium-uiautomator2-server": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/appium-uiautomator2-server/-/appium-uiautomator2-server-4.24.0.tgz", + "integrity": "sha512-C7LtaxHTx2Zs8qXRFE03MeMf43NyB0vf1G+tIZCJ5HtQXkbcHyheiHHqTSiHjDYh/iIEqIBjoT7Rd/ITv+0ujA==", "dev": true }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "one-time": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", - "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", + "appium-webdriveragent": { + "version": "3.13.3", + "resolved": "https://registry.npmjs.org/appium-webdriveragent/-/appium-webdriveragent-3.13.3.tgz", + "integrity": "sha512-Ig9k+XuAnD3doTHKp6D4YUSN35V45Epwz+YUt5rhW3esJRfACN/1fB5UfJ7Lm15JMQnvw6chx8B+JCBb//Ynlw==", "dev": true, "requires": { - "fn.name": "1.x.x" + "@babel/runtime": "^7.0.0", + "appium-base-driver": "^7.0.0", + "appium-ios-simulator": "^3.14.0", + "appium-support": "^2.46.0", + "async-lock": "^1.0.0", + "asyncbox": "^2.5.3", + "axios": "^0.x", + "bluebird": "^3.5.5", + "lodash": "^4.17.11", + "node-simctl": "^6.0.2", + "source-map-support": "^0.5.12", + "teen_process": "^1.14.1" } }, - "os-locale": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", - "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", + "appium-windows-driver": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/appium-windows-driver/-/appium-windows-driver-1.19.1.tgz", + "integrity": "sha512-iZW51z88VQKPA851IshZaWyogfoI05QKqH9ltzuKHkHgdvWm/DLnAXmeQHfJi+nUaBy+D92PLiyHnAvJJTRB/Q==", "dev": true, "requires": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" + "@babel/runtime": "^7.0.0", + "appium-base-driver": "^7.0.0", + "appium-support": "^2.49.0", + "asyncbox": "^2.3.1", + "bluebird": "^3.5.1", + "es6-error": "^4.1.1", + "lodash": "^4.6.1", + "portscanner": "2.2.0", + "source-map-support": "^0.5.5", + "teen_process": "^1.7.0" } }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true - }, - "p-cancelable": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.0.0.tgz", - "integrity": "sha512-wvPXDmbMmu2ksjkB4Z3nZWTSkJEb9lqVdMaCKpZUGJG9TMiNp9XcbG3fn9fPKjem04fJMJnXoyFPk2FmgiaiNg==", - "dev": true - }, - "p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", - "dev": true - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "p-is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", - "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", - "dev": true - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "appium-xcode": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/appium-xcode/-/appium-xcode-3.11.0.tgz", + "integrity": "sha512-kT1du+HYBrd8X+cLfpp0mLCbqv7tgPRI9lCmrSeL2t9cIGdb+p9m4MOlfaKxrsqFurQlmMVUHmKDZLU4kvZWBg==", "dev": true, "requires": { - "p-try": "^2.0.0" + "@babel/runtime": "^7.0.0", + "appium-support": "^2.4.0", + "asyncbox": "^2.3.0", + "lodash": "^4.17.4", + "plist": "^3.0.1", + "semver": "^7.0.0", + "source-map-support": "^0.5.5", + "teen_process": "^1.3.0" } }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "appium-xcuitest-driver": { + "version": "3.53.1", + "resolved": "https://registry.npmjs.org/appium-xcuitest-driver/-/appium-xcuitest-driver-3.53.1.tgz", + "integrity": "sha512-AZR5TjtnLjPbKoZLy4xU568mCfymiBea9+mcA+3hP73SXF1Ov1YXhvGm/b5cctCN8jP1odin1xOhBLGiDXGGhg==", "dev": true, "requires": { - "p-limit": "^2.2.0" + "@babel/runtime": "^7.0.0", + "appium-base-driver": "^7.0.0", + "appium-idb": "^0.x", + "appium-ios-device": "^1.5.0", + "appium-ios-simulator": "^3.28.0", + "appium-remote-debugger": "^8.13.2", + "appium-support": "^2.47.1", + "appium-webdriveragent": "^3.13.0", + "appium-xcode": "^3.8.0", + "async-lock": "^1.0.0", + "asyncbox": "^2.3.1", + "bluebird": "^3.5.1", + "css-selector-parser": "^1.4.1", + "js2xmlparser2": "^0.2.0", + "lodash": "^4.17.10", + "lru-cache": "^6.0.0", + "moment": "^2.24.0", + "moment-timezone": "^0.x", + "node-simctl": "^6.4.0", + "portscanner": "2.2.0", + "semver": "^7.0.0", + "source-map-support": "^0.5.5", + "teen_process": "^1.14.0", + "ws": "^8.0.0", + "xmldom": "^0.x" + }, + "dependencies": { + "ws": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.2.tgz", + "integrity": "sha512-Q6B6H2oc8QY3llc3cB8kVmQ6pnJWVQbP7Q5algTcIxx7YEpc0oU4NBVHlztA7Ekzfhw2r0rPducMUiCGWKQRzw==", + "dev": true + } } }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true - }, - "parse-bmfont-ascii": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz", - "integrity": "sha1-Eaw8P/WPfCAgqyJ2kHkQjU36AoU=", - "dev": true - }, - "parse-bmfont-binary": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz", - "integrity": "sha1-0Di0dtPp3Z2x4RoLDlOiJ5K2kAY=", - "dev": true - }, - "parse-bmfont-xml": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/parse-bmfont-xml/-/parse-bmfont-xml-1.1.4.tgz", - "integrity": "sha512-bjnliEOmGv3y1aMEfREMBJ9tfL3WR0i0CKPj61DnSLaoxWR3nLrsQrEbCId/8rF4NyRF0cCqisSVXyQYWM+mCQ==", + "appium-youiengine-driver": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/appium-youiengine-driver/-/appium-youiengine-driver-1.2.9.tgz", + "integrity": "sha512-Xq3sttITAJi+fF42BepuyT82YwMWQCFpH21/fZuNwUv8Ry6jercFoNa0wz6SIXyXOMgmoHsf+uW7sinrcq/9tA==", "dev": true, "requires": { - "xml-parse-from-string": "^1.0.0", - "xml2js": "^0.4.5" + "@babel/runtime": "^7.11.2", + "appium-base-driver": "^7.2.3", + "appium-ios-simulator": "^3.23.0", + "appium-mac-driver": "^1.10.0", + "appium-support": "^2.49.0", + "appium-uiautomator2-driver": "^1.57.1", + "appium-xcuitest-driver": "^3.27.4", + "asyncbox": "^2.6.0", + "bluebird": "^3.7.2", + "lodash": "^4.17.20", + "node-simctl": "^6.3.2", + "selenium-webdriver": "^3.6.0", + "shelljs": "^0.8.4", + "source-map-support": "^0.5.19", + "teen_process": "^1.15.0" } }, - "parse-headers": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.3.tgz", - "integrity": "sha512-QhhZ+DCCit2Coi2vmAKbq5RGTRcQUOE2+REgv8vdyu7MnYx2eZztegqtTx99TZ86GTIwqiy3+4nQTWZ2tgmdCA==", - "dev": true - }, - "parse-listing": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/parse-listing/-/parse-listing-1.1.3.tgz", - "integrity": "sha1-qlRvV/3BKc+/mUXNS3V7FLBhgt0=", - "dev": true - }, - "parse-node-version": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", - "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", - "dev": true - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", "dev": true }, - "pem": { - "version": "1.14.4", - "resolved": "https://registry.npmjs.org/pem/-/pem-1.14.4.tgz", - "integrity": "sha512-v8lH3NpirgiEmbOqhx0vwQTxwi0ExsiWBGYh0jYNq7K6mQuO4gI6UEFlr6fLAdv9TPXRt6GqiwE37puQdIDS8g==", + "archiver": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.0.tgz", + "integrity": "sha512-iUw+oDwK0fgNpvveEsdQ0Ase6IIKztBJU2U0E9MzszMfmVVUyv1QJhS2ITW9ZCqx8dktAxVAjWWkKehuZE8OPg==", "dev": true, "requires": { - "es6-promisify": "^6.0.0", - "md5": "^2.2.1", - "os-tmpdir": "^1.0.1", - "which": "^2.0.2" + "archiver-utils": "^2.1.0", + "async": "^3.2.0", + "buffer-crc32": "^0.2.1", + "readable-stream": "^3.6.0", + "readdir-glob": "^1.0.0", + "tar-stream": "^2.2.0", + "zip-stream": "^4.1.0" } }, - "pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", - "dev": true - }, - "performance-now": { + "archiver-utils": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, - "phin": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/phin/-/phin-2.9.3.tgz", - "integrity": "sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA==", - "dev": true - }, - "pixelmatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-4.0.2.tgz", - "integrity": "sha1-j0fc7FARtHe2fbA8JDvB8wheiFQ=", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", + "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", "dev": true, "requires": { - "pngjs": "^3.0.0" + "glob": "^7.1.4", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", + "readable-stream": "^2.0.0" }, "dependencies": { - "pngjs": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", - "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==", - "dev": true + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } } } }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "plist": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.1.tgz", - "integrity": "sha512-GpgvHHocGRyQm74b6FWEZZVRroHKE1I0/BTjAmySaohK+cUn+hZpbqXkc3KWgW3gQYkqcQej35FohcT0FRlkRQ==", + "are-we-there-yet": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", "dev": true, "requires": { - "base64-js": "^1.2.3", - "xmlbuilder": "^9.0.7", - "xmldom": "0.1.x" + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" }, "dependencies": { - "xmlbuilder": { - "version": "9.0.7", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", - "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=", - "dev": true + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } } } }, - "pluralize": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", - "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "pngjs": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-5.0.0.tgz", - "integrity": "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==", + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", "dev": true }, - "portfinder": { - "version": "1.0.28", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", - "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", "dev": true, "requires": { - "async": "^2.6.2", - "debug": "^3.1.1", - "mkdirp": "^0.5.5" + "safer-buffer": "~2.1.0" + } + }, + "assert-args": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/assert-args/-/assert-args-1.2.1.tgz", + "integrity": "sha1-QEEDoUUqMv53iYgR5U5ZCoqTc70=", + "dev": true, + "requires": { + "101": "^1.2.0", + "compound-subject": "0.0.1", + "debug": "^2.2.0", + "get-prototype-of": "0.0.0", + "is-capitalized": "^1.0.0", + "is-class": "0.0.4" }, "dependencies": { - "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "dev": true, - "requires": { - "lodash": "^4.17.14" - } - }, "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { - "ms": "^2.1.1" + "ms": "2.0.0" } }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true } } }, - "portscanner": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.2.0.tgz", - "integrity": "sha512-IFroCz/59Lqa2uBvzK3bKDbDDIEaAY8XJ1jFxcLWTqosrsc32//P4VuSB2vZXoHiHqOmx8B5L5hnKOxL/7FlPw==", + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + }, + "async": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", + "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==", + "dev": true + }, + "async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", + "dev": true + }, + "async-listener": { + "version": "0.6.10", + "resolved": "https://registry.npmjs.org/async-listener/-/async-listener-0.6.10.tgz", + "integrity": "sha512-gpuo6xOyF4D5DE5WvyqZdPA3NGhiT6Qf07l7DCB0wwDEsLvDIbCr6j9S5aj5Ch96dLace5tXVzWBZkxU/c5ohw==", "dev": true, "requires": { - "async": "^2.6.0", - "is-number-like": "^1.0.3" + "semver": "^5.3.0", + "shimmer": "^1.1.0" }, "dependencies": { - "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "dev": true, - "requires": { - "lodash": "^4.17.14" - } + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true } } }, - "printj": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz", - "integrity": "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ==", + "async-lock": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/async-lock/-/async-lock-1.3.0.tgz", + "integrity": "sha512-8A7SkiisnEgME2zEedtDYPxUPzdv3x//E7n5IFktPAtMYSEAV7eNJF0rMwrVyUFj6d/8rgajLantbjcNRQYXIg==", "dev": true }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "asyncbox": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/asyncbox/-/asyncbox-2.9.2.tgz", + "integrity": "sha512-VSon1vGccTPcseugq0hl1ImUReW2+Z0GrDpeNHrxuZIKIUf5+gaeXtEFqESFJzSlF3y1UHC8Pkc6AhX/mTiBLA==", + "dev": true, + "requires": { + "@babel/runtime": "^7.0.0", + "bluebird": "^3.5.1", + "es6-mapify": "^1.1.0", + "lodash": "^4.17.4", + "source-map-support": "^0.5.5" + } + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", "dev": true }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", "dev": true }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", "dev": true }, - "proxy-addr": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", - "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", - "dev": true, - "requires": { - "forwarded": "~0.1.2", - "ipaddr.js": "1.9.1" - } - }, - "proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", "dev": true }, - "psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", + "aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", "dev": true }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "axios": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", + "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", "dev": true, "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "follow-redirects": "^1.10.0" } }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "puppeteer-core": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-5.5.0.tgz", - "integrity": "sha512-tlA+1n+ziW/Db03hVV+bAecDKse8ihFRXYiEypBe9IlLRvOCzYFG6qrCMBYK34HO/Q/Ecjc+tvkHRAfLVH+NgQ==", + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "dev": true, "requires": { - "debug": "^4.1.0", - "devtools-protocol": "0.0.818844", - "extract-zip": "^2.0.0", - "https-proxy-agent": "^4.0.0", - "node-fetch": "^2.6.1", - "pkg-dir": "^4.2.0", - "progress": "^2.0.1", - "proxy-from-env": "^1.0.0", - "rimraf": "^3.0.2", - "tar-fs": "^2.0.0", - "unbzip2-stream": "^1.3.3", - "ws": "^7.2.3" + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + }, + "dependencies": { + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", + "dev": true + } } }, - "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, - "quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "dev": true }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "base64-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base64-stream/-/base64-stream-1.0.0.tgz", + "integrity": "sha512-BQQZftaO48FcE1Kof9CmXMFaAdqkcNorgc8CxesZv9nMbbTF1EFyQe89UOuh//QMmdtfUDXyO8rgUalemL5ODA==", "dev": true }, - "raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", "dev": true, "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" + "safe-buffer": "5.1.2" } }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", "dev": true, "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "tweetnacl": "^0.14.3" } }, - "readdir-glob": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.1.tgz", - "integrity": "sha512-91/k1EzZwDx6HbERR+zucygRFfiPl2zkIYZtv3Jjr6Mn7SkKcVct8aVO+sSRiGMc6fLf72du3d92/uY63YPdEA==", - "dev": true, - "requires": { - "minimatch": "^3.0.4" - } + "big-integer": { + "version": "1.6.48", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.48.tgz", + "integrity": "sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w==", + "dev": true }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "dev": true, "requires": { - "resolve": "^1.1.6" + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" } }, - "regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", "dev": true }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "bmp-js": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/bmp-js/-/bmp-js-0.1.0.tgz", + "integrity": "sha1-4Fpj95amwf8l9Hcex62twUjAcjM=", + "dev": true + }, + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", "dev": true, "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" }, "dependencies": { - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" + "ms": "2.0.0" } }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true } } }, - "request-promise": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/request-promise/-/request-promise-4.2.6.tgz", - "integrity": "sha512-HCHI3DJJUakkOr8fNoCc73E5nU5bqITjOYFMDrKHYOXWXrgD/SBaC7LjwuPymUprRyuF06UK7hd/lMHkmUXglQ==", + "bplist-creator": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.1.0.tgz", + "integrity": "sha512-sXaHZicyEEmY86WyueLTQesbeoH/mquvarJaQNbjuOQO+7gbFcDEWqKmcWA4cOTLzFlfgvkiVxolk1k5bBIpmg==", "dev": true, "requires": { - "bluebird": "^3.5.0", - "request-promise-core": "1.1.4", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" + "stream-buffers": "2.2.x" } }, - "request-promise-core": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", - "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", + "bplist-parser": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.3.0.tgz", + "integrity": "sha512-zgmaRvT6AN1JpPPV+S0a1/FAtoxSreYDccZGIqEMSvZl9DMe70mJ7MFzpxa1X+gHVdkToE2haRUHHMiW1OdejA==", "dev": true, "requires": { - "lodash": "^4.17.19" + "big-integer": "1.6.x" } }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "resolve": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", - "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { - "is-core-module": "^2.1.0", - "path-parse": "^1.0.6" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "resolve-alpn": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.0.0.tgz", - "integrity": "sha512-rTuiIEqFmGxne4IovivKSDzld2lWW9QCjqv80SYjPgf+gS35eaCAjaP54CCwGAwBtnCsvNLYtqxe1Nw+i6JEmA==", - "dev": true - }, - "responselike": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz", - "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==", + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "dev": true, "requires": { - "lowercase-keys": "^2.0.0" + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" } }, - "resq": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/resq/-/resq-1.10.0.tgz", - "integrity": "sha512-hCUd0xMalqtPDz4jXIqs0M5Wnv/LZXN8h7unFOo4/nvExT9dDPbhwd3udRxLlp0HgBnHcV009UlduE9NZi7A6w==", - "dev": true, - "requires": { - "fast-deep-equal": "^2.0.1" - } + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "dev": true }, - "rgb2hex": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/rgb2hex/-/rgb2hex-0.2.3.tgz", - "integrity": "sha512-clEe0m1xv+Tva1B/TOepuIcvLAxP0U+sCDfgt1SX1HmI2Ahr5/Cd/nzJM1e78NKVtWdoo0s33YehpFA8UfIShQ==", + "buffer-equal": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", + "integrity": "sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs=", "dev": true }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true }, - "rpc-websockets": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/rpc-websockets/-/rpc-websockets-5.3.1.tgz", - "integrity": "sha512-rIxEl1BbXRlIA9ON7EmY/2GUM7RLMy8zrUPTiLPFiYnYOz0I3PXfCmDDrge5vt4pW4oIcAXBDvgZuJ1jlY5+VA==", + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true + }, + "cacheable-lookup": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", + "dev": true + }, + "cacheable-request": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", + "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", "dev": true, "requires": { - "@babel/runtime": "^7.8.7", - "assert-args": "^1.2.1", - "babel-runtime": "^6.26.0", - "circular-json": "^0.5.9", - "eventemitter3": "^3.1.2", - "uuid": "^3.4.0", - "ws": "^5.2.2" + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" }, "dependencies": { - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true - }, - "ws": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", - "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, "requires": { - "async-limiter": "~1.0.0" + "pump": "^3.0.0" } } } }, - "safari-launcher": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/safari-launcher/-/safari-launcher-2.0.5.tgz", - "integrity": "sha1-pO/6nqUS0dVB5HuAOdhScBXyre0=", - "dev": true - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", "dev": true }, - "sanitize-filename": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", - "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", "dev": true, "requires": { - "truncate-utf8-bytes": "^1.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=", "dev": true }, - "selenium-webdriver": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-3.6.0.tgz", - "integrity": "sha512-WH7Aldse+2P5bbFBO4Gle/nuQOdVwpHMTL6raL3uuBj/vPG07k6uzt3aiahu352ONBr5xXh0hDlM3LhtXPOC4Q==", + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "chrome-launcher": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.13.4.tgz", + "integrity": "sha512-nnzXiDbGKjDSK6t2I+35OAPBy5Pw/39bgkb/ZAFwMhwJbdYBp6aH+vW28ZgtjdU890Q7D+3wN/tB8N66q5Gi2A==", "dev": true, "requires": { - "jszip": "^3.1.3", - "rimraf": "^2.5.4", - "tmp": "0.0.30", - "xml2js": "^0.4.17" + "@types/node": "*", + "escape-string-regexp": "^1.0.5", + "is-wsl": "^2.2.0", + "lighthouse-logger": "^1.0.0", + "mkdirp": "^0.5.3", + "rimraf": "^3.0.2" }, "dependencies": { - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dev": true, "requires": { - "glob": "^7.1.3" + "minimist": "^1.2.5" } } } }, - "semver": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } + "circular-json": { + "version": "0.5.9", + "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.5.9.tgz", + "integrity": "sha512-4ivwqHpIFJZBuhN3g/pEcdbnGUywkBblloGbkglyloVjjR3uT6tieI89MVOfbP2tHX5sgb01FuLgAOzebNlJNQ==", + "dev": true }, - "send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", "dev": true, "requires": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.7.2", - "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.0" + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" }, "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { - "ms": "2.0.0" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" } }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } } } }, - "serialize-error": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", - "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "dev": true + }, + "clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", "dev": true, "requires": { - "type-fest": "^0.13.1" + "mimic-response": "^1.0.0" } }, - "serve-favicon": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/serve-favicon/-/serve-favicon-2.5.0.tgz", - "integrity": "sha1-k10kDN/g9YBTB/3+ln2IlCosvPA=", + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "color": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/color/-/color-3.0.0.tgz", + "integrity": "sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w==", "dev": true, "requires": { - "etag": "~1.8.1", - "fresh": "0.5.2", - "ms": "2.1.1", - "parseurl": "~1.3.2", - "safe-buffer": "5.1.1" + "color-convert": "^1.9.1", + "color-string": "^1.5.2" }, "dependencies": { - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } }, - "safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true } } }, - "serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.1" + "color-name": "~1.1.4" } }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "set-immediate-shim": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", - "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", + "color-string": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.6.0.tgz", + "integrity": "sha512-c/hGS+kRWJutUBEngKKmk4iH3sD59MBkoxVapS/0wgpCz2u7XsNloxknyvBhzwEs1IbV36D9PwqLPJ2DTu3vMA==", + "dev": true, + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", "dev": true }, - "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", "dev": true }, - "shared-preferences-builder": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/shared-preferences-builder/-/shared-preferences-builder-0.0.4.tgz", - "integrity": "sha512-6yy1O1zVAY8HWVjsaJzFzkmvmktlSvqnjsYZpWJ0dUrFS5Rfn1a8P7h+7zyl9MTqUfSXeaE7De6Yymx3OszxlQ==", + "colorspace": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.2.tgz", + "integrity": "sha512-vt+OoIP2d76xLhjwbBaucYlNSpPsrJWPlBTtwCpQKIu6/CSMutyzX93O/Do0qzpH3YoHEes8YEFXyZ797rEhzQ==", "dev": true, "requires": { - "lodash": "^4.17.4", - "xmlbuilder": "^9.0.1" - }, - "dependencies": { - "xmlbuilder": { - "version": "9.0.7", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", - "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=", - "dev": true - } + "color": "3.0.x", + "text-hex": "1.0.x" } }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, "requires": { - "shebang-regex": "^1.0.0" + "delayed-stream": "~1.0.0" } }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "compare-versions": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz", + "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==", "dev": true }, - "shell-quote": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", - "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==", + "compound-subject": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/compound-subject/-/compound-subject-0.0.1.tgz", + "integrity": "sha1-JxVUaYoVrmCLHfyv0wt7oeqJLEs=", "dev": true }, - "shelljs": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz", - "integrity": "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==", + "compress-commons": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.1.tgz", + "integrity": "sha512-QLdDLCKNV2dtoTorqgxngQCMA+gWXkM/Nwu7FpeBhk/RdkzimqC3jueb/FDmaZeXh+uby1jkBqE3xArsLBE5wQ==", "dev": true, "requires": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" + "buffer-crc32": "^0.2.13", + "crc32-stream": "^4.0.2", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" } }, - "shimmer": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz", - "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==", + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, - "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", "dev": true }, - "simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", "dev": true, "requires": { - "is-arrayish": "^0.3.1" + "safe-buffer": "5.1.2" } }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", "dev": true }, - "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "continuation-local-storage": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/continuation-local-storage/-/continuation-local-storage-3.2.1.tgz", + "integrity": "sha512-jx44cconVqkCEEyLSKWwkvUXwO561jXMa3LPjTPsm5QR22PA0/mhe33FT4Xb5y74JDvt/Cq+5lm8S8rskLv9ZA==", "dev": true, "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" + "async-listener": "^0.6.0", + "emitter-listener": "^1.1.1" } }, - "stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=", - "dev": true - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", "dev": true }, - "stealthy-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", "dev": true }, - "stream-buffers": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz", - "integrity": "sha1-kdX1Ew0c75bc+n9yaUUYh0HQnuQ=", + "core-js": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", "dev": true }, - "stream-combiner": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.2.2.tgz", - "integrity": "sha1-rsjLrBd7Vrb0+kec7YwZEs7lKFg=", - "dev": true, - "requires": { - "duplexer": "~0.1.1", - "through": "~2.3.4" - } - }, - "string-width": { + "core-util-is": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "crc": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", + "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", "dev": true, "requires": { - "has-flag": "^4.0.0" + "buffer": "^5.1.0" } }, - "tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "crc-32": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.0.tgz", + "integrity": "sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==", "dev": true, "requires": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" + "exit-on-epipe": "~1.0.1", + "printj": "~1.1.0" } }, - "tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "crc32-stream": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.2.tgz", + "integrity": "sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w==", "dev": true, "requires": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" + "crc-32": "^1.2.0", + "readable-stream": "^3.4.0" } }, - "teen_process": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/teen_process/-/teen_process-1.16.0.tgz", - "integrity": "sha512-RnW7HHZD1XuhSTzD3djYOdIl1adE3oNEprE3HOFFxWs5m4FZsqYRhKJ4mDU2udtNGMLUS7jV7l8vVRLWAvmPDw==", + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, "requires": { - "@babel/runtime": "^7.0.0", - "bluebird": "^3.5.1", - "lodash": "^4.17.4", - "shell-quote": "^1.4.3", - "source-map-support": "^0.5.3", - "which": "^2.0.2" + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } } }, - "text-hex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", - "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==", - "dev": true - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=", "dev": true }, - "time-stamp": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", - "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=", + "css-selector-parser": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/css-selector-parser/-/css-selector-parser-1.4.1.tgz", + "integrity": "sha512-HYPSb7y/Z7BNDCOrakL4raGO2zltZkbeXyAd6Tg9obzix6QhzxCotdBl6VT0Dv4vZfJGVz3WL/xaEI9Ly3ul0g==", "dev": true }, - "timm": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/timm/-/timm-1.7.1.tgz", - "integrity": "sha512-IjZc9KIotudix8bMaBW6QvMuq64BrJWFs1+4V0lXwWGQZwH+LnX87doAYhem4caOEusRP9/g6jVDQmZ8XOk1nw==", + "css-shorthand-properties": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/css-shorthand-properties/-/css-shorthand-properties-1.1.1.tgz", + "integrity": "sha512-Md+Juc7M3uOdbAFwOYlTrccIZ7oCFuzrhKYQjdeUEW/sE1hv17Jp/Bws+ReOPpGVBTYCBoYo+G17V5Qo8QQ75A==", "dev": true }, - "tinycolor2": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.2.tgz", - "integrity": "sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA==", + "css-value": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/css-value/-/css-value-0.0.1.tgz", + "integrity": "sha1-Xv1sLupeof1rasV+wEJ7GEUkJOo=", "dev": true }, - "tmp": { - "version": "0.0.30", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.30.tgz", - "integrity": "sha1-ckGdSovn1s51FI/YsyTlk6cRwu0=", + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "dev": true, "requires": { - "os-tmpdir": "~1.0.1" + "assert-plus": "^1.0.0" } }, - "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", - "dev": true - }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "dev": true, "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" + "ms": "^2.1.1" } }, - "triple-beam": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", - "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==", + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", "dev": true }, - "truncate-utf8-bytes": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", - "integrity": "sha1-QFkjkJWS1W94pYGENLC3hInKXys=", + "decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", "dev": true, "requires": { - "utf8-byte-length": "^1.0.1" + "mimic-response": "^3.1.0" + }, + "dependencies": { + "mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true + } } }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "deep-eql": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-0.1.3.tgz", + "integrity": "sha1-71WKyrjeJSBs1xOQbXTlaTDrafI=", "dev": true, "requires": { - "safe-buffer": "^5.0.1" + "type-detect": "0.1.1" } }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", "dev": true }, - "type-detect": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-0.1.1.tgz", - "integrity": "sha1-C6XsKohWQORw6k6FBZcZANrFiCI=", + "defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", "dev": true }, - "type-fest": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", - "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", "dev": true }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dev": true, - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true }, - "ua-parser-js": { - "version": "0.7.23", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.23.tgz", - "integrity": "sha512-m4hvMLxgGHXG3O3fQVAyyAQpZzDOvwnhOTjYz5Xmr7r/+LpkNy3vJXdVRWgd1TkAb7NGROZuSy96CrlNVjA7KA==", + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", "dev": true }, - "unbzip2-stream": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", - "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "devtools": { + "version": "6.12.1", + "resolved": "https://registry.npmjs.org/devtools/-/devtools-6.12.1.tgz", + "integrity": "sha512-JyG46suEiZmld7/UVeogkCWM0zYGt+2ML/TI+SkEp+bTv9cs46cDb0pKF3glYZJA7wVVL2gC07Ic0iCxyJEnCQ==", "dev": true, "requires": { - "buffer": "^5.2.1", - "through": "^2.3.8" + "@wdio/config": "6.12.1", + "@wdio/logger": "6.10.10", + "@wdio/protocols": "6.12.0", + "@wdio/utils": "6.11.0", + "chrome-launcher": "^0.13.1", + "edge-paths": "^2.1.0", + "puppeteer-core": "^5.1.0", + "ua-parser-js": "^0.7.21", + "uuid": "^8.0.0" } }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "devtools-protocol": { + "version": "0.0.818844", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.818844.tgz", + "integrity": "sha512-AD1hi7iVJ8OD0aMLQU5VK0XH9LDlA1+BcPIgrAxPfaibx2DbWucuyOhc4oyQCbnvDDO68nN6/LcKfqTP343Jjg==", "dev": true }, - "unorm": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/unorm/-/unorm-1.6.0.tgz", - "integrity": "sha512-b2/KCUlYZUeA7JFUuRJZPUtr4gZvBh7tavtv4fvk4+KV9pfGiR6CQAQAWl49ZpR3ts2dk4FYkP7EIgDJoiOLDA==", + "dom-walk": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", + "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==", "dev": true }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", "dev": true }, - "uri-js": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", - "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", "dev": true, "requires": { - "punycode": "^2.1.0" + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" } }, - "utf7": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/utf7/-/utf7-1.0.2.tgz", - "integrity": "sha1-lV9JCq5lO6IguUVqCod2wZk2CZE=", + "edge-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/edge-paths/-/edge-paths-2.2.1.tgz", + "integrity": "sha512-AI5fC7dfDmCdKo3m5y7PkYE8m6bMqR6pvVpgtrZkkhcJXFLelUgkjrhk3kXXx8Kbw2cRaTT4LkOR7hqf39KJdw==", "dev": true, "requires": { - "semver": "~5.3.0" - }, - "dependencies": { - "semver": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", - "dev": true - } + "@types/which": "^1.3.2", + "which": "^2.0.2" } }, - "utf8-byte-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", - "integrity": "sha1-9F8VDExm7uloGGUFq5P8u4rWv2E=", + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", "dev": true }, - "utif": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/utif/-/utif-2.0.1.tgz", - "integrity": "sha512-Z/S1fNKCicQTf375lIP9G8Sa1H/phcysstNrrSdZKj1f9g58J4NMgb5IgiEZN9/nLMPDwF0W7hdOe9Qq2IYoLg==", + "emitter-listener": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/emitter-listener/-/emitter-listener-1.1.2.tgz", + "integrity": "sha512-Bt1sBAGFHY9DKY+4/2cV6izcKJUf5T7/gkdmkxzX/qv9CcGH8xSwVRW5mtX03SWJtRTWSOpzCuWN9rBFYZepZQ==", "dev": true, "requires": { - "pako": "^1.0.5" + "shimmer": "^1.2.0" } }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "enabled": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", + "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==", "dev": true }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", "dev": true }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } }, - "uuid-js": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/uuid-js/-/uuid-js-0.7.5.tgz", - "integrity": "sha1-bIhtAqU9LUDc8l2RoXC0p7JblNA=", + "es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", "dev": true }, - "validate.js": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/validate.js/-/validate.js-0.13.1.tgz", - "integrity": "sha512-PnFM3xiZ+kYmLyTiMgTYmU7ZHkjBZz2/+F0DaALc/uUtVzdCt1wAosvYJ5hFQi/hz8O4zb52FQhHZRC+uVkJ+g==", + "es6-mapify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/es6-mapify/-/es6-mapify-1.2.0.tgz", + "integrity": "sha512-b4QYXTO1HD0MMFs+JtYrQEaynlyuEInBF3anGQK11rQ45akiIBs+3YUyTBq9FLzM7rD5P2xAglEOXz9gcdmdIw==", + "dev": true, + "requires": { + "@babel/runtime": "^7.0.0" + } + }, + "es6-promisify": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-6.1.1.tgz", + "integrity": "sha512-HBL8I3mIki5C1Cc9QjKUenHtnG0A5/xA8Q/AllRcfiwl2CZFXGK7ddBiCoRwAix4i2KxcQfjtIVcrVbB3vbmwg==", "dev": true }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", "dev": true }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true }, - "webdriver": { - "version": "6.10.11", - "resolved": "https://registry.npmjs.org/webdriver/-/webdriver-6.10.11.tgz", - "integrity": "sha512-3LW1ST2ktdiW8ANO8ie09ct1zEAfk+Vn6ELJJXwwh858YL4ckG5Eu07w1HlCe+K1NwcrkHVsk7gw8Hq/qs/WyA==", - "dev": true, - "requires": { - "@types/lodash.merge": "^4.6.6", - "@wdio/config": "6.10.11", - "@wdio/logger": "6.10.10", - "@wdio/protocols": "6.10.6", - "@wdio/utils": "6.10.11", - "got": "^11.0.2", - "lodash.merge": "^4.6.1" - } + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true }, - "webdriverio": { - "version": "6.10.11", - "resolved": "https://registry.npmjs.org/webdriverio/-/webdriverio-6.10.11.tgz", - "integrity": "sha512-1EGQuX7oN2KJ1zyWmQGELP9deP1++moRLR/l8sEbZKMvv3qZ+lyT1g2t3Eu+AE7kan2wpBc94oWXmSF0KjEENQ==", - "dev": true, - "requires": { - "@types/archiver": "^5.1.0", - "@types/atob": "^2.1.2", - "@types/fs-extra": "^9.0.2", - "@types/lodash.clonedeep": "^4.5.6", - "@types/lodash.isobject": "^3.0.6", - "@types/lodash.isplainobject": "^4.0.6", - "@types/lodash.zip": "^4.2.6", - "@types/puppeteer-core": "^2.0.0", - "@wdio/config": "6.10.11", - "@wdio/logger": "6.10.10", - "@wdio/repl": "6.10.11", - "@wdio/utils": "6.10.11", - "archiver": "^5.0.0", - "atob": "^2.1.2", - "css-shorthand-properties": "^1.1.1", - "css-value": "^0.0.1", - "devtools": "6.10.11", - "fs-extra": "^9.0.1", - "get-port": "^5.1.1", - "grapheme-splitter": "^1.0.2", - "lodash.clonedeep": "^4.5.0", - "lodash.isobject": "^3.0.2", - "lodash.isplainobject": "^4.0.6", - "lodash.zip": "^4.2.0", - "minimatch": "^3.0.4", - "puppeteer-core": "^5.1.0", - "resq": "^1.9.1", - "rgb2hex": "0.2.3", - "serialize-error": "^7.0.0", - "webdriver": "6.10.11" - } + "eventemitter3": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", + "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==", + "dev": true }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", "dev": true, "requires": { - "isexe": "^2.0.0" + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "dependencies": { + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + } } }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "exif-parser": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/exif-parser/-/exif-parser-0.1.12.tgz", + "integrity": "sha1-WKnS1ywCwfbwKg70qRZicrd2CSI=", "dev": true }, - "wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dev": true, - "requires": { - "string-width": "^1.0.2 || 2" - } + "exit-on-epipe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz", + "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==", + "dev": true }, - "winston": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/winston/-/winston-3.3.3.tgz", - "integrity": "sha512-oEXTISQnC8VlSAKf1KYSSd7J6IWuRPQqDdo8eoRNaYKLvwSb5+79Z3Yi1lrl6KDpU6/VWaxpakDAtb1oQ4n9aw==", + "express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", "dev": true, "requires": { - "@dabh/diagnostics": "^2.0.2", - "async": "^3.1.0", - "is-stream": "^2.0.0", - "logform": "^2.2.0", - "one-time": "^1.0.0", - "readable-stream": "^3.4.0", - "stack-trace": "0.0.x", - "triple-beam": "^1.3.0", - "winston-transport": "^4.4.0" + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" }, "dependencies": { - "is-stream": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true } } }, - "winston-transport": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.4.0.tgz", - "integrity": "sha512-Lc7/p3GtqtqPBYYtS6KCN3c77/2QCev51DvcJKbkFPQNoj1sinkGwLGFDxkXY9J6p9+EPnYs+D90uwbnaiURTw==", + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", "dev": true, "requires": { - "readable-stream": "^2.3.7", - "triple-beam": "^1.2.0" + "@types/yauzl": "^2.9.1", + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" }, "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "pump": "^3.0.0" } } } }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", "dev": true }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "fancy-log": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", + "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", "dev": true, "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "ansi-gray": "^0.1.1", + "color-support": "^1.1.3", + "parse-node-version": "^1.0.0", + "time-stamp": "^1.0.0" + } + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-safe-stringify": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.8.tgz", + "integrity": "sha512-lXatBjf3WPjmWD6DpIZxkeSsCOwqI0maYMpgDlx8g4U2qi4lbjA9oH/HD2a87G+KfsUmo5WbJFmqBZlPxtptag==", + "dev": true + }, + "fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "dev": true, + "requires": { + "pend": "~1.2.0" + } + }, + "fecha": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.1.tgz", + "integrity": "sha512-MMMQ0ludy/nBs1/o0zVOiKTpG7qMbonKUzjJgQFEuvq6INZ1OraKPRAWkBq5vlKLOUMpmNYG1JoN3oDPUQ9m3Q==", + "dev": true + }, + "file-type": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-9.0.0.tgz", + "integrity": "sha512-Qe/5NJrgIOlwijpq3B7BEpzPFcgzggOTagZmkXQY4LA6bsXKTUstK7Wp12lEJ/mLKTpvIZxmIuRcLYWT6ov9lw==", + "dev": true + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" }, "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" + "ms": "2.0.0" } }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true } } }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "ws": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.2.tgz", - "integrity": "sha512-T4tewALS3+qsrpGI/8dqNMLIVdq/g/85U98HPMa6F0m6xTbvhXU6RCQLqPH3+SlomNV/LdY6RXEbBpMH6EOJnA==", + "find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", "dev": true }, - "xhr": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", - "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==", + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "requires": { - "global": "~4.4.0", - "is-function": "^1.0.1", - "parse-headers": "^2.0.0", - "xtend": "^4.0.0" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" } }, - "xml-parse-from-string": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz", - "integrity": "sha1-qQKekp09vN7RafPG4oI42VpdWig=", + "fn.name": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", + "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==", "dev": true }, - "xml2js": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", - "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", - "dev": true, - "requires": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - } - }, - "xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "follow-redirects": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.1.tgz", + "integrity": "sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg==", "dev": true }, - "xmldom": { - "version": "0.1.31", - "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.31.tgz", - "integrity": "sha512-yS2uJflVQs6n+CyjHoaBmVSqIDevTAWrzMmjG1Gc7h1qQ7uVozNhEPJAwZXWyGQ/Gafo3fCwrcaokezLPupVyQ==", + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", "dev": true }, - "xpath": { - "version": "0.0.32", - "resolved": "https://registry.npmjs.org/xpath/-/xpath-0.0.32.tgz", - "integrity": "sha512-rxMJhSIoiO8vXcWvSifKqhvV96GjiD5wYb8/QHdoRyQvraTpp4IEv944nhGausZZ3u7dhQXteZuZbaqfpB7uYw==", + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "dev": true }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", "dev": true }, - "y18n": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz", - "integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==", + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", "dev": true }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "ftp-response-parser": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ftp-response-parser/-/ftp-response-parser-1.0.1.tgz", + "integrity": "sha1-O50z+O3V+45HALj3eMRi5bFYH4k=", "dev": true, "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" + "readable-stream": "^1.0.31" }, "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", "dev": true }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", "dev": true, "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" } }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true } } }, - "yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, - "yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", "dev": true, "requires": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" } }, - "zip-stream": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.0.4.tgz", - "integrity": "sha512-a65wQ3h5gcQ/nQGWV1mSZCEzCML6EK/vyVPcrPNynySP1j3VBbQKh3nhC8CbORb+jfl2vXvh56Ul5odP1bAHqw==", - "dev": true, - "requires": { - "archiver-utils": "^2.1.0", - "compress-commons": "^4.0.2", - "readable-stream": "^3.6.0" - } - } - } - }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true - }, - "archiver": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/archiver/-/archiver-3.1.1.tgz", - "integrity": "sha512-5Hxxcig7gw5Jod/8Gq0OneVgLYET+oNHcxgWItq4TbhOzRLKNAFUb9edAftiMKXvXfCB0vbGrJdZDNq0dWMsxg==", - "dev": true, - "requires": { - "archiver-utils": "^2.1.0", - "async": "^2.6.3", - "buffer-crc32": "^0.2.1", - "glob": "^7.1.4", - "readable-stream": "^3.4.0", - "tar-stream": "^2.1.0", - "zip-stream": "^2.1.2" - }, - "dependencies": { - "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "dev": true, - "requires": { - "lodash": "^4.17.14" - } + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "dev": true }, - "bl": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.2.tgz", - "integrity": "sha512-j4OH8f6Qg2bGuWfRiltT2HYGx0e1QcBTrK9KAHNMwMZdQnDZFk0ZSYIpADjYCB3U12nicC5tVJwSIhwOWjb4RQ==", + "get-port": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", + "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==", + "dev": true + }, + "get-prototype-of": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/get-prototype-of/-/get-prototype-of-0.0.0.tgz", + "integrity": "sha1-mHcr0QcW0W3rSzIlFsRp78oorEQ=", + "dev": true + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "dev": true, "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - }, - "dependencies": { - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - } + "assert-plus": "^1.0.0" } }, - "buffer": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", - "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", + "gifwrap": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/gifwrap/-/gifwrap-0.9.2.tgz", + "integrity": "sha512-fcIswrPaiCDAyO8xnWvHSZdWChjKXUanKKpAiWWJ/UTkEi/aYKn5+90e7DE820zbEaVR9CE2y4z9bzhQijZ0BA==", "dev": true, "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" + "image-q": "^1.1.1", + "omggif": "^1.0.10" } }, "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -23782,4854 +23020,3911 @@ "path-is-absolute": "^1.0.0" } }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "global": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", + "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", "dev": true, "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "min-document": "^2.19.0", + "process": "^0.11.10" } }, - "tar-stream": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.2.tgz", - "integrity": "sha512-UaF6FoJ32WqALZGOIAApXx+OdxhekNMChu6axLJR85zMMjXKWFGjbIRe+J6P4UnRGg9rAwWvbTT0oI7hD/Un7Q==", - "dev": true, - "requires": { - "bl": "^4.0.1", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - } - } - } - }, - "archiver-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", - "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", - "dev": true, - "requires": { - "glob": "^7.1.4", - "graceful-fs": "^4.2.0", - "lazystream": "^1.0.0", - "lodash.defaults": "^4.2.0", - "lodash.difference": "^4.5.0", - "lodash.flatten": "^4.4.0", - "lodash.isplainobject": "^4.0.6", - "lodash.union": "^4.6.0", - "normalize-path": "^3.0.0", - "readable-stream": "^2.0.0" - }, - "dependencies": { - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "got": { + "version": "11.8.2", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.2.tgz", + "integrity": "sha512-D0QywKgIe30ODs+fm8wMZiAcZjypcCodPNuMz5H9Mny7RJ+IjJ10BdmGW7OM7fHXP+O7r6ZwapQ/YQmMSvB0UQ==", "dev": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.1", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" } }, "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", "dev": true }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", "dev": true - } - } - }, - "are-we-there-yet": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", - "dev": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "requires": { - "sprintf-js": "~1.0.2" - }, - "dependencies": { - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - } - } - }, - "aria-query": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", - "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", - "dev": true, - "requires": { - "@babel/runtime": "^7.10.2", - "@babel/runtime-corejs3": "^7.10.2" - } - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" - }, - "array-differ": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-2.1.0.tgz", - "integrity": "sha512-KbUpJgx909ZscOc/7CLATBFam7P1Z1QRQInvgT0UztM9Q72aGKCunKASAl7WNW0tnPmPyEMeMhdsfWhfmW037w==", - "dev": true - }, - "array-filter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-1.0.0.tgz", - "integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM=", - "dev": true - }, - "array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", - "dev": true - }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", - "dev": true - }, - "array-ify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", - "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=", - "dev": true - }, - "array-includes": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.3.tgz", - "integrity": "sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "get-intrinsic": "^1.1.1", - "is-string": "^1.0.5" - }, - "dependencies": { - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true + }, + "har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", "dev": true, "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "ajv": "^6.12.3", + "har-schema": "^2.0.0" } }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, "requires": { - "object-keys": "^1.0.12" + "function-bind": "^1.1.1" } }, - "es-abstract": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", - "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true + }, + "http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "dev": true + }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.2", - "is-string": "^1.0.5", - "object-inspect": "^1.9.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.0" + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" }, "dependencies": { - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "dev": true } } }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", "dev": true, "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "http-status-codes": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/http-status-codes/-/http-status-codes-2.1.4.tgz", + "integrity": "sha512-MZVIsLKGVOVE1KEnldppe6Ij+vmemMuApDfjhVSLzyYP+td0bREEYyAoIw9yFePoBXManCuBqmiNP5FqJS5Xkg==", + "dev": true + }, + "http2-wrapper": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", + "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", + "dev": true, + "requires": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" + } + }, + "https-proxy-agent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", + "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==", + "dev": true, + "requires": { + "agent-base": "5", + "debug": "4" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" } }, - "get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true + }, + "image-q": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/image-q/-/image-q-1.1.1.tgz", + "integrity": "sha1-/IQJlmRGC5DKhi2TALa/u7+/gFY=", + "dev": true + }, + "immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" + "once": "^1.3.0", + "wrappy": "1" } }, - "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, - "is-callable": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", + "ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", "dev": true }, - "is-regex": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", - "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-symbols": "^1.0.1" - } + "interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "dev": true }, - "is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", - "dev": true, - "requires": { - "has-symbols": "^1.0.1" - } + "invert-kv": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", + "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", + "dev": true }, - "object-inspect": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", - "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==", + "io.appium.settings": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/io.appium.settings/-/io.appium.settings-3.4.0.tgz", + "integrity": "sha512-7up+8dJr2RXXZhXNVUq9rdtZbGRTytSJ1rax4qm16534zPcBwXeWin0hC9qsIjDtqXXEEUOHdybeqTD1X8ZlMQ==", "dev": true }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - }, - "dependencies": { - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - } - } + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true }, - "string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "dev": true }, - "string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - } - } - }, - "array-iterate": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/array-iterate/-/array-iterate-1.1.2.tgz", - "integrity": "sha512-1hWSHTIlG/8wtYD+PPX5AOBtKWngpDFjrsrHgZpe+JdgNGz0udYu6ZIkAa/xuenIUEqFv7DvE2Yr60jxweJSrQ==", - "dev": true - }, - "array-map": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", - "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=" - }, - "array-reduce": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", - "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=" - }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true, - "requires": { - "array-uniq": "^1.0.1" - } - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" - }, - "array.prototype.flat": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.1.tgz", - "integrity": "sha512-rVqIs330nLJvfC7JqYvEWwqVr5QjYF1ib02i3YJtR/fICO6527Tjpc/e4Mvmxh3GIePPreRXMdaGyC99YphWEw==", - "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.10.0", - "function-bind": "^1.1.1" - } - }, - "array.prototype.flatmap": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz", - "integrity": "sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "function-bind": "^1.1.1" - }, - "dependencies": { - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-capitalized": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-capitalized/-/is-capitalized-1.0.0.tgz", + "integrity": "sha1-TIRktNkdPk7rRIid0s2PGwrEwTY=", + "dev": true + }, + "is-class": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/is-class/-/is-class-0.0.4.tgz", + "integrity": "sha1-4FdFFwW7NOOePjNZjJOpg3KWtzY=", + "dev": true + }, + "is-core-module": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.5.0.tgz", + "integrity": "sha512-TXCMSDsEHMEEZ6eCA8rwRDbLu55MRGmrctljsBX/2v1d9/GzqHOxW5c5oPSgrUt2vBFXebu9rGqckXGPWOlYpg==", "dev": true, "requires": { - "object-keys": "^1.0.12" + "has": "^1.0.3" } }, - "es-abstract": { - "version": "1.18.0-next.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", - "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", + "is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-negative-zero": "^2.0.0", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - }, - "dependencies": { - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - } + "number-is-nan": "^1.0.0" } }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "is-function": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", + "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==", + "dev": true + }, + "is-number-like": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/is-number-like/-/is-number-like-1.0.8.tgz", + "integrity": "sha512-6rZi3ezCyFcn5L71ywzz2bS5b2Igl1En3eTlZlvKjpz1n3IZLAYMbKYAIQgFmEu0GENg92ziU/faEOA/aixjbA==", "dev": true, "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "lodash.isfinite": "^3.3.2" } }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", "dev": true }, - "is-callable": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", - "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", "dev": true }, - "is-regex": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", - "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "dev": true, "requires": { - "has-symbols": "^1.0.1" + "is-docker": "^2.0.0" } }, - "is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "jimp": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/jimp/-/jimp-0.16.1.tgz", + "integrity": "sha512-+EKVxbR36Td7Hfd23wKGIeEyHbxShZDX6L8uJkgVW3ESA9GiTEPK08tG1XI2r/0w5Ch0HyJF5kPqF9K7EmGjaw==", "dev": true, "requires": { - "has-symbols": "^1.0.1" + "@babel/runtime": "^7.7.2", + "@jimp/custom": "^0.16.1", + "@jimp/plugins": "^0.16.1", + "@jimp/types": "^0.16.1", + "regenerator-runtime": "^0.13.3" } }, - "object-inspect": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", - "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==", + "jpeg-js": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.2.tgz", + "integrity": "sha512-+az2gi/hvex7eLTMTlbRLOhH6P6WFdk2ITI8HJsaH2VqYO0I594zXSYEP+tf4FW+8Cy68ScDXoAsQdyQanv3sw==", "dev": true }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "js2xmlparser2": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/js2xmlparser2/-/js2xmlparser2-0.2.0.tgz", + "integrity": "sha1-p8ogibg9AjMdYxiS3WdDhkElAz8=", + "dev": true + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true + }, + "jsftp": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/jsftp/-/jsftp-2.1.3.tgz", + "integrity": "sha512-r79EVB8jaNAZbq8hvanL8e8JGu2ZNr2bXdHC4ZdQhRImpSPpnWwm5DYVzQ5QxJmtGtKhNNuvqGgbNaFl604fEQ==", "dev": true, "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" + "debug": "^3.1.0", + "ftp-response-parser": "^1.0.1", + "once": "^1.4.0", + "parse-listing": "^1.1.3", + "stream-combiner": "^0.2.2", + "unorm": "^1.4.1" }, "dependencies": { - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } } } }, - "string.prototype.trimend": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz", - "integrity": "sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" - } + "json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true }, - "string.prototype.trimstart": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz", - "integrity": "sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg==", + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" } - } - } - }, - "array.prototype.map": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array.prototype.map/-/array.prototype.map-1.0.3.tgz", - "integrity": "sha512-nNcb30v0wfDyIe26Yif3PcV1JXQp4zEeEfupG7L4SRjnD6HLbO5b2a7eVSba53bOx4YCHYMBHt+Fp4vYstneRA==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "es-array-method-boxes-properly": "^1.0.0", - "is-string": "^1.0.5" - }, - "dependencies": { - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", "dev": true, "requires": { - "object-keys": "^1.0.12" + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" } }, - "es-abstract": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", - "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", + "jszip": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.6.0.tgz", + "integrity": "sha512-jgnQoG9LKnWO3mnVNBnfhkh0QknICd1FGSrXcgrl67zioyJ4wgx25o9ZqwNtrROSflGBCGYnJfjrIyRIby1OoQ==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.3", - "is-string": "^1.0.6", - "object-inspect": "^1.10.3", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "set-immediate-shim": "~1.0.1" }, "dependencies": { - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } - }, - "is-string": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", - "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", - "dev": true - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true } } }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "keypather": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/keypather/-/keypather-1.10.2.tgz", + "integrity": "sha1-4ESWMtSz5RbyHMAUznxWRP3c5hQ=", "dev": true, "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "101": "^1.0.0" } }, - "get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "keyv": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.3.tgz", + "integrity": "sha512-zdGa2TOpSZPq5mU6iowDARnMBZgtCqJ11dJROFi6tg6kTn4nuUdU09lFyLFSaHrWqpIJ+EBq4E8/Dc0Vx5vLdA==", "dev": true, "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" + "json-buffer": "3.0.1" } }, - "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true + "klaw": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz", + "integrity": "sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.9" + } }, - "is-callable": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", + "kuler": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", + "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==", "dev": true }, - "is-regex": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", - "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", + "lazystream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", + "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", "dev": true, "requires": { - "call-bind": "^1.0.2", - "has-symbols": "^1.0.2" + "readable-stream": "^2.0.5" }, "dependencies": { - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } } } }, - "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "lcid": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", + "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", "dev": true, "requires": { - "has-symbols": "^1.0.2" + "invert-kv": "^2.0.0" } }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", "dev": true, "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - }, - "dependencies": { - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - } + "immediate": "~3.0.5" } }, - "string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "lighthouse-logger": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.3.0.tgz", + "integrity": "sha512-BbqAKApLb9ywUli+0a+PcV04SyJ/N1q/8qgCNe6U97KbPCS1BTksEuHFLYdvc8DltuhfxIUBqDZsC0bBGtl3lA==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "debug": "^2.6.9", + "marky": "^1.2.2" }, "dependencies": { - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "ms": "2.0.0" } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true } } }, - "string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "load-bmfont": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/load-bmfont/-/load-bmfont-1.4.1.tgz", + "integrity": "sha512-8UyQoYmdRDy81Brz6aLAUhfZLwr5zV0L3taTQ4hju7m6biuwiWiJXjPhBJxbUQJA8PrkvJ/7Enqmwk2sM14soA==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "dependencies": { - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - } + "buffer-equal": "0.0.1", + "mime": "^1.3.4", + "parse-bmfont-ascii": "^1.0.3", + "parse-bmfont-binary": "^1.0.5", + "parse-bmfont-xml": "^1.1.4", + "phin": "^2.9.1", + "xhr": "^2.0.1", + "xtend": "^4.0.0" } - } - } - }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true - }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" - }, - "asn1": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", - "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", - "dev": true - }, - "asn1.js": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", - "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "assert": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", - "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", - "dev": true, - "requires": { - "object-assign": "^4.1.1", - "util": "0.10.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", - "dev": true }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "requires": { - "inherits": "2.0.1" + "p-locate": "^4.1.0" } - } - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" - }, - "ast-types": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.14.2.tgz", - "integrity": "sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==", - "requires": { - "tslib": "^2.0.1" - } - }, - "ast-types-flow": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=", - "dev": true - }, - "astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==" - }, - "async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", - "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", - "requires": { - "lodash": "^4.17.10" - } - }, - "async-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", - "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", - "dev": true, - "optional": true - }, - "async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true - }, - "atob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.1.tgz", - "integrity": "sha1-ri1acpR38onWDdf5amMUoi3Wwio=" - }, - "atob-lite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/atob-lite/-/atob-lite-2.0.0.tgz", - "integrity": "sha1-D+9a1G8b16hQLGVyfwNn1e5D1pY=", - "dev": true - }, - "autoprefixer": { - "version": "10.2.5", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.2.5.tgz", - "integrity": "sha512-7H4AJZXvSsn62SqZyJCP+1AWwOuoYpUfK6ot9vm0e87XD6mT8lDywc9D9OTJPMULyGcvmIxzTAMeG2Cc+YX+fA==", - "dev": true, - "requires": { - "browserslist": "^4.16.3", - "caniuse-lite": "^1.0.30001196", - "colorette": "^1.2.2", - "fraction.js": "^4.0.13", - "normalize-range": "^0.1.2", - "postcss-value-parser": "^4.1.0" - }, - "dependencies": { - "browserslist": { - "version": "4.16.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.3.tgz", - "integrity": "sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw==", + }, + "lockfile": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lockfile/-/lockfile-1.0.4.tgz", + "integrity": "sha512-cvbTwETRfsFh4nHsL1eGWapU1XFi5Ot9E85sWAwia7Y7EgB7vfqcZhTKZ+l7hCGxSPoushMv5GKhT5PdLv03WA==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001181", - "colorette": "^1.2.1", - "electron-to-chromium": "^1.3.649", - "escalade": "^3.1.1", - "node-releases": "^1.1.70" + "signal-exit": "^3.0.2" } }, - "colorette": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", - "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, - "electron-to-chromium": { - "version": "1.3.690", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.690.tgz", - "integrity": "sha512-zPbaSv1c8LUKqQ+scNxJKv01RYFkVVF1xli+b+3Ty8ONujHjAMg+t/COmdZqrtnS1gT+g4hbSodHillymt1Lww==", + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", "dev": true }, - "node-releases": { - "version": "1.1.71", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.71.tgz", - "integrity": "sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==", + "lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=", "dev": true }, - "postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", - "dev": true - } - } - }, - "autosize": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/autosize/-/autosize-4.0.2.tgz", - "integrity": "sha512-jnSyH2d+qdfPGpWlcuhGiHmqBJ6g3X+8T+iRwFrHPLVcdoGJE/x6Qicm6aDHfTsbgZKxyV8UU/YB2p4cjKDRRA==" - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true - }, - "aws4": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", - "dev": true - }, - "axe-core": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.1.1.tgz", - "integrity": "sha512-5Kgy8Cz6LPC9DJcNb3yjAXTu3XihQgEdnIg50c//zOC/MyLP0Clg+Y8Sh9ZjjnvBrDZU4DgXS9C3T9r4/scGZQ==", - "dev": true - }, - "axobject-query": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", - "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==", - "dev": true - }, - "babel-core": { - "version": "7.0.0-bridge.0", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", - "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==" - }, - "babel-eslint": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", - "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.0", - "@babel/traverse": "^7.7.0", - "@babel/types": "^7.7.0", - "eslint-visitor-keys": "^1.0.0", - "resolve": "^1.12.0" - }, - "dependencies": { - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "lodash.difference": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", + "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=", "dev": true }, - "resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "dev": true, - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - } - } - }, - "babel-jest": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-26.6.3.tgz", - "integrity": "sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA==", - "dev": true, - "requires": { - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/babel__core": "^7.1.7", - "babel-plugin-istanbul": "^6.0.0", - "babel-preset-jest": "^26.6.2", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "slash": "^3.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "@types/istanbul-reports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", - "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", - "dev": true, - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", "dev": true }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - } - } - }, - "babel-loader": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.2.tgz", - "integrity": "sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g==", - "dev": true, - "requires": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^1.4.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" - }, - "dependencies": { - "@types/json-schema": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz", - "integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==", + "lodash.isfinite": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz", + "integrity": "sha1-+4m2WpqAKBgz8LdHizpRBPiY67M=", "dev": true }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } + "lodash.isobject": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-3.0.2.tgz", + "integrity": "sha1-PI+41bW/S/kK4G4U8qUwpO2TXh0=", + "dev": true }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", "dev": true }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "lodash.union": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", + "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=", "dev": true }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "lodash.zip": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.zip/-/lodash.zip-4.2.0.tgz", + "integrity": "sha1-7GZi5IlkCO1KtsVCo5kLcswIACA=", "dev": true }, - "find-cache-dir": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", - "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", + "logform": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.2.0.tgz", + "integrity": "sha512-N0qPlqfypFx7UHNn4B3lzS/b0uLqt2hmuoa+PpuXNYgozdJYAyauF5Ky0BWVjrxDlMWiT3qN4zPq3vVAfZy7Yg==", "dev": true, "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" + "colors": "^1.2.1", + "fast-safe-stringify": "^2.0.4", + "fecha": "^4.2.0", + "ms": "^2.1.1", + "triple-beam": "^1.3.0" } }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } + "loglevel": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.1.tgz", + "integrity": "sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw==", + "dev": true }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "loglevel-plugin-prefix": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/loglevel-plugin-prefix/-/loglevel-plugin-prefix-0.8.4.tgz", + "integrity": "sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g==", + "dev": true + }, + "longjohn": { + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/longjohn/-/longjohn-0.2.12.tgz", + "integrity": "sha1-fKdEawg2VcN351EiE9x1TVKmSn4=", "dev": true, "requires": { - "minimist": "^1.2.0" + "source-map-support": "0.3.2 - 1.0.0" } }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" + "yallist": "^4.0.0" } }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "map-age-cleaner": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", + "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", "dev": true, "requires": { - "p-locate": "^4.1.0" + "p-defer": "^1.0.0" } }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "marky": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.2.tgz", + "integrity": "sha512-k1dB2HNeaNyORco8ulVEhctyEGkKHb2YWAhDsxeFlW2nROIirsctBYzKwwS3Vza+sKTS1zO4Z+n9/+9WbGLIxQ==", + "dev": true + }, + "md5": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", + "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", "dev": true, "requires": { - "semver": "^6.0.0" + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" } }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true + }, + "mem": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", + "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", "dev": true, "requires": { - "p-try": "^2.0.0" + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^2.0.0", + "p-is-promise": "^2.0.0" } }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "dev": true + }, + "method-override": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/method-override/-/method-override-3.0.0.tgz", + "integrity": "sha512-IJ2NNN/mSl9w3kzWB92rcdHpz+HjkxhDJWNDBqSlas+zQdP8wBiJzITPg08M/k2uVvMow7Sk41atndNtt/PHSA==", "dev": true, "requires": { - "p-limit": "^2.2.0" + "debug": "3.1.0", + "methods": "~1.1.2", + "parseurl": "~1.3.2", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } } }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", "dev": true }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "dev": true }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } + "mime-db": { + "version": "1.48.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz", + "integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==", + "dev": true }, - "schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "mime-types": { + "version": "2.1.31", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz", + "integrity": "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==", "dev": true, "requires": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" + "mime-db": "1.48.0" } }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "babel-plugin-add-react-displayname": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/babel-plugin-add-react-displayname/-/babel-plugin-add-react-displayname-0.0.5.tgz", - "integrity": "sha1-M51M3be2X9YtHfnbn+BN4TQSK9U=", - "dev": true - }, - "babel-plugin-apply-mdx-type-prop": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.22.tgz", - "integrity": "sha512-VefL+8o+F/DfK24lPZMtJctrCVOfgbqLAGZSkxwhazQv4VxPg3Za/i40fu22KR2m8eEda+IfSOlPLUSIiLcnCQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "7.10.4", - "@mdx-js/util": "1.6.22" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", - "dev": true - } - } - }, - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "requires": { - "object.assign": "^4.1.0" - } - }, - "babel-plugin-emotion": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/babel-plugin-emotion/-/babel-plugin-emotion-10.2.2.tgz", - "integrity": "sha512-SMSkGoqTbTyUTDeuVuPIWifPdUGkTk1Kf9BWRiXIOIcuyMfsdp2EjeiiFvOzX8NOBvEh/ypKYvUh2rkgAJMCLA==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@emotion/hash": "0.8.0", - "@emotion/memoize": "0.7.4", - "@emotion/serialize": "^0.11.16", - "babel-plugin-macros": "^2.0.0", - "babel-plugin-syntax-jsx": "^6.18.0", - "convert-source-map": "^1.5.0", - "escape-string-regexp": "^1.0.5", - "find-root": "^1.1.0", - "source-map": "^0.5.7" - }, - "dependencies": { - "@emotion/memoize": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz", - "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==", + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true - } - } - }, - "babel-plugin-extract-import-names": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.22.tgz", - "integrity": "sha512-yJ9BsJaISua7d8zNT7oRG1ZLBJCIdZ4PZqmH8qa9N5AK01ifk3fnkc98AXhtzE7UkfCsEumvoQWgoYLhOnJ7jQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "7.10.4" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", + }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", "dev": true - } - } - }, - "babel-plugin-inline-json-import": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/babel-plugin-inline-json-import/-/babel-plugin-inline-json-import-0.3.2.tgz", - "integrity": "sha512-QNNJx08KjmMT25Cw7rAPQ6dlREDPiZGDyApHL8KQ9vrQHbrr4PTi7W8g1tMMZPz0jEMd39nx/eH7xjnDNxq5sA==", - "dev": true, - "requires": { - "decache": "^4.5.1" - } - }, - "babel-plugin-istanbul": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz", - "integrity": "sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^4.0.0", - "test-exclude": "^6.0.0" - } - }, - "babel-plugin-jest-hoist": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz", - "integrity": "sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw==", - "dev": true, - "requires": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", - "@types/babel__traverse": "^7.0.6" - } - }, - "babel-plugin-macros": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz", - "integrity": "sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==", - "requires": { - "@babel/runtime": "^7.7.2", - "cosmiconfig": "^6.0.0", - "resolve": "^1.12.0" - }, - "dependencies": { - "cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + }, + "min-document": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", + "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", + "dev": true, "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.7.2" + "dom-walk": "^0.1.0" } }, - "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" + "brace-expansion": "^1.1.7" } }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true }, - "resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "dev": true + }, + "moment": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", + "dev": true + }, + "moment-timezone": { + "version": "0.5.33", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.33.tgz", + "integrity": "sha512-PTc2vcT8K9J5/9rDEPe5czSIKgLoGsH8UNpA4qZTVw0Vd/Uz19geE9abbIOQKaAQFcnQ3v5YEXrbSc5BpshH+w==", + "dev": true, "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" + "moment": ">= 2.9.0" } - } - } - }, - "babel-plugin-named-asset-import": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.7.tgz", - "integrity": "sha512-squySRkf+6JGnvjoUtDEjSREJEBirnXi9NqP6rjSYsylxQxqBTz+pkmf395i9E2zsvmYUaI40BHo6SqZUdydlw==", - "dev": true - }, - "babel-plugin-polyfill-corejs2": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.1.10.tgz", - "integrity": "sha512-DO95wD4g0A8KRaHKi0D51NdGXzvpqVLnLu5BTvDlpqUEpTmeEtypgC1xqesORaWmiUOQI14UHKlzNd9iZ2G3ZA==", - "requires": { - "@babel/compat-data": "^7.13.0", - "@babel/helper-define-polyfill-provider": "^0.1.5", - "semver": "^6.1.1" - }, - "dependencies": { - "@babel/compat-data": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.13.12.tgz", - "integrity": "sha512-3eJJ841uKxeV8dcN/2yGEUy+RfgQspPEgQat85umsE1rotuquQ2AbIub4S6j7c50a2d+4myc+zSlnXeIHrOnhQ==" }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "babel-plugin-polyfill-corejs3": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.1.7.tgz", - "integrity": "sha512-u+gbS9bbPhZWEeyy1oR/YaaSpod/KDT07arZHb80aTpl8H5ZBq+uN1nN9/xtX7jQyfLdPfoqI4Rue/MQSWJquw==", - "requires": { - "@babel/helper-define-polyfill-provider": "^0.1.5", - "core-js-compat": "^3.8.1" - } - }, - "babel-plugin-polyfill-regenerator": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.1.6.tgz", - "integrity": "sha512-OUrYG9iKPKz8NxswXbRAdSwF0GhRdIEMTloQATJi4bDuFqrXaXcCUT/VGNrr8pBcjMh1RxZ7Xt9cytVJTJfvMg==", - "requires": { - "@babel/helper-define-polyfill-provider": "^0.1.5" - } - }, - "babel-plugin-react-docgen": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/babel-plugin-react-docgen/-/babel-plugin-react-docgen-4.2.1.tgz", - "integrity": "sha512-UQ0NmGHj/HAqi5Bew8WvNfCk8wSsmdgNd8ZdMjBCICtyCJCq9LiqgqvjCYe570/Wg7AQArSq1VQ60Dd/CHN7mQ==", - "dev": true, - "requires": { - "ast-types": "^0.14.2", - "lodash": "^4.17.15", - "react-docgen": "^5.0.0" - } - }, - "babel-plugin-react-native-classname-to-style": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/babel-plugin-react-native-classname-to-style/-/babel-plugin-react-native-classname-to-style-1.2.2.tgz", - "integrity": "sha512-kavZRZ56YoYmrwuCRMY0UuCYfMPszoN7v0DLST1D+rTqkl+cFWVW3W8l//AfWsyMNHkY+UTX+RrB5K7GY9mq3w==", - "dev": true - }, - "babel-plugin-react-native-platform-specific-extensions": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-react-native-platform-specific-extensions/-/babel-plugin-react-native-platform-specific-extensions-1.1.1.tgz", - "integrity": "sha512-ZNN2ImlUlcaPMfzaCw9fWmTc/Ht5ARI0n9RUqiyCdK7LalPJ7yKc+F60BcSHvMHcmA2BgVO8TpSot+dpeZPAMQ==", - "dev": true, - "requires": { - "@babel/template": "^7.0.0-beta.49" - } - }, - "babel-plugin-syntax-jsx": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", - "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=", - "dev": true - }, - "babel-plugin-syntax-trailing-function-commas": { - "version": "7.0.0-beta.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-7.0.0-beta.0.tgz", - "integrity": "sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ==" - }, - "babel-plugin-transform-remove-console": { - "version": "6.9.4", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-console/-/babel-plugin-transform-remove-console-6.9.4.tgz", - "integrity": "sha1-uYA2DAZzhOJLNXpYjYB9PINSd4A=", - "dev": true - }, - "babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "dev": true, - "requires": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - } - }, - "babel-preset-fbjs": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/babel-preset-fbjs/-/babel-preset-fbjs-3.4.0.tgz", - "integrity": "sha512-9ywCsCvo1ojrw0b+XYk7aFvTH6D9064t0RIL1rtMf3nsa02Xw41MS7sZw216Im35xj/UY0PDBQsa1brUDDF1Ow==", - "requires": { - "@babel/plugin-proposal-class-properties": "^7.0.0", - "@babel/plugin-proposal-object-rest-spread": "^7.0.0", - "@babel/plugin-syntax-class-properties": "^7.0.0", - "@babel/plugin-syntax-flow": "^7.0.0", - "@babel/plugin-syntax-jsx": "^7.0.0", - "@babel/plugin-syntax-object-rest-spread": "^7.0.0", - "@babel/plugin-transform-arrow-functions": "^7.0.0", - "@babel/plugin-transform-block-scoped-functions": "^7.0.0", - "@babel/plugin-transform-block-scoping": "^7.0.0", - "@babel/plugin-transform-classes": "^7.0.0", - "@babel/plugin-transform-computed-properties": "^7.0.0", - "@babel/plugin-transform-destructuring": "^7.0.0", - "@babel/plugin-transform-flow-strip-types": "^7.0.0", - "@babel/plugin-transform-for-of": "^7.0.0", - "@babel/plugin-transform-function-name": "^7.0.0", - "@babel/plugin-transform-literals": "^7.0.0", - "@babel/plugin-transform-member-expression-literals": "^7.0.0", - "@babel/plugin-transform-modules-commonjs": "^7.0.0", - "@babel/plugin-transform-object-super": "^7.0.0", - "@babel/plugin-transform-parameters": "^7.0.0", - "@babel/plugin-transform-property-literals": "^7.0.0", - "@babel/plugin-transform-react-display-name": "^7.0.0", - "@babel/plugin-transform-react-jsx": "^7.0.0", - "@babel/plugin-transform-shorthand-properties": "^7.0.0", - "@babel/plugin-transform-spread": "^7.0.0", - "@babel/plugin-transform-template-literals": "^7.0.0", - "babel-plugin-syntax-trailing-function-commas": "^7.0.0-beta.0" - } - }, - "babel-preset-jest": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz", - "integrity": "sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ==", - "dev": true, - "requires": { - "babel-plugin-jest-hoist": "^26.6.2", - "babel-preset-current-node-syntax": "^1.0.0" - } - }, - "bail": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.3.tgz", - "integrity": "sha512-1X8CnjFVQ+a+KW36uBNMTU5s8+v5FzeqrP7hTG5aTb4aPreSbZJlhwPon9VKMuEVgV++JM+SQrALY3kr7eswdg==", - "dev": true - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "morgan": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", + "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", + "dev": true, "requires": { - "is-descriptor": "^1.0.0" + "basic-auth": "~2.0.1", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-finished": "~2.3.0", + "on-headers": "~1.0.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } } }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "mv": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", + "integrity": "sha1-rmzg1vbV4KT32JN5jQPB6pVZtqI=", + "dev": true, "requires": { - "kind-of": "^6.0.0" + "mkdirp": "~0.5.1", + "ncp": "~2.0.0", + "rimraf": "~2.4.0" + }, + "dependencies": { + "glob": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", + "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", + "dev": true, + "requires": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "rimraf": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", + "integrity": "sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto=", + "dev": true, + "requires": { + "glob": "^6.0.1" + } + } } }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "ncp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", + "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=", + "dev": true + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "dev": true + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", + "dev": true + }, + "node-idevice": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/node-idevice/-/node-idevice-0.1.6.tgz", + "integrity": "sha1-lBGqdotEv7fNJezlyKHItLbx+kQ=", + "dev": true + }, + "node-simctl": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/node-simctl/-/node-simctl-6.4.1.tgz", + "integrity": "sha512-RkEvbv2SJYDJF5eBJ0rRGZRU/LOypLmUAPLI/s7KqJAk0rSbG45x2OF2eqbK9+pfzL7N9XPorIcqtS75cYIydw==", + "dev": true, "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "@babel/runtime": "^7.0.0", + "asyncbox": "^2.3.1", + "bluebird": "^3.5.1", + "lodash": "^4.2.1", + "npmlog": "^4.1.2", + "rimraf": "^3.0.0", + "semver": "^7.0.0", + "source-map-support": "^0.5.5", + "teen_process": "^1.5.1", + "uuid": "^8.0.0", + "which": "^2.0.0" } - } - } - }, - "base64-js": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", - "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==" - }, - "batch-processor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/batch-processor/-/batch-processor-1.0.0.tgz", - "integrity": "sha1-dclcMrdI4IUNEMKxaPa9vpiRrOg=", - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "optional": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "before-after-hook": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-1.4.0.tgz", - "integrity": "sha512-l5r9ir56nda3qu14nAXIlyq1MmUSs0meCIaFAh8HwkFwP1F8eToOuS3ah2VAHHcY04jaYD7FpJC5JTXHYRbkzg==", - "dev": true - }, - "benchmark": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/benchmark/-/benchmark-2.1.4.tgz", - "integrity": "sha1-CfPeMckWQl1JjMLuVloOvzwqVik=", - "dev": true, - "requires": { - "lodash": "^4.17.4", - "platform": "^1.3.3" - } - }, - "better-opn": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/better-opn/-/better-opn-2.1.1.tgz", - "integrity": "sha512-kIPXZS5qwyKiX/HcRvDYfmBQUa8XP17I0mYZZ0y4UhpYOSvtsLHDYqmomS+Mj20aDvD3knEiQ0ecQy2nhio3yA==", - "dev": true, - "requires": { - "open": "^7.0.3" - }, - "dependencies": { - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "dev": true, "requires": { - "is-docker": "^2.0.0" + "path-key": "^2.0.0" } }, - "open": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", - "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", "dev": true, "requires": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" } - } - } - }, - "big-integer": { - "version": "1.6.48", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.48.tgz", - "integrity": "sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w==" - }, - "big.js": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", - "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", - "dev": true - }, - "binary-extensions": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.0.tgz", - "integrity": "sha512-EgmjVLMn22z7eGGv3kcnHwSnJXmFHjISTY9E/S5lIcTD3Oxw05QTcBLNkJFzcb3cNueUdF/IN4U+d78V0zO8Hw==", - "dev": true, - "optional": true - }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, - "optional": true, - "requires": { - "file-uri-to-path": "1.0.0" - } - }, - "bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - }, - "dependencies": { - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", "dev": true }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "omggif": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/omggif/-/omggif-1.0.10.tgz", + "integrity": "sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==", + "dev": true + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", "dev": true, "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" + "ee-first": "1.1.1" } }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", "dev": true }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "one-time": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", + "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", "dev": true, "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "fn.name": "1.x.x" } - } - } - }, - "bluebird": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", - "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==", - "dev": true - }, - "bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", - "dev": true - }, - "body": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/body/-/body-5.1.0.tgz", - "integrity": "sha1-5LoM5BCkaTYyM2dgnstOZVMSUGk=", - "dev": true, - "requires": { - "continuable-cache": "^0.3.1", - "error": "^7.0.0", - "raw-body": "~1.1.0", - "safe-json-parse": "~1.0.1" - }, - "dependencies": { - "bytes": { + }, + "os-locale": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", + "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", + "dev": true, + "requires": { + "execa": "^1.0.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "p-cancelable": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", + "dev": true + }, + "p-defer": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-1.0.0.tgz", - "integrity": "sha1-NWnt6Lo0MV+rmcPpLLBMciDeH6g=", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", "dev": true }, - "raw-body": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-1.1.7.tgz", - "integrity": "sha1-HQJ8K/oRasxmI7yo8AAWVyqH1CU=", + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", + "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", + "dev": true + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "requires": { - "bytes": "1", - "string_decoder": "0.10" + "p-try": "^2.0.0" } }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - } - } - }, - "body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", - "dev": true, - "requires": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "requires": { - "ms": "2.0.0" + "p-limit": "^2.2.0" } }, - "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true + }, + "parse-bmfont-ascii": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz", + "integrity": "sha1-Eaw8P/WPfCAgqyJ2kHkQjU36AoU=", + "dev": true + }, + "parse-bmfont-binary": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz", + "integrity": "sha1-0Di0dtPp3Z2x4RoLDlOiJ5K2kAY=", + "dev": true + }, + "parse-bmfont-xml": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/parse-bmfont-xml/-/parse-bmfont-xml-1.1.4.tgz", + "integrity": "sha512-bjnliEOmGv3y1aMEfREMBJ9tfL3WR0i0CKPj61DnSLaoxWR3nLrsQrEbCId/8rF4NyRF0cCqisSVXyQYWM+mCQ==", "dev": true, "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" + "xml-parse-from-string": "^1.0.0", + "xml2js": "^0.4.5" } }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "parse-headers": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.3.tgz", + "integrity": "sha512-QhhZ+DCCit2Coi2vmAKbq5RGTRcQUOE2+REgv8vdyu7MnYx2eZztegqtTx99TZ86GTIwqiy3+4nQTWZ2tgmdCA==", + "dev": true + }, + "parse-listing": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/parse-listing/-/parse-listing-1.1.3.tgz", + "integrity": "sha1-qlRvV/3BKc+/mUXNS3V7FLBhgt0=", + "dev": true + }, + "parse-node-version": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", + "dev": true + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true + }, + "pem": { + "version": "1.14.4", + "resolved": "https://registry.npmjs.org/pem/-/pem-1.14.4.tgz", + "integrity": "sha512-v8lH3NpirgiEmbOqhx0vwQTxwi0ExsiWBGYh0jYNq7K6mQuO4gI6UEFlr6fLAdv9TPXRt6GqiwE37puQdIDS8g==", "dev": true, "requires": { - "safer-buffer": ">= 2.1.2 < 3" + "es6-promisify": "^6.0.0", + "md5": "^2.2.1", + "os-tmpdir": "^1.0.1", + "which": "^2.0.2" } }, - "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", "dev": true }, - "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", "dev": true }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "dev": true - } - } - }, - "body-scroll-lock": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/body-scroll-lock/-/body-scroll-lock-3.1.5.tgz", - "integrity": "sha512-Yi1Xaml0EvNA0OYWxXiYNqY24AfWkbA6w5vxE7GWxtKfzIbZM+Qw+aSmkgsbWzbHiy/RCSkUZBplVxTA+E4jJg==" - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" - }, - "boxen": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", - "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==", - "dev": true, - "requires": { - "ansi-align": "^3.0.0", - "camelcase": "^5.3.1", - "chalk": "^3.0.0", - "cli-boxes": "^2.2.0", - "string-width": "^4.1.0", - "term-size": "^2.1.0", - "type-fest": "^0.8.1", - "widest-line": "^3.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "phin": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/phin/-/phin-2.9.3.tgz", + "integrity": "sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA==", "dev": true }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "pixelmatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-4.0.2.tgz", + "integrity": "sha1-j0fc7FARtHe2fbA8JDvB8wheiFQ=", "dev": true, "requires": { - "color-convert": "^2.0.1" + "pngjs": "^3.0.0" + }, + "dependencies": { + "pngjs": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", + "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==", + "dev": true + } } }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "find-up": "^4.0.0" } }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "plist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.2.tgz", + "integrity": "sha512-MSrkwZBdQ6YapHy87/8hDU8MnIcyxBKjeF+McXnr5A9MtffPewTs7G3hlpodT5TacyfIyFTaJEhh3GGcmasTgQ==", "dev": true, "requires": { - "color-name": "~1.1.4" + "base64-js": "^1.5.1", + "xmlbuilder": "^9.0.7", + "xmldom": "^0.5.0" + }, + "dependencies": { + "xmlbuilder": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", + "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=", + "dev": true + } } }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "emoji-regex": { + "pluralize": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", "dev": true }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "pngjs": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-6.0.0.tgz", + "integrity": "sha512-TRzzuFRRmEoSW/p1KVAmiOgPco2Irlah+bGFCeNfJXxxYGwSw7YwAOAcd7X28K/m5bjBWKsC29KyoMfHbypayg==", "dev": true }, - "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "portfinder": { + "version": "1.0.28", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", + "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", "dev": true, "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.5" + }, + "dependencies": { + "async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + }, + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + } } }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "portscanner": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.2.0.tgz", + "integrity": "sha512-IFroCz/59Lqa2uBvzK3bKDbDDIEaAY8XJ1jFxcLWTqosrsc32//P4VuSB2vZXoHiHqOmx8B5L5hnKOxL/7FlPw==", "dev": true, "requires": { - "ansi-regex": "^5.0.0" + "async": "^2.6.0", + "is-number-like": "^1.0.3" + }, + "dependencies": { + "async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + } } }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "printj": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz", + "integrity": "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ==", + "dev": true + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, + "proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "dev": true, "requires": { - "has-flag": "^4.0.0" + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" } }, - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", "dev": true - } - } - }, - "bplist-creator": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.0.8.tgz", - "integrity": "sha512-Za9JKzD6fjLC16oX2wsXfc+qBEhJBJB1YPInoAQpMLhDuj5aVOv1baGeIQSq1Fr3OCqzvsoQcSBSwGId/Ja2PA==", - "requires": { - "stream-buffers": "~2.2.0" - } - }, - "bplist-parser": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", - "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", - "requires": { - "big-integer": "^1.6.44" - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + }, + "psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", + "dev": true + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, "requires": { - "is-extendable": "^0.1.0" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } - } - } - }, - "brcast": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brcast/-/brcast-2.0.2.tgz", - "integrity": "sha512-Tfn5JSE7hrUlFcOoaLzVvkbgIemIorMIyoMr3TgvszWW7jFt2C9PdeMLtysYD9RU0MmU17b69+XJG1eRY2OBRg==" - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", - "dev": true - }, - "browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dev": true, - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "dev": true, - "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "browserify-rsa": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", - "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "randombytes": "^2.0.1" - } - }, - "browserify-sign": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", - "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", - "dev": true, - "requires": { - "bn.js": "^4.1.1", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.2", - "elliptic": "^6.0.0", - "inherits": "^2.0.1", - "parse-asn1": "^5.0.0" - } - }, - "browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "dev": true, - "requires": { - "pako": "~1.0.5" - } - }, - "browserslist": { - "version": "4.16.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", - "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", - "requires": { - "caniuse-lite": "^1.0.30001219", - "colorette": "^1.2.2", - "electron-to-chromium": "^1.3.723", - "escalade": "^3.1.1", - "node-releases": "^1.1.71" - }, - "dependencies": { - "colorette": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", - "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==" }, - "electron-to-chromium": { - "version": "1.3.730", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.730.tgz", - "integrity": "sha512-1Tr3h09wXhmqXnvDyrRe6MFgTeU0ZXy3+rMJWTrOHh/HNesWwBBrKnMxRJWZ86dzs8qQdw2c7ZE1/qeGHygImA==" - } - } - }, - "bser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.0.0.tgz", - "integrity": "sha1-mseNPtXZFYBP2HrLFYvHlxR6Fxk=", - "requires": { - "node-int64": "^0.4.0" - } - }, - "btoa-lite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/btoa-lite/-/btoa-lite-1.0.0.tgz", - "integrity": "sha1-M3dm2hWAEhD92VbCLpxokaudAzc=", - "dev": true - }, - "buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "dev": true, - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", - "dev": true - }, - "buffer-from": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.0.tgz", - "integrity": "sha512-c5mRlguI/Pe2dSZmpER62rSCu0ryKmWddzRYsuXc50U2/g8jMOulc31VZMa4mYx31U5xsmSOpDCgH88Vl9cDGQ==" - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", - "dev": true - }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true - }, - "builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", - "dev": true - }, - "builtins": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", - "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", - "dev": true - }, - "byline": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz", - "integrity": "sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE=", - "dev": true - }, - "byte-size": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/byte-size/-/byte-size-5.0.1.tgz", - "integrity": "sha512-/XuKeqWocKsYa/cBY1YbSJSWWqTi4cFgr9S6OyM7PBaPbr9zvNGwWP33vt0uqGhwDdN+y3yhbXVILEUpnwEWGw==", - "dev": true - }, - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", - "dev": true - }, - "c8": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/c8/-/c8-7.7.3.tgz", - "integrity": "sha512-ZyA7n3w8i4ETV25tVYMHwJxCSnaOf/LfA8vOcuZOPbonuQfD7tBT/gMWZy7eczRpCDuHcvMXwoqAemg6R0p3+A==", - "dev": true, - "requires": { - "@bcoe/v8-coverage": "^0.2.3", - "@istanbuljs/schema": "^0.1.2", - "find-up": "^5.0.0", - "foreground-child": "^2.0.0", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-reports": "^3.0.2", - "rimraf": "^3.0.0", - "test-exclude": "^6.0.0", - "v8-to-istanbul": "^8.0.0", - "yargs": "^16.2.0", - "yargs-parser": "^20.2.7" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "puppeteer-core": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-5.5.0.tgz", + "integrity": "sha512-tlA+1n+ziW/Db03hVV+bAecDKse8ihFRXYiEypBe9IlLRvOCzYFG6qrCMBYK34HO/Q/Ecjc+tvkHRAfLVH+NgQ==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "devtools-protocol": "0.0.818844", + "extract-zip": "^2.0.0", + "https-proxy-agent": "^4.0.0", + "node-fetch": "^2.6.1", + "pkg-dir": "^4.2.0", + "progress": "^2.0.1", + "proxy-from-env": "^1.0.0", + "rimraf": "^3.0.2", + "tar-fs": "^2.0.0", + "unbzip2-stream": "^1.3.3", + "ws": "^7.2.3" + } + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", "dev": true }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true + }, + "raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", "dev": true, "requires": { - "color-convert": "^2.0.1" + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" } }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" } }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "readdir-glob": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.1.tgz", + "integrity": "sha512-91/k1EzZwDx6HbERR+zucygRFfiPl2zkIYZtv3Jjr6Mn7SkKcVct8aVO+sSRiGMc6fLf72du3d92/uY63YPdEA==", "dev": true, "requires": { - "color-name": "~1.1.4" + "minimatch": "^3.0.4" } }, - "color-name": { + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "dev": true, + "requires": { + "resolve": "^1.1.6" + } + }, + "regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", + "dev": true + }, + "request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true + } + } + }, + "request-promise": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/request-promise/-/request-promise-4.2.6.tgz", + "integrity": "sha512-HCHI3DJJUakkOr8fNoCc73E5nU5bqITjOYFMDrKHYOXWXrgD/SBaC7LjwuPymUprRyuF06UK7hd/lMHkmUXglQ==", + "dev": true, + "requires": { + "bluebird": "^3.5.0", + "request-promise-core": "1.1.4", + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" + } + }, + "request-promise-core": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", + "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", + "dev": true, + "requires": { + "lodash": "^4.17.19" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true }, - "convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", "dev": true, "requires": { - "safe-buffer": "~5.1.1" + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" } }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", "dev": true }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "responselike": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz", + "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==", "dev": true, "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" + "lowercase-keys": "^2.0.0" } }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "resq": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/resq/-/resq-1.10.1.tgz", + "integrity": "sha512-zhp1iyUH02MLciv3bIM2bNtTFx/fqRsK4Jk73jcPqp00d/sMTTjOtjdTMAcgjrQKGx5DvQ/HSpeqaMW0atGRJA==", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1" + } + }, + "rgb2hex": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/rgb2hex/-/rgb2hex-0.2.3.tgz", + "integrity": "sha512-clEe0m1xv+Tva1B/TOepuIcvLAxP0U+sCDfgt1SX1HmI2Ahr5/Cd/nzJM1e78NKVtWdoo0s33YehpFA8UfIShQ==", "dev": true }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "requires": { - "p-locate": "^5.0.0" + "glob": "^7.1.3" } }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "rpc-websockets": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/rpc-websockets/-/rpc-websockets-5.3.1.tgz", + "integrity": "sha512-rIxEl1BbXRlIA9ON7EmY/2GUM7RLMy8zrUPTiLPFiYnYOz0I3PXfCmDDrge5vt4pW4oIcAXBDvgZuJ1jlY5+VA==", "dev": true, "requires": { - "yocto-queue": "^0.1.0" + "@babel/runtime": "^7.8.7", + "assert-args": "^1.2.1", + "babel-runtime": "^6.26.0", + "circular-json": "^0.5.9", + "eventemitter3": "^3.1.2", + "uuid": "^3.4.0", + "ws": "^5.2.2" + }, + "dependencies": { + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true + }, + "ws": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.3.tgz", + "integrity": "sha512-jZArVERrMsKUatIdnLzqvcfydI85dvd/Fp1u/VOpfdDWQ4c9qWXe+VIeAbQ5FrDwciAkr+lzofXLz3Kuf26AOA==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0" + } + } } }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "safari-launcher": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/safari-launcher/-/safari-launcher-2.0.5.tgz", + "integrity": "sha1-pO/6nqUS0dVB5HuAOdhScBXyre0=", + "dev": true + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "sanitize-filename": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", + "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", "dev": true, "requires": { - "p-limit": "^3.0.2" + "truncate-utf8-bytes": "^1.0.0" } }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", "dev": true }, - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "selenium-webdriver": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-3.6.0.tgz", + "integrity": "sha512-WH7Aldse+2P5bbFBO4Gle/nuQOdVwpHMTL6raL3uuBj/vPG07k6uzt3aiahu352ONBr5xXh0hDlM3LhtXPOC4Q==", + "dev": true, + "requires": { + "jszip": "^3.1.3", + "rimraf": "^2.5.4", + "tmp": "0.0.30", + "xml2js": "^0.4.17" + }, + "dependencies": { + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + } + } + }, + "serialize-error": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-8.1.0.tgz", + "integrity": "sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "serve-favicon": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/serve-favicon/-/serve-favicon-2.5.0.tgz", + "integrity": "sha1-k10kDN/g9YBTB/3+ln2IlCosvPA=", + "dev": true, + "requires": { + "etag": "~1.8.1", + "fresh": "0.5.2", + "ms": "2.1.1", + "parseurl": "~1.3.2", + "safe-buffer": "5.1.1" + }, + "dependencies": { + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", + "dev": true + } + } + }, + "serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "dev": true }, - "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "set-immediate-shim": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", + "dev": true + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "dev": true + }, + "shared-preferences-builder": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/shared-preferences-builder/-/shared-preferences-builder-0.0.4.tgz", + "integrity": "sha512-6yy1O1zVAY8HWVjsaJzFzkmvmktlSvqnjsYZpWJ0dUrFS5Rfn1a8P7h+7zyl9MTqUfSXeaE7De6Yymx3OszxlQ==", "dev": true, "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" + "lodash": "^4.17.4", + "xmlbuilder": "^9.0.1" + }, + "dependencies": { + "xmlbuilder": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", + "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=", + "dev": true + } } }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "dev": true, "requires": { - "ansi-regex": "^5.0.0" + "shebang-regex": "^1.0.0" } }, - "v8-to-istanbul": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.0.0.tgz", - "integrity": "sha512-LkmXi8UUNxnCC+JlH7/fsfsKr5AU110l+SYGJimWNkWhxbN5EyeOtm1MJ0hhvqMMOhGwBj1Fp70Yv9i+hX0QAg==", + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "shell-quote": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", + "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==", + "dev": true + }, + "shelljs": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz", + "integrity": "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==", "dev": true, "requires": { - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" } }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "shimmer": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz", + "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==", + "dev": true + }, + "signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "dev": true + }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", "dev": true, "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "is-arrayish": "^0.3.1" } }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", "dev": true, "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" } }, - "yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=", "dev": true - } - } - }, - "cacache": { - "version": "15.2.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.2.0.tgz", - "integrity": "sha512-uKoJSHmnrqXgthDFx/IU6ED/5xd+NNGe+Bb+kLZy7Ku4P+BaiWEUflAKPZ7eAzsYGcsAGASJZsybXp+quEcHTw==", - "dev": true, - "requires": { - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" - }, - "dependencies": { - "chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", "dev": true }, - "fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", + "dev": true + }, + "stream-buffers": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz", + "integrity": "sha1-kdX1Ew0c75bc+n9yaUUYh0HQnuQ=", + "dev": true + }, + "stream-combiner": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.2.2.tgz", + "integrity": "sha1-rsjLrBd7Vrb0+kec7YwZEs7lKFg=", "dev": true, "requires": { - "minipass": "^3.0.0" + "duplexer": "~0.1.1", + "through": "~2.3.4" } }, - "glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { - "yallist": "^4.0.0" + "safe-buffer": "~5.1.0" } }, - "minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "yallist": "^4.0.0" + "ansi-regex": "^2.0.0" } }, - "minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" + "has-flag": "^4.0.0" } }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, - "p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", "dev": true, "requires": { - "aggregate-error": "^3.0.0" + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" } }, - "tar": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.0.tgz", - "integrity": "sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA==", + "tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", "dev": true, "requires": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" } }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - } - }, - "cacheable-lookup": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-2.0.1.tgz", - "integrity": "sha512-EMMbsiOTcdngM/K6gV/OxF2x0t07+vMOWxZNSCRQMjO2MY2nhZQ6OYhOOpyQrbhqsgtvKGI7hcq6xjnA92USjg==", - "dev": true, - "requires": { - "@types/keyv": "^3.1.1", - "keyv": "^4.0.0" - } - }, - "cacheable-request": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.1.tgz", - "integrity": "sha512-lt0mJ6YAnsrBErpTMWeu5kl/tg9xMAWjavYTN6VQXM1A/teBITuNcccXsCxF0tDQQJf9DfAaX5O4e0zp0KlfZw==", - "dev": true, - "requires": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^4.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^2.0.0" - }, - "dependencies": { - "get-stream": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz", - "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==", + "teen_process": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/teen_process/-/teen_process-1.16.0.tgz", + "integrity": "sha512-RnW7HHZD1XuhSTzD3djYOdIl1adE3oNEprE3HOFFxWs5m4FZsqYRhKJ4mDU2udtNGMLUS7jV7l8vVRLWAvmPDw==", "dev": true, "requires": { - "pump": "^3.0.0" + "@babel/runtime": "^7.0.0", + "bluebird": "^3.5.1", + "lodash": "^4.17.4", + "shell-quote": "^1.4.3", + "source-map-support": "^0.5.3", + "which": "^2.0.2" } }, - "http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "text-hex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", + "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==", "dev": true }, - "normalize-url": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", - "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==", + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", "dev": true }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - } - } - }, - "call-bind": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.0.tgz", - "integrity": "sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w==", - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.0" - } - }, - "call-me-maybe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", - "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", - "dev": true - }, - "caller-callsite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", - "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", - "requires": { - "callsites": "^2.0.0" - }, - "dependencies": { - "callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=" - } - } - }, - "caller-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", - "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", - "requires": { - "caller-callsite": "^2.0.0" - } - }, - "callsite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", - "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", - "dev": true - }, - "callsites": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.0.0.tgz", - "integrity": "sha512-tWnkwu9YEq2uzlBDI4RcLn8jrFvF9AOi8PxDNU3hZZjJcjkcRAq3vCI+vZcg1SuxISDYe86k9VZFwAxDiJGoAw==" - }, - "camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "dev": true, - "requires": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true - }, - "camelcase-css": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", - "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", - "dev": true - }, - "camelcase-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", - "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", - "dev": true, - "requires": { - "camelcase": "^2.0.0", - "map-obj": "^1.0.0" - }, - "dependencies": { - "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "time-stamp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", + "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=", "dev": true - } - } - }, - "camelize": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz", - "integrity": "sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs=" - }, - "caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "dev": true, - "requires": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, - "caniuse-lite": { - "version": "1.0.30001237", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001237.tgz", - "integrity": "sha512-pDHgRndit6p1NR2GhzMbQ6CkRrp4VKuSsqbcLeOQppYPKOYkKT/6ZvZDvKJUqcmtyWIAHuZq3SVS2vc1egCZzw==" - }, - "capture-exit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", - "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", - "requires": { - "rsvp": "^4.8.4" - } - }, - "case-sensitive-paths-webpack-plugin": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz", - "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==", - "dev": true - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "ccount": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.0.3.tgz", - "integrity": "sha512-Jt9tIBkRc9POUof7QA/VwWd+58fKkEEfI+/t1/eOlxKM7ZhrczNzMFefge7Ai+39y1pR/pP6cI19guHy3FSLmw==", - "dev": true - }, - "chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "timm": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/timm/-/timm-1.7.1.tgz", + "integrity": "sha512-IjZc9KIotudix8bMaBW6QvMuq64BrJWFs1+4V0lXwWGQZwH+LnX87doAYhem4caOEusRP9/g6jVDQmZ8XOk1nw==", + "dev": true }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "tinycolor2": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.2.tgz", + "integrity": "sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA==", + "dev": true }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "tmp": { + "version": "0.0.30", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.30.tgz", + "integrity": "sha1-ckGdSovn1s51FI/YsyTlk6cRwu0=", + "dev": true, "requires": { - "has-flag": "^4.0.0" + "os-tmpdir": "~1.0.1" } - } - } - }, - "char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true - }, - "character-entities": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.2.tgz", - "integrity": "sha512-sMoHX6/nBiy3KKfC78dnEalnpn0Az0oSNvqUWYTtYrhRI5iUIYsROU48G+E+kMFQzqXaJ8kHJZ85n7y6/PHgwQ==", - "dev": true - }, - "character-entities-html4": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.2.tgz", - "integrity": "sha512-sIrXwyna2+5b0eB9W149izTPJk/KkJTg6mEzDGibwBUkyH1SbDa+nf515Ppdi3MaH35lW0JFJDWeq9Luzes1Iw==", - "dev": true - }, - "character-entities-legacy": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.2.tgz", - "integrity": "sha512-9NB2VbXtXYWdXzqrvAHykE/f0QJxzaKIpZ5QzNZrrgQ7Iyxr2vnfS8fCBNVW9nUEZE0lo57nxKRqnzY/dKrwlA==", - "dev": true - }, - "character-reference-invalid": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.2.tgz", - "integrity": "sha512-7I/xceXfKyUJmSAn/jw8ve/9DyOP7XxufNYLI9Px7CmsKgEUaZLUTax6nZxGQtaoiZCjpu6cHPj20xC/vqRReQ==", - "dev": true - }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, - "check-node-version": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/check-node-version/-/check-node-version-4.1.0.tgz", - "integrity": "sha512-TSXGsyfW5/xY2QseuJn8/hleO2AU7HxVCdkc900jp1vcfzF840GkjvRT7CHl8sRtWn23n3X3k0cwH9RXeRwhfw==", - "dev": true, - "requires": { - "chalk": "^3.0.0", - "map-values": "^1.0.1", - "minimist": "^1.2.0", - "object-filter": "^1.0.2", - "run-parallel": "^1.1.4", - "semver": "^6.3.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "dev": true + }, + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", "dev": true, "requires": { - "color-convert": "^2.0.1" + "psl": "^1.1.28", + "punycode": "^2.1.1" } }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "triple-beam": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", + "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==", + "dev": true + }, + "truncate-utf8-bytes": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", + "integrity": "sha1-QFkjkJWS1W94pYGENLC3hInKXys=", "dev": true, "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "utf8-byte-length": "^1.0.1" } }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", "dev": true, "requires": { - "color-name": "~1.1.4" + "safe-buffer": "^5.0.1" } }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", "dev": true }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "type-detect": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-0.1.1.tgz", + "integrity": "sha1-C6XsKohWQORw6k6FBZcZANrFiCI=", "dev": true }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "cheerio": { - "version": "1.0.0-rc.3", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.3.tgz", - "integrity": "sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA==", - "dev": true, - "requires": { - "css-select": "~1.2.0", - "dom-serializer": "~0.1.1", - "entities": "~1.1.1", - "htmlparser2": "^3.9.1", - "lodash": "^4.15.0", - "parse5": "^3.0.1" - }, - "dependencies": { - "dom-serializer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", - "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "dev": true, "requires": { - "domelementtype": "^1.3.0", - "entities": "^1.1.1" + "media-typer": "0.3.0", + "mime-types": "~2.1.24" } - } - } - }, - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "dev": true, - "optional": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - }, - "dependencies": { - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + }, + "ua-parser-js": { + "version": "0.7.28", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.28.tgz", + "integrity": "sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g==", + "dev": true + }, + "unbzip2-stream": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", + "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", "dev": true, - "optional": true, "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1" + "buffer": "^5.2.1", + "through": "^2.3.8" } }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "optional": true - } - } - }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "chrome-trace-event": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", - "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true - } - } - }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "cjs-module-lexer": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz", - "integrity": "sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw==", - "dev": true - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "classnames": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.1.tgz", - "integrity": "sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA==" - }, - "clean-css": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", - "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", - "dev": true, - "requires": { - "source-map": "~0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + }, + "unorm": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/unorm/-/unorm-1.6.0.tgz", + "integrity": "sha512-b2/KCUlYZUeA7JFUuRJZPUtr4gZvBh7tavtv4fvk4+KV9pfGiR6CQAQAWl49ZpR3ts2dk4FYkP7EIgDJoiOLDA==", "dev": true - } - } - }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true - }, - "clean-webpack-plugin": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/clean-webpack-plugin/-/clean-webpack-plugin-3.0.0.tgz", - "integrity": "sha512-MciirUH5r+cYLGCOL5JX/ZLzOZbVr1ot3Fw+KcvbhUb6PM+yycqd9ZhIlcigQ5gl+XhppNmw3bEFuaaMNyLj3A==", - "dev": true, - "requires": { - "@types/webpack": "^4.4.31", - "del": "^4.1.1" - }, - "dependencies": { - "del": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", - "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, "requires": { - "@types/glob": "^7.1.1", - "globby": "^6.1.0", - "is-path-cwd": "^2.0.0", - "is-path-in-cwd": "^2.0.0", - "p-map": "^2.0.0", - "pify": "^4.0.1", - "rimraf": "^2.6.3" + "punycode": "^2.1.0" } }, - "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "utf7": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/utf7/-/utf7-1.0.2.tgz", + "integrity": "sha1-lV9JCq5lO6IguUVqCod2wZk2CZE=", "dev": true, "requires": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" + "semver": "~5.3.0" }, "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "semver": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", "dev": true } } }, - "p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", - "dev": true - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "utf8-byte-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", + "integrity": "sha1-9F8VDExm7uloGGUFq5P8u4rWv2E=", "dev": true }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "utif": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/utif/-/utif-2.0.1.tgz", + "integrity": "sha512-Z/S1fNKCicQTf375lIP9G8Sa1H/phcysstNrrSdZKj1f9g58J4NMgb5IgiEZN9/nLMPDwF0W7hdOe9Qq2IYoLg==", "dev": true, "requires": { - "glob": "^7.1.3" - }, - "dependencies": { - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } + "pako": "^1.0.5" } - } - } - }, - "cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", - "dev": true - }, - "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "requires": { - "restore-cursor": "^2.0.0" - } - }, - "cli-spinners": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.2.0.tgz", - "integrity": "sha512-tgU3fKwzYjiLEQgPMD9Jt+JjHVL9kW93FiIMX/l7rivvOD4/LL0Mf7gda3+4U2KJBloybwgj5KEoQgGRioMiKQ==" - }, - "cli-table3": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.0.tgz", - "integrity": "sha512-gnB85c3MGC7Nm9I/FkiasNBOKjOiO1RNuXXarQms37q4QMpWdlbBgD/VnOStA2faG1dpXMv31RFApjX1/QdgWQ==", - "dev": true, - "requires": { - "colors": "^1.1.2", - "object-assign": "^4.1.0", - "string-width": "^4.2.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, - "colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true, - "optional": true + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "uuid-js": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/uuid-js/-/uuid-js-0.7.5.tgz", + "integrity": "sha1-bIhtAqU9LUDc8l2RoXC0p7JblNA=", "dev": true }, - "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } + "validate.js": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/validate.js/-/validate.js-0.13.1.tgz", + "integrity": "sha512-PnFM3xiZ+kYmLyTiMgTYmU7ZHkjBZz2/+F0DaALc/uUtVzdCt1wAosvYJ5hFQi/hz8O4zb52FQhHZRC+uVkJ+g==", + "dev": true }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", "dev": true, "requires": { - "ansi-regex": "^5.0.0" + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" } - } - } - }, - "cli-truncate": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-0.2.1.tgz", - "integrity": "sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ=", - "dev": true, - "requires": { - "slice-ansi": "0.0.4", - "string-width": "^1.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "webdriver": { + "version": "6.12.1", + "resolved": "https://registry.npmjs.org/webdriver/-/webdriver-6.12.1.tgz", + "integrity": "sha512-3rZgAj9o2XHp16FDTzvUYaHelPMSPbO1TpLIMUT06DfdZjNYIzZiItpIb/NbQDTPmNhzd9cuGmdI56WFBGY2BA==", "dev": true, "requires": { - "number-is-nan": "^1.0.0" + "@wdio/config": "6.12.1", + "@wdio/logger": "6.10.10", + "@wdio/protocols": "6.12.0", + "@wdio/utils": "6.11.0", + "got": "^11.0.2", + "lodash.merge": "^4.6.1" } }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "webdriverio": { + "version": "6.12.1", + "resolved": "https://registry.npmjs.org/webdriverio/-/webdriverio-6.12.1.tgz", + "integrity": "sha512-Nx7ge0vTWHVIRUbZCT+IuMwB5Q0Q5nLlYdgnmmJviUKLuc3XtaEBkYPTbhHWHgSBXsPZMIc023vZKNkn+6iyeQ==", "dev": true, "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "@types/puppeteer-core": "^5.4.0", + "@wdio/config": "6.12.1", + "@wdio/logger": "6.10.10", + "@wdio/repl": "6.11.0", + "@wdio/utils": "6.11.0", + "archiver": "^5.0.0", + "atob": "^2.1.2", + "css-shorthand-properties": "^1.1.1", + "css-value": "^0.0.1", + "devtools": "6.12.1", + "fs-extra": "^9.0.1", + "get-port": "^5.1.1", + "grapheme-splitter": "^1.0.2", + "lodash.clonedeep": "^4.5.0", + "lodash.isobject": "^3.0.2", + "lodash.isplainobject": "^4.0.6", + "lodash.zip": "^4.2.0", + "minimatch": "^3.0.4", + "puppeteer-core": "^5.1.0", + "resq": "^1.9.1", + "rgb2hex": "0.2.3", + "serialize-error": "^8.0.0", + "webdriver": "6.12.1" } }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "isexe": "^2.0.0" } - } - } - }, - "cli-width": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", - "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", - "dev": true - }, - "clipboard": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.1.tgz", - "integrity": "sha512-7yhQBmtN+uYZmfRjjVjKa0dZdWuabzpSKGtyQZN+9C8xlC788SSJjOHWh7tzurfwTqTD5UDYAhIv5fRJg3sHjQ==", - "requires": { - "good-listener": "^1.2.2", - "select": "^1.1.2", - "tiny-emitter": "^2.0.0" - } - }, - "cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "requires": { + "string-width": "^1.0.2 || 2" + } }, - "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "winston": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.3.3.tgz", + "integrity": "sha512-oEXTISQnC8VlSAKf1KYSSd7J6IWuRPQqDdo8eoRNaYKLvwSb5+79Z3Yi1lrl6KDpU6/VWaxpakDAtb1oQ4n9aw==", + "dev": true, "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" + "@dabh/diagnostics": "^2.0.2", + "async": "^3.1.0", + "is-stream": "^2.0.0", + "logform": "^2.2.0", + "one-time": "^1.0.0", + "readable-stream": "^3.4.0", + "stack-trace": "0.0.x", + "triple-beam": "^1.3.0", + "winston-transport": "^4.4.0" + }, + "dependencies": { + "is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "dev": true + } } }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "winston-transport": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.4.0.tgz", + "integrity": "sha512-Lc7/p3GtqtqPBYYtS6KCN3c77/2QCev51DvcJKbkFPQNoj1sinkGwLGFDxkXY9J6p9+EPnYs+D90uwbnaiURTw==", + "dev": true, "requires": { - "ansi-regex": "^5.0.0" + "readable-stream": "^2.3.7", + "triple-beam": "^1.2.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + } } - } - } - }, - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=" - }, - "clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - } - }, - "clone-regexp": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-2.2.0.tgz", - "integrity": "sha512-beMpP7BOtTipFuW8hrJvREQ2DrRu3BE7by0ZpibtfBA+qfHYvMGTc2Yb1JMYPKg/JUw0CHYvpg796aNTSW9z7Q==", - "dev": true, - "requires": { - "is-regexp": "^2.0.0" - }, - "dependencies": { - "is-regexp": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-2.1.0.tgz", - "integrity": "sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA==", - "dev": true - } - } - }, - "clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", - "dev": true, - "requires": { - "mimic-response": "^1.0.0" - }, - "dependencies": { - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "dev": true - } - } - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true - }, - "coa": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", - "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", - "dev": true, - "requires": { - "@types/q": "^1.5.1", - "chalk": "^2.4.1", - "q": "^1.1.2" - }, - "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" } - } - } - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, - "collapse-white-space": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.4.tgz", - "integrity": "sha512-YfQ1tAUZm561vpYD+5eyWN8+UsceQbSrqqlc/6zDY2gtAE+uZLSdkkovhnGpmCThsvKBFakq4EdY/FF93E8XIw==", - "dev": true - }, - "collect-v8-coverage": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.0.tgz", - "integrity": "sha512-VKIhJgvk8E1W28m5avZ2Gv2Ruv5YiF56ug2oclvaG9md69BuZImMG2sk9g7QNKLUbtYAKQjXjYxbYZVUlMMKmQ==", - "dev": true - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "color": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/color/-/color-3.1.3.tgz", - "integrity": "sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==", - "requires": { - "color-convert": "^1.9.1", - "color-string": "^1.5.4" - } - }, - "color-convert": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.2.tgz", - "integrity": "sha512-3NUJZdhMhcdPn8vJ9v2UQJoH0qqoGUkYTgFEPZaPjEtwmmKUfNV46zZmgB2M5M4DCEQHMaCfWHCxiBflLm04Tg==", - "requires": { - "color-name": "1.1.1" - } - }, - "color-name": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.1.tgz", - "integrity": "sha1-SxQVMEz1ACjqgWQ2Q72C6gWANok=" - }, - "color-string": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.4.tgz", - "integrity": "sha512-57yF5yt8Xa3czSEW1jfQDE79Idk0+AkN/4KWad6tbdxUmAs3MvjxlWSWD4deYytcRfoZ9nhKyFl1kj5tBvidbw==", - "requires": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "colord": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.4.0.tgz", - "integrity": "sha512-2306/NeTDOykDwvFQK0ctnP+9I5KQdqVm+IJAM6MsAr4vvy1llAdJyax4YmZoqTxdJ/lvRBwR8MqyJi/tupBAw==", - "dev": true - }, - "colorette": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", - "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==" - }, - "colors": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/colors/-/colors-0.5.1.tgz", - "integrity": "sha1-fQAj6usVTo7p/Oddy5I9DtFmd3Q=", - "dev": true - }, - "columnify": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.5.4.tgz", - "integrity": "sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs=", - "dev": true, - "requires": { - "strip-ansi": "^3.0.0", - "wcwidth": "^1.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "ws": { + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.3.tgz", + "integrity": "sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg==", + "dev": true + }, + "xhr": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", + "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==", "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "global": "~4.4.0", + "is-function": "^1.0.1", + "parse-headers": "^2.0.0", + "xtend": "^4.0.0" } - } - } - }, - "combined-stream": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", - "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "comma-separated-tokens": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", - "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==", - "dev": true - }, - "command-exists": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", - "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==" - }, - "commander": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.0.tgz", - "integrity": "sha512-NIQrwvv9V39FHgGFm36+U9SMQzbiHvU79k+iADraJTpmrFFfx7Ds0IvDoAdZsDrknlkRk14OYoWXb57uTh7/sw==", - "dev": true - }, - "comment-parser": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.1.5.tgz", - "integrity": "sha512-RePCE4leIhBlmrqiYTvaqEeGYg7qpSl4etaIabKtdOQVi+mSTIBBklGUwIr79GXYnl3LpMwmDw4KeR2stNc6FA==", - "dev": true - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" - }, - "compare-func": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", - "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", - "dev": true, - "requires": { - "array-ify": "^1.0.0", - "dot-prop": "^5.1.0" - }, - "dependencies": { - "dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + }, + "xml-parse-from-string": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz", + "integrity": "sha1-qQKekp09vN7RafPG4oI42VpdWig=", + "dev": true + }, + "xml2js": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", "dev": true, "requires": { - "is-obj": "^2.0.0" + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" } }, - "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", "dev": true - } - } - }, - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" - }, - "compress-commons": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-2.1.1.tgz", - "integrity": "sha512-eVw6n7CnEMFzc3duyFVrQEuY1BlHR3rYsSztyG32ibGMW722i3C6IizEGMFmfMU+A+fALvBIwxN3czffTcdA+Q==", - "dev": true, - "requires": { - "buffer-crc32": "^0.2.13", - "crc32-stream": "^3.0.1", - "normalize-path": "^3.0.0", - "readable-stream": "^2.3.6" - }, - "dependencies": { - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + }, + "xmldom": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.5.0.tgz", + "integrity": "sha512-Foaj5FXVzgn7xFzsKeNIde9g6aFBxTPi37iwsno8QvApmtg7KYrr+OPyRHcJF7dud2a5nGRBXK3n0dL62Gf7PA==", "dev": true - } - } - }, - "compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "requires": { - "mime-db": ">= 1.43.0 < 2" - }, - "dependencies": { - "mime-db": { - "version": "1.47.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz", - "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==" - } - } - }, - "compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "requires": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "dependencies": { - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - } - } - }, - "compute-scroll-into-view": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-1.0.16.tgz", - "integrity": "sha512-a85LHKY81oQnikatZYA90pufpZ6sQx++BoCxOEMsjpZx+ZnaKGQnCyCehTRr/1p9GBIAHTjcU9k71kSYWloLiQ==" - }, - "computed-style": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/computed-style/-/computed-style-0.1.4.tgz", - "integrity": "sha1-fzRP2FhLLkJb7cpKGvwOMAuwXXQ=" - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "concurrently": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-3.5.0.tgz", - "integrity": "sha1-jPG3cHppFqeKT/W3e7BN7FSzebI=", - "dev": true, - "requires": { - "chalk": "0.5.1", - "commander": "2.6.0", - "date-fns": "^1.23.0", - "lodash": "^4.5.1", - "rx": "2.3.24", - "spawn-command": "^0.0.2-1", - "supports-color": "^3.2.3", - "tree-kill": "^1.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz", - "integrity": "sha1-DY6UaWej2BQ/k+JOKYUl/BsiNfk=", + "xpath": { + "version": "0.0.32", + "resolved": "https://registry.npmjs.org/xpath/-/xpath-0.0.32.tgz", + "integrity": "sha512-rxMJhSIoiO8vXcWvSifKqhvV96GjiD5wYb8/QHdoRyQvraTpp4IEv944nhGausZZ3u7dhQXteZuZbaqfpB7uYw==", "dev": true }, - "ansi-styles": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz", - "integrity": "sha1-6uy/Zs1waIJ2Cy9GkVgrj1XXp94=", + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "dev": true }, - "chalk": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz", - "integrity": "sha1-Zjs6ZItotV0EaQ1JFnqoN4WPIXQ=", + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "yargs": { + "version": "12.0.5", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", + "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", "dev": true, "requires": { - "ansi-styles": "^1.1.0", - "escape-string-regexp": "^1.0.0", - "has-ansi": "^0.1.0", - "strip-ansi": "^0.3.0", - "supports-color": "^0.2.0" + "cliui": "^4.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^1.0.1", + "os-locale": "^3.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1 || ^4.0.0", + "yargs-parser": "^11.1.1" }, "dependencies": { - "supports-color": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz", - "integrity": "sha1-2S3iaU6z9nMjlz1649i1W0wiGQo=", + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } } } }, - "commander": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.6.0.tgz", - "integrity": "sha1-nfflL7Kgyw+4kFjugMMQQiXzfh0=", - "dev": true - }, - "has-ansi": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz", - "integrity": "sha1-hPJlqujA5qiKEtcCKJS3VoiUxi4=", + "yargs-parser": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", + "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", "dev": true, "requires": { - "ansi-regex": "^0.2.0" + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" } }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "strip-ansi": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz", - "integrity": "sha1-JfSOoiynkYfzF0pNuHWTR7sSYiA=", + "yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", "dev": true, "requires": { - "ansi-regex": "^0.2.1" + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" } }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "zip-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.0.tgz", + "integrity": "sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==", "dev": true, "requires": { - "has-flag": "^1.0.0" - } - } - } - }, - "config-chain": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz", - "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==", - "dev": true, - "requires": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" - } - }, - "connect": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", - "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", - "requires": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" + "archiver-utils": "^2.1.0", + "compress-commons": "^4.1.0", + "readable-stream": "^3.6.0" } - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" } } }, - "console-browserify": { + "aproba": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", - "dev": true - }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "dev": true - }, - "consolidated-events": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/consolidated-events/-/consolidated-events-2.0.2.tgz", - "integrity": "sha512-2/uRVMdRypf5z/TW/ncD/66l75P5hH2vM/GR8Jf8HLc2xnfJtmina6F6du8+v4Z2vTrMo7jC+W1tmEEuuELgkQ==" - }, - "constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", - "dev": true - }, - "content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", - "dev": true, - "requires": { - "safe-buffer": "5.1.2" - } - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "dev": true - }, - "continuable-cache": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/continuable-cache/-/continuable-cache-0.3.1.tgz", - "integrity": "sha1-vXJ6f67XfnH/OYWskzUakSczrQ8=", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", "dev": true }, - "conventional-changelog-angular": { - "version": "5.0.12", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.12.tgz", - "integrity": "sha512-5GLsbnkR/7A89RyHLvvoExbiGbd9xKdKqDTrArnPbOqBqG/2wIosu0fHwpeIRI8Tl94MhVNBXcLJZl92ZQ5USw==", - "dev": true, - "requires": { - "compare-func": "^2.0.0", - "q": "^1.5.1" - } - }, - "conventional-changelog-core": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-3.2.3.tgz", - "integrity": "sha512-LMMX1JlxPIq/Ez5aYAYS5CpuwbOk6QFp8O4HLAcZxe3vxoCtABkhfjetk8IYdRB9CDQGwJFLR3Dr55Za6XKgUQ==", + "archiver": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-3.1.1.tgz", + "integrity": "sha512-5Hxxcig7gw5Jod/8Gq0OneVgLYET+oNHcxgWItq4TbhOzRLKNAFUb9edAftiMKXvXfCB0vbGrJdZDNq0dWMsxg==", "dev": true, "requires": { - "conventional-changelog-writer": "^4.0.6", - "conventional-commits-parser": "^3.0.3", - "dateformat": "^3.0.0", - "get-pkg-repo": "^1.0.0", - "git-raw-commits": "2.0.0", - "git-remote-origin-url": "^2.0.0", - "git-semver-tags": "^2.0.3", - "lodash": "^4.2.1", - "normalize-package-data": "^2.3.5", - "q": "^1.5.1", - "read-pkg": "^3.0.0", - "read-pkg-up": "^3.0.0", - "through2": "^3.0.0" + "archiver-utils": "^2.1.0", + "async": "^2.6.3", + "buffer-crc32": "^0.2.1", + "glob": "^7.1.4", + "readable-stream": "^3.4.0", + "tar-stream": "^2.1.0", + "zip-stream": "^2.1.2" }, "dependencies": { - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" + "lodash": "^4.17.14" } }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, + "buffer": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", + "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" } }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "dev": true, "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, - "read-pkg-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", - "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, "requires": { - "find-up": "^2.0.0", - "read-pkg": "^3.0.0" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" } }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, - "through2": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", - "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", + "tar-stream": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.2.tgz", + "integrity": "sha512-UaF6FoJ32WqALZGOIAApXx+OdxhekNMChu6axLJR85zMMjXKWFGjbIRe+J6P4UnRGg9rAwWvbTT0oI7hD/Un7Q==", "dev": true, "requires": { - "inherits": "^2.0.4", - "readable-stream": "2 || 3" + "bl": "^4.0.1", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" } } } }, - "conventional-changelog-preset-loader": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz", - "integrity": "sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g==", - "dev": true - }, - "conventional-changelog-writer": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-4.1.0.tgz", - "integrity": "sha512-WwKcUp7WyXYGQmkLsX4QmU42AZ1lqlvRW9mqoyiQzdD+rJWbTepdWoKJuwXTS+yq79XKnQNa93/roViPQrAQgw==", + "archiver-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", + "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", "dev": true, "requires": { - "compare-func": "^2.0.0", - "conventional-commits-filter": "^2.0.7", - "dateformat": "^3.0.0", - "handlebars": "^4.7.6", - "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" + "glob": "^7.1.4", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", + "readable-stream": "^2.0.0" }, "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "dev": true, "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", "dev": true }, - "through2": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", - "dev": true, - "requires": { - "readable-stream": "3" - } + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true } } }, - "conventional-commits-filter": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz", - "integrity": "sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==", + "are-we-there-yet": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", "dev": true, "requires": { - "lodash.ismatch": "^4.4.0", - "modify-values": "^1.0.0" + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" } }, - "conventional-commits-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.0.tgz", - "integrity": "sha512-XmJiXPxsF0JhAKyfA2Nn+rZwYKJ60nanlbSWwwkGwLQFbugsc0gv1rzc7VbbUWAzJfR1qR87/pNgv9NgmxtBMQ==", + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + }, + "dependencies": { + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + } + } + }, + "aria-query": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", + "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", "dev": true, "requires": { - "JSONStream": "^1.0.4", - "is-text-path": "^1.0.1", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "split2": "^2.0.0", - "through2": "^4.0.0", - "trim-off-newlines": "^1.0.0" + "@babel/runtime": "^7.10.2", + "@babel/runtime-corejs3": "^7.10.2" + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" + }, + "array-differ": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-2.1.0.tgz", + "integrity": "sha512-KbUpJgx909ZscOc/7CLATBFam7P1Z1QRQInvgT0UztM9Q72aGKCunKASAl7WNW0tnPmPyEMeMhdsfWhfmW037w==", + "dev": true + }, + "array-filter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-1.0.0.tgz", + "integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM=", + "dev": true + }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, + "array-ify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", + "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=", + "dev": true + }, + "array-includes": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz", + "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1", + "get-intrinsic": "^1.1.1", + "is-string": "^1.0.7" }, "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", "dev": true, "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" } }, - "through2": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "dev": true, "requires": { - "readable-stream": "3" + "object-keys": "^1.0.12" } - } - } - }, - "conventional-recommended-bump": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-5.0.1.tgz", - "integrity": "sha512-RVdt0elRcCxL90IrNP0fYCpq1uGt2MALko0eyeQ+zQuDVWtMGAy9ng6yYn3kax42lCj9+XBxQ8ZN6S9bdKxDhQ==", - "dev": true, - "requires": { - "concat-stream": "^2.0.0", - "conventional-changelog-preset-loader": "^2.1.1", - "conventional-commits-filter": "^2.0.2", - "conventional-commits-parser": "^3.0.3", - "git-raw-commits": "2.0.0", - "git-semver-tags": "^2.0.3", - "meow": "^4.0.0", - "q": "^1.5.1" - }, - "dependencies": { - "camelcase-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz", - "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=", + }, + "es-abstract": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", + "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", "dev": true, "requires": { - "camelcase": "^4.1.0", - "map-obj": "^2.0.0", - "quick-lru": "^1.0.0" + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.1", + "is-string": "^1.0.7", + "is-weakref": "^1.0.1", + "object-inspect": "^1.11.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + }, + "dependencies": { + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + } } }, - "concat-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", - "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.0.2", - "typedarray": "^0.0.6" + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" } }, - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" } }, - "map-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz", - "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=", + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", "dev": true }, - "meow": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/meow/-/meow-4.0.1.tgz", - "integrity": "sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A==", + "is-callable": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "dev": true + }, + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, "requires": { - "camelcase-keys": "^4.0.0", - "decamelize-keys": "^1.0.0", - "loud-rejection": "^1.0.0", - "minimist": "^1.1.3", - "minimist-options": "^3.0.1", - "normalize-package-data": "^2.3.4", - "read-pkg-up": "^3.0.0", - "redent": "^2.0.0", - "trim-newlines": "^2.0.0" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" } }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" + "has-tostringtag": "^1.0.0" } }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" + "has-symbols": "^1.0.2" } }, - "read-pkg-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", - "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", + "object-inspect": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.1.tgz", + "integrity": "sha512-If7BjFlpkzzBeV1cqgT3OSWT3azyoxDGajR+iGnFBfVV2EWyDyWaZZW2ERDjUaY2QM8i5jI3Sj7mhsM4DDAqWA==", + "dev": true + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", "dev": true, "requires": { - "find-up": "^2.0.0", - "read-pkg": "^3.0.0" + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "dependencies": { + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + } } }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", "dev": true, "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" } }, - "redent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz", - "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=", + "string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", "dev": true, "requires": { - "indent-string": "^3.0.0", - "strip-indent": "^2.0.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, - "strip-indent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", - "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=", - "dev": true - }, - "trim-newlines": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz", - "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=", - "dev": true } } }, - "convert-source-map": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz", - "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=" - }, - "cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", + "array-iterate": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/array-iterate/-/array-iterate-1.1.2.tgz", + "integrity": "sha512-1hWSHTIlG/8wtYD+PPX5AOBtKWngpDFjrsrHgZpe+JdgNGz0udYu6ZIkAa/xuenIUEqFv7DvE2Yr60jxweJSrQ==", "dev": true }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", - "dev": true + "array-map": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", + "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=" }, - "copy-concurrently": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", - "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "array-reduce": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", + "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=" + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", "dev": true, "requires": { - "aproba": "^1.1.1", - "fs-write-stream-atomic": "^1.0.8", - "iferr": "^0.1.5", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.0" - }, - "dependencies": { - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } + "array-uniq": "^1.0.1" } }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" - }, - "copy-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/copy-dir/-/copy-dir-1.3.0.tgz", - "integrity": "sha512-Q4+qBFnN4bwGwvtXXzbp4P/4iNk0MaiGAzvQ8OiMtlLjkIKjmNN689uVzShSM0908q7GoFHXIPx4zi75ocoaHw==", + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", "dev": true }, - "copy-to-clipboard": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.1.tgz", - "integrity": "sha512-i13qo6kIHTTpCm8/Wup+0b1mVWETvu2kIMzKoK8FpkLkFxlt0znUAHcMzox+T8sPlqtZXq3CulEjQHsYiGFJUw==", - "dev": true, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" + }, + "array.prototype.flat": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.1.tgz", + "integrity": "sha512-rVqIs330nLJvfC7JqYvEWwqVr5QjYF1ib02i3YJtR/fICO6527Tjpc/e4Mvmxh3GIePPreRXMdaGyC99YphWEw==", "requires": { - "toggle-selection": "^1.0.6" + "define-properties": "^1.1.2", + "es-abstract": "^1.10.0", + "function-bind": "^1.1.1" } }, - "copy-webpack-plugin": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-6.4.0.tgz", - "integrity": "sha512-p4eIA0ZWk4UI+xewyxOBTDCSDfjK6nCkr3zhDenoi7SFd+NgDNH/D14IZeFaCEFcK/psNDcAUMOB+sAxZ3SsAA==", + "array.prototype.flatmap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.5.tgz", + "integrity": "sha512-08u6rVyi1Lj7oqWbS9nUxliETrtIROT4XGTA4D/LWGten6E3ocm7cy9SIrmNHOL5XVbVuckUp3X6Xyg8/zpvHA==", "dev": true, "requires": { - "cacache": "^15.0.5", - "fast-glob": "^3.2.4", - "find-cache-dir": "^3.3.1", - "glob-parent": "^5.1.1", - "globby": "^11.0.1", - "loader-utils": "^2.0.0", - "normalize-path": "^3.0.0", - "p-limit": "^3.0.2", - "schema-utils": "^3.0.0", - "serialize-javascript": "^5.0.1", - "webpack-sources": "^1.4.3" + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0" }, "dependencies": { - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "@types/json-schema": { - "version": "7.0.7", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", - "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==", - "dev": true - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "dev": true, "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "object-keys": "^1.0.12" } }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true + "es-abstract": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", + "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.1", + "is-string": "^1.0.7", + "is-weakref": "^1.0.1", + "object-inspect": "^1.11.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + }, + "dependencies": { + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + } + } }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", "dev": true, "requires": { - "fill-range": "^7.0.1" + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" } }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", "dev": true }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "is-callable": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", "dev": true }, - "fast-glob": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.6.tgz", - "integrity": "sha512-GnLuqj/pvQ7pX8/L4J84nijv6sAnlwvSDpMkJi9i7nPmPxGtRPkBSStfvDW5l6nMdX9VWe+pkKWFTgD+vF2QSQ==", + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "dependencies": { + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + } } }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, "requires": { - "to-regex-range": "^5.0.1" + "has-tostringtag": "^1.0.0" } }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, "requires": { - "is-glob": "^4.0.1" + "has-symbols": "^1.0.2" } }, - "globby": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", - "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "object-inspect": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.1.tgz", + "integrity": "sha512-If7BjFlpkzzBeV1cqgT3OSWT3azyoxDGajR+iGnFBfVV2EWyDyWaZZW2ERDjUaY2QM8i5jI3Sj7mhsM4DDAqWA==", + "dev": true + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", "dev": true, "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", - "slash": "^3.0.0" + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "dependencies": { + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + } } }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", "dev": true, "requires": { - "is-extglob": "^2.1.1" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "dependencies": { + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + } } }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true + "string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "dependencies": { + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + } + } + } + } + }, + "array.prototype.map": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/array.prototype.map/-/array.prototype.map-1.0.4.tgz", + "integrity": "sha512-Qds9QnX7A0qISY7JT5WuJO0NJPE9CMlC6JzHQfhpqAAQQzufVRoeH7EzUY5GcPTx72voG8LV/5eo+b8Qi8hmhA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "es-array-method-boxes-properly": "^1.0.0", + "is-string": "^1.0.7" + }, + "dependencies": { + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } }, - "json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "dev": true, "requires": { - "minimist": "^1.2.5" + "object-keys": "^1.0.12" } }, - "loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "es-abstract": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", + "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", "dev": true, "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.1", + "is-string": "^1.0.7", + "is-weakref": "^1.0.1", + "object-inspect": "^1.11.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + }, + "dependencies": { + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + } } }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, "requires": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" } }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", "dev": true }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "is-callable": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "dev": true + }, + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, "requires": { - "yocto-queue": "^0.1.0" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" } }, - "picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", - "dev": true - }, - "schema-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.0.tgz", - "integrity": "sha512-tTEaeYkyIhEZ9uWgAjDerWov3T9MgX8dhhy2r0IGeeX4W8ngtGl1++dUve/RUqzuaASSh7shwCDJjEzthxki8w==", + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, "requires": { - "@types/json-schema": "^7.0.7", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" + "has-tostringtag": "^1.0.0" } }, - "serialize-javascript": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", - "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, "requires": { - "randombytes": "^2.1.0" + "has-symbols": "^1.0.2" } }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "object-inspect": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.1.tgz", + "integrity": "sha512-If7BjFlpkzzBeV1cqgT3OSWT3azyoxDGajR+iGnFBfVV2EWyDyWaZZW2ERDjUaY2QM8i5jI3Sj7mhsM4DDAqWA==", "dev": true }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", "dev": true, "requires": { - "is-number": "^7.0.0" + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "dependencies": { + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + } } }, - "webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", "dev": true, "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" } - } - } - }, - "core-js": { - "version": "3.12.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.12.1.tgz", - "integrity": "sha512-Ne9DKPHTObRuB09Dru5AjwKjY4cJHVGu+y5f7coGn1E9Grkc3p2iBwE9AI/nJzsE29mQF7oq+mhYYRqOMFN1Bw==" - }, - "core-js-builder": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/core-js-builder/-/core-js-builder-3.11.0.tgz", - "integrity": "sha512-pCL1JSASadYx4IVuf3ZVTAEEMcn4fIjZRfctWweqaEJU7l2/ivEowhv3gztnQlhhRJGDDHdEnTcdbNuhlg3b3A==", - "dev": true, - "requires": { - "core-js": "3.11.0", - "core-js-compat": "3.11.0", - "mkdirp": ">=0.5.5 <1", - "webpack": ">=4.46.0 <5" - }, - "dependencies": { - "core-js": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.11.0.tgz", - "integrity": "sha512-bd79DPpx+1Ilh9+30aT5O1sgpQd4Ttg8oqkqi51ZzhedMM1omD2e6IOF48Z/DzDCZ2svp49tN/3vneTK6ZBkXw==", - "dev": true }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", "dev": true, "requires": { - "minimist": "^1.2.5" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" } } } }, - "core-js-compat": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.11.0.tgz", - "integrity": "sha512-3wsN9YZJohOSDCjVB0GequOyHax8zFiogSX3XWLE28M1Ew7dTU57tgHjIylSBKSIouwmLBp3g61sKMz/q3xEGA==", - "requires": { - "browserslist": "^4.16.4", - "semver": "7.0.0" - }, - "dependencies": { - "semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==" - } - } - }, - "core-js-pure": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.11.0.tgz", - "integrity": "sha512-PxEiQGjzC+5qbvE7ZIs5Zn6BynNeZO9zHhrrWmkRff2SZLq0CE/H5LuZOJHhmOQ8L38+eMzEHAmPYWrUtDfuDQ==", + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", "dev": true }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" }, - "cosmiconfig": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", - "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", + "asn1": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", + "dev": true + }, + "asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", "dev": true, "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" }, "dependencies": { - "import-fresh": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", - "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "parse-json": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz", - "integrity": "sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - }, - "yaml": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz", - "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==", + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true } } }, - "cp-file": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-7.0.0.tgz", - "integrity": "sha512-0Cbj7gyvFVApzpK/uhCtQ/9kE9UnYpxMzaq5nQQC/Dh4iaj5fxp7iEFIullrYwzj8nf0qnsI1Qsx34hAeAebvw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "nested-error-stacks": "^2.0.0", - "p-event": "^4.1.0" - } - }, - "cpy": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/cpy/-/cpy-8.1.2.tgz", - "integrity": "sha512-dmC4mUesv0OYH2kNFEidtf/skUwv4zePmGeepjyyJ0qTo5+8KhA1o99oIAwVVLzQMAeDJml74d6wPPKb6EZUTg==", + "assert": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", "dev": true, "requires": { - "arrify": "^2.0.1", - "cp-file": "^7.0.0", - "globby": "^9.2.0", - "has-glob": "^1.0.0", - "junk": "^3.1.0", - "nested-error-stacks": "^2.1.0", - "p-all": "^2.1.0", - "p-filter": "^2.1.0", - "p-map": "^3.0.0" + "object-assign": "^4.1.1", + "util": "0.10.3" }, "dependencies": { - "arrify": { + "inherits": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", "dev": true - } - } - }, - "crc": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", - "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", - "dev": true, - "requires": { - "buffer": "^5.1.0" - }, - "dependencies": { - "buffer": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", - "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", "dev": true, "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" + "inherits": "2.0.1" } } } }, - "crc32-stream": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-3.0.1.tgz", - "integrity": "sha512-mctvpXlbzsvK+6z8kJwSJ5crm7yBwrQMTybJzMw1O4lLGJqjlDCXY2Zw7KheiA6XBEcBmfLx1D88mjRGVJtY9w==", - "dev": true, - "requires": { - "crc": "^3.4.4", - "readable-stream": "^3.4.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true }, - "create-ecdh": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", - "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.0.0" - } + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dev": true, + "ast-types": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.14.2.tgz", + "integrity": "sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==", "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" + "tslib": "^2.0.1" } }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dev": true, - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } + "ast-types-flow": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", + "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=", + "dev": true }, - "create-react-context": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/create-react-context/-/create-react-context-0.3.0.tgz", - "integrity": "sha512-dNldIoSuNSvlTJ7slIKC/ZFGKexBMBrrcc+TTe1NdmROnaASuLPvqpwj9v4XS4uXZ8+YPu0sNmShX2rXI5LNsw==", - "dev": true, - "requires": { - "gud": "^1.0.0", - "warning": "^4.0.3" - } + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==" }, - "cross-env": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-3.2.4.tgz", - "integrity": "sha1-ngWF8neGTtQhznVvgamA/w1piro=", + "async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", "dev": true, - "requires": { - "cross-spawn": "^5.1.0", - "is-windows": "^1.0.0" - } + "optional": true }, - "cross-fetch": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.4.tgz", - "integrity": "sha512-1eAtFWdIubi6T4XPy6ei9iUFoKpUkIF971QLN8lIvvvwueI65+Nw5haMNKUwfJxabqlIIDODJKGrQ66gxC0PbQ==", - "requires": { - "node-fetch": "2.6.1" - } + "async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" }, - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true }, - "crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "dev": true, - "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - } + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true }, - "css": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", - "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", + "atob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.1.tgz", + "integrity": "sha1-ri1acpR38onWDdf5amMUoi3Wwio=" + }, + "atob-lite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/atob-lite/-/atob-lite-2.0.0.tgz", + "integrity": "sha1-D+9a1G8b16hQLGVyfwNn1e5D1pY=", + "dev": true + }, + "autoprefixer": { + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.2.5.tgz", + "integrity": "sha512-7H4AJZXvSsn62SqZyJCP+1AWwOuoYpUfK6ot9vm0e87XD6mT8lDywc9D9OTJPMULyGcvmIxzTAMeG2Cc+YX+fA==", + "dev": true, "requires": { - "inherits": "^2.0.3", - "source-map": "^0.6.1", - "source-map-resolve": "^0.5.2", - "urix": "^0.1.0" + "browserslist": "^4.16.3", + "caniuse-lite": "^1.0.30001196", + "colorette": "^1.2.2", + "fraction.js": "^4.0.13", + "normalize-range": "^0.1.2", + "postcss-value-parser": "^4.1.0" }, "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "browserslist": { + "version": "4.16.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.3.tgz", + "integrity": "sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001181", + "colorette": "^1.2.1", + "electron-to-chromium": "^1.3.649", + "escalade": "^3.1.1", + "node-releases": "^1.1.70" + } + }, + "colorette": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", + "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", + "dev": true + }, + "electron-to-chromium": { + "version": "1.3.690", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.690.tgz", + "integrity": "sha512-zPbaSv1c8LUKqQ+scNxJKv01RYFkVVF1xli+b+3Ty8ONujHjAMg+t/COmdZqrtnS1gT+g4hbSodHillymt1Lww==", + "dev": true + }, + "node-releases": { + "version": "1.1.71", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.71.tgz", + "integrity": "sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==", + "dev": true + }, + "postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", + "dev": true } } }, - "css-color-keywords": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", - "integrity": "sha1-/qJhbcZ2spYmhrOvjb2+GAskTgU=" + "autosize": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/autosize/-/autosize-4.0.2.tgz", + "integrity": "sha512-jnSyH2d+qdfPGpWlcuhGiHmqBJ6g3X+8T+iRwFrHPLVcdoGJE/x6Qicm6aDHfTsbgZKxyV8UU/YB2p4cjKDRRA==" }, - "css-color-names": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", - "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", "dev": true }, - "css-declaration-sorter": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", - "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", + "aws4": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", + "dev": true + }, + "axe-core": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.3.5.tgz", + "integrity": "sha512-WKTW1+xAzhMS5dJsxWkliixlO/PqC4VhmO9T4juNYcaTg9jzWiJsou6m5pxWYGfigWbwzJWeFY6z47a+4neRXA==", + "dev": true + }, + "axobject-query": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", + "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==", + "dev": true + }, + "babel-core": { + "version": "7.0.0-bridge.0", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", + "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==" + }, + "babel-jest": { + "version": "27.4.5", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.4.5.tgz", + "integrity": "sha512-3uuUTjXbgtODmSv/DXO9nZfD52IyC2OYTFaXGRzL0kpykzroaquCrD5+lZNafTvZlnNqZHt5pb0M08qVBZnsnA==", "dev": true, "requires": { - "postcss": "^7.0.1", - "timsort": "^0.3.0" + "@jest/transform": "^27.4.5", + "@jest/types": "^27.4.2", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.0.0", + "babel-preset-jest": "^27.4.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "slash": "^3.0.0" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "@jest/transform": { + "version": "27.4.5", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.4.5.tgz", + "integrity": "sha512-PuMet2UlZtlGzwc6L+aZmR3I7CEBpqadO03pU40l2RNY2fFJ191b9/ITB44LNOhVtsyykx0OZvj0PCyuLm7Eew==", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "@babel/core": "^7.1.0", + "@jest/types": "^27.4.2", + "babel-plugin-istanbul": "^6.0.0", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^27.4.5", + "jest-regex-util": "^27.4.0", + "jest-util": "^27.4.2", + "micromatch": "^4.0.4", + "pirates": "^4.0.1", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + } + }, + "@jest/types": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.4.2.tgz", + "integrity": "sha512-j35yw0PMTPpZsUoOBiuHzr1zTYoad1cVIE0ajEjcrJONxxrko/IRGKkXx3os0Nsi4Hu3+5VmDbVfq5WhG/pWAg==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + } + }, + "@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "ci-info": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", + "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==", + "dev": true + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "jest-haste-map": { + "version": "27.4.5", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.4.5.tgz", + "integrity": "sha512-oJm1b5qhhPs78K24EDGifWS0dELYxnoBiDhatT/FThgB9yxqUm5F6li3Pv+Q+apMBmmPNzOBnZ7ZxWMB1Leq1Q==", + "dev": true, + "requires": { + "@jest/types": "^27.4.2", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "fsevents": "^2.3.2", + "graceful-fs": "^4.2.4", + "jest-regex-util": "^27.4.0", + "jest-serializer": "^27.4.0", + "jest-util": "^27.4.2", + "jest-worker": "^27.4.5", + "micromatch": "^4.0.4", + "walker": "^1.0.7" + } + }, + "jest-regex-util": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.4.0.tgz", + "integrity": "sha512-WeCpMpNnqJYMQoOjm1nTtsgbR4XHAk1u00qDoNBQoykM280+/TmgA5Qh5giC1ecy6a5d4hbSsHzpBtu5yvlbEg==", + "dev": true + }, + "jest-serializer": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.4.0.tgz", + "integrity": "sha512-RDhpcn5f1JYTX2pvJAGDcnsNTnsV9bjYPU8xcV+xPwOXnUPOQwf4ZEuiU6G9H1UztH+OapMgu/ckEVwO87PwnQ==", + "dev": true, + "requires": { + "@types/node": "*", + "graceful-fs": "^4.2.4" + } + }, + "jest-util": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.4.2.tgz", + "integrity": "sha512-YuxxpXU6nlMan9qyLuxHaMMOzXAl5aGZWCSzben5DhLHemYQxCc4YK+4L3ZrCutT8GPQ+ui9k5D8rUJoDioMnA==", + "dev": true, + "requires": { + "@jest/types": "^27.4.2", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.4", + "picomatch": "^2.2.3" }, "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true } } }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "jest-worker": { + "version": "27.4.5", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.5.tgz", + "integrity": "sha512-f2s8kEdy15cv9r7q4KkzGXvlY0JTcmCbMHZBfSQDwW77REr45IDWwd0lksDFeVHH2jJ5pqb90T77XscrjeGzzg==", "dev": true, "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + } + }, + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + }, + "dependencies": { + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + } } }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -28637,40 +26932,53 @@ "dev": true }, "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" } } } }, - "css-loader": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.1.3.tgz", - "integrity": "sha512-CoPZvyh8sLiGARK3gqczpfdedbM74klGWurF2CsNZ2lhNaXdLIUks+3Mfax3WBeRuHoglU+m7KG/+7gY6G4aag==", + "babel-loader": { + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.3.tgz", + "integrity": "sha512-n4Zeta8NC3QAsuyiizu0GkmRcQ6clkV9WFUnUf1iXP//IeSKbWjofW3UHyZVwlOB4y039YQKefawyTn64Zwbuw==", "dev": true, "requires": { - "camelcase": "^6.2.0", - "cssesc": "^3.0.0", - "icss-utils": "^5.1.0", - "loader-utils": "^2.0.0", - "postcss": "^8.2.8", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.0", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.1.0", - "schema-utils": "^3.0.0", - "semver": "^7.3.4" + "find-cache-dir": "^3.3.1", + "loader-utils": "^1.4.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" }, "dependencies": { "@types/json-schema": { - "version": "7.0.7", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", - "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==", + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", "dev": true }, "ajv": { @@ -28691,2646 +26999,3087 @@ "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "dev": true }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true - }, - "camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", - "dev": true - }, - "colorette": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", - "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", - "dev": true - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true - }, "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, - "icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true + "find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } }, "json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", "dev": true, "requires": { - "minimist": "^1.2.5" + "minimist": "^1.2.0" } }, "loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", "dev": true, "requires": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", - "json5": "^2.1.2" + "json5": "^1.0.1" } }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "requires": { - "yallist": "^4.0.0" + "p-locate": "^4.1.0" } }, - "nanoid": { - "version": "3.1.22", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.22.tgz", - "integrity": "sha512-/2ZUaJX2ANuLtTvqTlgqBQNJoQO398KyJgZloL0PZkC0dpysjncRUPsFe3DUPzz/y3h+u7C46np8RMuvF3jsSQ==", - "dev": true + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + } }, - "postcss": { - "version": "8.2.8", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.8.tgz", - "integrity": "sha512-1F0Xb2T21xET7oQV9eKuctbM9S7BC0fetoHCc4H13z0PT6haiRLP4T0ZY4XWh7iLP0usgqykT6p9B2RtOf4FPw==", + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "requires": { - "colorette": "^1.2.2", - "nanoid": "^3.1.20", - "source-map": "^0.6.1" + "p-try": "^2.0.0" } }, - "postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, - "postcss-modules-local-by-default": { + "path-exists": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", - "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, "requires": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" + "find-up": "^4.0.0" } }, - "postcss-modules-scope": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "babel-plugin-add-react-displayname": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/babel-plugin-add-react-displayname/-/babel-plugin-add-react-displayname-0.0.5.tgz", + "integrity": "sha1-M51M3be2X9YtHfnbn+BN4TQSK9U=", + "dev": true + }, + "babel-plugin-apply-mdx-type-prop": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.22.tgz", + "integrity": "sha512-VefL+8o+F/DfK24lPZMtJctrCVOfgbqLAGZSkxwhazQv4VxPg3Za/i40fu22KR2m8eEda+IfSOlPLUSIiLcnCQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "7.10.4", + "@mdx-js/util": "1.6.22" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", + "dev": true + } + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "requires": { + "object.assign": "^4.1.0" + } + }, + "babel-plugin-emotion": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/babel-plugin-emotion/-/babel-plugin-emotion-10.2.2.tgz", + "integrity": "sha512-SMSkGoqTbTyUTDeuVuPIWifPdUGkTk1Kf9BWRiXIOIcuyMfsdp2EjeiiFvOzX8NOBvEh/ypKYvUh2rkgAJMCLA==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@emotion/hash": "0.8.0", + "@emotion/memoize": "0.7.4", + "@emotion/serialize": "^0.11.16", + "babel-plugin-macros": "^2.0.0", + "babel-plugin-syntax-jsx": "^6.18.0", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^1.0.5", + "find-root": "^1.1.0", + "source-map": "^0.5.7" + }, + "dependencies": { + "@emotion/serialize": { + "version": "0.11.16", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-0.11.16.tgz", + "integrity": "sha512-G3J4o8by0VRrO+PFeSc3js2myYNOXVJ3Ya+RGVxnshRYgsvErfAOglKAiy1Eo1vhzxqtUvjCyS5gtewzkmvSSg==", + "dev": true, + "requires": { + "@emotion/hash": "0.8.0", + "@emotion/memoize": "0.7.4", + "@emotion/unitless": "0.7.5", + "@emotion/utils": "0.11.3", + "csstype": "^2.5.7" + } + }, + "@emotion/utils": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-0.11.3.tgz", + "integrity": "sha512-0o4l6pZC+hI88+bzuaX/6BgOvQVhbt2PfmxauVaYOGgbsAw14wdKyvMCZXnsnsHys94iadcF+RG/wZyx6+ZZBw==", + "dev": true + }, + "csstype": { + "version": "2.6.19", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.19.tgz", + "integrity": "sha512-ZVxXaNy28/k3kJg0Fou5MiYpp88j7H9hLZp8PDC3jV0WFjfH5E9xHb56L0W59cPbKbcHXeP4qyT8PrHp8t6LcQ==", + "dev": true + } + } + }, + "babel-plugin-extract-import-names": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.22.tgz", + "integrity": "sha512-yJ9BsJaISua7d8zNT7oRG1ZLBJCIdZ4PZqmH8qa9N5AK01ifk3fnkc98AXhtzE7UkfCsEumvoQWgoYLhOnJ7jQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", + "dev": true + } + } + }, + "babel-plugin-inline-json-import": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/babel-plugin-inline-json-import/-/babel-plugin-inline-json-import-0.3.2.tgz", + "integrity": "sha512-QNNJx08KjmMT25Cw7rAPQ6dlREDPiZGDyApHL8KQ9vrQHbrr4PTi7W8g1tMMZPz0jEMd39nx/eH7xjnDNxq5sA==", + "dev": true, + "requires": { + "decache": "^4.5.1" + } + }, + "babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "dependencies": { + "istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz", + "integrity": "sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==", "dev": true, "requires": { - "postcss-selector-parser": "^6.0.4" + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "babel-plugin-jest-hoist": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.4.0.tgz", + "integrity": "sha512-Jcu7qS4OX5kTWBc45Hz7BMmgXuJqRnhatqpUhnzGC3OBYpOmf2tv6jFNwZpwM7wU7MUuv2r9IPS/ZlYOuburVw==", + "dev": true, + "requires": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.0.0", + "@types/babel__traverse": "^7.0.6" + } + }, + "babel-plugin-macros": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz", + "integrity": "sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==", + "requires": { + "@babel/runtime": "^7.7.2", + "cosmiconfig": "^6.0.0", + "resolve": "^1.12.0" + }, + "dependencies": { + "cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" } }, - "postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "dev": true, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "requires": { - "icss-utils": "^5.0.0" + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" } }, - "postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", - "dev": true - }, - "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.6", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" }, - "semver": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", - "dev": true, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", "requires": { - "lru-cache": "^6.0.0" + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true } } }, - "css-mediaquery": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/css-mediaquery/-/css-mediaquery-0.1.2.tgz", - "integrity": "sha1-aiw3NEkoYYYxxUvTPO3TAdoYvqA=" + "babel-plugin-named-asset-import": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.7.tgz", + "integrity": "sha512-squySRkf+6JGnvjoUtDEjSREJEBirnXi9NqP6rjSYsylxQxqBTz+pkmf395i9E2zsvmYUaI40BHo6SqZUdydlw==", + "dev": true }, - "css-select": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", - "dev": true, + "babel-plugin-polyfill-corejs2": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.3.tgz", + "integrity": "sha512-NDZ0auNRzmAfE1oDDPW2JhzIMXUk+FFe2ICejmt5T4ocKgiQx3e0VCRx9NCAidcMtL2RUZaWtXnmjTCkx0tcbA==", "requires": { - "boolbase": "~1.0.0", - "css-what": "2.1", - "domutils": "1.5.1", - "nth-check": "~1.0.1" + "@babel/compat-data": "^7.13.11", + "@babel/helper-define-polyfill-provider": "^0.2.4", + "semver": "^6.1.1" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } } }, - "css-select-base-adapter": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", - "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", - "dev": true - }, - "css-to-react-native": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-2.3.2.tgz", - "integrity": "sha512-VOFaeZA053BqvvvqIA8c9n0+9vFppVBAHCp6JgFTtTMU3Mzi+XnelJ9XC9ul3BqFzZyQ5N+H0SnwsWT2Ebchxw==", + "babel-plugin-polyfill-corejs3": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.3.0.tgz", + "integrity": "sha512-JLwi9vloVdXLjzACL80j24bG6/T1gYxwowG44dg6HN/7aTPdyPbJJidf6ajoA3RPHHtW0j9KMrSOLpIZpAnPpg==", "requires": { - "camelize": "^1.0.0", - "css-color-keywords": "^1.0.0", - "postcss-value-parser": "^3.3.0" + "@babel/helper-define-polyfill-provider": "^0.2.4", + "core-js-compat": "^3.18.0" } }, - "css-to-react-native-transform": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/css-to-react-native-transform/-/css-to-react-native-transform-1.9.0.tgz", - "integrity": "sha512-darzotx5xx+Q0bzASkvNBasztLCssNerzf9jpMZx0H4CTY6J/y2Wh50ZtYAJ3FmESEux1bJcGa6T0zfISTuFqw==", + "babel-plugin-polyfill-regenerator": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.3.tgz", + "integrity": "sha512-JVE78oRZPKFIeUqFGrSORNzQnrDwZR16oiWeGM8ZyjBn2XAT5OjP+wXx5ESuo33nUsFUEJYjtklnsKbxW5L+7g==", "requires": { - "css": "^2.2.4", - "css-mediaquery": "^0.1.2", - "css-to-react-native": "^2.3.0" + "@babel/helper-define-polyfill-provider": "^0.2.4" } }, - "css-tree": { - "version": "1.0.0-alpha.28", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.28.tgz", - "integrity": "sha512-joNNW1gCp3qFFzj4St6zk+Wh/NBv0vM5YbEreZk0SD4S23S+1xBKb6cLDg2uj4P4k/GUMlIm6cKIDqIG+vdt0w==", + "babel-plugin-react-docgen": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/babel-plugin-react-docgen/-/babel-plugin-react-docgen-4.2.1.tgz", + "integrity": "sha512-UQ0NmGHj/HAqi5Bew8WvNfCk8wSsmdgNd8ZdMjBCICtyCJCq9LiqgqvjCYe570/Wg7AQArSq1VQ60Dd/CHN7mQ==", "dev": true, "requires": { - "mdn-data": "~1.1.0", - "source-map": "^0.5.3" + "ast-types": "^0.14.2", + "lodash": "^4.17.15", + "react-docgen": "^5.0.0" } }, - "css-url-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/css-url-regex/-/css-url-regex-1.1.0.tgz", - "integrity": "sha1-g4NCMMyfdMRX3lnuvRVD/uuDt+w=", + "babel-plugin-react-native-classname-to-style": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/babel-plugin-react-native-classname-to-style/-/babel-plugin-react-native-classname-to-style-1.2.2.tgz", + "integrity": "sha512-kavZRZ56YoYmrwuCRMY0UuCYfMPszoN7v0DLST1D+rTqkl+cFWVW3W8l//AfWsyMNHkY+UTX+RrB5K7GY9mq3w==", "dev": true }, - "css-what": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz", - "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0=", - "dev": true + "babel-plugin-react-native-platform-specific-extensions": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-react-native-platform-specific-extensions/-/babel-plugin-react-native-platform-specific-extensions-1.1.1.tgz", + "integrity": "sha512-ZNN2ImlUlcaPMfzaCw9fWmTc/Ht5ARI0n9RUqiyCdK7LalPJ7yKc+F60BcSHvMHcmA2BgVO8TpSot+dpeZPAMQ==", + "dev": true, + "requires": { + "@babel/template": "^7.0.0-beta.49" + } }, - "css.escape": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", - "integrity": "sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s=", + "babel-plugin-syntax-jsx": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", + "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=", "dev": true }, - "cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "babel-plugin-syntax-trailing-function-commas": { + "version": "7.0.0-beta.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-7.0.0-beta.0.tgz", + "integrity": "sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ==" + }, + "babel-plugin-transform-remove-console": { + "version": "6.9.4", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-console/-/babel-plugin-transform-remove-console-6.9.4.tgz", + "integrity": "sha1-uYA2DAZzhOJLNXpYjYB9PINSd4A=", "dev": true }, - "cssnano": { - "version": "4.1.10", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz", - "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==", + "babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, + "requires": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + } + }, + "babel-preset-fbjs": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/babel-preset-fbjs/-/babel-preset-fbjs-3.4.0.tgz", + "integrity": "sha512-9ywCsCvo1ojrw0b+XYk7aFvTH6D9064t0RIL1rtMf3nsa02Xw41MS7sZw216Im35xj/UY0PDBQsa1brUDDF1Ow==", + "requires": { + "@babel/plugin-proposal-class-properties": "^7.0.0", + "@babel/plugin-proposal-object-rest-spread": "^7.0.0", + "@babel/plugin-syntax-class-properties": "^7.0.0", + "@babel/plugin-syntax-flow": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.0.0", + "@babel/plugin-syntax-object-rest-spread": "^7.0.0", + "@babel/plugin-transform-arrow-functions": "^7.0.0", + "@babel/plugin-transform-block-scoped-functions": "^7.0.0", + "@babel/plugin-transform-block-scoping": "^7.0.0", + "@babel/plugin-transform-classes": "^7.0.0", + "@babel/plugin-transform-computed-properties": "^7.0.0", + "@babel/plugin-transform-destructuring": "^7.0.0", + "@babel/plugin-transform-flow-strip-types": "^7.0.0", + "@babel/plugin-transform-for-of": "^7.0.0", + "@babel/plugin-transform-function-name": "^7.0.0", + "@babel/plugin-transform-literals": "^7.0.0", + "@babel/plugin-transform-member-expression-literals": "^7.0.0", + "@babel/plugin-transform-modules-commonjs": "^7.0.0", + "@babel/plugin-transform-object-super": "^7.0.0", + "@babel/plugin-transform-parameters": "^7.0.0", + "@babel/plugin-transform-property-literals": "^7.0.0", + "@babel/plugin-transform-react-display-name": "^7.0.0", + "@babel/plugin-transform-react-jsx": "^7.0.0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0", + "@babel/plugin-transform-spread": "^7.0.0", + "@babel/plugin-transform-template-literals": "^7.0.0", + "babel-plugin-syntax-trailing-function-commas": "^7.0.0-beta.0" + } + }, + "babel-preset-jest": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.4.0.tgz", + "integrity": "sha512-NK4jGYpnBvNxcGo7/ZpZJr51jCGT+3bwwpVIDY2oNfTxJJldRtB4VAcYdgp1loDE50ODuTu+yBjpMAswv5tlpg==", "dev": true, "requires": { - "cosmiconfig": "^5.0.0", - "cssnano-preset-default": "^4.0.7", - "is-resolvable": "^1.0.0", - "postcss": "^7.0.0" + "babel-plugin-jest-hoist": "^27.4.0", + "babel-preset-current-node-syntax": "^1.0.0" + } + }, + "bail": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.3.tgz", + "integrity": "sha512-1X8CnjFVQ+a+KW36uBNMTU5s8+v5FzeqrP7hTG5aTb4aPreSbZJlhwPon9VKMuEVgV++JM+SQrALY3kr7eswdg==", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "is-descriptor": "^1.0.0" } }, - "cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", - "dev": true, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "requires": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" + "kind-of": "^6.0.0" } }, - "import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "base64-js": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", + "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==" + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "dev": true + }, + "batch-processor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/batch-processor/-/batch-processor-1.0.0.tgz", + "integrity": "sha1-dclcMrdI4IUNEMKxaPa9vpiRrOg=", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "optional": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "before-after-hook": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-1.4.0.tgz", + "integrity": "sha512-l5r9ir56nda3qu14nAXIlyq1MmUSs0meCIaFAh8HwkFwP1F8eToOuS3ah2VAHHcY04jaYD7FpJC5JTXHYRbkzg==", + "dev": true + }, + "benchmark": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/benchmark/-/benchmark-2.1.4.tgz", + "integrity": "sha1-CfPeMckWQl1JjMLuVloOvzwqVik=", + "dev": true, + "requires": { + "lodash": "^4.17.4", + "platform": "^1.3.3" + } + }, + "better-opn": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/better-opn/-/better-opn-2.1.1.tgz", + "integrity": "sha512-kIPXZS5qwyKiX/HcRvDYfmBQUa8XP17I0mYZZ0y4UhpYOSvtsLHDYqmomS+Mj20aDvD3knEiQ0ecQy2nhio3yA==", + "dev": true, + "requires": { + "open": "^7.0.3" + }, + "dependencies": { + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "dev": true, "requires": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" + "is-docker": "^2.0.0" } }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "open": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", "dev": true, "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" } + } + } + }, + "big-integer": { + "version": "1.6.48", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.48.tgz", + "integrity": "sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w==" + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true + }, + "binary": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", + "integrity": "sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=", + "dev": true, + "requires": { + "buffers": "~0.1.1", + "chainsaw": "~0.1.0" + } + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "optional": true, + "requires": { + "file-uri-to-path": "1.0.0" + } + }, + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + }, + "dependencies": { + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "dev": true, "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" } }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "dev": true }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" } } } }, - "cssnano-preset-default": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz", - "integrity": "sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==", - "dev": true, - "requires": { - "css-declaration-sorter": "^4.0.1", - "cssnano-util-raw-cache": "^4.0.1", - "postcss": "^7.0.0", - "postcss-calc": "^7.0.1", - "postcss-colormin": "^4.0.3", - "postcss-convert-values": "^4.0.1", - "postcss-discard-comments": "^4.0.2", - "postcss-discard-duplicates": "^4.0.2", - "postcss-discard-empty": "^4.0.1", - "postcss-discard-overridden": "^4.0.1", - "postcss-merge-longhand": "^4.0.11", - "postcss-merge-rules": "^4.0.3", - "postcss-minify-font-values": "^4.0.2", - "postcss-minify-gradients": "^4.0.2", - "postcss-minify-params": "^4.0.2", - "postcss-minify-selectors": "^4.0.2", - "postcss-normalize-charset": "^4.0.1", - "postcss-normalize-display-values": "^4.0.2", - "postcss-normalize-positions": "^4.0.2", - "postcss-normalize-repeat-style": "^4.0.2", - "postcss-normalize-string": "^4.0.2", - "postcss-normalize-timing-functions": "^4.0.2", - "postcss-normalize-unicode": "^4.0.1", - "postcss-normalize-url": "^4.0.1", - "postcss-normalize-whitespace": "^4.0.2", - "postcss-ordered-values": "^4.1.2", - "postcss-reduce-initial": "^4.0.3", - "postcss-reduce-transforms": "^4.0.2", - "postcss-svgo": "^4.0.2", - "postcss-unique-selectors": "^4.0.1" + "bluebird": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", + "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==", + "dev": true + }, + "bn.js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", + "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", + "dev": true + }, + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "dev": true, + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "ms": "2.0.0" + } + }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" } }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "safer-buffer": ">= 2.1.2 < 3" } }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", "dev": true }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "dev": true + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true } } }, - "cssnano-util-get-arguments": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", - "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=", - "dev": true + "body-scroll-lock": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/body-scroll-lock/-/body-scroll-lock-3.1.5.tgz", + "integrity": "sha512-Yi1Xaml0EvNA0OYWxXiYNqY24AfWkbA6w5vxE7GWxtKfzIbZM+Qw+aSmkgsbWzbHiy/RCSkUZBplVxTA+E4jJg==" }, - "cssnano-util-get-match": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", - "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=", - "dev": true + "bonjour": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", + "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "dev": true, + "requires": { + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" + }, + "dependencies": { + "array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "dev": true + } + } }, - "cssnano-util-raw-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", - "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" + }, + "boxen": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", "dev": true, "requires": { - "postcss": "^7.0.0" + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "color-convert": "^2.0.1" } }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "camelcase": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.1.tgz", + "integrity": "sha512-tVI4q5jjFV5CavAU8DXfza/TJcZutVKo/5Foskmsqcm0MsL91moHvwiGNnqaa2o6PF/7yT5ikDRcVcl8Rj6LCA==", + "dev": true + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "color-name": "~1.1.4" } }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" } } } }, - "cssnano-util-same-parent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", - "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==", - "dev": true + "bplist-creator": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.1.0.tgz", + "integrity": "sha512-sXaHZicyEEmY86WyueLTQesbeoH/mquvarJaQNbjuOQO+7gbFcDEWqKmcWA4cOTLzFlfgvkiVxolk1k5bBIpmg==", + "requires": { + "stream-buffers": "2.2.x" + } }, - "cssnano-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-2.0.1.tgz", - "integrity": "sha512-i8vLRZTnEH9ubIyfdZCAdIdgnHAUeQeByEeQ2I7oTilvP9oHO6RScpeq3GsFUVqeB8uZgOQ9pw8utofNn32hhQ==", - "dev": true + "bplist-parser": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.3.0.tgz", + "integrity": "sha512-zgmaRvT6AN1JpPPV+S0a1/FAtoxSreYDccZGIqEMSvZl9DMe70mJ7MFzpxa1X+gHVdkToE2haRUHHMiW1OdejA==", + "requires": { + "big-integer": "1.6.x" + } }, - "csso": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/csso/-/csso-3.5.1.tgz", - "integrity": "sha512-vrqULLffYU1Q2tLdJvaCYbONStnfkfimRxXNaGjxMldI0C7JPBC4rB1RyjhfdZ4m1frm8pM9uRPKH3d2knZ8gg==", - "dev": true, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "requires": { - "css-tree": "1.0.0-alpha.29" + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" }, "dependencies": { - "css-tree": { - "version": "1.0.0-alpha.29", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.29.tgz", - "integrity": "sha512-sRNb1XydwkW9IOci6iB2xmy8IGCj6r/fr+JWitvJ2JxQRPzN3T4AGGVWCMlVmVwM1gtgALJRmGIlWv5ppnGGkg==", - "dev": true, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "requires": { - "mdn-data": "~1.1.0", - "source-map": "^0.5.3" + "is-extendable": "^0.1.0" } } } }, - "cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", - "dev": true + "brcast": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brcast/-/brcast-2.0.2.tgz", + "integrity": "sha512-Tfn5JSE7hrUlFcOoaLzVvkbgIemIorMIyoMr3TgvszWW7jFt2C9PdeMLtysYD9RU0MmU17b69+XJG1eRY2OBRg==" }, - "cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "dev": true, - "requires": { - "cssom": "~0.3.6" - }, - "dependencies": { - "cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - } - } + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "dev": true }, - "csstype": { - "version": "2.6.17", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.17.tgz", - "integrity": "sha512-u1wmTI1jJGzCJzWndZo8mk4wnPTZd1eOIYTYvuEyOQGfmDl3TrabCCfKnOC86FZwW/9djqTl933UF/cS425i9A==", + "browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", "dev": true }, - "currently-unhandled": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, "requires": { - "array-find-index": "^1.0.1" + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, - "cwd": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/cwd/-/cwd-0.10.0.tgz", - "integrity": "sha1-FyQAaUBXwioTsM8WFix+S3p/5Wc=", + "browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", "dev": true, "requires": { - "find-pkg": "^0.1.2", - "fs-exists-sync": "^0.1.0" + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" } }, - "cyclist": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz", - "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=", - "dev": true - }, - "damerau-levenshtein": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.6.tgz", - "integrity": "sha512-JVrozIeElnj3QzfUIt8tB8YMluBJom4Vw9qTPpjGYQ9fYlB3D/rb6OordUxf3xeFB35LKWs0xqcO5U6ySvBtug==", - "dev": true - }, - "dargs": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/dargs/-/dargs-4.1.0.tgz", - "integrity": "sha1-A6nbtLXC8Tm/FK5T8LiipqhvThc=", + "browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", "dev": true, "requires": { - "number-is-nan": "^1.0.0" + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "browserify-rsa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", "dev": true, "requires": { - "assert-plus": "^1.0.0" + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" } }, - "data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "browserify-sign": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", + "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", "dev": true, "requires": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.3", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" }, "dependencies": { - "tr46": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.0.2.tgz", - "integrity": "sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg==", - "dev": true, - "requires": { - "punycode": "^2.1.1" - } - }, - "webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, - "whatwg-url": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.4.0.tgz", - "integrity": "sha512-vwTUFf6V4zhcPkWp/4CQPr1TW9Ml6SF4lVyaIMBdJw5i6qUUJ1QWM4Z6YYVkfka0OUIzVo/0aNtGVGk256IKWw==", + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^2.0.2", - "webidl-conversions": "^6.1.0" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true } } }, - "date-fns": { - "version": "1.29.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.29.0.tgz", - "integrity": "sha512-lbTXWZ6M20cWH8N9S6afb0SBm6tMk+uUg6z3MqHPKE9atmsY3kJkTm8vKe93izJ2B2+q5MV990sM2CHgtAZaOw==", - "dev": true - }, - "dateformat": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", - "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", - "dev": true - }, - "dayjs": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.10.5.tgz", - "integrity": "sha512-BUFis41ikLz+65iH6LHQCDm4YPMj5r1YFLdupPIyM4SGcXMmtiLQ7U37i+hGS8urIuqe7I/ou3IS1jVc4nbN4g==" - }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "debuglog": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", - "integrity": "sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI=", - "dev": true - }, - "decache": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/decache/-/decache-4.5.1.tgz", - "integrity": "sha512-5J37nATc6FmOTLbcsr9qx7Nm28qQyg1SK4xyEHqM0IBkNhWFp0Sm+vKoWYHD8wq+OUEb9jLyaKFfzzd1A9hcoA==", + "browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", "dev": true, "requires": { - "callsite": "^1.0.0" + "pako": "~1.0.5" } }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" - }, - "decamelize-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", - "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", - "dev": true, + "browserslist": { + "version": "4.17.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.6.tgz", + "integrity": "sha512-uPgz3vyRTlEiCv4ee9KlsKgo2V6qPk7Jsn0KAn2OBqbqKo3iNcPEC1Ti6J4dwnz+aIRfEEEuOzC9IBk8tXUomw==", "requires": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" + "caniuse-lite": "^1.0.30001274", + "electron-to-chromium": "^1.3.886", + "escalade": "^3.1.1", + "node-releases": "^2.0.1", + "picocolors": "^1.0.0" }, "dependencies": { - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", - "dev": true + "electron-to-chromium": { + "version": "1.3.889", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.889.tgz", + "integrity": "sha512-suEUoPTD1mExjL9TdmH7cvEiWJVM2oEiAi+Y1p0QKxI2HcRlT44qDTP2c1aZmVwRemIPYOpxmV7CxQCOWcm4XQ==" + }, + "node-releases": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", + "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==" } } }, - "decimal.js": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.2.1.tgz", - "integrity": "sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw==", - "dev": true + "bser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.0.0.tgz", + "integrity": "sha1-mseNPtXZFYBP2HrLFYvHlxR6Fxk=", + "requires": { + "node-int64": "^0.4.0" + } }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + "btoa-lite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/btoa-lite/-/btoa-lite-1.0.0.tgz", + "integrity": "sha1-M3dm2hWAEhD92VbCLpxokaudAzc=", + "dev": true }, - "decompress-response": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-5.0.0.tgz", - "integrity": "sha512-TLZWWybuxWgoW7Lykv+gq9xvzOsUjQ9tF09Tj6NSTYGMTCHNXzrPnD6Hi+TgZq19PyTAGH4Ll/NIM/eTGglnMw==", + "buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", "dev": true, "requires": { - "mimic-response": "^2.0.0" + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" } }, - "dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", "dev": true }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "buffer-from": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.0.tgz", + "integrity": "sha512-c5mRlguI/Pe2dSZmpER62rSCu0ryKmWddzRYsuXc50U2/g8jMOulc31VZMa4mYx31U5xsmSOpDCgH88Vl9cDGQ==" + }, + "buffer-indexof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", + "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", "dev": true }, - "deep-freeze": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/deep-freeze/-/deep-freeze-0.0.1.tgz", - "integrity": "sha1-OgsABd4YZygZ39OM0x+RF5yJPoQ=", + "buffer-indexof-polyfill": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz", + "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==", "dev": true }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", "dev": true }, - "deep-object-diff": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/deep-object-diff/-/deep-object-diff-1.1.0.tgz", - "integrity": "sha512-b+QLs5vHgS+IoSNcUE4n9HP2NwcHj7aqnJWsjPtuG75Rh5TOaGt0OjAYInh77d5T16V5cRDC+Pw/6ZZZiETBGw==", + "buffers": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", + "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=", "dev": true }, - "deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", "dev": true }, - "defaults": { + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "dev": true + }, + "builtins": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", - "requires": { - "clone": "^1.0.2" - } + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", + "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", + "dev": true }, - "defer-to-connect": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.0.tgz", - "integrity": "sha512-bYL2d05vOSf1JEZNx5vSAtPuBMkX8K9EUutg7zlKvTqKXHt7RhWJFbmd7qakVuf13i+IkGmp6FwSsONOf6VYIg==", + "byline": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz", + "integrity": "sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE=", "dev": true }, - "define-properties": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz", - "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=", - "requires": { - "foreach": "^2.0.5", - "object-keys": "^1.0.8" - } + "byte-size": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/byte-size/-/byte-size-5.0.1.tgz", + "integrity": "sha512-/XuKeqWocKsYa/cBY1YbSJSWWqTi4cFgr9S6OyM7PBaPbr9zvNGwWP33vt0uqGhwDdN+y3yhbXVILEUpnwEWGw==", + "dev": true + }, + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "c8": { + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/c8/-/c8-7.10.0.tgz", + "integrity": "sha512-OAwfC5+emvA6R7pkYFVBTOtI5ruf9DahffGmIqUc9l6wEh0h7iAFP6dt/V9Ioqlr2zW5avX9U9/w1I4alTRHkA==", + "dev": true, "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" + "@bcoe/v8-coverage": "^0.2.3", + "@istanbuljs/schema": "^0.1.2", + "find-up": "^5.0.0", + "foreground-child": "^2.0.0", + "istanbul-lib-coverage": "^3.0.1", + "istanbul-lib-report": "^3.0.0", + "istanbul-reports": "^3.0.2", + "rimraf": "^3.0.0", + "test-exclude": "^6.0.0", + "v8-to-istanbul": "^8.0.0", + "yargs": "^16.2.0", + "yargs-parser": "^20.2.7" }, "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "requires": { - "kind-of": "^6.0.0" + "color-convert": "^2.0.1" } }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, "requires": { - "kind-of": "^6.0.0" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" } }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "color-name": "~1.1.4" } - } - } - }, - "del": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/del/-/del-5.1.0.tgz", - "integrity": "sha512-wH9xOVHnczo9jN2IW68BabcecVPxacIA3g/7z6vhSU/4stOKQzeCRK0yD0A24WiAAUJmmVpWqrERcTxnLo3AnA==", - "dev": true, - "requires": { - "globby": "^10.0.1", - "graceful-fs": "^4.2.2", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.1", - "p-map": "^3.0.0", - "rimraf": "^3.0.0", - "slash": "^3.0.0" - }, - "dependencies": { - "@nodelib/fs.stat": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.2.tgz", - "integrity": "sha512-z8+wGWV2dgUhLqrtRYa03yDx4HWMvXKi1z8g3m2JyxAx8F7xk74asqPk5LAETjqDSGLFML/6CDl0+yFunSYicw==", - "dev": true }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", "dev": true, "requires": { - "fill-range": "^7.0.1" + "safe-buffer": "~5.1.1" } }, - "fast-glob": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.0.4.tgz", - "integrity": "sha512-wkIbV6qg37xTJwqSsdnIphL1e+LaGz4AIQqr00mIubMaEhv1/HEmJ0uuCGZRNRUkZZmOB5mJKO0ZUTVq+SxMQg==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.1", - "@nodelib/fs.walk": "^1.2.1", - "glob-parent": "^5.0.0", - "is-glob": "^4.0.1", - "merge2": "^1.2.3", - "micromatch": "^4.0.2" - } + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "requires": { - "to-regex-range": "^5.0.1" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" } }, - "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "p-locate": "^5.0.0" } }, - "glob-parent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.0.0.tgz", - "integrity": "sha512-Z2RwiujPRGluePM6j699ktJYxmPpJKCfpGA13jz2hmFZC7gKetzrWvg5KN3+OsIFmydGyZ1AVwERCq1w/ZZwRg==", + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "requires": { - "is-glob": "^4.0.1" + "yocto-queue": "^0.1.0" } }, - "globby": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.1.tgz", - "integrity": "sha512-sSs4inE1FB2YQiymcmTv6NWENryABjUNPeWhOvmn4SjtKybglsyPZxFB3U1/+L1bYi0rNZDqCLlHyLYDl1Pq5A==", + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "requires": { - "@types/glob": "^7.1.1", - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.0.3", - "glob": "^7.1.3", - "ignore": "^5.1.1", - "merge2": "^1.2.3", - "slash": "^3.0.0" + "p-limit": "^3.0.2" } }, - "graceful-fs": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz", - "integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==", + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true }, - "ignore": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.4.tgz", - "integrity": "sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A==", + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", "dev": true }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "requires": { - "is-extglob": "^2.1.1" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" } }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } }, - "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "v8-to-istanbul": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.0.tgz", + "integrity": "sha512-/PRhfd8aTNp9Ggr62HPzXg2XasNFGy5PBt0Rp04du7/8GNNSgxFL6WBTkgMKSL9bFjH+8kKEG3f37FmxiTqUUA==", "dev": true, "requires": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" } }, - "path-type": { - "version": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "requires": { - "is-number": "^7.0.0" + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" } + }, + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true } } }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "delegate": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", - "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==" - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", - "dev": true - }, - "denodeify": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/denodeify/-/denodeify-1.2.1.tgz", - "integrity": "sha1-OjYof1A05pnnV3kBBSwubJQlFjE=" - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" - }, - "deprecation": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.0.0.tgz", - "integrity": "sha512-lbQN037mB3VfA2JFuguM5GCJ+zPinMeCrFe+AfSZ6eqrnJA/Fs+EYMnd6Nb2mn9lf2jO9xwEd9o9lic+D4vkcw==", - "dev": true - }, - "des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" - }, - "detab": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/detab/-/detab-2.0.4.tgz", - "integrity": "sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g==", - "dev": true, - "requires": { - "repeat-string": "^1.5.4" - } - }, - "detect-file": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", - "dev": true - }, - "detect-indent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", - "integrity": "sha1-OHHMCmoALow+Wzz38zYmRnXwa50=", - "dev": true - }, - "detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true - }, - "detect-port-alt": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", - "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", + "cacache": { + "version": "12.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", + "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", "dev": true, "requires": { - "address": "^1.0.1", - "debug": "^2.6.0" + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" }, "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", "dev": true, "requires": { - "ms": "2.0.0" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "dev": true + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" } + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true } } }, - "devtools-protocol": { - "version": "0.0.883894", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.883894.tgz", - "integrity": "sha512-33idhm54QJzf3Q7QofMgCvIVSd2o9H3kQPWaKT/fhoZh+digc+WSiMhbkeG3iN79WY4Hwr9G05NpbhEVrsOYAg==", - "dev": true - }, - "dezalgo": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz", - "integrity": "sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY=", - "dev": true, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", "requires": { - "asap": "^2.0.0", - "wrappy": "1" + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" } }, - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==" - }, - "diff-sequences": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", - "integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==", - "dev": true - }, - "diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "cacheable-lookup": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-2.0.1.tgz", + "integrity": "sha512-EMMbsiOTcdngM/K6gV/OxF2x0t07+vMOWxZNSCRQMjO2MY2nhZQ6OYhOOpyQrbhqsgtvKGI7hcq6xjnA92USjg==", "dev": true, "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" + "@types/keyv": "^3.1.1", + "keyv": "^4.0.0" } }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "cacheable-request": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.1.tgz", + "integrity": "sha512-lt0mJ6YAnsrBErpTMWeu5kl/tg9xMAWjavYTN6VQXM1A/teBITuNcccXsCxF0tDQQJf9DfAaX5O4e0zp0KlfZw==", "dev": true, "requires": { - "path-type": "^4.0.0" + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^2.0.0" }, "dependencies": { - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "get-stream": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz", + "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", "dev": true - } - } - }, - "direction": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/direction/-/direction-1.0.4.tgz", - "integrity": "sha512-GYqKi1aH7PJXxdhTeZBFrg8vUBeKXi+cNprXsC1kpJcbcVnV9wBsrOu1cQEdG0WeQwlfHiy3XvnKfIrJ2R0NzQ==" - }, - "discontinuous-range": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz", - "integrity": "sha1-44Mx8IRLukm5qctxx3FYWqsbxlo=", - "dev": true - }, - "docker-compose": { - "version": "0.22.2", - "resolved": "https://registry.npmjs.org/docker-compose/-/docker-compose-0.22.2.tgz", - "integrity": "sha512-iXWb5+LiYmylIMFXvGTYsjI1F+Xyx78Jm/uj1dxwwZLbWkUdH6yOXY5Nr3RjbYX15EgbGJCq78d29CmWQQQMPg==", - "dev": true - }, - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "document.contains": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/document.contains/-/document.contains-1.0.2.tgz", - "integrity": "sha512-YcvYFs15mX8m3AO1QNQy3BlIpSMfNRj3Ujk2BEJxsZG+HZf7/hZ6jr7mDpXrF8q+ff95Vef5yjhiZxm8CGJr6Q==", - "requires": { - "define-properties": "^1.1.3" - }, - "dependencies": { - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + }, + "normalize-url": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", + "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==", + "dev": true + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, "requires": { - "object-keys": "^1.0.12" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } } } }, - "dom-accessibility-api": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.4.tgz", - "integrity": "sha512-TvrjBckDy2c6v6RLxPv5QXOnU+SmF9nBII5621Ve5fu6Z/BDrENurBEvlC1f44lKEUVqOpK4w9E5Idc5/EgkLQ==", - "dev": true - }, - "dom-converter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", - "dev": true, + "call-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.0.tgz", + "integrity": "sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w==", "requires": { - "utila": "~0.4" + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.0" } }, - "dom-helpers": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", - "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", - "dev": true, + "call-me-maybe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", + "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", + "dev": true + }, + "caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", "requires": { - "@babel/runtime": "^7.8.7", - "csstype": "^3.0.2" + "callsites": "^2.0.0" }, "dependencies": { - "csstype": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.8.tgz", - "integrity": "sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw==", - "dev": true + "callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=" } } }, - "dom-scroll-into-view": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/dom-scroll-into-view/-/dom-scroll-into-view-1.2.1.tgz", - "integrity": "sha1-6PNnMt0ImwIBqI14Fdw/iObWbH4=" - }, - "dom-serializer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", - "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", + "caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", "requires": { - "domelementtype": "~1.1.1", - "entities": "~1.1.1" - }, - "dependencies": { - "domelementtype": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", - "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=" - } + "caller-callsite": "^2.0.0" } }, - "dom-walk": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", - "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==", + "callsite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", "dev": true }, - "domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", - "dev": true + "callsites": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.0.0.tgz", + "integrity": "sha512-tWnkwu9YEq2uzlBDI4RcLn8jrFvF9AOi8PxDNU3hZZjJcjkcRAq3vCI+vZcg1SuxISDYe86k9VZFwAxDiJGoAw==" }, - "domelementtype": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", - "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=" + "camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dev": true, + "requires": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } }, - "domexception": { + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "camelcase-css": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", - "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true + }, + "camelcase-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", "dev": true, "requires": { - "webidl-conversions": "^5.0.0" + "camelcase": "^2.0.0", + "map-obj": "^1.0.0" }, "dependencies": { - "webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", "dev": true } } }, - "domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", - "requires": { - "domelementtype": "1" - } - }, - "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - } + "camelize": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz", + "integrity": "sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs=" }, - "dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", "dev": true, "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" } }, - "dot-prop": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", - "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", - "dev": true, + "caniuse-lite": { + "version": "1.0.30001292", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001292.tgz", + "integrity": "sha512-jnT4Tq0Q4ma+6nncYQVe7d73kmDmE9C3OGTx3MvW7lBM/eY1S1DZTMBON7dqV481RhNiS5OxD7k9JQvmDOTirw==" + }, + "capture-exit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", + "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", "requires": { - "is-obj": "^1.0.0" + "rsvp": "^4.8.4" } }, - "dotenv": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", - "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", + "case-sensitive-paths-webpack-plugin": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz", + "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==", "dev": true }, - "dotenv-defaults": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/dotenv-defaults/-/dotenv-defaults-1.1.1.tgz", - "integrity": "sha512-6fPRo9o/3MxKvmRZBD3oNFdxODdhJtIy1zcJeUSCs6HCy4tarUpd+G67UTU9tF6OWXeSPqsm4fPAB+2eY9Rt9Q==", + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "ccount": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.0.3.tgz", + "integrity": "sha512-Jt9tIBkRc9POUof7QA/VwWd+58fKkEEfI+/t1/eOlxKM7ZhrczNzMFefge7Ai+39y1pR/pP6cI19guHy3FSLmw==", + "dev": true + }, + "chainsaw": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", + "integrity": "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=", "dev": true, "requires": { - "dotenv": "^6.2.0" + "traverse": ">=0.3.0 <0.4" }, "dependencies": { - "dotenv": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-6.2.0.tgz", - "integrity": "sha512-HygQCKUBSFl8wKQZBSemMywRWcEDNidvNbjGVyZu3nbZ8qq9ubiPoGLMdRDpfSrpkkm9BXYFkpKxxFX38o/76w==", + "traverse": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", + "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=", "dev": true } } }, - "dotenv-expand": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", - "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", - "dev": true - }, - "dotenv-webpack": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/dotenv-webpack/-/dotenv-webpack-1.8.0.tgz", - "integrity": "sha512-o8pq6NLBehtrqA8Jv8jFQNtG9nhRtVqmoD4yWbgUyoU3+9WBlPe+c2EAiaJok9RB28QvrWvdWLZGeTT5aATDMg==", - "dev": true, - "requires": { - "dotenv-defaults": "^1.0.2" - } - }, - "downloadjs": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/downloadjs/-/downloadjs-1.4.7.tgz", - "integrity": "sha1-9p+W+UDg0FU9rCkROYZaPNAQHjw=" - }, - "downshift": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/downshift/-/downshift-6.1.0.tgz", - "integrity": "sha512-MnEJERij+1pTVAsOPsH3q9MJGNIZuu2sT90uxOCEOZYH6sEzkVGtUcTBVDRQkE8y96zpB7uEbRn24aE9VpHnZg==", + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", "requires": { - "@babel/runtime": "^7.12.5", - "compute-scroll-into-view": "^1.0.16", - "prop-types": "^15.7.2", - "react-is": "^17.0.1" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "dependencies": { - "react-is": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.1.tgz", - "integrity": "sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA==" + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } } } }, - "duplexer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", - "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", + "char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", "dev": true }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "character-entities": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.2.tgz", + "integrity": "sha512-sMoHX6/nBiy3KKfC78dnEalnpn0Az0oSNvqUWYTtYrhRI5iUIYsROU48G+E+kMFQzqXaJ8kHJZ85n7y6/PHgwQ==", "dev": true }, - "duplexify": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.0.tgz", - "integrity": "sha512-fO3Di4tBKJpYTFHAxTU00BcfWMY9w24r/x21a6rZRbsD/ToUgGxsMbiGRmB7uVAXeGKXD9MwiLZa5E97EVgIRQ==", - "dev": true, - "requires": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - } - }, - "ecc-jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", - "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", - "dev": true, - "optional": true, - "requires": { - "jsbn": "~0.1.0" - } + "character-entities-html4": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.2.tgz", + "integrity": "sha512-sIrXwyna2+5b0eB9W149izTPJk/KkJTg6mEzDGibwBUkyH1SbDa+nf515Ppdi3MaH35lW0JFJDWeq9Luzes1Iw==", + "dev": true }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + "character-entities-legacy": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.2.tgz", + "integrity": "sha512-9NB2VbXtXYWdXzqrvAHykE/f0QJxzaKIpZ5QzNZrrgQ7Iyxr2vnfS8fCBNVW9nUEZE0lo57nxKRqnzY/dKrwlA==", + "dev": true }, - "electron-to-chromium": { - "version": "1.3.768", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.768.tgz", - "integrity": "sha512-I4UMZHhVSK2pwt8jOIxTi3GIuc41NkddtKT/hpuxp9GO5UWJgDKTBa4TACppbVAuKtKbMK6BhQZvT5tFF1bcNA==", + "character-reference-invalid": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.2.tgz", + "integrity": "sha512-7I/xceXfKyUJmSAn/jw8ve/9DyOP7XxufNYLI9Px7CmsKgEUaZLUTax6nZxGQtaoiZCjpu6cHPj20xC/vqRReQ==", "dev": true }, - "elegant-spinner": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz", - "integrity": "sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=", + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "dev": true }, - "element-resize-detector": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/element-resize-detector/-/element-resize-detector-1.2.3.tgz", - "integrity": "sha512-+dhNzUgLpq9ol5tyhoG7YLoXL3ssjfFW+0gpszXPwRU6NjGr1fVHMEAF8fVzIiRJq57Nre0RFeIjJwI8Nh2NmQ==", + "check-node-version": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/check-node-version/-/check-node-version-4.1.0.tgz", + "integrity": "sha512-TSXGsyfW5/xY2QseuJn8/hleO2AU7HxVCdkc900jp1vcfzF840GkjvRT7CHl8sRtWn23n3X3k0cwH9RXeRwhfw==", "dev": true, "requires": { - "batch-processor": "1.0.0" + "chalk": "^3.0.0", + "map-values": "^1.0.1", + "minimist": "^1.2.0", + "object-filter": "^1.0.2", + "run-parallel": "^1.1.4", + "semver": "^6.3.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, - "elliptic": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.2.tgz", - "integrity": "sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==", + "cheerio": { + "version": "1.0.0-rc.3", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.3.tgz", + "integrity": "sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA==", "dev": true, "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" + "css-select": "~1.2.0", + "dom-serializer": "~0.1.1", + "entities": "~1.1.1", + "htmlparser2": "^3.9.1", + "lodash": "^4.15.0", + "parse5": "^3.0.1" + }, + "dependencies": { + "dom-serializer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", + "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", + "dev": true, + "requires": { + "domelementtype": "^1.3.0", + "entities": "^1.1.1" + } + } } }, - "emittery": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.7.2.tgz", - "integrity": "sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ==", - "dev": true - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" - }, - "emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", - "dev": true - }, - "emotion-theming": { - "version": "10.0.27", - "resolved": "https://registry.npmjs.org/emotion-theming/-/emotion-theming-10.0.27.tgz", - "integrity": "sha512-MlF1yu/gYh8u+sLUqA0YuA9JX0P4Hb69WlKc/9OLo+WCXuX6sy/KoIa+qJimgmr2dWqnypYKYPX37esjDBbhdw==", + "chokidar": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", + "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", "dev": true, "requires": { - "@babel/runtime": "^7.5.5", - "@emotion/weak-memoize": "0.2.5", - "hoist-non-react-statics": "^3.3.0" + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "dependencies": { + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + } } }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true }, - "encoding": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", - "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", - "requires": { - "iconv-lite": "~0.4.13" - } + "chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true }, - "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", - "requires": { - "once": "^1.4.0" - } + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" }, - "endent": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/endent/-/endent-2.1.0.tgz", - "integrity": "sha512-r8VyPX7XL8U01Xgnb1CjZ3XV+z90cXIJ9JPE/R9SEC9vpw2P6CfsRPJmp20DppC5N7ZAMCmjYkJIa744Iyg96w==", + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "dev": true, "requires": { - "dedent": "^0.7.0", - "fast-json-parse": "^1.0.3", - "objectorarray": "^1.0.5" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, - "enhanced-resolve": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", - "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", - "dev": true, + "cjs-module-lexer": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", + "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", + "dev": true + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" }, "dependencies": { - "memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", - "dev": true, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" + "is-descriptor": "^0.1.0" } } } }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "classnames": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.1.tgz", + "integrity": "sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA==" + }, + "clean-css": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.4.tgz", + "integrity": "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==", "dev": true, "requires": { - "ansi-colors": "^4.1.1" + "source-map": "~0.6.0" }, "dependencies": { - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true } } }, - "entities": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", - "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=" - }, - "env-paths": { + "clean-stack": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.0.tgz", - "integrity": "sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA==", - "dev": true - }, - "envinfo": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.5.0.tgz", - "integrity": "sha512-jDgnJaF/Btomk+m3PZDTTCb5XIIIX3zYItnCRfF73zVgvinLoRomuhi75Y4su0PtQxWz4v66XnLLckyvyJTOIQ==", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "dev": true }, - "enzyme": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/enzyme/-/enzyme-3.11.0.tgz", - "integrity": "sha512-Dw8/Gs4vRjxY6/6i9wU0V+utmQO9kvh9XLnz3LIudviOnVYDEe2ec+0k+NQoMamn1VrjKgCUOWj5jG/5M5M0Qw==", + "clean-webpack-plugin": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/clean-webpack-plugin/-/clean-webpack-plugin-3.0.0.tgz", + "integrity": "sha512-MciirUH5r+cYLGCOL5JX/ZLzOZbVr1ot3Fw+KcvbhUb6PM+yycqd9ZhIlcigQ5gl+XhppNmw3bEFuaaMNyLj3A==", "dev": true, "requires": { - "array.prototype.flat": "^1.2.3", - "cheerio": "^1.0.0-rc.3", - "enzyme-shallow-equal": "^1.0.1", - "function.prototype.name": "^1.1.2", - "has": "^1.0.3", - "html-element-map": "^1.2.0", - "is-boolean-object": "^1.0.1", - "is-callable": "^1.1.5", - "is-number-object": "^1.0.4", - "is-regex": "^1.0.5", - "is-string": "^1.0.5", - "is-subset": "^0.1.1", - "lodash.escape": "^4.0.1", - "lodash.isequal": "^4.5.0", - "object-inspect": "^1.7.0", - "object-is": "^1.0.2", - "object.assign": "^4.1.0", - "object.entries": "^1.1.1", - "object.values": "^1.1.1", - "raf": "^3.4.1", - "rst-selector-parser": "^2.2.3", - "string.prototype.trim": "^1.2.1" + "@types/webpack": "^4.4.31", + "del": "^4.1.1" }, "dependencies": { - "array.prototype.flat": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz", - "integrity": "sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ==", + "del": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", + "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", "dev": true, "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.5", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz", - "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.1.5", - "is-regex": "^1.0.5", - "object-inspect": "^1.7.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimleft": "^2.1.1", - "string.prototype.trimright": "^2.1.1" - } - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - } + "@types/glob": "^7.1.1", + "globby": "^6.1.0", + "is-path-cwd": "^2.0.0", + "is-path-in-cwd": "^2.0.0", + "p-map": "^2.0.0", + "pify": "^4.0.1", + "rimraf": "^2.6.3" } }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", "dev": true, "requires": { - "object-keys": "^1.0.12" + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } } }, - "dom-serializer": { - "version": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", - "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", - "requires": { - "domelementtype": "^1.3.0", - "entities": "^1.1.1" - } + "p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "dev": true }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true }, - "function.prototype.name": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.2.tgz", - "integrity": "sha512-C8A+LlHBJjB2AdcRPorc5JvJ5VUoWlXdEHLOJdCI7kjHEtGTpHQUiqMvCIKUwIsGwZX2jZJy761AXsn356bJQg==", + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dev": true, "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1", - "functions-have-names": "^1.2.0" + "glob": "^7.1.3" }, "dependencies": { - "es-abstract": { - "version": "1.17.5", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz", - "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==", + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "dev": true, "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.1.5", - "is-regex": "^1.0.5", - "object-inspect": "^1.7.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimleft": "^2.1.1", - "string.prototype.trimright": "^2.1.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true } } + } + } + }, + "cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "dev": true + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "cli-spinners": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.2.0.tgz", + "integrity": "sha512-tgU3fKwzYjiLEQgPMD9Jt+JjHVL9kW93FiIMX/l7rivvOD4/LL0Mf7gda3+4U2KJBloybwgj5KEoQgGRioMiKQ==" + }, + "cli-table3": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.0.tgz", + "integrity": "sha512-gnB85c3MGC7Nm9I/FkiasNBOKjOiO1RNuXXarQms37q4QMpWdlbBgD/VnOStA2faG1dpXMv31RFApjX1/QdgWQ==", + "dev": true, + "requires": { + "colors": "^1.1.2", + "object-assign": "^4.1.0", + "string-width": "^4.2.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true, + "optional": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, - "is-callable": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", - "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true }, - "is-regex": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", - "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "requires": { - "has": "^1.0.3" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" } }, - "is-string": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", - "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + } + } + }, + "cli-truncate": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-0.2.1.tgz", + "integrity": "sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ=", + "dev": true, + "requires": { + "slice-ansi": "0.0.4", + "string-width": "^1.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true }, - "is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "requires": { - "has-symbols": "^1.0.1" + "number-is-nan": "^1.0.0" } }, - "object-inspect": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", - "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", - "dev": true - }, - "object-is": { + "string-width": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.0.2.tgz", - "integrity": "sha512-Epah+btZd5wrrfjkJZq1AOB9O6OxUQto45hzFd7lXGrpHPGE0W1k+426yrZV+k6NJOzLNNW/nVsmZdIWsAqoOQ==", - "dev": true - }, - "object.entries": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.1.tgz", - "integrity": "sha512-ilqR7BgdyZetJutmDPfXCDffGa0/Yzl2ivVNpbx/g4UeWrCdRnFDUBrKJGLhGieRHDATnyZXWBeCb29k9CJysQ==", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1", - "function-bind": "^1.1.1", - "has": "^1.0.3" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.5", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz", - "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.1.5", - "is-regex": "^1.0.5", - "object-inspect": "^1.7.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimleft": "^2.1.1", - "string.prototype.trimright": "^2.1.1" - } - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - } + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, - "object.values": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", - "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==", + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1", - "function-bind": "^1.1.1", - "has": "^1.0.3" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.5", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz", - "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.1.5", - "is-regex": "^1.0.5", - "object-inspect": "^1.7.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimleft": "^2.1.1", - "string.prototype.trimright": "^2.1.1" - } - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - } + "ansi-regex": "^2.0.0" } + } + } + }, + "cli-width": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", + "dev": true + }, + "clipboard": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.8.tgz", + "integrity": "sha512-Y6WO0unAIQp5bLmk1zdThRhgJt/x3ks6f30s3oE3H1mgIEU33XyQjEf8gsf6DxC7NPX8Y1SsNWjUjL/ywLnnbQ==", + "requires": { + "good-listener": "^1.2.2", + "select": "^1.1.2", + "tiny-emitter": "^2.0.0" + } + }, + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, - "react-is": { - "version": "16.8.6", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.6.tgz", - "integrity": "sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA==" + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, - "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, - "string.prototype.trimleft": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz", - "integrity": "sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==", - "dev": true, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5", - "string.prototype.trimstart": "^1.0.0" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.5", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz", - "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.1.5", - "is-regex": "^1.0.5", - "object-inspect": "^1.7.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimleft": "^2.1.1", - "string.prototype.trimright": "^2.1.1" - } - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - } + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" } }, - "string.prototype.trimright": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz", - "integrity": "sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==", - "dev": true, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5", - "string.prototype.trimend": "^1.0.0" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.5", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz", - "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.1.5", - "is-regex": "^1.0.5", - "object-inspect": "^1.7.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimleft": "^2.1.1", - "string.prototype.trimright": "^2.1.1" - } - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - } + "ansi-regex": "^5.0.1" } } } }, - "enzyme-shallow-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/enzyme-shallow-equal/-/enzyme-shallow-equal-1.0.1.tgz", - "integrity": "sha512-hGA3i1so8OrYOZSM9whlkNmVHOicJpsjgTzC+wn2JMJXhq1oO4kA4bJ5MsfzSIcC71aLDKzJ6gZpIxrqt3QTAQ==", + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=" + }, + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + } + }, + "clone-regexp": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-2.2.0.tgz", + "integrity": "sha512-beMpP7BOtTipFuW8hrJvREQ2DrRu3BE7by0ZpibtfBA+qfHYvMGTc2Yb1JMYPKg/JUw0CHYvpg796aNTSW9z7Q==", "dev": true, "requires": { - "has": "^1.0.3", - "object-is": "^1.0.2" + "is-regexp": "^2.0.0" }, "dependencies": { - "object-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.0.2.tgz", - "integrity": "sha512-Epah+btZd5wrrfjkJZq1AOB9O6OxUQto45hzFd7lXGrpHPGE0W1k+426yrZV+k6NJOzLNNW/nVsmZdIWsAqoOQ==", + "is-regexp": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-2.1.0.tgz", + "integrity": "sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA==", "dev": true } } }, - "enzyme-to-json": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/enzyme-to-json/-/enzyme-to-json-3.6.2.tgz", - "integrity": "sha512-Ynm6Z6R6iwQ0g2g1YToz6DWhxVnt8Dy1ijR2zynRKxTyBGA8rCDXU3rs2Qc4OKvUvc2Qoe1bcFK6bnPs20TrTg==", + "clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", "dev": true, "requires": { - "@types/cheerio": "^0.22.22", - "lodash": "^4.17.21", - "react-is": "^16.12.0" + "mimic-response": "^1.0.0" }, "dependencies": { - "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", "dev": true } } }, - "equivalent-key-map": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/equivalent-key-map/-/equivalent-key-map-0.2.2.tgz", - "integrity": "sha512-xvHeyCDbZzkpN4VHQj/n+j2lOwL0VWszG30X4cOrc9Y7Tuo2qCdZK/0AMod23Z5dCtNUbaju6p0rwOhHUk05ew==" + "clsx": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.1.tgz", + "integrity": "sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==", + "dev": true }, - "err-code": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-1.1.2.tgz", - "integrity": "sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA=", + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", "dev": true }, - "errno": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", - "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", - "dev": true, - "requires": { - "prr": "~1.0.1" - } + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true }, - "error": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/error/-/error-7.0.2.tgz", - "integrity": "sha1-pfdf/02ZJhJt2sDqXcOOaJFTywI=", - "dev": true, - "requires": { - "string-template": "~0.2.1", - "xtend": "~4.0.0" - } + "collapse-white-space": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.4.tgz", + "integrity": "sha512-YfQ1tAUZm561vpYD+5eyWN8+UsceQbSrqqlc/6zDY2gtAE+uZLSdkkovhnGpmCThsvKBFakq4EdY/FF93E8XIw==", + "dev": true }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "collect-v8-coverage": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", + "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", + "dev": true + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", "requires": { - "is-arrayish": "^0.2.1" + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" } }, - "error-stack-parser": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.6.tgz", - "integrity": "sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ==", + "color": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", "requires": { - "stackframe": "^1.1.1" + "color-convert": "^1.9.3", + "color-string": "^1.6.0" + }, + "dependencies": { + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + } } }, - "errorhandler": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/errorhandler/-/errorhandler-1.5.1.tgz", - "integrity": "sha512-rcOwbfvP1WTViVoUjcfZicVzjhjTuhSMntHh6mW3IrEiyE6mJyXvsToJUJGlGlw/2xU9P5whlWNGlIDVeCiT4A==", + "color-convert": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.2.tgz", + "integrity": "sha512-3NUJZdhMhcdPn8vJ9v2UQJoH0qqoGUkYTgFEPZaPjEtwmmKUfNV46zZmgB2M5M4DCEQHMaCfWHCxiBflLm04Tg==", "requires": { - "accepts": "~1.3.7", - "escape-html": "~1.0.3" + "color-name": "1.1.1" } }, - "es-abstract": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz", - "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==", + "color-name": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.1.tgz", + "integrity": "sha1-SxQVMEz1ACjqgWQ2Q72C6gWANok=" + }, + "color-string": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.0.tgz", + "integrity": "sha512-9Mrz2AQLefkH1UvASKj6v6hj/7eWgjnT/cVsR8CumieLoT+g900exWeNogqtweI8dxloXN9BDQTYro1oWu/5CQ==", "requires": { - "es-to-primitive": "^1.1.1", - "function-bind": "^1.1.1", - "has": "^1.0.1", - "is-callable": "^1.1.3", - "is-regex": "^1.0.4" + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" } }, - "es-array-method-boxes-properly": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", - "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", + "color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", "dev": true }, - "es-get-iterator": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.2.tgz", - "integrity": "sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ==", + "colord": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.4.0.tgz", + "integrity": "sha512-2306/NeTDOykDwvFQK0ctnP+9I5KQdqVm+IJAM6MsAr4vvy1llAdJyax4YmZoqTxdJ/lvRBwR8MqyJi/tupBAw==", + "dev": true + }, + "colorette": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", + "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==" + }, + "colors": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/colors/-/colors-0.5.1.tgz", + "integrity": "sha1-fQAj6usVTo7p/Oddy5I9DtFmd3Q=", + "dev": true + }, + "columnify": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.5.4.tgz", + "integrity": "sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs=", "dev": true, "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.0", - "has-symbols": "^1.0.1", - "is-arguments": "^1.1.0", - "is-map": "^2.0.2", - "is-set": "^2.0.2", - "is-string": "^1.0.5", - "isarray": "^2.0.5" + "strip-ansi": "^3.0.0", + "wcwidth": "^1.0.0" }, "dependencies": { - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true }, - "get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" + "ansi-regex": "^2.0.0" } - }, - "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true - }, - "isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true } } }, - "es-to-primitive": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz", - "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=", + "combined-stream": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", + "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", + "dev": true, "requires": { - "is-callable": "^1.1.1", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.1" + "delayed-stream": "~1.0.0" } }, - "es5-shim": { - "version": "4.5.15", - "resolved": "https://registry.npmjs.org/es5-shim/-/es5-shim-4.5.15.tgz", - "integrity": "sha512-FYpuxEjMeDvU4rulKqFdukQyZSTpzhg4ScQHrAosrlVpR6GFyaw14f74yn2+4BugniIS0Frpg7TvwZocU4ZMTw==", + "comma-separated-tokens": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", + "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==", "dev": true }, - "es6-promise": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", - "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", + "command-exists": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", + "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==" + }, + "commander": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.2.0.tgz", + "integrity": "sha512-e2i4wANQiSXgnrBlIatyHtP1odfUp0BbV5Y5nEGbxtIrStkEOAAzCUirvLBNXHLr7kwLvJl6V+4V3XV9x7Wd9w==", "dev": true }, - "es6-promisify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", - "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", - "dev": true, - "requires": { - "es6-promise": "^4.0.3" - } + "comment-parser": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.1.5.tgz", + "integrity": "sha512-RePCE4leIhBlmrqiYTvaqEeGYg7qpSl4etaIabKtdOQVi+mSTIBBklGUwIr79GXYnl3LpMwmDw4KeR2stNc6FA==", + "dev": true }, - "es6-shim": { - "version": "0.35.6", - "resolved": "https://registry.npmjs.org/es6-shim/-/es6-shim-0.35.6.tgz", - "integrity": "sha512-EmTr31wppcaIAgblChZiuN/l9Y7DPyw8Xtbg7fIVngn6zMW+IEBJDJngeKC3x6wr0V/vcA2wqeFnaw1bFJbDdA==", + "common-path-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", + "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", "dev": true }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + "compare-func": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", + "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", + "dev": true, + "requires": { + "array-ify": "^1.0.0", + "dot-prop": "^5.1.0" + }, + "dependencies": { + "dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "requires": { + "is-obj": "^2.0.0" + } + }, + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true + } + } }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" }, - "escodegen": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", - "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", + "compress-commons": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-2.1.1.tgz", + "integrity": "sha512-eVw6n7CnEMFzc3duyFVrQEuY1BlHR3rYsSztyG32ibGMW722i3C6IizEGMFmfMU+A+fALvBIwxN3czffTcdA+Q==", "dev": true, "requires": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" + "buffer-crc32": "^0.2.13", + "crc32-stream": "^3.0.1", + "normalize-path": "^3.0.0", + "readable-stream": "^2.3.6" }, "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true + } + } + }, + "compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "requires": { + "mime-db": ">= 1.43.0 < 2" + }, + "dependencies": { + "mime-db": { + "version": "1.47.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz", + "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==" + } + } + }, + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "requires": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "dependencies": { + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } } } }, - "eslint": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.17.0.tgz", - "integrity": "sha512-zJk08MiBgwuGoxes5sSQhOtibZ75pz0J35XTRlZOk9xMffhpA9BTbQZxoXZzOl5zMbleShbGwtw+1kGferfFwQ==", + "compute-scroll-into-view": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-1.0.16.tgz", + "integrity": "sha512-a85LHKY81oQnikatZYA90pufpZ6sQx++BoCxOEMsjpZx+ZnaKGQnCyCehTRr/1p9GBIAHTjcU9k71kSYWloLiQ==" + }, + "computed-style": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/computed-style/-/computed-style-0.1.4.tgz", + "integrity": "sha1-fzRP2FhLLkJb7cpKGvwOMAuwXXQ=" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "concurrently": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-3.5.0.tgz", + "integrity": "sha1-jPG3cHppFqeKT/W3e7BN7FSzebI=", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "@eslint/eslintrc": "^0.2.2", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "esquery": "^1.2.0", - "esutils": "^2.0.2", - "file-entry-cache": "^6.0.0", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", - "globals": "^12.1.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash": "^4.17.19", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.4", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "chalk": "0.5.1", + "commander": "2.6.0", + "date-fns": "^1.23.0", + "lodash": "^4.5.1", + "rx": "2.3.24", + "spawn-command": "^0.0.2-1", + "supports-color": "^3.2.3", + "tree-kill": "^1.1.0" }, "dependencies": { "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz", + "integrity": "sha1-DY6UaWej2BQ/k+JOKYUl/BsiNfk=", "dev": true }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "eslint-visitor-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", - "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", + "ansi-styles": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz", + "integrity": "sha1-6uy/Zs1waIJ2Cy9GkVgrj1XXp94=", "dev": true }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "chalk": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz", + "integrity": "sha1-Zjs6ZItotV0EaQ1JFnqoN4WPIXQ=", "dev": true, "requires": { - "estraverse": "^5.2.0" + "ansi-styles": "^1.1.0", + "escape-string-regexp": "^1.0.0", + "has-ansi": "^0.1.0", + "strip-ansi": "^0.3.0", + "supports-color": "^0.2.0" }, "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "supports-color": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz", + "integrity": "sha1-2S3iaU6z9nMjlz1649i1W0wiGQo=", "dev": true } } }, - "glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - }, - "dependencies": { - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - } - } - }, - "globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", - "dev": true, - "requires": { - "type-fest": "^0.8.1" - } - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - } - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "commander": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.6.0.tgz", + "integrity": "sha1-nfflL7Kgyw+4kFjugMMQQiXzfh0=", "dev": true }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "has-ansi": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz", + "integrity": "sha1-hPJlqujA5qiKEtcCKJS3VoiUxi4=", "dev": true, "requires": { - "shebang-regex": "^3.0.0" + "ansi-regex": "^0.2.0" } }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", "dev": true }, "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - }, - "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz", + "integrity": "sha1-JfSOoiynkYfzF0pNuHWTR7sSYiA=", "dev": true, "requires": { - "prelude-ls": "^1.2.1" + "ansi-regex": "^0.2.1" } }, - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "dev": true, "requires": { - "isexe": "^2.0.0" + "has-flag": "^1.0.0" } } } }, - "eslint-config-prettier": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-7.1.0.tgz", - "integrity": "sha512-9sm5/PxaFG7qNJvJzTROMM1Bk1ozXVTKI0buKOyb0Bsr1hrwi0H/TzxF/COtf1uxikIK8SwhX7K6zg78jAzbeA==", - "dev": true - }, - "eslint-import-resolver-node": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz", - "integrity": "sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==", + "config-chain": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz", + "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==", "dev": true, "requires": { - "debug": "^2.6.9", - "resolve": "^1.13.1" + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "requires": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" }, "dependencies": { "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, "requires": { "ms": "2.0.0" } - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, - "resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "dev": true, - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } } } }, - "eslint-module-utils": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.1.tgz", - "integrity": "sha512-ZXI9B8cxAJIH4nfkhTwcRTEAnrVfobYqwjWy/QMCZ8rHkZHFjf9yO4BzpiF9kCSfNlMG54eKigISHpX0+AaT4A==", + "connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "dev": true + }, + "console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true + }, + "consolidated-events": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/consolidated-events/-/consolidated-events-2.0.2.tgz", + "integrity": "sha512-2/uRVMdRypf5z/TW/ncD/66l75P5hH2vM/GR8Jf8HLc2xnfJtmina6F6du8+v4Z2vTrMo7jC+W1tmEEuuELgkQ==" + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true + }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", "dev": true, "requires": { - "debug": "^3.2.7", - "pkg-dir": "^2.0.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - } + "safe-buffer": "5.1.2" } }, - "eslint-plugin-eslint-comments": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-3.1.2.tgz", - "integrity": "sha512-QexaqrNeteFfRTad96W+Vi4Zj1KFbkHHNMMaHZEYcovKav6gdomyGzaxSDSL3GoIyUOo078wRAdYlu1caiauIQ==", + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true + }, + "conventional-changelog-angular": { + "version": "5.0.12", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.12.tgz", + "integrity": "sha512-5GLsbnkR/7A89RyHLvvoExbiGbd9xKdKqDTrArnPbOqBqG/2wIosu0fHwpeIRI8Tl94MhVNBXcLJZl92ZQ5USw==", "dev": true, "requires": { - "escape-string-regexp": "^1.0.5", - "ignore": "^5.0.5" - }, - "dependencies": { - "ignore": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.2.tgz", - "integrity": "sha512-vdqWBp7MyzdmHkkRWV5nY+PfGRbYbahfuvsBCh277tq+w9zyNi7h5CYJCK0kmzti9kU+O/cB7sE8HvKv6aXAKQ==", - "dev": true - } + "compare-func": "^2.0.0", + "q": "^1.5.1" } }, - "eslint-plugin-import": { - "version": "2.23.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.23.4.tgz", - "integrity": "sha512-6/wP8zZRsnQFiR3iaPFgh5ImVRM1WN5NUWfTIRqwOdeiGJlBcSk82o1FEVq8yXmy4lkIzTo7YhHCIxlU/2HyEQ==", + "conventional-changelog-core": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-3.2.3.tgz", + "integrity": "sha512-LMMX1JlxPIq/Ez5aYAYS5CpuwbOk6QFp8O4HLAcZxe3vxoCtABkhfjetk8IYdRB9CDQGwJFLR3Dr55Za6XKgUQ==", "dev": true, "requires": { - "array-includes": "^3.1.3", - "array.prototype.flat": "^1.2.4", - "debug": "^2.6.9", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.4", - "eslint-module-utils": "^2.6.1", - "find-up": "^2.0.0", - "has": "^1.0.3", - "is-core-module": "^2.4.0", - "minimatch": "^3.0.4", - "object.values": "^1.1.3", - "pkg-up": "^2.0.0", + "conventional-changelog-writer": "^4.0.6", + "conventional-commits-parser": "^3.0.3", + "dateformat": "^3.0.0", + "get-pkg-repo": "^1.0.0", + "git-raw-commits": "2.0.0", + "git-remote-origin-url": "^2.0.0", + "git-semver-tags": "^2.0.3", + "lodash": "^4.2.1", + "normalize-package-data": "^2.3.5", + "q": "^1.5.1", + "read-pkg": "^3.0.0", "read-pkg-up": "^3.0.0", - "resolve": "^1.20.0", - "tsconfig-paths": "^3.9.0" + "through2": "^3.0.0" }, "dependencies": { - "array.prototype.flat": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz", - "integrity": "sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg==", + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", "dev": true, "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1" + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" } }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "dev": true, "requires": { - "ms": "2.0.0" + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" } }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", "dev": true, "requires": { - "object-keys": "^1.0.12" + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" } }, - "es-abstract": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", - "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", + "read-pkg-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", + "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", "dev": true, "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.3", - "is-string": "^1.0.6", - "object-inspect": "^1.10.3", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" - }, - "dependencies": { - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - } + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "through2": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", + "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", + "dev": true, + "requires": { + "inherits": "^2.0.4", + "readable-stream": "2 || 3" + } + } + } + }, + "conventional-changelog-preset-loader": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz", + "integrity": "sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g==", + "dev": true + }, + "conventional-changelog-writer": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-4.1.0.tgz", + "integrity": "sha512-WwKcUp7WyXYGQmkLsX4QmU42AZ1lqlvRW9mqoyiQzdD+rJWbTepdWoKJuwXTS+yq79XKnQNa93/roViPQrAQgw==", + "dev": true, + "requires": { + "compare-func": "^2.0.0", + "conventional-commits-filter": "^2.0.7", + "dateformat": "^3.0.0", + "handlebars": "^4.7.6", + "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" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" } }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", "dev": true, "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "readable-stream": "3" } - }, - "get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + } + } + }, + "conventional-commits-filter": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz", + "integrity": "sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==", + "dev": true, + "requires": { + "lodash.ismatch": "^4.4.0", + "modify-values": "^1.0.0" + } + }, + "conventional-commits-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.0.tgz", + "integrity": "sha512-XmJiXPxsF0JhAKyfA2Nn+rZwYKJ60nanlbSWwwkGwLQFbugsc0gv1rzc7VbbUWAzJfR1qR87/pNgv9NgmxtBMQ==", + "dev": true, + "requires": { + "JSONStream": "^1.0.4", + "is-text-path": "^1.0.1", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^2.0.0", + "through2": "^4.0.0", + "trim-off-newlines": "^1.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" } }, - "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true - }, - "is-callable": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", - "dev": true - }, - "is-core-module": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", - "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", + "through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", "dev": true, "requires": { - "has": "^1.0.3" + "readable-stream": "3" } - }, - "is-regex": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", - "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", + } + } + }, + "conventional-recommended-bump": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-5.0.1.tgz", + "integrity": "sha512-RVdt0elRcCxL90IrNP0fYCpq1uGt2MALko0eyeQ+zQuDVWtMGAy9ng6yYn3kax42lCj9+XBxQ8ZN6S9bdKxDhQ==", + "dev": true, + "requires": { + "concat-stream": "^2.0.0", + "conventional-changelog-preset-loader": "^2.1.1", + "conventional-commits-filter": "^2.0.2", + "conventional-commits-parser": "^3.0.3", + "git-raw-commits": "2.0.0", + "git-semver-tags": "^2.0.3", + "meow": "^4.0.0", + "q": "^1.5.1" + }, + "dependencies": { + "camelcase-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz", + "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=", "dev": true, "requires": { - "call-bind": "^1.0.2", - "has-symbols": "^1.0.2" - }, - "dependencies": { - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - } + "camelcase": "^4.1.0", + "map-obj": "^2.0.0", + "quick-lru": "^1.0.0" } }, - "is-string": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", - "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", - "dev": true - }, - "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "concat-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", "dev": true, "requires": { - "has-symbols": "^1.0.2" + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" } }, "load-json-file": { @@ -31345,47 +30094,27 @@ "strip-bom": "^3.0.0" } }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - }, - "dependencies": { - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - } - } + "map-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz", + "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=", + "dev": true }, - "object.values": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.4.tgz", - "integrity": "sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg==", + "meow": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/meow/-/meow-4.0.1.tgz", + "integrity": "sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.2" - }, - "dependencies": { - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - } + "camelcase-keys": "^4.0.0", + "decamelize-keys": "^1.0.0", + "loud-rejection": "^1.0.0", + "minimist": "^1.1.3", + "minimist-options": "^3.0.1", + "normalize-package-data": "^2.3.4", + "read-pkg-up": "^3.0.0", + "redent": "^2.0.0", + "trim-newlines": "^2.0.0" } }, "parse-json": { @@ -31398,27 +30127,12 @@ "json-parse-better-errors": "^1.0.1" } }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, "pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true }, - "pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", - "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=", - "dev": true, - "requires": { - "find-up": "^2.1.0" - } - }, "read-pkg": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", @@ -31440,58 +30154,25 @@ "read-pkg": "^3.0.0" } }, - "resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "dev": true, - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - }, - "string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "dependencies": { - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - } + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" } }, - "string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "redent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz", + "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "dependencies": { - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - } + "indent-string": "^3.0.0", + "strip-indent": "^2.0.0" } }, "strip-bom": { @@ -31499,1248 +30180,1272 @@ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true + }, + "strip-indent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", + "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=", + "dev": true + }, + "trim-newlines": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz", + "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=", + "dev": true } } }, - "eslint-plugin-jest": { - "version": "24.1.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-24.1.3.tgz", - "integrity": "sha512-dNGGjzuEzCE3d5EPZQ/QGtmlMotqnYWD/QpCZ1UuZlrMAdhG5rldh0N0haCvhGnUkSeuORS5VNROwF9Hrgn3Lg==", - "dev": true, - "requires": { - "@typescript-eslint/experimental-utils": "^4.0.1" - } + "convert-source-map": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz", + "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=" }, - "eslint-plugin-jsdoc": { - "version": "34.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-34.1.0.tgz", - "integrity": "sha512-7uk6vD92LCGBLwl7imvf7YzZrMbLmHZVSULBJClZpYTNdTpPXOtuPNKDi8nLcXYtZf3UopNs5qR7coapBSaUtw==", + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true + }, + "copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", "dev": true, "requires": { - "@es-joy/jsdoccomment": "^0.4.4", - "comment-parser": "1.1.5", - "debug": "^4.3.1", - "esquery": "^1.4.0", - "jsdoctypeparser": "^9.0.0", - "lodash": "^4.17.21", - "regextras": "^0.7.1", - "semver": "^7.3.5", - "spdx-expression-parse": "^3.0.1" + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" }, "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - } - }, - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "dev": true, "requires": { - "lru-cache": "^6.0.0" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, - "spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dev": true, "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" + "glob": "^7.1.3" } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true } } }, - "eslint-plugin-jsx-a11y": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.4.1.tgz", - "integrity": "sha512-0rGPJBbwHoGNPU73/QCLP/vveMlM1b1Z9PponxO87jfr6tuH5ligXbDT6nHSSzBC8ovX2Z+BQu7Bk5D/Xgq9zg==", + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" + }, + "copy-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/copy-dir/-/copy-dir-1.3.0.tgz", + "integrity": "sha512-Q4+qBFnN4bwGwvtXXzbp4P/4iNk0MaiGAzvQ8OiMtlLjkIKjmNN689uVzShSM0908q7GoFHXIPx4zi75ocoaHw==", + "dev": true + }, + "copy-to-clipboard": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.1.tgz", + "integrity": "sha512-i13qo6kIHTTpCm8/Wup+0b1mVWETvu2kIMzKoK8FpkLkFxlt0znUAHcMzox+T8sPlqtZXq3CulEjQHsYiGFJUw==", "dev": true, "requires": { - "@babel/runtime": "^7.11.2", - "aria-query": "^4.2.2", - "array-includes": "^3.1.1", - "ast-types-flow": "^0.0.7", - "axe-core": "^4.0.2", - "axobject-query": "^2.2.0", - "damerau-levenshtein": "^1.0.6", - "emoji-regex": "^9.0.0", - "has": "^1.0.3", - "jsx-ast-utils": "^3.1.0", - "language-tags": "^1.0.5" + "toggle-selection": "^1.0.6" + } + }, + "copy-webpack-plugin": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-10.2.0.tgz", + "integrity": "sha512-my6iXII95c78w14HzYCNya5TlJYa44lOppAge5GSTMM1SyDxNsVGCJvhP4/ld6snm8lzjn3XOonMZD6s1L86Og==", + "dev": true, + "requires": { + "fast-glob": "^3.2.7", + "glob-parent": "^6.0.1", + "globby": "^12.0.2", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0" }, "dependencies": { - "array-includes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.2.tgz", - "integrity": "sha512-w2GspexNQpx+PutG3QpT437/BenZBj0M/MZGn5mzv/MofYqo0xmRHzn4lFsoDlWJ+THYsGJmFlW68WlDFx7VRw==", + "@types/json-schema": { + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", + "dev": true + }, + "ajv": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.8.2.tgz", + "integrity": "sha512-x9VuX+R/jcFj1DHo/fCp99esgGDWiHENrKxaCENuCxpoMCmAt/COCGVDwA7kleEpEzJjDnvh3yGoOuLu0Dtllw==", "dev": true, "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "get-intrinsic": "^1.0.1", - "is-string": "^1.0.5" + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" } }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "dev": true, "requires": { - "object-keys": "^1.0.12" + "fast-deep-equal": "^3.1.3" } }, - "emoji-regex": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.0.tgz", - "integrity": "sha512-DNc3KFPK18bPdElMJnf/Pkv5TXhxFU3YFDEuGLDRtPmV4rkmCjBkCSEp22u6rBHdSN9Vlp/GK7k98prmE1Jgug==", + "array-union": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-3.0.1.tgz", + "integrity": "sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==", "dev": true }, - "es-abstract": { - "version": "1.18.0-next.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", - "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-negative-zero": "^2.0.0", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - }, - "dependencies": { - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - } - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "is-glob": "^4.0.3" } }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - }, - "is-callable": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", - "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", - "dev": true - }, - "is-regex": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", - "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", + "globby": { + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-12.0.2.tgz", + "integrity": "sha512-lAsmb/5Lww4r7MM9nCCliDZVIKbZTavrsunAsHLr9oHthrZP1qi7/gAnHOsUs9bLvEt2vKVJhHmxuL7QbDuPdQ==", "dev": true, "requires": { - "has-symbols": "^1.0.1" + "array-union": "^3.0.1", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.7", + "ignore": "^5.1.8", + "merge2": "^1.4.1", + "slash": "^4.0.0" } }, - "is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "requires": { - "has-symbols": "^1.0.1" + "is-extglob": "^2.1.1" } }, - "object-inspect": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", - "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==", + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", "dev": true, "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - }, - "dependencies": { - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - } + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" } }, - "string.prototype.trimend": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz", - "integrity": "sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw==", + "serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", "dev": true, "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" + "randombytes": "^2.1.0" } + }, + "slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true } } }, - "eslint-plugin-prettier": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.3.0.tgz", - "integrity": "sha512-tMTwO8iUWlSRZIwS9k7/E4vrTsfvsrcM5p1eftyuqWH25nKsz/o6/54I7jwQ/3zobISyC7wMy9ZsFwgTxOcOpQ==", - "dev": true, - "requires": { - "prettier-linter-helpers": "^1.0.0" - } + "core-js": { + "version": "3.19.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.19.1.tgz", + "integrity": "sha512-Tnc7E9iKd/b/ff7GFbhwPVzJzPztGrChB8X8GLqoYGdEOG8IpLnK1xPyo3ZoO3HsK6TodJS58VGPOxA+hLHQMg==" }, - "eslint-plugin-react": { - "version": "7.22.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.22.0.tgz", - "integrity": "sha512-p30tuX3VS+NWv9nQot9xIGAHBXR0+xJVaZriEsHoJrASGCJZDJ8JLNM0YqKqI0AKm6Uxaa1VUHoNEibxRCMQHA==", + "core-js-builder": { + "version": "3.19.1", + "resolved": "https://registry.npmjs.org/core-js-builder/-/core-js-builder-3.19.1.tgz", + "integrity": "sha512-PuQdf3ycpvB4jGxtp42uPREHWHzHV/N8QoSX5S5T2QFb8Uaig46oJRfxm6wwT38kfPWTh1gNcPZTzbi8oRoC0w==", "dev": true, "requires": { - "array-includes": "^3.1.1", - "array.prototype.flatmap": "^1.2.3", - "doctrine": "^2.1.0", - "has": "^1.0.3", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "object.entries": "^1.1.2", - "object.fromentries": "^2.0.2", - "object.values": "^1.1.1", - "prop-types": "^15.7.2", - "resolve": "^1.18.1", - "string.prototype.matchall": "^4.0.2" + "core-js": "3.19.1", + "core-js-compat": "3.19.1", + "mkdirp": ">=0.5.5 <1", + "webpack": ">=4.46.0 <5" }, "dependencies": { - "array-includes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.2.tgz", - "integrity": "sha512-w2GspexNQpx+PutG3QpT437/BenZBj0M/MZGn5mzv/MofYqo0xmRHzn4lFsoDlWJ+THYsGJmFlW68WlDFx7VRw==", + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", "dev": true, "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "get-intrinsic": "^1.0.1", - "is-string": "^1.0.5" + "minimist": "^1.2.0" } }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", "dev": true, "requires": { - "object-keys": "^1.0.12" + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" } }, - "es-abstract": { - "version": "1.18.0-next.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", - "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dev": true, "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-negative-zero": "^2.0.0", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" + "minimist": "^1.2.5" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "dev": true + }, + "terser-webpack-plugin": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", + "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", + "dev": true, + "requires": { + "cacache": "^12.0.2", + "find-cache-dir": "^2.1.0", + "is-wsl": "^1.1.0", + "schema-utils": "^1.0.0", + "serialize-javascript": "^4.0.0", + "source-map": "^0.6.1", + "terser": "^4.1.2", + "webpack-sources": "^1.4.0", + "worker-farm": "^1.7.0" + } + }, + "webpack": { + "version": "4.46.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz", + "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/wasm-edit": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "acorn": "^6.4.1", + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^4.5.0", + "eslint-scope": "^4.0.3", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^2.4.0", + "loader-utils": "^1.2.3", + "memory-fs": "^0.4.1", + "micromatch": "^3.1.10", + "mkdirp": "^0.5.3", + "neo-async": "^2.6.1", + "node-libs-browser": "^2.2.1", + "schema-utils": "^1.0.0", + "tapable": "^1.1.3", + "terser-webpack-plugin": "^1.4.3", + "watchpack": "^1.7.4", + "webpack-sources": "^1.4.1" }, "dependencies": { - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } } } }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", "dev": true, "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" } - }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - }, - "is-callable": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", - "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", - "dev": true - }, - "is-regex": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", - "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", + } + } + }, + "core-js-compat": { + "version": "3.19.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.19.1.tgz", + "integrity": "sha512-Q/VJ7jAF/y68+aUsQJ/afPOewdsGkDtcMb40J8MbuWKlK3Y+wtHq8bTHKPj2WKWLIqmS5JhHs4CzHtz6pT2W6g==", + "requires": { + "browserslist": "^4.17.6", + "semver": "7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==" + } + } + }, + "core-js-pure": { + "version": "3.19.1", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.19.1.tgz", + "integrity": "sha512-Q0Knr8Es84vtv62ei6/6jXH/7izKmOrtrxH9WJTHLCMAVeU+8TF8z8Nr08CsH4Ot0oJKzBzJJL9SJBYIv7WlfQ==", + "dev": true + }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "cosmiconfig": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", + "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", + "dev": true, + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "dependencies": { + "import-fresh": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", + "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", "dev": true, "requires": { - "has-symbols": "^1.0.1" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" } }, - "is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "parse-json": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz", + "integrity": "sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ==", "dev": true, "requires": { - "has-symbols": "^1.0.1" + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" } }, - "object-inspect": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", - "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==", + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "yaml": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz", + "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==", + "dev": true + } + } + }, + "cp-file": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-7.0.0.tgz", + "integrity": "sha512-0Cbj7gyvFVApzpK/uhCtQ/9kE9UnYpxMzaq5nQQC/Dh4iaj5fxp7iEFIullrYwzj8nf0qnsI1Qsx34hAeAebvw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "nested-error-stacks": "^2.0.0", + "p-event": "^4.1.0" + } + }, + "cpy": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/cpy/-/cpy-8.1.2.tgz", + "integrity": "sha512-dmC4mUesv0OYH2kNFEidtf/skUwv4zePmGeepjyyJ0qTo5+8KhA1o99oIAwVVLzQMAeDJml74d6wPPKb6EZUTg==", + "dev": true, + "requires": { + "arrify": "^2.0.1", + "cp-file": "^7.0.0", + "globby": "^9.2.0", + "has-glob": "^1.0.0", + "junk": "^3.1.0", + "nested-error-stacks": "^2.1.0", + "p-all": "^2.1.0", + "p-filter": "^2.1.0", + "p-map": "^3.0.0" + }, + "dependencies": { + "arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "dev": true + } + } + }, + "crc": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", + "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", + "dev": true, + "requires": { + "buffer": "^5.1.0" + }, + "dependencies": { + "buffer": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", + "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", "dev": true, "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - }, - "dependencies": { - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - } + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" } - }, - "object.entries": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.3.tgz", - "integrity": "sha512-ym7h7OZebNS96hn5IJeyUmaWhaSM4SVtAPPfNLQEI2MYWCO2egsITb9nab2+i/Pwibx+R0mtn+ltKJXRSeTMGg==", + } + } + }, + "crc32-stream": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-3.0.1.tgz", + "integrity": "sha512-mctvpXlbzsvK+6z8kJwSJ5crm7yBwrQMTybJzMw1O4lLGJqjlDCXY2Zw7KheiA6XBEcBmfLx1D88mjRGVJtY9w==", + "dev": true, + "requires": { + "crc": "^3.4.4", + "readable-stream": "^3.4.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "has": "^1.0.3" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" } + } + } + }, + "create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "create-react-context": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/create-react-context/-/create-react-context-0.3.0.tgz", + "integrity": "sha512-dNldIoSuNSvlTJ7slIKC/ZFGKexBMBrrcc+TTe1NdmROnaASuLPvqpwj9v4XS4uXZ8+YPu0sNmShX2rXI5LNsw==", + "dev": true, + "requires": { + "gud": "^1.0.0", + "warning": "^4.0.3" + } + }, + "cross-env": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-3.2.4.tgz", + "integrity": "sha1-ngWF8neGTtQhznVvgamA/w1piro=", + "dev": true, + "requires": { + "cross-spawn": "^5.1.0", + "is-windows": "^1.0.0" + } + }, + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dev": true, + "requires": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + } + }, + "css": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", + "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", + "requires": { + "inherits": "^2.0.3", + "source-map": "^0.6.1", + "source-map-resolve": "^0.5.2", + "urix": "^0.1.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "css-color-keywords": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", + "integrity": "sha1-/qJhbcZ2spYmhrOvjb2+GAskTgU=" + }, + "css-color-names": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-1.0.1.tgz", + "integrity": "sha512-/loXYOch1qU1biStIFsHH8SxTmOseh1IJqFvy8IujXOm1h+QjUdDhkzOrR5HG8K8mlxREj0yfi8ewCHx0eMxzA==", + "dev": true + }, + "css-declaration-sorter": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.1.1.tgz", + "integrity": "sha512-BZ1aOuif2Sb7tQYY1GeCjG7F++8ggnwUkH5Ictw0mrdpqpEd+zWmcPdstnH2TItlb74FqR0DrVEieon221T/1Q==", + "dev": true, + "requires": { + "timsort": "^0.3.0" + } + }, + "css-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.2.0.tgz", + "integrity": "sha512-/rvHfYRjIpymZblf49w8jYcRo2y9gj6rV8UroHGmBxKrIyGLokpycyKzp9OkitvqT29ZSpzJ0Ic7SpnJX3sC8g==", + "dev": true, + "requires": { + "icss-utils": "^5.1.0", + "postcss": "^8.2.15", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.1.0", + "semver": "^7.3.5" + }, + "dependencies": { + "icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true }, - "object.values": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.2.tgz", - "integrity": "sha512-MYC0jvJopr8EK6dPBiO8Nb9mvjdypOachO5REGk6MXzujbBrAisKo3HmdEI6kZDL6fC31Mwee/5YbtMebixeag==", + "postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "dev": true + }, + "postcss-modules-local-by-default": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", + "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", "dev": true, "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "has": "^1.0.3" + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" } }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, - "resolve": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", - "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", + "postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", "dev": true, "requires": { - "is-core-module": "^2.1.0", - "path-parse": "^1.0.6" + "postcss-selector-parser": "^6.0.4" } }, - "string.prototype.trimend": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz", - "integrity": "sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw==", + "postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", "dev": true, "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" + "icss-utils": "^5.0.0" } + }, + "postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true } } }, - "eslint-plugin-react-hooks": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.2.0.tgz", - "integrity": "sha512-623WEiZJqxR7VdxFCKLI6d6LLpwJkGPYKODnkH3D7WpOG5KM8yWueBd8TLsNAetEJNF5iJmolaAKO3F8yzyVBQ==", - "dev": true + "css-mediaquery": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/css-mediaquery/-/css-mediaquery-0.1.2.tgz", + "integrity": "sha1-aiw3NEkoYYYxxUvTPO3TAdoYvqA=" }, - "eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "css-select": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", + "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", "dev": true, "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" + "boolbase": "~1.0.0", + "css-what": "2.1", + "domutils": "1.5.1", + "nth-check": "~1.0.1" } }, - "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, + "css-to-react-native": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-2.3.2.tgz", + "integrity": "sha512-VOFaeZA053BqvvvqIA8c9n0+9vFppVBAHCp6JgFTtTMU3Mzi+XnelJ9XC9ul3BqFzZyQ5N+H0SnwsWT2Ebchxw==", "requires": { - "eslint-visitor-keys": "^1.1.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - } + "camelize": "^1.0.0", + "css-color-keywords": "^1.0.0", + "postcss-value-parser": "^3.3.0" } }, - "eslint-visitor-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", - "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", - "dev": true + "css-to-react-native-transform": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/css-to-react-native-transform/-/css-to-react-native-transform-1.9.0.tgz", + "integrity": "sha512-darzotx5xx+Q0bzASkvNBasztLCssNerzf9jpMZx0H4CTY6J/y2Wh50ZtYAJ3FmESEux1bJcGa6T0zfISTuFqw==", + "requires": { + "css": "^2.2.4", + "css-mediaquery": "^0.1.2", + "css-to-react-native": "^2.3.0" + } }, - "espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", - "dev": true, + "css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", "requires": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" + "mdn-data": "2.0.14", + "source-map": "^0.6.1" }, "dependencies": { - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true - }, - "acorn-jsx": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", - "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", - "dev": true - }, - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" } } }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + "css-what": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz", + "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0=", + "dev": true }, - "esquery": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", - "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", + "css.escape": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", + "integrity": "sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s=", + "dev": true + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true + }, + "cssnano": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.7.tgz", + "integrity": "sha512-7C0tbb298hef3rq+TtBbMuezBQ9VrFtrQEsPNuBKNVgWny/67vdRsnq8EoNu7TRjAHURgYvWlRIpCUmcMZkRzw==", "dev": true, "requires": { - "estraverse": "^5.1.0" + "cssnano-preset-default": "^5.1.3", + "is-resolvable": "^1.1.0", + "lilconfig": "^2.0.3", + "yaml": "^1.10.2" }, "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", "dev": true } } }, - "esrecurse": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", - "dev": true, - "requires": { - "estraverse": "^4.1.0" + "cssnano-preset-default": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.1.3.tgz", + "integrity": "sha512-qo9tX+t4yAAZ/yagVV3b+QBKeLklQbmgR3wI7mccrDcR+bEk9iHgZN1E7doX68y9ThznLya3RDmR+nc7l6/2WQ==", + "dev": true, + "requires": { + "css-declaration-sorter": "^6.0.3", + "cssnano-utils": "^2.0.1", + "postcss-calc": "^8.0.0", + "postcss-colormin": "^5.2.0", + "postcss-convert-values": "^5.0.1", + "postcss-discard-comments": "^5.0.1", + "postcss-discard-duplicates": "^5.0.1", + "postcss-discard-empty": "^5.0.1", + "postcss-discard-overridden": "^5.0.1", + "postcss-merge-longhand": "^5.0.2", + "postcss-merge-rules": "^5.0.2", + "postcss-minify-font-values": "^5.0.1", + "postcss-minify-gradients": "^5.0.1", + "postcss-minify-params": "^5.0.1", + "postcss-minify-selectors": "^5.1.0", + "postcss-normalize-charset": "^5.0.1", + "postcss-normalize-display-values": "^5.0.1", + "postcss-normalize-positions": "^5.0.1", + "postcss-normalize-repeat-style": "^5.0.1", + "postcss-normalize-string": "^5.0.1", + "postcss-normalize-timing-functions": "^5.0.1", + "postcss-normalize-unicode": "^5.0.1", + "postcss-normalize-url": "^5.0.2", + "postcss-normalize-whitespace": "^5.0.1", + "postcss-ordered-values": "^5.0.2", + "postcss-reduce-initial": "^5.0.1", + "postcss-reduce-transforms": "^5.0.1", + "postcss-svgo": "^5.0.2", + "postcss-unique-selectors": "^5.0.1" } }, - "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "cssnano-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-2.0.1.tgz", + "integrity": "sha512-i8vLRZTnEH9ubIyfdZCAdIdgnHAUeQeByEeQ2I7oTilvP9oHO6RScpeq3GsFUVqeB8uZgOQ9pw8utofNn32hhQ==", "dev": true }, - "estree-to-babel": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/estree-to-babel/-/estree-to-babel-3.2.1.tgz", - "integrity": "sha512-YNF+mZ/Wu2FU/gvmzuWtYc8rloubL7wfXCTgouFrnjGVXPA/EeYYA7pupXWrb3Iv1cTBeSSxxJIbK23l4MRNqg==", + "csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", "dev": true, "requires": { - "@babel/traverse": "^7.1.6", - "@babel/types": "^7.2.0", - "c8": "^7.6.0" + "css-tree": "^1.1.2" } }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" - }, - "event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" - }, - "eventemitter2": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-1.0.5.tgz", - "integrity": "sha1-+YNhBRexc3wLncZDvsqTiTwE3xg=" - }, - "eventemitter3": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", - "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==", - "dev": true - }, - "events": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.1.0.tgz", - "integrity": "sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg==", + "cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", "dev": true }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", "dev": true, "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" + "cssom": "~0.3.6" + }, + "dependencies": { + "cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + } } }, - "exec-sh": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.2.tgz", - "integrity": "sha512-9sLAvzhI5nc8TpuQUh4ahMdCrWT00wPWz7j47/emR5+2qEfoZP5zzUXvx+vdx+H6ohhnsYC31iX04QLYJK8zTg==" + "csstype": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.10.tgz", + "integrity": "sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA==" }, - "execa": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.0.2.tgz", - "integrity": "sha512-QI2zLa6CjGWdiQsmSkZoGtDx2N+cQIGb3yNolGTdjSQzydzLgYYf8LRuagp7S7fPimjcrzUDSUFd/MgzELMi4Q==", + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", "dev": true, "requires": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "get-stream": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz", - "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", - "dev": true - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "onetime": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", - "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } + "array-find-index": "^1.0.1" } }, - "execall": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/execall/-/execall-2.0.0.tgz", - "integrity": "sha512-0FU2hZ5Hh6iQnarpRtQurM/aAvp3RIbfvgLHrcqJYzhXyV2KFruhuChf9NC6waAhiUR7FFtlugkI4p7f2Fqlow==", + "cwd": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/cwd/-/cwd-0.10.0.tgz", + "integrity": "sha1-FyQAaUBXwioTsM8WFix+S3p/5Wc=", "dev": true, "requires": { - "clone-regexp": "^2.1.0" + "find-pkg": "^0.1.2", + "fs-exists-sync": "^0.1.0" } }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "cyclist": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz", + "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=", "dev": true }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "damerau-levenshtein": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.7.tgz", + "integrity": "sha512-VvdQIPGdWP0SqFXghj79Wf/5LArmreyMsGLa6FG6iC4t3j7j5s71TrwWmT/4akbDQIqjfACkLZmjXhA7g2oUZw==", + "dev": true + }, + "dargs": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/dargs/-/dargs-4.1.0.tgz", + "integrity": "sha1-A6nbtLXC8Tm/FK5T8LiipqhvThc=", + "dev": true, "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } + "number-is-nan": "^1.0.0" } }, - "expand-tilde": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-1.2.2.tgz", - "integrity": "sha1-C4HrqJflo9MdHD0QL48BRB5VlEk=", + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "dev": true, "requires": { - "os-homedir": "^1.0.1" + "assert-plus": "^1.0.0" } }, - "expect": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/expect/-/expect-26.6.2.tgz", - "integrity": "sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA==", + "data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", "dev": true, "requires": { - "@jest/types": "^26.6.2", - "ansi-styles": "^4.0.0", - "jest-get-type": "^26.3.0", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-regex-util": "^26.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "@types/istanbul-reports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", - "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", - "dev": true, - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/stack-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.0.tgz", - "integrity": "sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==", - "dev": true - }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + }, + "dependencies": { + "tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", "dev": true, "requires": { - "to-regex-range": "^5.0.1" + "punycode": "^2.1.1" } }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "jest-get-type": { - "version": "26.3.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", - "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", + "webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", "dev": true }, - "jest-message-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz", - "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@jest/types": "^26.6.2", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.2", - "pretty-format": "^26.6.2", - "slash": "^3.0.0", - "stack-utils": "^2.0.2" - } - }, - "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" - } - }, - "pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", + "whatwg-url": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", "dev": true, "requires": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" } - }, - "react-is": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.1.tgz", - "integrity": "sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA==", + } + } + }, + "date-fns": { + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.29.0.tgz", + "integrity": "sha512-lbTXWZ6M20cWH8N9S6afb0SBm6tMk+uUg6z3MqHPKE9atmsY3kJkTm8vKe93izJ2B2+q5MV990sM2CHgtAZaOw==", + "dev": true + }, + "dateformat": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", + "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", + "dev": true + }, + "dayjs": { + "version": "1.10.7", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.10.7.tgz", + "integrity": "sha512-P6twpd70BcPK34K26uJ1KT3wlhpuOAPoMwJzpsIWUxHZ7wpmbdZL/hQqBDfz7hGurYSa5PhzdhDHtt319hL3ig==" + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "debuglog": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", + "integrity": "sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI=", + "dev": true + }, + "decache": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/decache/-/decache-4.5.1.tgz", + "integrity": "sha512-5J37nATc6FmOTLbcsr9qx7Nm28qQyg1SK4xyEHqM0IBkNhWFp0Sm+vKoWYHD8wq+OUEb9jLyaKFfzzd1A9hcoA==", + "dev": true, + "requires": { + "callsite": "^1.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + }, + "decamelize-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", + "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", + "dev": true, + "requires": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "dependencies": { + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + } + } + }, + "decimal.js": { + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", + "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", + "dev": true + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + }, + "decompress-response": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-5.0.0.tgz", + "integrity": "sha512-TLZWWybuxWgoW7Lykv+gq9xvzOsUjQ9tF09Tj6NSTYGMTCHNXzrPnD6Hi+TgZq19PyTAGH4Ll/NIM/eTGglnMw==", + "dev": true, + "requires": { + "mimic-response": "^2.0.0" + } + }, + "dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", + "dev": true + }, + "deep-equal": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "dev": true, + "requires": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + }, + "dependencies": { + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true - }, - "stack-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==", - "dev": true, - "requires": { - "escape-string-regexp": "^2.0.0" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } } } }, - "expect-puppeteer": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/expect-puppeteer/-/expect-puppeteer-4.4.0.tgz", - "integrity": "sha512-6Ey4Xy2xvmuQu7z7YQtMsaMV0EHJRpVxIDOd5GRrm04/I3nkTKIutELfECsLp6le+b3SSa3cXhPiw6PgqzxYWA==", + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "dev": true }, - "express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "deep-freeze": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/deep-freeze/-/deep-freeze-0.0.1.tgz", + "integrity": "sha1-OgsABd4YZygZ39OM0x+RF5yJPoQ=", + "dev": true + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "deep-object-diff": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/deep-object-diff/-/deep-object-diff-1.1.0.tgz", + "integrity": "sha512-b+QLs5vHgS+IoSNcUE4n9HP2NwcHj7aqnJWsjPtuG75Rh5TOaGt0OjAYInh77d5T16V5cRDC+Pw/6ZZZiETBGw==", + "dev": true + }, + "deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true + }, + "default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", "dev": true, "requires": { - "accepts": "~1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "~1.0.4", - "cookie": "0.4.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" + "execa": "^5.0.0" }, "dependencies": { - "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" } }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, "requires": { - "ms": "2.0.0" + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" } }, - "http-errors": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", - "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - } + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true }, - "mime-db": { - "version": "1.43.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz", - "integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==", + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true }, - "mime-types": { - "version": "2.1.26", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz", - "integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==", + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, "requires": { - "mime-db": "1.43.0" + "path-key": "^3.0.0" } }, - "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", - "dev": true - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true - }, - "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", - "dev": true - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true - }, - "send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, "requires": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.7.2", - "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.0" - }, - "dependencies": { - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - } + "mimic-fn": "^2.1.0" } }, - "serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.1" + "shebang-regex": "^3.0.0" } }, - "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "signal-exit": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz", + "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==", "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } } } }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "requires": { - "is-plain-object": "^2.0.4" - } - } + "clone": "^1.0.2" } }, - "external-editor": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", - "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==", - "dev": true, + "defer-to-connect": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.0.tgz", + "integrity": "sha512-bYL2d05vOSf1JEZNx5vSAtPuBMkX8K9EUutg7zlKvTqKXHt7RhWJFbmd7qakVuf13i+IkGmp6FwSsONOf6VYIg==", + "dev": true + }, + "define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true + }, + "define-properties": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz", + "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=", "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "dependencies": { - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - } + "foreach": "^2.0.5", + "object-keys": "^1.0.8" } }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - }, + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { "is-accessor-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", @@ -32769,16 +31474,89 @@ } } }, - "extract-zip": { - "version": "1.6.7", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.7.tgz", - "integrity": "sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k=", + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "delegate": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", + "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==" + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true + }, + "denodeify": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/denodeify/-/denodeify-1.2.1.tgz", + "integrity": "sha1-OjYof1A05pnnV3kBBSwubJQlFjE=" + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "deprecation": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.0.0.tgz", + "integrity": "sha512-lbQN037mB3VfA2JFuguM5GCJ+zPinMeCrFe+AfSZ6eqrnJA/Fs+EYMnd6Nb2mn9lf2jO9xwEd9o9lic+D4vkcw==", + "dev": true + }, + "des.js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", "dev": true, "requires": { - "concat-stream": "1.6.2", - "debug": "2.6.9", - "mkdirp": "0.5.1", - "yauzl": "2.4.1" + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "detab": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detab/-/detab-2.0.4.tgz", + "integrity": "sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g==", + "dev": true, + "requires": { + "repeat-string": "^1.5.4" + } + }, + "detect-indent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", + "integrity": "sha1-OHHMCmoALow+Wzz38zYmRnXwa50=", + "dev": true + }, + "detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true + }, + "detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true + }, + "detect-port-alt": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", + "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", + "dev": true, + "requires": { + "address": "^1.0.1", + "debug": "^2.6.0" }, "dependencies": { "debug": { @@ -32792,1762 +31570,1835 @@ } } }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "devtools-protocol": { + "version": "0.0.960912", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.960912.tgz", + "integrity": "sha512-I3hWmV9rWHbdnUdmMKHF2NuYutIM2kXz2mdXW8ha7TbRlGTVs+PF+PsB5QWvpCek4Fy9B+msiispCfwlhG5Sqg==", "dev": true }, - "fast-average-color": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/fast-average-color/-/fast-average-color-4.3.0.tgz", - "integrity": "sha512-k8FXd6+JeXoItmdNqB3hMwFgArryjdYBLuzEM8fRY/oztd/051yhSHU6GUrMOfIQU9dDHyFDcIAkGrQKlYtpDA==" + "dezalgo": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz", + "integrity": "sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY=", + "dev": true, + "requires": { + "asap": "^2.0.0", + "wrappy": "1" + } }, - "fast-base64-decode": { + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==" + }, + "diff-sequences": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", + "integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==", + "dev": true + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + }, + "dependencies": { + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + } + } + }, + "direction": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/direction/-/direction-1.0.4.tgz", + "integrity": "sha512-GYqKi1aH7PJXxdhTeZBFrg8vUBeKXi+cNprXsC1kpJcbcVnV9wBsrOu1cQEdG0WeQwlfHiy3XvnKfIrJ2R0NzQ==" + }, + "discontinuous-range": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fast-base64-decode/-/fast-base64-decode-1.0.0.tgz", - "integrity": "sha512-qwaScUgUGBYeDNRnbc/KyllVU88Jk1pRHPStuF/lO7B0/RTRLj7U0lkdTAutlBblY08rwZDff6tNU9cjv6j//Q==" + "resolved": "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz", + "integrity": "sha1-44Mx8IRLukm5qctxx3FYWqsbxlo=", + "dev": true }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", "dev": true }, - "fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "dns-packet": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz", + "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", + "dev": true, + "requires": { + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" + } + }, + "dns-txt": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", + "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "dev": true, + "requires": { + "buffer-indexof": "^1.0.0" + } + }, + "docker-compose": { + "version": "0.22.2", + "resolved": "https://registry.npmjs.org/docker-compose/-/docker-compose-0.22.2.tgz", + "integrity": "sha512-iXWb5+LiYmylIMFXvGTYsjI1F+Xyx78Jm/uj1dxwwZLbWkUdH6yOXY5Nr3RjbYX15EgbGJCq78d29CmWQQQMPg==", "dev": true }, - "fast-glob": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", - "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "requires": { - "@mrmlnc/readdir-enhanced": "^2.2.1", - "@nodelib/fs.stat": "^1.1.2", - "glob-parent": "^3.1.0", - "is-glob": "^4.0.0", - "merge2": "^1.2.3", - "micromatch": "^3.1.10" + "esutils": "^2.0.2" } }, - "fast-json-parse": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/fast-json-parse/-/fast-json-parse-1.0.3.tgz", - "integrity": "sha512-FRWsaZRWEJ1ESVNbDWmsAlqDk96gPQezzLghafp5J4GUKjbCz3OkAHuZs5TuPEtkbVQERysLp9xv6c24fBm8Aw==", + "document.contains": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/document.contains/-/document.contains-1.0.2.tgz", + "integrity": "sha512-YcvYFs15mX8m3AO1QNQy3BlIpSMfNRj3Ujk2BEJxsZG+HZf7/hZ6jr7mDpXrF8q+ff95Vef5yjhiZxm8CGJr6Q==", + "requires": { + "define-properties": "^1.1.3" + }, + "dependencies": { + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "requires": { + "object-keys": "^1.0.12" + } + } + } + }, + "dom-accessibility-api": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.4.tgz", + "integrity": "sha512-TvrjBckDy2c6v6RLxPv5QXOnU+SmF9nBII5621Ve5fu6Z/BDrENurBEvlC1f44lKEUVqOpK4w9E5Idc5/EgkLQ==", "dev": true }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "dev": true, + "requires": { + "utila": "~0.4" + } + }, + "dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "dev": true, + "requires": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + }, + "dependencies": { + "csstype": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.8.tgz", + "integrity": "sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw==", + "dev": true + } + } + }, + "dom-scroll-into-view": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/dom-scroll-into-view/-/dom-scroll-into-view-1.2.1.tgz", + "integrity": "sha1-6PNnMt0ImwIBqI14Fdw/iObWbH4=" + }, + "dom-serializer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", + "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", + "requires": { + "domelementtype": "~1.1.1", + "entities": "~1.1.1" + }, + "dependencies": { + "domelementtype": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", + "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=" + } + } + }, + "dom-walk": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", + "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==", "dev": true }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", "dev": true }, - "fast-memoize": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/fast-memoize/-/fast-memoize-2.5.2.tgz", - "integrity": "sha512-Ue0LwpDYErFbmNnZSF0UH6eImUwDmogUO1jyE+JbN2gsQz/jICm1Ve7t9QT0rNSsfJt+Hs4/S3GnsDVjL4HVrw==" + "domelementtype": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", + "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=" }, - "fastest-levenshtein": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", - "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", - "dev": true + "domexception": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", + "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "dev": true, + "requires": { + "webidl-conversions": "^5.0.0" + }, + "dependencies": { + "webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", + "dev": true + } + } }, - "fastq": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.6.0.tgz", - "integrity": "sha512-jmxqQ3Z/nXoeyDmWAzF9kH1aGZSis6e/SbfPmJpUnyZ0ogr6iscHQaml4wsEepEWSdtmpy+eVXmCRIMpxaXqOA==", + "domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "requires": { + "domelementtype": "1" + } + }, + "domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", "dev": true, "requires": { - "reusify": "^1.0.0" + "no-case": "^3.0.4", + "tslib": "^2.0.3" } }, - "fault": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/fault/-/fault-1.0.4.tgz", - "integrity": "sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==", + "dot-prop": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.1.tgz", + "integrity": "sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ==", "dev": true, "requires": { - "format": "^0.2.0" + "is-obj": "^1.0.0" } }, - "faye-websocket": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", - "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", + "dotenv": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", + "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", + "dev": true + }, + "dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", + "dev": true + }, + "downloadjs": { + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/downloadjs/-/downloadjs-1.4.7.tgz", + "integrity": "sha1-9p+W+UDg0FU9rCkROYZaPNAQHjw=" + }, + "downshift": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/downshift/-/downshift-6.1.0.tgz", + "integrity": "sha512-MnEJERij+1pTVAsOPsH3q9MJGNIZuu2sT90uxOCEOZYH6sEzkVGtUcTBVDRQkE8y96zpB7uEbRn24aE9VpHnZg==", + "requires": { + "@babel/runtime": "^7.12.5", + "compute-scroll-into-view": "^1.0.16", + "prop-types": "^15.7.2", + "react-is": "^17.0.1" + }, + "dependencies": { + "react-is": { + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.1.tgz", + "integrity": "sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA==" + } + } + }, + "duplexer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", + "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", + "dev": true + }, + "duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", "dev": true, "requires": { - "websocket-driver": ">=0.5.1" + "readable-stream": "^2.0.2" } }, - "fb-watchman": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.0.tgz", - "integrity": "sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg=", + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true + }, + "duplexify": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.0.tgz", + "integrity": "sha512-fO3Di4tBKJpYTFHAxTU00BcfWMY9w24r/x21a6rZRbsD/ToUgGxsMbiGRmB7uVAXeGKXD9MwiLZa5E97EVgIRQ==", + "dev": true, "requires": { - "bser": "^2.0.0" + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" } }, - "fbjs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.0.tgz", - "integrity": "sha512-dJd4PiDOFuhe7vk4F80Mba83Vr2QuK86FoxtgPmzBqEJahncp+13YCmfoa53KHCo6OnlXLG7eeMWPfB5CrpVKg==", + "ecc-jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", + "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "dev": true, + "optional": true, "requires": { - "cross-fetch": "^3.0.4", - "fbjs-css-vars": "^1.0.0", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.18" + "jsbn": "~0.1.0" } }, - "fbjs-css-vars": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", - "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==" + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, - "fd-slicer": { + "electron-to-chromium": { + "version": "1.4.17", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.17.tgz", + "integrity": "sha512-zhk1MravPtq/KBhmGB7TLBILmXTgRG9TFSI3qS3DbgyfHzIl72iiTE37r/BHIbPCJJlWIo5rySyxiH4vWhu2ZA==", + "dev": true + }, + "elegant-spinner": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", - "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", + "resolved": "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz", + "integrity": "sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=", + "dev": true + }, + "element-resize-detector": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/element-resize-detector/-/element-resize-detector-1.2.3.tgz", + "integrity": "sha512-+dhNzUgLpq9ol5tyhoG7YLoXL3ssjfFW+0gpszXPwRU6NjGr1fVHMEAF8fVzIiRJq57Nre0RFeIjJwI8Nh2NmQ==", "dev": true, "requires": { - "pend": "~1.2.0" + "batch-processor": "1.0.0" } }, - "figgy-pudding": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz", - "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==", + "elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "dev": true, + "requires": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + } + } + }, + "emittery": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", + "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", "dev": true }, - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true + }, + "emotion-theming": { + "version": "10.0.27", + "resolved": "https://registry.npmjs.org/emotion-theming/-/emotion-theming-10.0.27.tgz", + "integrity": "sha512-MlF1yu/gYh8u+sLUqA0YuA9JX0P4Hb69WlKc/9OLo+WCXuX6sy/KoIa+qJimgmr2dWqnypYKYPX37esjDBbhdw==", "dev": true, "requires": { - "escape-string-regexp": "^1.0.5" + "@babel/runtime": "^7.5.5", + "@emotion/weak-memoize": "0.2.5", + "hoist-non-react-statics": "^3.3.0" } }, - "file-entry-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.0.tgz", - "integrity": "sha512-fqoO76jZ3ZnYrXLDRxBR1YvOvc0k844kcOg40bgsPrE25LAb/PDqTY+ho64Xh2c8ZXgIKldchCFHczG2UVRcWA==", + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, + "encoding": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", + "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", + "requires": { + "iconv-lite": "~0.4.13" + } + }, + "end-of-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "requires": { + "once": "^1.4.0" + } + }, + "endent": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/endent/-/endent-2.1.0.tgz", + "integrity": "sha512-r8VyPX7XL8U01Xgnb1CjZ3XV+z90cXIJ9JPE/R9SEC9vpw2P6CfsRPJmp20DppC5N7ZAMCmjYkJIa744Iyg96w==", "dev": true, "requires": { - "flat-cache": "^3.0.4" + "dedent": "^0.7.0", + "fast-json-parse": "^1.0.3", + "objectorarray": "^1.0.5" } }, - "file-loader": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", - "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", + "enhanced-resolve": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", + "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", "dev": true, "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" + "graceful-fs": "^4.1.2", + "memory-fs": "^0.5.0", + "tapable": "^1.0.0" }, "dependencies": { - "@types/json-schema": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz", - "integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==", - "dev": true - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true - }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "json5": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - }, - "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "memory-fs": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", + "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", "dev": true, "requires": { - "@types/json-schema": "^7.0.6", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" + "errno": "^0.1.3", + "readable-stream": "^2.0.1" } } } }, - "file-saver": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.2.tgz", - "integrity": "sha512-Wz3c3XQ5xroCxd1G8b7yL0Ehkf0TC9oYC6buPFkNnU9EnaPlifeAFCyCh+iewXTyFRcg0a6j3J7FmJsIhlhBdw==" + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1" + } }, - "file-system-cache": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/file-system-cache/-/file-system-cache-1.0.5.tgz", - "integrity": "sha1-hCWbNqK7uNPW6xAh0xMv/mTP/08=", + "entities": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", + "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=" + }, + "env-paths": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.0.tgz", + "integrity": "sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA==", + "dev": true + }, + "envinfo": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.5.0.tgz", + "integrity": "sha512-jDgnJaF/Btomk+m3PZDTTCb5XIIIX3zYItnCRfF73zVgvinLoRomuhi75Y4su0PtQxWz4v66XnLLckyvyJTOIQ==", + "dev": true + }, + "enzyme": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/enzyme/-/enzyme-3.11.0.tgz", + "integrity": "sha512-Dw8/Gs4vRjxY6/6i9wU0V+utmQO9kvh9XLnz3LIudviOnVYDEe2ec+0k+NQoMamn1VrjKgCUOWj5jG/5M5M0Qw==", "dev": true, "requires": { - "bluebird": "^3.3.5", - "fs-extra": "^0.30.0", - "ramda": "^0.21.0" + "array.prototype.flat": "^1.2.3", + "cheerio": "^1.0.0-rc.3", + "enzyme-shallow-equal": "^1.0.1", + "function.prototype.name": "^1.1.2", + "has": "^1.0.3", + "html-element-map": "^1.2.0", + "is-boolean-object": "^1.0.1", + "is-callable": "^1.1.5", + "is-number-object": "^1.0.4", + "is-regex": "^1.0.5", + "is-string": "^1.0.5", + "is-subset": "^0.1.1", + "lodash.escape": "^4.0.1", + "lodash.isequal": "^4.5.0", + "object-inspect": "^1.7.0", + "object-is": "^1.0.2", + "object.assign": "^4.1.0", + "object.entries": "^1.1.1", + "object.values": "^1.1.1", + "raf": "^3.4.1", + "rst-selector-parser": "^2.2.3", + "string.prototype.trim": "^1.2.1" }, "dependencies": { - "fs-extra": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", - "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=", + "array.prototype.flat": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz", + "integrity": "sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ==", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0", - "path-is-absolute": "^1.0.0", - "rimraf": "^2.2.8" + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz", + "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.1.5", + "is-regex": "^1.0.5", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimleft": "^2.1.1", + "string.prototype.trimright": "^2.1.1" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + } } }, - "glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "dev": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "object-keys": "^1.0.12" } }, - "jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", - "dev": true, + "dom-serializer": { + "version": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", + "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", "requires": { - "graceful-fs": "^4.1.6" + "domelementtype": "^1.3.0", + "entities": "^1.1.1" } }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, "requires": { - "glob": "^7.1.3" - } - } - } - }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true, - "optional": true - }, - "filename-reserved-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", - "integrity": "sha1-q/c9+rc10EVECr/qLZHzieu/oik=", - "dev": true - }, - "filenamify": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-4.2.0.tgz", - "integrity": "sha512-pkgE+4p7N1n7QieOopmn3TqJaefjdWXwEkj2XLZJLKfOgcQKkn11ahvGNgTD8mLggexLiDFQxeTs14xVU22XPA==", - "dev": true, - "requires": { - "filename-reserved-regex": "^2.0.0", - "strip-outer": "^1.0.1", - "trim-repeated": "^1.0.0" - } - }, - "filesize": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-6.1.0.tgz", - "integrity": "sha512-LpCHtPQ3sFx67z+uh2HnSyWSLLu5Jxo21795uRDuar/EOuYWXib5EmPaGIBuSnRqH2IODiKA2k5re/K9OnN/Yg==", - "dev": true - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" } - } - } - }, - "filter-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz", - "integrity": "sha1-mzERErxsYSehbgFsbF1/GeCAXFs=" - }, - "finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + }, + "function.prototype.name": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.2.tgz", + "integrity": "sha512-C8A+LlHBJjB2AdcRPorc5JvJ5VUoWlXdEHLOJdCI7kjHEtGTpHQUiqMvCIKUwIsGwZX2jZJy761AXsn356bJQg==", + "dev": true, "requires": { - "ms": "2.0.0" + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "functions-have-names": "^1.2.0" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz", + "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.1.5", + "is-regex": "^1.0.5", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimleft": "^2.1.1", + "string.prototype.trimright": "^2.1.1" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + } } }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" - } - } - }, - "find-cache-dir": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", - "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "is-callable": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", + "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", + "dev": true + }, + "is-regex": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", + "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", "dev": true, "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "has": "^1.0.3" } }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "is-string": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", + "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", + "dev": true + }, + "is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", "dev": true, "requires": { - "p-locate": "^4.1.0" + "has-symbols": "^1.0.1" } }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "object-inspect": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", + "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", + "dev": true + }, + "object-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.0.2.tgz", + "integrity": "sha512-Epah+btZd5wrrfjkJZq1AOB9O6OxUQto45hzFd7lXGrpHPGE0W1k+426yrZV+k6NJOzLNNW/nVsmZdIWsAqoOQ==", + "dev": true + }, + "object.entries": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.1.tgz", + "integrity": "sha512-ilqR7BgdyZetJutmDPfXCDffGa0/Yzl2ivVNpbx/g4UeWrCdRnFDUBrKJGLhGieRHDATnyZXWBeCb29k9CJysQ==", "dev": true, "requires": { - "semver": "^6.0.0" + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "function-bind": "^1.1.1", + "has": "^1.0.3" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz", + "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.1.5", + "is-regex": "^1.0.5", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimleft": "^2.1.1", + "string.prototype.trimright": "^2.1.1" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + } } }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "object.values": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", + "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==", "dev": true, "requires": { - "p-try": "^2.0.0" + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "function-bind": "^1.1.1", + "has": "^1.0.3" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz", + "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.1.5", + "is-regex": "^1.0.5", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimleft": "^2.1.1", + "string.prototype.trimright": "^2.1.1" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + } } }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "react-is": { + "version": "16.8.6", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.6.tgz", + "integrity": "sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA==" + }, + "semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" + }, + "string.prototype.trimleft": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz", + "integrity": "sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==", "dev": true, "requires": { - "p-limit": "^2.2.0" + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5", + "string.prototype.trimstart": "^1.0.0" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz", + "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.1.5", + "is-regex": "^1.0.5", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimleft": "^2.1.1", + "string.prototype.trimright": "^2.1.1" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + } } }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "string.prototype.trimright": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz", + "integrity": "sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==", "dev": true, "requires": { - "find-up": "^4.0.0" + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5", + "string.prototype.trimend": "^1.0.0" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz", + "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.1.5", + "is-regex": "^1.0.5", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimleft": "^2.1.1", + "string.prototype.trimright": "^2.1.1" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + } } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true } } }, - "find-file-up": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/find-file-up/-/find-file-up-0.1.3.tgz", - "integrity": "sha1-z2gJG8+fMApA2kEbN9pczlovvqA=", - "dev": true, - "requires": { - "fs-exists-sync": "^0.1.0", - "resolve-dir": "^0.1.0" - } - }, - "find-parent-dir": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/find-parent-dir/-/find-parent-dir-0.3.0.tgz", - "integrity": "sha1-M8RLQpqysvBkYpnF+fcY83b/jVQ=", - "dev": true - }, - "find-pkg": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/find-pkg/-/find-pkg-0.1.2.tgz", - "integrity": "sha1-G9wiwG42NlUy4qJIBGhUuXiNpVc=", - "dev": true, + "enzyme-shallow-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/enzyme-shallow-equal/-/enzyme-shallow-equal-1.0.1.tgz", + "integrity": "sha512-hGA3i1so8OrYOZSM9whlkNmVHOicJpsjgTzC+wn2JMJXhq1oO4kA4bJ5MsfzSIcC71aLDKzJ6gZpIxrqt3QTAQ==", "requires": { - "find-file-up": "^0.1.2" + "has": "^1.0.3", + "object-is": "^1.0.2" + }, + "dependencies": { + "object-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.0.2.tgz", + "integrity": "sha512-Epah+btZd5wrrfjkJZq1AOB9O6OxUQto45hzFd7lXGrpHPGE0W1k+426yrZV+k6NJOzLNNW/nVsmZdIWsAqoOQ==" + } } }, - "find-process": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/find-process/-/find-process-1.4.3.tgz", - "integrity": "sha512-+IA+AUsQCf3uucawyTwMWcY+2M3FXq3BRvw3S+j5Jvydjk31f/+NPWpYZOJs+JUs2GvxH4Yfr6Wham0ZtRLlPA==", + "enzyme-to-json": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/enzyme-to-json/-/enzyme-to-json-3.6.2.tgz", + "integrity": "sha512-Ynm6Z6R6iwQ0g2g1YToz6DWhxVnt8Dy1ijR2zynRKxTyBGA8rCDXU3rs2Qc4OKvUvc2Qoe1bcFK6bnPs20TrTg==", "dev": true, "requires": { - "chalk": "^2.0.1", - "commander": "^2.11.0", - "debug": "^2.6.8" + "@types/cheerio": "^0.22.22", + "lodash": "^4.17.21", + "react-is": "^16.12.0" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } } } }, - "find-root": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" + "equivalent-key-map": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/equivalent-key-map/-/equivalent-key-map-0.2.2.tgz", + "integrity": "sha512-xvHeyCDbZzkpN4VHQj/n+j2lOwL0VWszG30X4cOrc9Y7Tuo2qCdZK/0AMod23Z5dCtNUbaju6p0rwOhHUk05ew==" }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } + "err-code": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-1.1.2.tgz", + "integrity": "sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA=", + "dev": true }, - "find-yarn-workspace-root": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-1.2.1.tgz", - "integrity": "sha512-dVtfb0WuQG+8Ag2uWkbG79hOUzEsRrhBzgfn86g2sJPkzmcpGdghbNTfUKGTxymFrY/tLIodDzLoW9nOJ4FY8Q==", + "errno": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", + "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", "dev": true, "requires": { - "fs-extra": "^4.0.3", - "micromatch": "^3.1.4" - }, - "dependencies": { - "fs-extra": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", - "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - } + "prr": "~1.0.1" } }, - "findup-sync": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", - "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", - "dev": true, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "requires": { - "detect-file": "^1.0.0", - "is-glob": "^4.0.0", - "micromatch": "^3.0.4", - "resolve-dir": "^1.0.1" - }, - "dependencies": { - "expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", - "dev": true, - "requires": { - "homedir-polyfill": "^1.0.1" - } - }, - "global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", - "dev": true, - "requires": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" - } - }, - "global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", - "dev": true, - "requires": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" - } - }, - "resolve-dir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", - "dev": true, - "requires": { - "expand-tilde": "^2.0.0", - "global-modules": "^1.0.0" - } - } + "is-arrayish": "^0.2.1" } }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, + "error-stack-parser": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.6.tgz", + "integrity": "sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ==", "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" + "stackframe": "^1.1.1" } }, - "flatted": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.0.tgz", - "integrity": "sha512-tW+UkmtNg/jv9CSofAKvgVcO7c2URjhTdW1ZTkcAritblu8tajiYy7YisnIflEwtKssCtOxpnBRoCB7iap0/TA==", - "dev": true - }, - "flow-parser": { - "version": "0.121.0", - "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.121.0.tgz", - "integrity": "sha512-1gIBiWJNR0tKUNv8gZuk7l9rVX06OuLzY9AoGio7y/JT4V1IZErEMEq2TJS+PFcw/y0RshZ1J/27VfK1UQzYVg==" - }, - "flush-write-stream": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.3.tgz", - "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==", - "dev": true, + "errorhandler": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/errorhandler/-/errorhandler-1.5.1.tgz", + "integrity": "sha512-rcOwbfvP1WTViVoUjcfZicVzjhjTuhSMntHh6mW3IrEiyE6mJyXvsToJUJGlGlw/2xU9P5whlWNGlIDVeCiT4A==", "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.4" + "accepts": "~1.3.7", + "escape-html": "~1.0.3" } }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" - }, - "for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", - "dev": true, + "es-abstract": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz", + "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==", "requires": { - "for-in": "^1.0.1" + "es-to-primitive": "^1.1.1", + "function-bind": "^1.1.1", + "has": "^1.0.1", + "is-callable": "^1.1.3", + "is-regex": "^1.0.4" } }, - "foreach": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", - "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=" + "es-array-method-boxes-properly": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", + "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", + "dev": true }, - "foreground-child": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", - "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", + "es-get-iterator": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.2.tgz", + "integrity": "sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ==", "dev": true, "requires": { - "cross-spawn": "^7.0.0", - "signal-exit": "^3.0.2" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.0", + "has-symbols": "^1.0.1", + "is-arguments": "^1.1.0", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.5", + "isarray": "^2.0.5" }, "dependencies": { - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", "dev": true, "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" } }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", "dev": true, "requires": { - "shebang-regex": "^3.0.0" + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" } }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", "dev": true }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true - }, - "fork-ts-checker-webpack-plugin": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-4.1.6.tgz", - "integrity": "sha512-DUxuQaKoqfNne8iikd14SAkh5uw4+8vNifp6gmA73yYNS6ywLIWSLD/n/mBzHQRpW3J7rbATEakmiA8JvkTyZw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.5.5", - "chalk": "^2.4.1", - "micromatch": "^3.1.10", - "minimatch": "^3.0.4", - "semver": "^5.6.0", - "tapable": "^1.0.0", - "worker-rpc": "^0.1.0" - }, - "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "dev": true } } }, - "form-data": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", - "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", - "dev": true, + "es-to-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz", + "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=", "requires": { - "asynckit": "^0.4.0", - "combined-stream": "1.0.6", - "mime-types": "^2.1.12" + "is-callable": "^1.1.1", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.1" } }, - "format": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", - "integrity": "sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs=", - "dev": true - }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "es5-shim": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/es5-shim/-/es5-shim-4.6.2.tgz", + "integrity": "sha512-n0XTVMGps+Deyr38jtqKPR5F5hb9owYeRQcKJW39eFvzUk/u/9Ww315werRzbiNMnHCUw/YHDPBphTlEnzdi+A==", "dev": true }, - "fraction.js": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.0.13.tgz", - "integrity": "sha512-E1fz2Xs9ltlUp+qbiyx9wmt2n9dRzPsS11Jtdb8D2o+cC7wr9xkkKsVKJuBX0ST+LVS+LhLO+SbLJNtfWcJvXA==", + "es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", "dev": true }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "requires": { - "map-cache": "^0.2.2" - } - }, - "framer-motion": { - "version": "4.1.17", - "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-4.1.17.tgz", - "integrity": "sha512-thx1wvKzblzbs0XaK2X0G1JuwIdARcoNOW7VVwjO8BUltzXPyONGAElLu6CiCScsOQRI7FIk/45YTFtJw5Yozw==", - "requires": { - "@emotion/is-prop-valid": "^0.8.2", - "framesync": "5.3.0", - "hey-listen": "^1.0.8", - "popmotion": "9.3.6", - "style-value-types": "4.1.4", - "tslib": "^2.1.0" - } - }, - "framesync": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/framesync/-/framesync-5.3.0.tgz", - "integrity": "sha512-oc5m68HDO/tuK2blj7ZcdEBRx3p1PjrgHazL8GYEpvULhrtGIFbQArN6cQS2QhW8mitffaB+VYzMjDqBxxQeoA==", - "requires": { - "tslib": "^2.1.0" - } - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" - }, - "from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "es6-promisify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", "dev": true, "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" + "es6-promise": "^4.0.3" } }, - "fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true - }, - "fs-exists-sync": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz", - "integrity": "sha1-mC1ok6+RjnLQjeyehnP/K1qNat0=", + "es6-shim": { + "version": "0.35.6", + "resolved": "https://registry.npmjs.org/es6-shim/-/es6-shim-0.35.6.tgz", + "integrity": "sha512-EmTr31wppcaIAgblChZiuN/l9Y7DPyw8Xtbg7fIVngn6zMW+IEBJDJngeKC3x6wr0V/vcA2wqeFnaw1bFJbDdA==", "dev": true }, - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "dependencies": { - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" - } - } - }, - "fs-minipass": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.6.tgz", - "integrity": "sha512-crhvyXcMejjv3Z5d2Fa9sf5xLYVCF5O1c71QxbVnbLsmYMBEvDAftewesN/HhY03YRoA7zOMxjNGrF5svGaaeQ==", - "dev": true, - "requires": { - "minipass": "^2.2.1" - } + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" }, - "fs-monkey": { + "escape-html": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", - "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", - "dev": true + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" }, - "fs-write-stream-atomic": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", - "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "escodegen": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", + "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true + } } }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "function.prototype.name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.4.tgz", - "integrity": "sha512-iqy1pIotY/RmhdFZygSSlW0wko2yxkSCKqsuv4pr8QESohpYyG/Z7B/XXvPRKTJS//960rgguE5mSRUsDdaJrQ==", + "eslint": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.3.0.tgz", + "integrity": "sha512-aIay56Ph6RxOTC7xyr59Kt3ewX185SaGnAr8eWukoPLeriCrvGjvAubxuvaXOfsxhtwV5g0uBOsyhAom4qJdww==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "functions-have-names": "^1.2.2" + "@eslint/eslintrc": "^1.0.4", + "@humanwhocodes/config-array": "^0.6.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.0", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.1.0", + "espree": "^9.1.0", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.2.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" }, "dependencies": { - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" } }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, "requires": { - "object-keys": "^1.0.12" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" } }, - "es-abstract": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", - "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.2", - "is-string": "^1.0.5", - "object-inspect": "^1.9.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.0" - }, - "dependencies": { - "get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - } - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - } + "ms": "2.1.2" } }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "esutils": "^2.0.2" } }, - "functions-have-names": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.2.tgz", - "integrity": "sha512-bLgc3asbWdwPbx2mNk2S49kmJCuQeu0nfmaOgbs8WIyzzkw3r4htszdIi9Q9EMezDPTYuJx2wvjZ/EwgAthpnA==", + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true }, - "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "eslint-scope": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.0.tgz", + "integrity": "sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "eslint-visitor-keys": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.1.0.tgz", + "integrity": "sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA==", "dev": true }, - "is-callable": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true }, - "is-regex": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", - "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "has-symbols": "^1.0.1" + "is-glob": "^4.0.3" + }, + "dependencies": { + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + } } }, - "is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "requires": { - "has-symbols": "^1.0.1" + "argparse": "^2.0.1" } }, - "object-inspect": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", - "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==", - "dev": true - }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - }, - "dependencies": { - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - } + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" } }, - "string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" } }, - "string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "shebang-regex": "^3.0.0" } - } - } - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "functions-have-names": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.1.tgz", - "integrity": "sha512-j48B/ZI7VKs3sgeI2cZp7WXWmZXu7Iq5pl5/vptV5N2mq+DGFuS/ulaDjtaoLpYzuD6u8UgrUKHfgo7fDTSiBA==" - }, - "fuse.js": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-3.6.1.tgz", - "integrity": "sha512-hT9yh/tiinkmirKrlv4KWOjztdoZo1mx9Qh4KvWqC7isoXwdUY3PNWUxceF4/qO9R6riA2C29jdTOeQOIROjgw==", - "dev": true - }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "dev": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { - "number-is-nan": "^1.0.0" + "ansi-regex": "^5.0.1" } }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "prelude-ls": "^1.2.1" } }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "isexe": "^2.0.0" } } } }, - "genfun": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/genfun/-/genfun-5.0.0.tgz", - "integrity": "sha512-KGDOARWVga7+rnB3z9Sd2Letx515owfk0hSxHGuqjANb1M+x2bGZGqHLiozPsYMdM2OubeMni/Hpwmjq6qIUhA==", - "dev": true - }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" - }, - "get-intrinsic": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.2.tgz", - "integrity": "sha512-aeX0vrFm21ILl3+JpFFRNe9aUvp6VFZb2/CTbgLb8j75kOhvoNYjt9d8KA/tJG4gSo8nzEDedRl0h7vDmBYRVg==", - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - }, - "dependencies": { - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" - } - } - }, - "get-own-enumerable-property-symbols": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.0.tgz", - "integrity": "sha512-CIJYJC4GGF06TakLg8z4GQKvDsx9EMspVxOYih7LerEL/WosUnFIww45CGfxfeKHqlg3twgUrYRT1O3WQqjGCg==", + "eslint-config-prettier": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", + "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", "dev": true }, - "get-pkg-repo": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-1.4.0.tgz", - "integrity": "sha1-xztInAbYDMVTbCyFP54FIyBWly0=", + "eslint-import-resolver-node": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz", + "integrity": "sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==", "dev": true, "requires": { - "hosted-git-info": "^2.1.4", - "meow": "^3.3.0", - "normalize-package-data": "^2.3.0", - "parse-github-repo-url": "^1.3.0", - "through2": "^2.0.0" + "debug": "^2.6.9", + "resolve": "^1.13.1" }, "dependencies": { - "meow": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { - "camelcase-keys": "^2.0.0", - "decamelize": "^1.1.2", - "loud-rejection": "^1.0.0", - "map-obj": "^1.0.1", - "minimist": "^1.1.3", - "normalize-package-data": "^2.3.4", - "object-assign": "^4.0.1", - "read-pkg-up": "^1.0.1", - "redent": "^1.0.0", - "trim-newlines": "^1.0.0" + "ms": "2.0.0" + } + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" } } } }, - "get-port": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-4.2.0.tgz", - "integrity": "sha512-/b3jarXkH8KJoOMQc3uVGHASwGLPq3gSFJ7tgJm2diza+bydJPTGOibin2steecKeOylE8oY2JERlVWkAJO6yw==", - "dev": true - }, - "get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", - "dev": true - }, - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "eslint-module-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.1.tgz", + "integrity": "sha512-fjoetBXQZq2tSTWZ9yWVl2KuFrTZZH3V+9iD1V1RfpDgxzJR+mPd/KZmMiA8gbPqdBzpNiEHOuT7IYEWxrH0zQ==", "dev": true, "requires": { - "pump": "^3.0.0" + "debug": "^3.2.7", + "find-up": "^2.1.0", + "pkg-dir": "^2.0.0" }, "dependencies": { - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "ms": "^2.1.1" } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true } } }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "eslint-plugin-eslint-comments": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-3.1.2.tgz", + "integrity": "sha512-QexaqrNeteFfRTad96W+Vi4Zj1KFbkHHNMMaHZEYcovKav6gdomyGzaxSDSL3GoIyUOo078wRAdYlu1caiauIQ==", "dev": true, "requires": { - "assert-plus": "^1.0.0" - } - }, - "gettext-parser": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/gettext-parser/-/gettext-parser-1.4.0.tgz", - "integrity": "sha512-sedZYLHlHeBop/gZ1jdg59hlUEcpcZJofLq2JFwJT1zTqAU3l2wFv6IsuwFHGqbiT9DWzMUW4/em2+hspnmMMA==", - "requires": { - "encoding": "^0.1.12", - "safe-buffer": "^5.1.1" + "escape-string-regexp": "^1.0.5", + "ignore": "^5.0.5" + }, + "dependencies": { + "ignore": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.2.tgz", + "integrity": "sha512-vdqWBp7MyzdmHkkRWV5nY+PfGRbYbahfuvsBCh277tq+w9zyNi7h5CYJCK0kmzti9kU+O/cB7sE8HvKv6aXAKQ==", + "dev": true + } } }, - "git-raw-commits": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.0.tgz", - "integrity": "sha512-w4jFEJFgKXMQJ0H0ikBk2S+4KP2VEjhCvLCNqbNRQC8BgGWgLKNCO7a9K9LI+TVT7Gfoloje502sEnctibffgg==", + "eslint-plugin-import": { + "version": "2.25.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.25.2.tgz", + "integrity": "sha512-qCwQr9TYfoBHOFcVGKY9C9unq05uOxxdklmBXLVvcwo68y5Hta6/GzCZEMx2zQiu0woKNEER0LE7ZgaOfBU14g==", "dev": true, "requires": { - "dargs": "^4.0.1", - "lodash.template": "^4.0.2", - "meow": "^4.0.0", - "split2": "^2.0.0", - "through2": "^2.0.0" + "array-includes": "^3.1.4", + "array.prototype.flat": "^1.2.5", + "debug": "^2.6.9", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-module-utils": "^2.7.0", + "has": "^1.0.3", + "is-core-module": "^2.7.0", + "is-glob": "^4.0.3", + "minimatch": "^3.0.4", + "object.values": "^1.1.5", + "resolve": "^1.20.0", + "tsconfig-paths": "^3.11.0" }, "dependencies": { - "camelcase-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz", - "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=", + "array-includes": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz", + "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==", "dev": true, "requires": { - "camelcase": "^4.1.0", - "map-obj": "^2.0.0", - "quick-lru": "^1.0.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1", + "get-intrinsic": "^1.1.1", + "is-string": "^1.0.7" } }, - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "array.prototype.flat": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz", + "integrity": "sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0" } }, - "map-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz", - "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=", - "dev": true - }, - "meow": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/meow/-/meow-4.0.1.tgz", - "integrity": "sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A==", + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", "dev": true, "requires": { - "camelcase-keys": "^4.0.0", - "decamelize-keys": "^1.0.0", - "loud-rejection": "^1.0.0", - "minimist": "^1.1.3", - "minimist-options": "^3.0.1", - "normalize-package-data": "^2.3.4", - "read-pkg-up": "^3.0.0", - "redent": "^2.0.0", - "trim-newlines": "^2.0.0" + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" } }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" + "ms": "2.0.0" } }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "dev": true, "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" + "object-keys": "^1.0.12" } }, - "read-pkg-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", - "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", + "es-abstract": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", + "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", "dev": true, "requires": { - "find-up": "^2.0.0", - "read-pkg": "^3.0.0" + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.1", + "is-string": "^1.0.7", + "is-weakref": "^1.0.1", + "object-inspect": "^1.11.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + }, + "dependencies": { + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + } } }, - "redent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz", - "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=", + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, "requires": { - "indent-string": "^3.0.0", - "strip-indent": "^2.0.0" + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" } }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, - "strip-indent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", - "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=", - "dev": true - }, - "trim-newlines": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz", - "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=", - "dev": true - } - } - }, - "git-remote-origin-url": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz", - "integrity": "sha1-UoJlna4hBxRaERJhEq0yFuxfpl8=", - "dev": true, - "requires": { - "gitconfiglocal": "^1.0.0", - "pify": "^2.3.0" - } - }, - "git-semver-tags": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-2.0.3.tgz", - "integrity": "sha512-tj4FD4ww2RX2ae//jSrXZzrocla9db5h0V7ikPl1P/WwoZar9epdUhwR7XHXSgc+ZkNq72BEEerqQuicoEQfzA==", - "dev": true, - "requires": { - "meow": "^4.0.0", - "semver": "^6.0.0" - }, - "dependencies": { - "camelcase-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz", - "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=", + "eslint-import-resolver-node": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", + "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", "dev": true, "requires": { - "camelcase": "^4.1.0", - "map-obj": "^2.0.0", - "quick-lru": "^1.0.0" + "debug": "^3.2.7", + "resolve": "^1.20.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + } } }, - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" } }, - "map-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz", - "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=", + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", "dev": true }, - "meow": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/meow/-/meow-4.0.1.tgz", - "integrity": "sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A==", + "internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", "dev": true, "requires": { - "camelcase-keys": "^4.0.0", - "decamelize-keys": "^1.0.0", - "loud-rejection": "^1.0.0", - "minimist": "^1.1.3", - "minimist-options": "^3.0.1", - "normalize-package-data": "^2.3.4", - "read-pkg-up": "^3.0.0", - "redent": "^2.0.0", - "trim-newlines": "^2.0.0" + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" } }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "is-callable": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "dev": true + }, + "is-core-module": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", + "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", "dev": true, "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" + "has": "^1.0.3" } }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" + "is-extglob": "^2.1.1" } }, - "read-pkg-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", - "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, "requires": { - "find-up": "^2.0.0", - "read-pkg": "^3.0.0" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" } }, - "redent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz", - "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=", + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, "requires": { - "indent-string": "^3.0.0", - "strip-indent": "^2.0.0" + "has-tostringtag": "^1.0.0" } }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } }, - "strip-indent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", - "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=", + "object-inspect": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", + "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", "dev": true }, - "trim-newlines": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz", - "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=", - "dev": true - } - } - }, - "git-up": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/git-up/-/git-up-4.0.2.tgz", - "integrity": "sha512-kbuvus1dWQB2sSW4cbfTeGpCMd8ge9jx9RKnhXhuJ7tnvT+NIrTVfYZxjtflZddQYcmdOTlkAcjmx7bor+15AQ==", - "dev": true, - "requires": { - "is-ssh": "^1.3.0", - "parse-url": "^5.0.0" - } - }, - "git-url-parse": { - "version": "11.4.3", - "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-11.4.3.tgz", - "integrity": "sha512-LZTTk0nqJnKN48YRtOpR8H5SEfp1oM2tls90NuZmBxN95PnCvmuXGzqQ4QmVirBgKx2KPYfPGteX3/raWjKenQ==", - "dev": true, - "requires": { - "git-up": "^4.0.0" - } - }, - "gitconfiglocal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz", - "integrity": "sha1-QdBF84UaXqiPA/JMocYXgRRGS5s=", - "dev": true, - "requires": { - "ini": "^1.3.2" - } - }, - "github-slugger": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.3.0.tgz", - "integrity": "sha512-gwJScWVNhFYSRDvURk/8yhcFBee6aFjye2a7Lhb2bUyRulpIoek9p0I9Kt7PT67d/nUlZbFu8L9RLiA0woQN8Q==", - "dev": true, - "requires": { - "emoji-regex": ">=6.0.0 <=6.1.1" - }, - "dependencies": { - "emoji-regex": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-6.1.1.tgz", - "integrity": "sha1-xs0OwbBkLio8Z6ETfvxeeW2k+I4=", - "dev": true - } - } - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-base": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", - "dev": true, - "requires": { - "glob-parent": "^2.0.0", - "is-glob": "^2.0.0" - }, - "dependencies": { - "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", "dev": true, "requires": { - "is-glob": "^2.0.0" + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "dependencies": { + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + } } }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true + "object.values": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", + "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + } }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", "dev": true, "requires": { - "is-extglob": "^1.0.0" + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" } - } - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", "dev": true, "requires": { - "is-extglob": "^2.1.0" + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" } - } - } - }, - "glob-promise": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/glob-promise/-/glob-promise-3.4.0.tgz", - "integrity": "sha512-q08RJ6O+eJn+dVanerAndJwIcumgbDdYiUT7zFQl3Wm1xD6fBKtah7H8ZJChj4wP+8C+QfeVy8xautR7rdmKEw==", - "dev": true, - "requires": { - "@types/glob": "*" - } - }, - "glob-to-regexp": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", - "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", - "dev": true - }, - "global": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", - "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", - "dev": true, - "requires": { - "min-document": "^2.19.0", - "process": "^0.11.10" - } - }, - "global-cache": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/global-cache/-/global-cache-1.2.1.tgz", - "integrity": "sha512-EOeUaup5DgWKlCMhA9YFqNRIlZwoxt731jCh47WBV9fQqHgXhr3Fa55hfgIUqilIcPsfdNKN7LHjrNY+Km40KA==", - "requires": { - "define-properties": "^1.1.2", - "is-symbol": "^1.0.1" - } - }, - "global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "dev": true, - "requires": { - "global-prefix": "^3.0.0" + }, + "string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + } } }, - "global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "eslint-plugin-jest": { + "version": "25.2.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-25.2.3.tgz", + "integrity": "sha512-Yoa0at3euTjERDvPGPWiItY1uuqKYQ5Ov2SmkSLmKRq9OFiVdEehw0rWuK4PA538k7CNqnvmkztjAB9l+HJ7kQ==", "dev": true, "requires": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" + "@typescript-eslint/experimental-utils": "^5.0.0" } }, - "globals": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.0.0.tgz", - "integrity": "sha512-c9xoi32iDwlETiyYfO0pd3M8GcEuytJinSoqq7k3fz4H8p2p31NyfKr7JVd7Y0QvmtWcWXcwqW4L33eeDYgh1A==", + "eslint-plugin-jsdoc": { + "version": "37.0.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-37.0.3.tgz", + "integrity": "sha512-Qg/gIZAfcrM4Qu/JzcnxPGD45Je6wPLFzMZQboeqit/CL4aY6wuzBTkgUMiWXfw/PaPl+sb0GF1XdBlV23ReDA==", "dev": true, "requires": { - "type-fest": "^0.6.0" + "@es-joy/jsdoccomment": "0.12.0", + "comment-parser": "1.2.4", + "debug": "^4.3.2", + "esquery": "^1.4.0", + "jsdoc-type-pratt-parser": "^2.0.0", + "lodash": "^4.17.21", + "regextras": "^0.8.0", + "semver": "^7.3.5", + "spdx-expression-parse": "^3.0.1" }, "dependencies": { - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "comment-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.2.4.tgz", + "integrity": "sha512-pm0b+qv+CkWNriSTMsfnjChF9kH0kxz55y44Wo5le9qLxMj5xDQAaEd9ZN1ovSuk9CsrncWaFwgpOMg7ClJwkw==", + "dev": true + }, + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } } } }, - "globalthis": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.2.tgz", - "integrity": "sha512-ZQnSFO1la8P7auIOQECnm0sSuoMeaSq0EEdXMBFF2QJO4uNcwbyhSgG3MruWNbFTqCLmxVwGOl7LZ9kASvHdeQ==", + "eslint-plugin-jsx-a11y": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.5.1.tgz", + "integrity": "sha512-sVCFKX9fllURnXT2JwLN5Qgo24Ug5NF6dxhkmxsMEUZhXRcGg+X3e1JbJ84YePQKBl5E0ZjAH5Q4rkdcGY99+g==", "dev": true, "requires": { - "define-properties": "^1.1.3" + "@babel/runtime": "^7.16.3", + "aria-query": "^4.2.2", + "array-includes": "^3.1.4", + "ast-types-flow": "^0.0.7", + "axe-core": "^4.3.5", + "axobject-query": "^2.2.0", + "damerau-levenshtein": "^1.0.7", + "emoji-regex": "^9.2.2", + "has": "^1.0.3", + "jsx-ast-utils": "^3.2.1", + "language-tags": "^1.0.5", + "minimatch": "^3.0.4" }, "dependencies": { + "@babel/runtime": { + "version": "7.16.3", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.3.tgz", + "integrity": "sha512-WBwekcqacdY2e9AF/Q7WLFUWmdJGJTkbjqTjoMDgXkVZ3ZRUvOPsLb5KdwISoQVsbP+DQzVZW4Zhci0DvpbNTQ==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "array-includes": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz", + "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1", + "get-intrinsic": "^1.1.1", + "is-string": "^1.0.7" + } + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, "define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", @@ -34556,1191 +33407,901 @@ "requires": { "object-keys": "^1.0.12" } - } - } - }, - "globby": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-9.2.0.tgz", - "integrity": "sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==", - "dev": true, - "requires": { - "@types/glob": "^7.1.1", - "array-union": "^1.0.2", - "dir-glob": "^2.2.2", - "fast-glob": "^2.2.6", - "glob": "^7.1.3", - "ignore": "^4.0.3", - "pify": "^4.0.1", - "slash": "^2.0.0" - }, - "dependencies": { - "dir-glob": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz", - "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==", + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "es-abstract": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", + "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", "dev": true, "requires": { - "path-type": "^3.0.0" + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.1", + "is-string": "^1.0.7", + "is-weakref": "^1.0.1", + "object-inspect": "^1.11.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + }, + "dependencies": { + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + } } }, - "glob": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.5.tgz", - "integrity": "sha512-J9dlskqUXK1OeTOYBEn5s8aMukWMwWfs+rPTn/jn50Ux4MNXVhubL1wu/j2t+H4NVI+cXEcCaYellqaPVGXNqQ==", + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" } }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", "dev": true }, - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, + "is-callable": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", "dev": true - } - } - }, - "globjoin": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", - "integrity": "sha1-L0SUrIkZ43Z8XLtpHp9GMyQoXUM=", - "dev": true - }, - "gonzales-pe": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-4.3.0.tgz", - "integrity": "sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "good-listener": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", - "integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=", - "requires": { - "delegate": "^3.1.2" - } - }, - "got": { - "version": "10.7.0", - "resolved": "https://registry.npmjs.org/got/-/got-10.7.0.tgz", - "integrity": "sha512-aWTDeNw9g+XqEZNcTjMMZSy7B7yE9toWOFYip7ofFTLleJhvZwUxxTxkTpKvF+p1SAA4VHmuEy7PiHTHyq8tJg==", - "dev": true, - "requires": { - "@sindresorhus/is": "^2.0.0", - "@szmarczak/http-timer": "^4.0.0", - "@types/cacheable-request": "^6.0.1", - "cacheable-lookup": "^2.0.0", - "cacheable-request": "^7.0.1", - "decompress-response": "^5.0.0", - "duplexer3": "^0.1.4", - "get-stream": "^5.0.0", - "lowercase-keys": "^2.0.0", - "mimic-response": "^2.1.0", - "p-cancelable": "^2.0.0", - "p-event": "^4.0.0", - "responselike": "^2.0.0", - "to-readable-stream": "^2.0.0", - "type-fest": "^0.10.0" - }, - "dependencies": { - "get-stream": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz", - "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==", + }, + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, "requires": { - "pump": "^3.0.0" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" } }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "has-tostringtag": "^1.0.0" } }, - "type-fest": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.10.0.tgz", - "integrity": "sha512-EUV9jo4sffrwlg8s0zDhP0T2WD3pru5Xi0+HTE3zTUmBaZNhfkite9PdSJwdXLwPVW0jnAHT56pZHIOYckPEiw==", - "dev": true - } - } - }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" - }, - "gradient-parser": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/gradient-parser/-/gradient-parser-0.1.5.tgz", - "integrity": "sha1-DH4heVWeXOfY1x9EI6+TcQCyJIw=" - }, - "growly": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", - "dev": true, - "optional": true - }, - "gud": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gud/-/gud-1.0.0.tgz", - "integrity": "sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw==", - "dev": true - }, - "gzip-size": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz", - "integrity": "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==", - "dev": true, - "requires": { - "duplexer": "^0.1.1", - "pify": "^4.0.1" - }, - "dependencies": { - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - } - } - }, - "handlebars": { - "version": "4.7.6", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.6.tgz", - "integrity": "sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA==", - "dev": true, - "requires": { - "minimist": "^1.2.5", - "neo-async": "^2.6.0", - "source-map": "^0.6.1", - "uglify-js": "^3.1.4", - "wordwrap": "^1.0.0" - }, - "dependencies": { - "neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "jsx-ast-utils": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.1.tgz", + "integrity": "sha512-uP5vu8xfy2F9A6LGC22KO7e2/vGTS1MhP+18f++ZNlf0Ohaxbc9nIEwHAsejlJKyzfZzU5UIhe5ItYkitcZnZA==", + "dev": true, + "requires": { + "array-includes": "^3.1.3", + "object.assign": "^4.1.2" + } + }, + "object-inspect": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", + "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", "dev": true }, - "uglify-js": { - "version": "3.12.4", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.12.4.tgz", - "integrity": "sha512-L5i5jg/SHkEqzN18gQMTWsZk3KelRsfD1wUVNqtq0kzqWQqcJjyL8yc1o8hJgRrWqrAl2mUFbhfznEIoi7zi2A==", + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", "dev": true, - "optional": true - } - } - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true - }, - "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", - "dev": true, - "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" - } - }, - "hard-rejection": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", - "dev": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - } - } - }, - "has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "has-glob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-glob/-/has-glob-1.0.0.tgz", - "integrity": "sha1-mqqe7b/7G6OZCnsAEPtnjuAIEgc=", - "dev": true, - "requires": { - "is-glob": "^3.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "dependencies": { + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + } + } + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", "dev": true, "requires": { - "is-extglob": "^2.1.0" + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" } - } - } - }, - "has-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=" - }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "dev": true - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + }, + "string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dev": true, "requires": { - "is-buffer": "^1.1.5" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" } - } - } - }, - "hash-base": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", - "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" + }, + "string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + } } }, - "hast-to-hyperscript": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz", - "integrity": "sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA==", + "eslint-plugin-playwright": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-playwright/-/eslint-plugin-playwright-0.8.0.tgz", + "integrity": "sha512-9uJH25m6H3jwU5O7bHD5M8cLx46L72EnIUe3dZqTox6M+WzOFzeUWaDJHHCdLGXZ8XlAU4mbCZnP7uhjKepfRA==", + "dev": true + }, + "eslint-plugin-prettier": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.3.0.tgz", + "integrity": "sha512-tMTwO8iUWlSRZIwS9k7/E4vrTsfvsrcM5p1eftyuqWH25nKsz/o6/54I7jwQ/3zobISyC7wMy9ZsFwgTxOcOpQ==", "dev": true, "requires": { - "@types/unist": "^2.0.3", - "comma-separated-tokens": "^1.0.0", - "property-information": "^5.3.0", - "space-separated-tokens": "^1.0.0", - "style-to-object": "^0.3.0", - "unist-util-is": "^4.0.0", - "web-namespaces": "^1.0.0" - }, - "dependencies": { - "unist-util-is": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", - "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", - "dev": true - } + "prettier-linter-helpers": "^1.0.0" } }, - "hast-util-from-parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-6.0.1.tgz", - "integrity": "sha512-jeJUWiN5pSxW12Rh01smtVkZgZr33wBokLzKLwinYOUfSzm1Nl/c3GUGebDyOKjdsRgMvoVbV0VpAcpjF4NrJA==", + "eslint-plugin-react": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.27.0.tgz", + "integrity": "sha512-0Ut+CkzpppgFtoIhdzi2LpdpxxBvgFf99eFqWxJnUrO7mMe0eOiNpou6rvNYeVVV6lWZvTah0BFne7k5xHjARg==", "dev": true, "requires": { - "@types/parse5": "^5.0.0", - "hastscript": "^6.0.0", - "property-information": "^5.0.0", - "vfile": "^4.0.0", - "vfile-location": "^3.2.0", - "web-namespaces": "^1.0.0" + "array-includes": "^3.1.4", + "array.prototype.flatmap": "^1.2.5", + "doctrine": "^2.1.0", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.0.4", + "object.entries": "^1.1.5", + "object.fromentries": "^2.0.5", + "object.hasown": "^1.1.0", + "object.values": "^1.1.5", + "prop-types": "^15.7.2", + "resolve": "^2.0.0-next.3", + "semver": "^6.3.0", + "string.prototype.matchall": "^4.0.6" }, "dependencies": { - "is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "dev": true + "array-includes": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz", + "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1", + "get-intrinsic": "^1.1.1", + "is-string": "^1.0.7" + } }, - "unist-util-stringify-position": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", - "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", + "array.prototype.flatmap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.5.tgz", + "integrity": "sha512-08u6rVyi1Lj7oqWbS9nUxliETrtIROT4XGTA4D/LWGten6E3ocm7cy9SIrmNHOL5XVbVuckUp3X6Xyg8/zpvHA==", "dev": true, "requires": { - "@types/unist": "^2.0.2" + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0" } }, - "vfile": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", - "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", "dev": true, "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" } }, - "vfile-location": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz", - "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==", + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "es-abstract": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", + "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.1", + "is-string": "^1.0.7", + "is-weakref": "^1.0.1", + "object-inspect": "^1.11.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + }, + "dependencies": { + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + } + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true }, - "vfile-message": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", - "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", "dev": true, "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" } - } - } - }, - "hast-util-parse-selector": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz", - "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==", - "dev": true - }, - "hast-util-raw": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-6.0.1.tgz", - "integrity": "sha512-ZMuiYA+UF7BXBtsTBNcLBF5HzXzkyE6MLzJnL605LKE8GJylNjGc4jjxazAHUtcwT5/CEt6afRKViYB4X66dig==", - "dev": true, - "requires": { - "@types/hast": "^2.0.0", - "hast-util-from-parse5": "^6.0.0", - "hast-util-to-parse5": "^6.0.0", - "html-void-elements": "^1.0.0", - "parse5": "^6.0.0", - "unist-util-position": "^3.0.0", - "vfile": "^4.0.0", - "web-namespaces": "^1.0.0", - "xtend": "^4.0.0", - "zwitch": "^1.0.0" - }, - "dependencies": { - "is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + }, + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", "dev": true }, - "parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, + "is-callable": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", "dev": true }, - "unist-util-stringify-position": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", - "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, "requires": { - "@types/unist": "^2.0.2" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" } }, - "vfile": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", - "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" + "has-tostringtag": "^1.0.0" } }, - "vfile-message": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", - "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" + "has-symbols": "^1.0.2" } - } - } - }, - "hast-util-to-parse5": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz", - "integrity": "sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ==", - "dev": true, - "requires": { - "hast-to-hyperscript": "^9.0.0", - "property-information": "^5.0.0", - "web-namespaces": "^1.0.0", - "xtend": "^4.0.0", - "zwitch": "^1.0.0" - } - }, - "hastscript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz", - "integrity": "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==", - "dev": true, - "requires": { - "@types/hast": "^2.0.0", - "comma-separated-tokens": "^1.0.0", - "hast-util-parse-selector": "^2.0.0", - "property-information": "^5.0.0", - "space-separated-tokens": "^1.0.0" - } - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true - }, - "hermes-engine": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/hermes-engine/-/hermes-engine-0.7.2.tgz", - "integrity": "sha512-E2DkRaO97gwL98LPhgfkMqhHiNsrAjIfEk3wWYn2Y31xdkdWn0572H7RnVcGujMJVqZNJvtknxlpsUb8Wzc3KA==" - }, - "hermes-profile-transformer": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/hermes-profile-transformer/-/hermes-profile-transformer-0.0.6.tgz", - "integrity": "sha512-cnN7bQUm65UWOy6cbGcCcZ3rpwW8Q/j4OP5aWRhEry4Z2t2aR1cjrbp0BS+KiBN0smvP1caBgAuxutvyvJILzQ==", - "requires": { - "source-map": "^0.7.3" - }, - "dependencies": { - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" - } - } - }, - "hex-color-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", - "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==", - "dev": true - }, - "hey-listen": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/hey-listen/-/hey-listen-1.0.8.tgz", - "integrity": "sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q==" - }, - "highlight-words-core": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/highlight-words-core/-/highlight-words-core-1.2.2.tgz", - "integrity": "sha512-BXUKIkUuh6cmmxzi5OIbUJxrG8OAk2MqoL1DtO3Wo9D2faJg2ph5ntyuQeLqaHJmzER6H5tllCDA9ZnNe9BVGg==" - }, - "highlight.js": { - "version": "10.7.3", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", - "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", - "dev": true - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "dev": true, - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "requires": { - "react-is": "^16.7.0" - } - }, - "homedir-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", - "dev": true, - "requires": { - "parse-passwd": "^1.0.0" - } - }, - "hosted-git-info": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", - "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", - "dev": true - }, - "hpq": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/hpq/-/hpq-1.3.0.tgz", - "integrity": "sha512-fvYTvdCFOWQupGxqkahrkA+ERBuMdzkxwtUdKrxR6rmMd4Pfl+iZ1QiQYoaZ0B/v0y59MOMnz3XFUWbT50/NWA==" - }, - "hsl-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", - "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=", - "dev": true - }, - "hsla-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", - "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=", - "dev": true - }, - "html-comment-regex": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.1.tgz", - "integrity": "sha1-ZouTd26q5V696POtRkswekljYl4=", - "dev": true - }, - "html-element-map": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/html-element-map/-/html-element-map-1.2.0.tgz", - "integrity": "sha512-0uXq8HsuG1v2TmQ8QkIhzbrqeskE4kn52Q18QJ9iAA/SnHoEKXWiUxHQtclRsCFWEUD2So34X+0+pZZu862nnw==", - "dev": true, - "requires": { - "array-filter": "^1.0.0" - } - }, - "html-encoding-sniffer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", - "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", - "dev": true, - "requires": { - "whatwg-encoding": "^1.0.5" - } - }, - "html-entities": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz", - "integrity": "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==", - "dev": true - }, - "html-escaper": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.0.tgz", - "integrity": "sha512-a4u9BeERWGu/S8JiWEAQcdrg9v4QArtP9keViQjGMdff20fBdd8waotXaNmODqBe6uZ3Nafi7K/ho4gCQHV3Ig==", - "dev": true - }, - "html-minifier-terser": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", - "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==", - "dev": true, - "requires": { - "camel-case": "^4.1.1", - "clean-css": "^4.2.3", - "commander": "^4.1.1", - "he": "^1.2.0", - "param-case": "^3.0.3", - "relateurl": "^0.2.7", - "terser": "^4.6.3" - }, - "dependencies": { - "commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true - } - } - }, - "html-tags": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.1.0.tgz", - "integrity": "sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==", - "dev": true - }, - "html-void-elements": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz", - "integrity": "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==", - "dev": true - }, - "html-webpack-plugin": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.5.2.tgz", - "integrity": "sha512-q5oYdzjKUIPQVjOosjgvCHQOv9Ett9CYYHlgvJeXG0qQvdSojnBq4vAdQBwn1+yGveAwHCoe/rMR86ozX3+c2A==", - "dev": true, - "requires": { - "@types/html-minifier-terser": "^5.0.0", - "@types/tapable": "^1.0.5", - "@types/webpack": "^4.41.8", - "html-minifier-terser": "^5.0.1", - "loader-utils": "^1.2.3", - "lodash": "^4.17.20", - "pretty-error": "^2.1.1", - "tapable": "^1.1.3", - "util.promisify": "1.0.0" - }, - "dependencies": { - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + }, + "object-inspect": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", + "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", "dev": true }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "dependencies": { + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + } + } + }, + "object.entries": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", + "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + } + }, + "object.fromentries": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz", + "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + } + }, + "object.values": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", + "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + } + }, + "regexp.prototype.flags": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", + "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "resolve": { + "version": "2.0.0-next.3", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz", + "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "string.prototype.matchall": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.6.tgz", + "integrity": "sha512-6WgDX8HmQqvEd7J+G6VtAahhsQIssiZ8zl7zKh1VDMFyL3hRTJP4FTNA3RbIp2TOQ9AYNDcc7e3fH0Qbup+DBg==", "dev": true, "requires": { - "minimist": "^1.2.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1", + "get-intrinsic": "^1.1.1", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.3.1", + "side-channel": "^1.0.4" } }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", "dev": true, "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" } }, - "tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "dev": true + "string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } } } }, - "htmlparser2": { - "version": "3.9.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz", - "integrity": "sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=", + "eslint-plugin-react-hooks": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.3.0.tgz", + "integrity": "sha512-XslZy0LnMn+84NEG9jSGR6eGqaZB3133L8xewQo3fQagbQuGt7a63gf+P1NGKZavEYEC3UXaWEAA/AqDkuN6xA==", + "dev": true + }, + "eslint-scope": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", "dev": true, "requires": { - "domelementtype": "^1.3.0", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^2.0.2" + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" } }, - "htmlparser2-without-node-native": { - "version": "3.9.2", - "resolved": "https://registry.npmjs.org/htmlparser2-without-node-native/-/htmlparser2-without-node-native-3.9.2.tgz", - "integrity": "sha1-s+0FDYd9D/NGWWnjOYd7f59mMfY=", + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, "requires": { - "domelementtype": "^1.3.0", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "eventemitter2": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.2" + "eslint-visitor-keys": "^2.0.0" } }, - "http-cache-semantics": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", - "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==", + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true }, - "http-errors": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", - "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", + "espree": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.1.0.tgz", + "integrity": "sha512-ZgYLvCS1wxOczBYGcQT9DDWgicXwJ4dbocr9uYN+/eresBAUuBu+O4WzB21ufQ/JqQT8gyp7hJ3z8SHii32mTQ==", + "dev": true, "requires": { - "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" + "acorn": "^8.6.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^3.1.0" }, "dependencies": { - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "acorn": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.6.0.tgz", + "integrity": "sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw==", + "dev": true + }, + "eslint-visitor-keys": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.1.0.tgz", + "integrity": "sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA==", + "dev": true } } }, - "http-parser-js": { - "version": "0.4.13", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.13.tgz", - "integrity": "sha1-O9bW/ebjFyyTNMOzO2wZPYD+ETc=", - "dev": true + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" }, - "http-proxy-agent": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", - "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", "dev": true, "requires": { - "agent-base": "4", - "debug": "3.1.0" + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } } }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } } }, - "https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", + "estraverse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", "dev": true }, - "https-proxy-agent": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", - "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", + "estree-to-babel": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/estree-to-babel/-/estree-to-babel-3.2.1.tgz", + "integrity": "sha512-YNF+mZ/Wu2FU/gvmzuWtYc8rloubL7wfXCTgouFrnjGVXPA/EeYYA7pupXWrb3Iv1cTBeSSxxJIbK23l4MRNqg==", "dev": true, "requires": { - "agent-base": "^4.3.0", - "debug": "^3.1.0" + "@babel/traverse": "^7.1.6", + "@babel/types": "^7.2.0", + "c8": "^7.6.0" } }, - "human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", "dev": true }, - "humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", - "dev": true, - "requires": { - "ms": "^2.0.0" - } + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" }, - "husky": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/husky/-/husky-7.0.0.tgz", - "integrity": "sha512-xK7lO0EtSzfFPiw+oQncQVy/XqV7UVVjxBByc+Iv5iK3yhW9boDoWgvZy3OGo48QKg/hUtZkzz0hi2HXa0kn7w==", + "event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" + }, + "eventemitter2": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-1.0.5.tgz", + "integrity": "sha1-+YNhBRexc3wLncZDvsqTiTwE3xg=" + }, + "eventemitter3": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", + "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==", "dev": true }, - "iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, "requires": { - "safer-buffer": ">= 2.1.2 < 3" + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" } }, - "icss-utils": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz", - "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==", + "exec-sh": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.2.tgz", + "integrity": "sha512-9sLAvzhI5nc8TpuQUh4ahMdCrWT00wPWz7j47/emR5+2qEfoZP5zzUXvx+vdx+H6ohhnsYC31iX04QLYJK8zTg==" + }, + "execa": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.0.2.tgz", + "integrity": "sha512-QI2zLa6CjGWdiQsmSkZoGtDx2N+cQIGb3yNolGTdjSQzydzLgYYf8LRuagp7S7fPimjcrzUDSUFd/MgzELMi4Q==", "dev": true, "requires": { - "postcss": "^7.0.14" + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" } }, - "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "get-stream": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz", + "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==", "dev": true, "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "pump": "^3.0.0" } }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", "dev": true }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "path-key": "^3.0.0" } - } - } - }, - "ieee754": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", - "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==" - }, - "iferr": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", - "dev": true - }, - "ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", - "dev": true - }, - "ignore-emit-webpack-plugin": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/ignore-emit-webpack-plugin/-/ignore-emit-webpack-plugin-2.0.6.tgz", - "integrity": "sha512-/zC18RWCC2wz4ZwnS4UoujGWzvSKy28DLjtE+jrGBOXej6YdmityhBDzE8E0NlktEqi4tgdNbydX8B6G4haHSQ==", - "dev": true - }, - "ignore-walk": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz", - "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", - "dev": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "image-size": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.6.3.tgz", - "integrity": "sha512-47xSUiQioGaB96nqtp5/q55m0aBQSQdyIloMOc/x+QVTDZLNmXE892IIDrJ0hM1A5vcNUDD5tDffkSP5lCaIIA==" - }, - "immediate": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=" - }, - "immer": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/immer/-/immer-8.0.1.tgz", - "integrity": "sha512-aqXhGP7//Gui2+UrEtvxZxSquQVXTpZ7KDxfCcKAF3Vysvw0CViVaW9RZ1j1xlIYqaaaipBoqdqeibkc18PNvA==", - "dev": true - }, - "import-fresh": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.1.0.tgz", - "integrity": "sha512-PpuksHKGt8rXfWEr9m9EHIpgyyaltBy8+eF6GJM0QCAxMgxCfucMF3mjecK2QsJr0amJW7gTqh5/wht0z2UhEQ==", - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" - } - } - }, - "import-lazy": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", - "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", - "dev": true - }, - "import-local": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", - "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", - "dev": true, - "requires": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + }, + "onetime": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", + "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", "dev": true, "requires": { - "locate-path": "^3.0.0" + "mimic-fn": "^2.1.0" } }, - "locate-path": { + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "pump": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dev": true, "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, - "p-limit": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", - "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, "requires": { - "p-try": "^2.0.0" + "shebang-regex": "^3.0.0" } }, - "p-locate": { + "shebang-regex": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "requires": { - "find-up": "^3.0.0" + "isexe": "^2.0.0" } } } }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" - }, - "indent-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", - "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", - "dev": true - }, - "indexes-of": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", - "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", - "dev": true - }, - "infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "execall": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/execall/-/execall-2.0.0.tgz", + "integrity": "sha512-0FU2hZ5Hh6iQnarpRtQurM/aAvp3RIbfvgLHrcqJYzhXyV2KFruhuChf9NC6waAhiUR7FFtlugkI4p7f2Fqlow==", + "dev": true, "requires": { - "once": "^1.3.0", - "wrappy": "1" + "clone-regexp": "^2.1.0" } }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", "dev": true }, - "init-package-json": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/init-package-json/-/init-package-json-1.10.3.tgz", - "integrity": "sha512-zKSiXKhQveNteyhcj1CoOP8tqp1QuxPIPBl8Bid99DGLFqA1p87M6lNgfjJHSBoWJJlidGOv5rWjyYKEB3g2Jw==", - "dev": true, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "requires": { - "glob": "^7.1.1", - "npm-package-arg": "^4.0.0 || ^5.0.0 || ^6.0.0", - "promzard": "^0.3.0", - "read": "~1.0.1", - "read-package-json": "1 || 2", - "semver": "2.x || 3.x || 4 || 5", - "validate-npm-package-license": "^3.0.1", - "validate-npm-package-name": "^3.0.0" + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { - "npm-package-arg": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-6.1.1.tgz", - "integrity": "sha512-qBpssaL3IOZWi5vEKUKW0cO7kzLeT+EQO9W8RsLOZf76KF9E/K9+wH0C7t06HXPpaH8WH5xF1MExLuCwbTqRUg==", - "dev": true, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "requires": { - "hosted-git-info": "^2.7.1", - "osenv": "^0.1.5", - "semver": "^5.6.0", - "validate-npm-package-name": "^3.0.0" + "is-descriptor": "^0.1.0" } }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } } } }, - "inline-style-parser": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", - "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==", - "dev": true + "expand-tilde": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-1.2.2.tgz", + "integrity": "sha1-C4HrqJflo9MdHD0QL48BRB5VlEk=", + "dev": true, + "requires": { + "os-homedir": "^1.0.1" + } }, - "inquirer": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.1.0.tgz", - "integrity": "sha512-5fJMWEmikSYu0nv/flMc475MhGbB7TSPd/2IpFV4I4rMklboCH2rQjYY5kKiYGHqUF9gvaambupcJFFG9dvReg==", + "expect": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/expect/-/expect-26.6.2.tgz", + "integrity": "sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA==", "dev": true, "requires": { - "ansi-escapes": "^4.2.1", - "chalk": "^3.0.0", - "cli-cursor": "^3.1.0", - "cli-width": "^2.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.15", - "mute-stream": "0.0.8", - "run-async": "^2.4.0", - "rxjs": "^6.5.3", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6" + "@jest/types": "^26.6.2", + "ansi-styles": "^4.0.0", + "jest-get-type": "^26.3.0", + "jest-matcher-utils": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-regex-util": "^26.0.0" }, "dependencies": { - "ansi-escapes": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", - "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", + "@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", "dev": true, "requires": { - "type-fest": "^0.11.0" + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + } + }, + "@types/istanbul-reports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", + "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", + "dev": true, + "requires": { + "@types/istanbul-lib-report": "*" } }, + "@types/stack-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.0.tgz", + "integrity": "sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==", + "dev": true + }, "ansi-regex": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", @@ -35748,32 +34309,21 @@ "dev": true }, "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "@types/color-name": "^1.1.1", "color-convert": "^2.0.1" } }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, "requires": { - "restore-cursor": "^3.1.0" + "fill-range": "^7.0.1" } }, "color-convert": { @@ -35791,872 +34341,973 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", "dev": true }, - "figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, "requires": { - "escape-string-regexp": "^1.0.5" + "to-regex-range": "^5.0.1" } }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", "dev": true }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, - "mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "jest-get-type": { + "version": "26.3.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", + "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", "dev": true }, - "onetime": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", - "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", + "jest-matcher-utils": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz", + "integrity": "sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw==", "dev": true, "requires": { - "mimic-fn": "^2.1.0" + "chalk": "^4.0.0", + "jest-diff": "^26.6.2", + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.2" } }, - "restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "jest-message-util": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz", + "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==", "dev": true, "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" + "@babel/code-frame": "^7.0.0", + "@jest/types": "^26.6.2", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "micromatch": "^4.0.2", + "pretty-format": "^26.6.2", + "slash": "^3.0.0", + "stack-utils": "^2.0.2" } }, - "run-async": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.0.tgz", - "integrity": "sha512-xJTbh/d7Lm7SBhc1tNvTpeCHaEzoyxPrqNlvSdMfBTYwaY++UJFyXUOxAtsRUXjlqOfj8luNaR9vjCh4KeV+pg==", + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", "dev": true, "requires": { - "is-promise": "^2.1.0" - }, - "dependencies": { - "is-promise": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", - "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", - "dev": true - } + "braces": "^3.0.1", + "picomatch": "^2.0.5" } }, - "rxjs": { - "version": "6.5.5", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.5.tgz", - "integrity": "sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ==", + "pretty-format": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", + "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", "dev": true, "requires": { - "tslib": "^1.9.0" + "@jest/types": "^26.6.2", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^17.0.1" } }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } + "react-is": { + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.1.tgz", + "integrity": "sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA==", + "dev": true }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==", "dev": true, "requires": { - "ansi-regex": "^5.0.0" + "escape-string-regexp": "^2.0.0" } }, - "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "requires": { - "has-flag": "^4.0.0" + "is-number": "^7.0.0" } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "type-fest": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", - "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", - "dev": true } } }, - "internal-slot": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.2.tgz", - "integrity": "sha512-2cQNfwhAfJIkU4KZPkDI+Gj5yNNnbqi40W9Gge6dfnk4TocEVm00B3bdiL+JINrbGJil2TeHvM4rETGzk/f/0g==", + "expect-puppeteer": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/expect-puppeteer/-/expect-puppeteer-4.4.0.tgz", + "integrity": "sha512-6Ey4Xy2xvmuQu7z7YQtMsaMV0EHJRpVxIDOd5GRrm04/I3nkTKIutELfECsLp6le+b3SSa3cXhPiw6PgqzxYWA==", + "dev": true + }, + "express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", "dev": true, "requires": { - "es-abstract": "^1.17.0-next.1", - "has": "^1.0.3", - "side-channel": "^1.0.2" + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" }, "dependencies": { - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", "dev": true, "requires": { - "object-keys": "^1.0.12" + "mime-types": "~2.1.24", + "negotiator": "0.6.2" } }, - "es-abstract": { - "version": "1.17.4", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.4.tgz", - "integrity": "sha512-Ae3um/gb8F0mui/jPL+QiqmglkUsaQf7FwBEHYIFkztkneosu9imhqHpBzQ3h1vit8t5iQ74t6PEVvphBZiuiQ==", + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.1.5", - "is-regex": "^1.0.5", - "object-inspect": "^1.7.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimleft": "^2.1.1", - "string.prototype.trimright": "^2.1.1" - }, - "dependencies": { - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - } + "ms": "2.0.0" } }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "http-errors": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", + "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", "dev": true, "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" } }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, - "is-callable": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", - "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "dev": true }, - "is-regex": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", - "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", - "dev": true, - "requires": { - "has": "^1.0.3" - } + "mime-db": { + "version": "1.43.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz", + "integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==", + "dev": true }, - "is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "mime-types": { + "version": "2.1.26", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz", + "integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==", "dev": true, "requires": { - "has-symbols": "^1.0.1" + "mime-db": "1.43.0" } }, - "object-inspect": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", - "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", "dev": true }, - "string.prototype.trimleft": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz", - "integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==", + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "dev": true + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true + }, + "send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", "dev": true, "requires": { - "define-properties": "^1.1.3", - "function-bind": "^1.1.1" + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + } } }, - "string.prototype.trimright": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz", - "integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==", + "serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", "dev": true, "requires": { - "define-properties": "^1.1.3", - "function-bind": "^1.1.1" + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" } - } - } - }, - "interpret": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", - "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", - "dev": true - }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "requires": { - "loose-envify": "^1.0.0" + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "dev": true + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true + } } }, - "ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" - }, - "ip-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", - "dev": true - }, - "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "dev": true - }, - "irregular-plurals": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-3.2.0.tgz", - "integrity": "sha512-YqTdPLfwP7YFN0SsD3QUVCkm9ZG2VzOXv3DOrw5G5mkMbVwptTwVcFv7/C0vOpBmgTxAeTG19XpUs1E522LW9Q==", - "dev": true - }, - "is-absolute-url": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", - "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", "dev": true }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "requires": { - "kind-of": "^3.0.2" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" }, "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "requires": { - "is-buffer": "^1.1.5" + "is-plain-object": "^2.0.4" } } } }, - "is-alphabetical": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.2.tgz", - "integrity": "sha512-V0xN4BYezDHcBSKb1QHUFMlR4as/XEuCZBzMJUU4n7+Cbt33SmUnSol+pnXFvLxSHNq2CemUXNdaXV6Flg7+xg==", - "dev": true - }, - "is-alphanumeric": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz", - "integrity": "sha1-Spzvcdr0wAHB2B1j0UDPU/1oifQ=", - "dev": true - }, - "is-alphanumerical": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.2.tgz", - "integrity": "sha512-pyfU/0kHdISIgslFfZN9nfY1Gk3MquQgUm1mJTjdkEPpkAKNWuBTSqFwewOpR7N351VkErCiyV71zX7mlQQqsg==", - "dev": true, - "requires": { - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0" - } - }, - "is-arguments": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz", - "integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==", - "dev": true, - "requires": { - "call-bind": "^1.0.0" - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" - }, - "is-bigint": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.1.tgz", - "integrity": "sha512-J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg==", - "dev": true - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "optional": true, - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "is-boolean-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.0.1.tgz", - "integrity": "sha512-TqZuVwa/sppcrhUCAYkGBk7w0yxfQQnxq28fjkO53tnK9FQXmdwz2JS5+GjsWQ6RByES1K40nI+yDic5c9/aAQ==", - "dev": true - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "is-builtin-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", - "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", - "dev": true, - "requires": { - "builtin-modules": "^1.0.0" - } - }, - "is-callable": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==" - }, - "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "requires": { - "ci-info": "^2.0.0" - } - }, - "is-color-stop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", - "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", + "external-editor": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", + "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==", "dev": true, "requires": { - "css-color-names": "^0.0.4", - "hex-color-regex": "^1.1.0", - "hsl-regex": "^1.0.0", - "hsla-regex": "^1.0.0", - "rgb-regex": "^1.0.1", - "rgba-regex": "^1.0.0" - } - }, - "is-core-module": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", - "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", - "requires": { - "has": "^1.0.3" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "requires": { - "kind-of": "^3.0.2" + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" }, "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, "requires": { - "is-buffer": "^1.1.5" + "safer-buffer": ">= 2.1.2 < 3" } } } }, - "is-date-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=" - }, - "is-decimal": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.2.tgz", - "integrity": "sha512-TRzl7mOCchnhchN+f3ICUCzYvL9ul7R+TYOsZ8xia++knyZAJfv/uA1FvQXsAnYIl1T3B2X5E/J7Wb1QXiIBXg==", - "dev": true - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } } } }, - "is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=" - }, - "is-docker": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.0.0.tgz", - "integrity": "sha512-pJEdRugimx4fBMra5z2/5iRdZ63OhYV0vr0Dwm5+xtW4D1FvRkB8hamMIhnWfyJeDdyr/aa7BDyNbtG38VxgoQ==", - "dev": true - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-finite": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", - "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, - "is-function": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", - "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==", - "dev": true - }, - "is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true - }, - "is-glob": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", - "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "extract-zip": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.7.tgz", + "integrity": "sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k=", "dev": true, "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-hexadecimal": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.2.tgz", - "integrity": "sha512-but/G3sapV3MNyqiDBLrOi4x8uCIw0RY3o/Vb5GT0sMFHrVV7731wFSVy41T5FO1og7G0gXLJh0MkgPRouko/A==", - "dev": true - }, - "is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "dev": true - }, - "is-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", - "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", - "dev": true - }, - "is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==" - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "^3.0.2" + "concat-stream": "1.6.2", + "debug": "2.6.9", + "mkdirp": "0.5.1", + "yauzl": "2.4.1" }, "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, "requires": { - "is-buffer": "^1.1.5" + "ms": "2.0.0" } } } }, - "is-number-object": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.4.tgz", - "integrity": "sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==", + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", "dev": true }, - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", - "dev": true + "fast-average-color": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/fast-average-color/-/fast-average-color-4.3.0.tgz", + "integrity": "sha512-k8FXd6+JeXoItmdNqB3hMwFgArryjdYBLuzEM8fRY/oztd/051yhSHU6GUrMOfIQU9dDHyFDcIAkGrQKlYtpDA==" }, - "is-observable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-observable/-/is-observable-1.1.0.tgz", - "integrity": "sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA==", - "dev": true, - "requires": { - "symbol-observable": "^1.1.0" - } + "fast-base64-decode": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fast-base64-decode/-/fast-base64-decode-1.0.0.tgz", + "integrity": "sha512-qwaScUgUGBYeDNRnbc/KyllVU88Jk1pRHPStuF/lO7B0/RTRLj7U0lkdTAutlBblY08rwZDff6tNU9cjv6j//Q==" }, - "is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, - "is-path-in-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", - "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", + "fast-diff": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "dev": true + }, + "fast-glob": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", "dev": true, "requires": { - "is-path-inside": "^2.1.0" + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" }, "dependencies": { - "is-path-inside": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", - "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, "requires": { - "path-is-inside": "^1.0.2" + "fill-range": "^7.0.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + } + }, + "picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" } } } }, - "is-path-inside": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.1.tgz", - "integrity": "sha512-CKstxrctq1kUesU6WhtZDbYKzzYBuRH0UYInAVrkc/EYdB9ltbfE0gOoayG9nhohG6447sOOVGhHqsdmBvkbNg==", - "dev": true - }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", - "dev": true - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "requires": { - "isobject": "^3.0.1" - } - }, - "is-potential-custom-element-name": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz", - "integrity": "sha1-DFLlS8yjkbssSUsh6GJtczbG45c=", - "dev": true - }, - "is-promise": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", - "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==" - }, - "is-regex": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", - "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", - "requires": { - "has": "^1.0.1" - } - }, - "is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", + "fast-json-parse": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fast-json-parse/-/fast-json-parse-1.0.3.tgz", + "integrity": "sha512-FRWsaZRWEJ1ESVNbDWmsAlqDk96gPQezzLghafp5J4GUKjbCz3OkAHuZs5TuPEtkbVQERysLp9xv6c24fBm8Aw==", "dev": true }, - "is-resolvable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", "dev": true }, - "is-root": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", - "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==", + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, - "is-set": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", - "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "fast-memoize": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/fast-memoize/-/fast-memoize-2.5.2.tgz", + "integrity": "sha512-Ue0LwpDYErFbmNnZSF0UH6eImUwDmogUO1jyE+JbN2gsQz/jICm1Ve7t9QT0rNSsfJt+Hs4/S3GnsDVjL4HVrw==" + }, + "fastest-levenshtein": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", + "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", "dev": true }, - "is-ssh": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.3.2.tgz", - "integrity": "sha512-elEw0/0c2UscLrNG+OAorbP539E3rhliKPg+hDMWN9VwrDXfYK+4PBEykDPfxlYYtQvl84TascnQyobfQLHEhQ==", + "fastq": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.6.0.tgz", + "integrity": "sha512-jmxqQ3Z/nXoeyDmWAzF9kH1aGZSis6e/SbfPmJpUnyZ0ogr6iscHQaml4wsEepEWSdtmpy+eVXmCRIMpxaXqOA==", "dev": true, "requires": { - "protocols": "^1.1.0" + "reusify": "^1.0.0" } }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" - }, - "is-string": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", - "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", - "dev": true - }, - "is-subset": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz", - "integrity": "sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY=", - "dev": true + "fault": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/fault/-/fault-1.0.4.tgz", + "integrity": "sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==", + "dev": true, + "requires": { + "format": "^0.2.0" + } }, - "is-svg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz", - "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==", + "faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", "dev": true, "requires": { - "html-comment-regex": "^1.1.0" + "websocket-driver": ">=0.5.1" } }, - "is-symbol": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz", - "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=" + "fb-watchman": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.0.tgz", + "integrity": "sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg=", + "requires": { + "bser": "^2.0.0" + } }, - "is-text-path": { + "fd-slicer": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", - "integrity": "sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", + "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", "dev": true, "requires": { - "text-extensions": "^1.0.0" + "pend": "~1.2.0" } }, - "is-touch-device": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-touch-device/-/is-touch-device-1.0.1.tgz", - "integrity": "sha512-LAYzo9kMT1b2p19L/1ATGt2XcSilnzNlyvq6c0pbPRVisLbAPpLqr53tIJS00kvrTkj0HtR8U7+u8X0yR8lPSw==" - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "figgy-pudding": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz", + "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==", "dev": true }, - "is-whitespace-character": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", - "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==", - "dev": true + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } }, - "is-word-character": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz", - "integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==", - "dev": true + "file-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", + "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "dependencies": { + "@types/json-schema": { + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", + "dev": true + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true + }, + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=" + "file-system-cache": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/file-system-cache/-/file-system-cache-1.0.5.tgz", + "integrity": "sha1-hCWbNqK7uNPW6xAh0xMv/mTP/08=", + "dev": true, + "requires": { + "bluebird": "^3.3.5", + "fs-extra": "^0.30.0", + "ramda": "^0.21.0" + }, + "dependencies": { + "fs-extra": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", + "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0", + "path-is-absolute": "^1.0.0", + "rimraf": "^2.2.8" + } + }, + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } }, - "isarray": { + "file-uri-to-path": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true }, - "isexe": { + "filename-reserved-regex": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", + "integrity": "sha1-q/c9+rc10EVECr/qLZHzieu/oik=", + "dev": true }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + "filenamify": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-4.2.0.tgz", + "integrity": "sha512-pkgE+4p7N1n7QieOopmn3TqJaefjdWXwEkj2XLZJLKfOgcQKkn11ahvGNgTD8mLggexLiDFQxeTs14xVU22XPA==", + "dev": true, + "requires": { + "filename-reserved-regex": "^2.0.0", + "strip-outer": "^1.0.1", + "trim-repeated": "^1.0.0" + } }, - "isomorphic-fetch": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", - "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", + "filesize": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-6.1.0.tgz", + "integrity": "sha512-LpCHtPQ3sFx67z+uh2HnSyWSLLu5Jxo21795uRDuar/EOuYWXib5EmPaGIBuSnRqH2IODiKA2k5re/K9OnN/Yg==", + "dev": true + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "requires": { - "node-fetch": "^1.0.1", - "whatwg-fetch": ">=0.10.0" + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" }, "dependencies": { - "node-fetch": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "requires": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" + "is-extendable": "^0.1.0" } } } }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "istanbul-lib-coverage": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", - "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", - "dev": true + "filter-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz", + "integrity": "sha1-mzERErxsYSehbgFsbF1/GeCAXFs=" }, - "istanbul-lib-instrument": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.1.tgz", - "integrity": "sha512-imIchxnodll7pvQBYOqUu88EufLCU56LMeFPZZM/fJZ1irYcYdqroaV+ACK1Ila8ls09iEYArp+nqyC6lW1Vfg==", - "dev": true, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", "requires": { - "@babel/core": "^7.7.5", - "@babel/parser": "^7.7.5", - "@babel/template": "^7.7.4", - "@babel/traverse": "^7.7.4", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", - "semver": "^6.3.0" + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" }, "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" } } }, - "istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", "requires": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" }, "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } }, - "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", - "dev": true, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "requires": { - "has-flag": "^4.0.0" + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "requires": { + "find-up": "^3.0.0" } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" } } }, - "istanbul-lib-source-maps": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz", - "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==", + "find-file-up": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/find-file-up/-/find-file-up-0.1.3.tgz", + "integrity": "sha1-z2gJG8+fMApA2kEbN9pczlovvqA=", "dev": true, "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" + "fs-exists-sync": "^0.1.0", + "resolve-dir": "^0.1.0" + } + }, + "find-parent-dir": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/find-parent-dir/-/find-parent-dir-0.3.0.tgz", + "integrity": "sha1-M8RLQpqysvBkYpnF+fcY83b/jVQ=", + "dev": true + }, + "find-pkg": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/find-pkg/-/find-pkg-0.1.2.tgz", + "integrity": "sha1-G9wiwG42NlUy4qJIBGhUuXiNpVc=", + "dev": true, + "requires": { + "find-file-up": "^0.1.2" + } + }, + "find-process": { + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/find-process/-/find-process-1.4.7.tgz", + "integrity": "sha512-/U4CYp1214Xrp3u3Fqr9yNynUrr5Le4y0SsJh2lMDDSbpwYSz3M2SMWQC+wqcx79cN8PQtHQIL8KnuY9M66fdg==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "commander": "^5.1.0", + "debug": "^4.1.1" }, "dependencies": { + "commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "dev": true + }, "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dev": true, "requires": { - "ms": "^2.1.1" + "ms": "2.1.2" } }, "ms": { @@ -36664,1372 +35315,2276 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true } } }, - "istanbul-reports": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz", - "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==", + "find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "find-yarn-workspace-root": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-1.2.1.tgz", + "integrity": "sha512-dVtfb0WuQG+8Ag2uWkbG79hOUzEsRrhBzgfn86g2sJPkzmcpGdghbNTfUKGTxymFrY/tLIodDzLoW9nOJ4FY8Q==", + "dev": true, + "requires": { + "fs-extra": "^4.0.3", + "micromatch": "^3.1.4" + }, + "dependencies": { + "fs-extra": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", + "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + } + } + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", "dev": true, "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" + "flatted": "^3.1.0", + "rimraf": "^3.0.2" } }, - "iterate-iterator": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/iterate-iterator/-/iterate-iterator-1.0.1.tgz", - "integrity": "sha512-3Q6tudGN05kbkDQDI4CqjaBf4qf85w6W6GnuZDtUVYwKgtC1q8yxYX7CZed7N+tLzQqS6roujWvszf13T+n9aw==", + "flatted": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.0.tgz", + "integrity": "sha512-tW+UkmtNg/jv9CSofAKvgVcO7c2URjhTdW1ZTkcAritblu8tajiYy7YisnIflEwtKssCtOxpnBRoCB7iap0/TA==", "dev": true }, - "iterate-value": { + "flow-parser": { + "version": "0.121.0", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.121.0.tgz", + "integrity": "sha512-1gIBiWJNR0tKUNv8gZuk7l9rVX06OuLzY9AoGio7y/JT4V1IZErEMEq2TJS+PFcw/y0RshZ1J/27VfK1UQzYVg==" + }, + "flush-write-stream": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.3.tgz", + "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.4" + } + }, + "follow-redirects": { + "version": "1.14.8", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.8.tgz", + "integrity": "sha512-1x0S9UVJHsQprFcEC/qnNzBLcIxsjAV905f/UkQxbclCsoTWlacCNOpQa/anodLl2uaEKFhfWOvM2Qg77+15zA==", + "dev": true + }, + "for-in": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/iterate-value/-/iterate-value-1.0.2.tgz", - "integrity": "sha512-A6fMAio4D2ot2r/TYzr4yUWrmwNdsN5xL7+HUiyACE4DXm+q8HtPcnFTp+NnW3k4N05tZ7FVYFFb2CR13NxyHQ==", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" + }, + "for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", "dev": true, "requires": { - "es-get-iterator": "^1.0.2", - "iterate-iterator": "^1.0.1" + "for-in": "^1.0.1" } }, - "jed": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/jed/-/jed-1.1.1.tgz", - "integrity": "sha1-elSbvZ/+FYWwzQoZHiAwVb7ldLQ=" + "foreach": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", + "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=" }, - "jest": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest/-/jest-26.6.3.tgz", - "integrity": "sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q==", + "foreground-child": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", + "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", "dev": true, "requires": { - "@jest/core": "^26.6.3", - "import-local": "^3.0.2", - "jest-cli": "^26.6.3" + "cross-spawn": "^7.0.0", + "signal-exit": "^3.0.2" }, "dependencies": { - "@jest/console": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.2.tgz", - "integrity": "sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==", + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^26.6.2", - "jest-util": "^26.6.2", - "slash": "^3.0.0" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" } }, - "@jest/test-result": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.2.tgz", - "integrity": "sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==", - "dev": true, - "requires": { - "@jest/console": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - } + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true }, - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" + "shebang-regex": "^3.0.0" } }, - "@types/istanbul-reports": { + "shebang-regex": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", - "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", - "dev": true, - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/stack-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.0.tgz", - "integrity": "sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==", - "dev": true - }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "requires": { - "fill-range": "^7.0.1" + "isexe": "^2.0.0" } - }, - "camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + } + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "fork-ts-checker-webpack-plugin": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.0.tgz", + "integrity": "sha512-cS178Y+xxtIjEUorcHddKS7yCMlrDPV31mt47blKKRfMd70Kxu5xruAFE2o9sDY6wVC5deuob/u/alD04YYHnw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@types/json-schema": "^7.0.5", + "chalk": "^4.1.0", + "chokidar": "^3.4.2", + "cosmiconfig": "^6.0.0", + "deepmerge": "^4.2.2", + "fs-extra": "^9.0.0", + "glob": "^7.1.6", + "memfs": "^3.1.2", + "minimatch": "^3.0.4", + "schema-utils": "2.7.0", + "semver": "^7.3.2", + "tapable": "^1.0.0" + }, + "dependencies": { + "@types/json-schema": { + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", "dev": true }, - "cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" } }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", "dev": true, "requires": { - "color-name": "~1.1.4" + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" } }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, "requires": { - "to-regex-range": "^5.0.1" + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" } }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", "dev": true }, - "import-local": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", - "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, "requires": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" } }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true }, - "jest-cli": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-26.6.3.tgz", - "integrity": "sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==", + "schema-utils": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", + "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", "dev": true, "requires": { - "@jest/core": "^26.6.3", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "import-local": "^3.0.2", - "is-ci": "^2.0.0", - "jest-config": "^26.6.3", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "prompts": "^2.0.1", - "yargs": "^15.4.1" + "@types/json-schema": "^7.0.4", + "ajv": "^6.12.2", + "ajv-keywords": "^3.4.1" } }, - "jest-get-type": { - "version": "26.3.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", - "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true - }, - "jest-message-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz", - "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==", + } + } + }, + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "dependencies": { + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "@jest/types": "^26.6.2", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.2", - "pretty-format": "^26.6.2", - "slash": "^3.0.0", - "stack-utils": "^2.0.2" + "delayed-stream": "~1.0.0" } - }, - "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", + } + } + }, + "format": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", + "integrity": "sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs=", + "dev": true + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "dev": true + }, + "fraction.js": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.0.13.tgz", + "integrity": "sha512-E1fz2Xs9ltlUp+qbiyx9wmt2n9dRzPsS11Jtdb8D2o+cC7wr9xkkKsVKJuBX0ST+LVS+LhLO+SbLJNtfWcJvXA==", + "dev": true + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "requires": { + "map-cache": "^0.2.2" + } + }, + "framer-motion": { + "version": "6.2.8", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-6.2.8.tgz", + "integrity": "sha512-4PtBWFJ6NqR350zYVt9AsFDtISTqsdqna79FvSYPfYDXuuqFmiKtZdkTnYPslnsOMedTW0pEvaQ7eqjD+sA+HA==", + "requires": { + "@emotion/is-prop-valid": "^0.8.2", + "framesync": "6.0.1", + "hey-listen": "^1.0.8", + "popmotion": "11.0.3", + "style-value-types": "5.0.0", + "tslib": "^2.1.0" + } + }, + "framesync": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/framesync/-/framesync-6.0.1.tgz", + "integrity": "sha512-fUY88kXvGiIItgNC7wcTOl0SNRCVXMKSWW2Yzfmn7EKNc+MpCzcz9DhdHcdjbrtN3c6R4H5dTY2jiCpPdysEjA==", + "requires": { + "tslib": "^2.1.0" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true + }, + "fs-exists-sync": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz", + "integrity": "sha1-mC1ok6+RjnLQjeyehnP/K1qNat0=", + "dev": true + }, + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "dependencies": { + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" + } + } + }, + "fs-monkey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", + "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", + "dev": true + }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "optional": true + }, + "fstream": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + }, + "dependencies": { + "glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", "dev": true, "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, - "jest-validate": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.2.tgz", - "integrity": "sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==", + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dev": true, "requires": { - "@jest/types": "^26.6.2", - "camelcase": "^6.0.0", - "chalk": "^4.0.0", - "jest-get-type": "^26.3.0", - "leven": "^3.1.0", - "pretty-format": "^26.6.2" + "glob": "^7.1.3" } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + } + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "function.prototype.name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.4.tgz", + "integrity": "sha512-iqy1pIotY/RmhdFZygSSlW0wko2yxkSCKqsuv4pr8QESohpYyG/Z7B/XXvPRKTJS//960rgguE5mSRUsDdaJrQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2", + "functions-have-names": "^1.2.2" + }, + "dependencies": { + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", "dev": true, "requires": { - "p-locate": "^4.1.0" + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" } }, - "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "dev": true, "requires": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" + "object-keys": "^1.0.12" } }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "es-abstract": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", + "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", "dev": true, "requires": { - "p-try": "^2.0.0" + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.2", + "is-string": "^1.0.5", + "object-inspect": "^1.9.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.0" + }, + "dependencies": { + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + } } }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, "requires": { - "p-limit": "^2.2.0" + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" } }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "functions-have-names": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.2.tgz", + "integrity": "sha512-bLgc3asbWdwPbx2mNk2S49kmJCuQeu0nfmaOgbs8WIyzzkw3r4htszdIi9Q9EMezDPTYuJx2wvjZ/EwgAthpnA==", "dev": true }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", "dev": true }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "is-callable": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", + "dev": true + }, + "is-regex": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", + "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", "dev": true, "requires": { - "find-up": "^4.0.0" + "call-bind": "^1.0.2", + "has-symbols": "^1.0.1" } }, - "pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", + "is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", "dev": true, "requires": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" + "has-symbols": "^1.0.1" } }, - "react-is": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.1.tgz", - "integrity": "sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA==", - "dev": true - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "object-inspect": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", + "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==", "dev": true }, - "resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", "dev": true, "requires": { - "resolve-from": "^5.0.0" + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "dependencies": { + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + } } }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true + "string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + } + } + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "functions-have-names": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.1.tgz", + "integrity": "sha512-j48B/ZI7VKs3sgeI2cZp7WXWmZXu7Iq5pl5/vptV5N2mq+DGFuS/ulaDjtaoLpYzuD6u8UgrUKHfgo7fDTSiBA==" + }, + "fuse.js": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-3.6.1.tgz", + "integrity": "sha512-hT9yh/tiinkmirKrlv4KWOjztdoZo1mx9Qh4KvWqC7isoXwdUY3PNWUxceF4/qO9R6riA2C29jdTOeQOIROjgw==", + "dev": true + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true }, - "stack-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==", + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "requires": { - "escape-string-regexp": "^2.0.0" + "number-is-nan": "^1.0.0" } }, "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "^5.0.0" + "ansi-regex": "^2.0.0" } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + } + } + }, + "genfun": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/genfun/-/genfun-5.0.0.tgz", + "integrity": "sha512-KGDOARWVga7+rnB3z9Sd2Letx515owfk0hSxHGuqjANb1M+x2bGZGqHLiozPsYMdM2OubeMni/Hpwmjq6qIUhA==", + "dev": true + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + }, + "get-intrinsic": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.2.tgz", + "integrity": "sha512-aeX0vrFm21ILl3+JpFFRNe9aUvp6VFZb2/CTbgLb8j75kOhvoNYjt9d8KA/tJG4gSo8nzEDedRl0h7vDmBYRVg==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + }, + "dependencies": { + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" + } + } + }, + "get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", + "dev": true + }, + "get-pkg-repo": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-1.4.0.tgz", + "integrity": "sha1-xztInAbYDMVTbCyFP54FIyBWly0=", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "meow": "^3.3.0", + "normalize-package-data": "^2.3.0", + "parse-github-repo-url": "^1.3.0", + "through2": "^2.0.0" + }, + "dependencies": { + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", "dev": true, "requires": { - "is-number": "^7.0.0" + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" } }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", "dev": true, "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" + }, + "dependencies": { + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + } + } } }, - "y18n": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", - "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", - "dev": true + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } }, - "yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", "dev": true, "requires": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" } }, - "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", "dev": true, "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - } + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" } } } }, - "jest-changed-files": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-26.6.2.tgz", - "integrity": "sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ==", + "get-port": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-4.2.0.tgz", + "integrity": "sha512-/b3jarXkH8KJoOMQc3uVGHASwGLPq3gSFJ7tgJm2diza+bydJPTGOibin2steecKeOylE8oY2JERlVWkAJO6yw==", + "dev": true + }, + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true + }, + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, "requires": { - "@jest/types": "^26.6.2", - "execa": "^4.0.0", - "throat": "^5.0.0" + "pump": "^3.0.0" }, "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "@types/istanbul-reports": { + "pump": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", - "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dev": true, "requires": { - "@types/istanbul-lib-report": "*" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } - }, - "throat": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", - "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", - "dev": true } } }, - "jest-circus": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-26.6.3.tgz", - "integrity": "sha512-ACrpWZGcQMpbv13XbzRzpytEJlilP/Su0JtNCi5r/xLpOUhnaIJr8leYYpLEMgPFURZISEHrnnpmB54Q/UziPw==", + "get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", "dev": true, "requires": { - "@babel/traverse": "^7.1.0", - "@jest/environment": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/babel__traverse": "^7.0.4", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^0.7.0", - "expect": "^26.6.2", - "is-generator-fn": "^2.0.0", - "jest-each": "^26.6.2", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-runner": "^26.6.3", - "jest-runtime": "^26.6.3", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "pretty-format": "^26.6.2", - "stack-utils": "^2.0.2", - "throat": "^5.0.0" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" }, "dependencies": { - "@jest/console": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.2.tgz", - "integrity": "sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^26.6.2", - "jest-util": "^26.6.2", - "slash": "^3.0.0" - } - }, - "@jest/test-result": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.2.tgz", - "integrity": "sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==", - "dev": true, - "requires": { - "@jest/console": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - } - }, - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "@types/istanbul-reports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", - "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", "dev": true, "requires": { - "@types/istanbul-lib-report": "*" + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" } }, - "@types/stack-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.0.tgz", - "integrity": "sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==", - "dev": true - }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", "dev": true, "requires": { - "color-convert": "^2.0.1" + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" } }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + } + } + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "gettext-parser": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/gettext-parser/-/gettext-parser-1.4.0.tgz", + "integrity": "sha512-sedZYLHlHeBop/gZ1jdg59hlUEcpcZJofLq2JFwJT1zTqAU3l2wFv6IsuwFHGqbiT9DWzMUW4/em2+hspnmMMA==", + "requires": { + "encoding": "^0.1.12", + "safe-buffer": "^5.1.1" + } + }, + "git-raw-commits": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.0.tgz", + "integrity": "sha512-w4jFEJFgKXMQJ0H0ikBk2S+4KP2VEjhCvLCNqbNRQC8BgGWgLKNCO7a9K9LI+TVT7Gfoloje502sEnctibffgg==", + "dev": true, + "requires": { + "dargs": "^4.0.1", + "lodash.template": "^4.0.2", + "meow": "^4.0.0", + "split2": "^2.0.0", + "through2": "^2.0.0" + }, + "dependencies": { + "camelcase-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz", + "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=", "dev": true, "requires": { - "fill-range": "^7.0.1" + "camelcase": "^4.1.0", + "map-obj": "^2.0.0", + "quick-lru": "^1.0.0" } }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", "dev": true, "requires": { - "color-name": "~1.1.4" + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" } }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "escape-string-regexp": { + "map-obj": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz", + "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=", "dev": true }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "meow": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/meow/-/meow-4.0.1.tgz", + "integrity": "sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A==", "dev": true, "requires": { - "to-regex-range": "^5.0.1" + "camelcase-keys": "^4.0.0", + "decamelize-keys": "^1.0.0", + "loud-rejection": "^1.0.0", + "minimist": "^1.1.3", + "minimist-options": "^3.0.1", + "normalize-package-data": "^2.3.4", + "read-pkg-up": "^3.0.0", + "redent": "^2.0.0", + "trim-newlines": "^2.0.0" } }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "jest-message-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz", - "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==", + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "@jest/types": "^26.6.2", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.2", - "pretty-format": "^26.6.2", - "slash": "^3.0.0", - "stack-utils": "^2.0.2" + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" } }, - "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", "dev": true, "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" } }, - "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "read-pkg-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", + "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", "dev": true, "requires": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" } }, - "pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", + "redent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz", + "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=", "dev": true, "requires": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" + "indent-string": "^3.0.0", + "strip-indent": "^2.0.0" } }, - "react-is": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.1.tgz", - "integrity": "sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA==", - "dev": true - }, - "slash": { + "strip-bom": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true }, - "stack-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==", - "dev": true, - "requires": { - "escape-string-regexp": "^2.0.0" - } - }, - "throat": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", - "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", + "strip-indent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", + "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=", "dev": true }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } + "trim-newlines": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz", + "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=", + "dev": true } } }, - "jest-config": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-26.6.3.tgz", - "integrity": "sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg==", + "git-remote-origin-url": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz", + "integrity": "sha1-UoJlna4hBxRaERJhEq0yFuxfpl8=", "dev": true, "requires": { - "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^26.6.3", - "@jest/types": "^26.6.2", - "babel-jest": "^26.6.3", - "chalk": "^4.0.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.4", - "jest-environment-jsdom": "^26.6.2", - "jest-environment-node": "^26.6.2", - "jest-get-type": "^26.3.0", - "jest-jasmine2": "^26.6.3", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "micromatch": "^4.0.2", - "pretty-format": "^26.6.2" + "gitconfiglocal": "^1.0.0", + "pify": "^2.3.0" + } + }, + "git-semver-tags": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-2.0.3.tgz", + "integrity": "sha512-tj4FD4ww2RX2ae//jSrXZzrocla9db5h0V7ikPl1P/WwoZar9epdUhwR7XHXSgc+ZkNq72BEEerqQuicoEQfzA==", + "dev": true, + "requires": { + "meow": "^4.0.0", + "semver": "^6.0.0" }, "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "camelcase-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz", + "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=", "dev": true, "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" + "camelcase": "^4.1.0", + "map-obj": "^2.0.0", + "quick-lru": "^1.0.0" } }, - "@types/istanbul-reports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", - "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", "dev": true, "requires": { - "@types/istanbul-lib-report": "*" + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" } }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "map-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz", + "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=", "dev": true }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "meow": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/meow/-/meow-4.0.1.tgz", + "integrity": "sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A==", "dev": true, "requires": { - "color-convert": "^2.0.1" + "camelcase-keys": "^4.0.0", + "decamelize-keys": "^1.0.0", + "loud-rejection": "^1.0.0", + "minimist": "^1.1.3", + "minimist-options": "^3.0.1", + "normalize-package-data": "^2.3.4", + "read-pkg-up": "^3.0.0", + "redent": "^2.0.0", + "trim-newlines": "^2.0.0" } }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "dev": true, "requires": { - "fill-range": "^7.0.1" + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" } }, - "camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", "dev": true, "requires": { - "color-name": "~1.1.4" + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" } }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "dev": true + "read-pkg-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", + "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", + "dev": true, + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" + } }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "redent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz", + "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=", "dev": true, "requires": { - "to-regex-range": "^5.0.1" + "indent-string": "^3.0.0", + "strip-indent": "^2.0.0" } }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true }, - "jest-get-type": { - "version": "26.3.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", - "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", + "strip-indent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", + "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=", + "dev": true + }, + "trim-newlines": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz", + "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=", + "dev": true + } + } + }, + "git-up": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/git-up/-/git-up-4.0.2.tgz", + "integrity": "sha512-kbuvus1dWQB2sSW4cbfTeGpCMd8ge9jx9RKnhXhuJ7tnvT+NIrTVfYZxjtflZddQYcmdOTlkAcjmx7bor+15AQ==", + "dev": true, + "requires": { + "is-ssh": "^1.3.0", + "parse-url": "^5.0.0" + } + }, + "git-url-parse": { + "version": "11.4.3", + "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-11.4.3.tgz", + "integrity": "sha512-LZTTk0nqJnKN48YRtOpR8H5SEfp1oM2tls90NuZmBxN95PnCvmuXGzqQ4QmVirBgKx2KPYfPGteX3/raWjKenQ==", + "dev": true, + "requires": { + "git-up": "^4.0.0" + } + }, + "gitconfiglocal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz", + "integrity": "sha1-QdBF84UaXqiPA/JMocYXgRRGS5s=", + "dev": true, + "requires": { + "ini": "^1.3.2" + } + }, + "github-slugger": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.4.0.tgz", + "integrity": "sha512-w0dzqw/nt51xMVmlaV1+JRzN+oCa1KfcgGEWhxUG16wbdA+Xnt/yoFO8Z8x/V82ZcZ0wy6ln9QDup5avbhiDhQ==", + "dev": true + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "glob-promise": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/glob-promise/-/glob-promise-3.4.0.tgz", + "integrity": "sha512-q08RJ6O+eJn+dVanerAndJwIcumgbDdYiUT7zFQl3Wm1xD6fBKtah7H8ZJChj4wP+8C+QfeVy8xautR7rdmKEw==", + "dev": true, + "requires": { + "@types/glob": "*" + } + }, + "glob-to-regexp": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", + "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", + "dev": true + }, + "global": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", + "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", + "dev": true, + "requires": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "global-cache": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/global-cache/-/global-cache-1.2.1.tgz", + "integrity": "sha512-EOeUaup5DgWKlCMhA9YFqNRIlZwoxt731jCh47WBV9fQqHgXhr3Fa55hfgIUqilIcPsfdNKN7LHjrNY+Km40KA==", + "requires": { + "define-properties": "^1.1.2", + "is-symbol": "^1.0.1" + } + }, + "global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "dev": true, + "requires": { + "global-prefix": "^3.0.0" + } + }, + "global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dev": true, + "requires": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + } + }, + "globals": { + "version": "13.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", + "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + }, + "dependencies": { + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true - }, - "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", + } + } + }, + "globalthis": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.2.tgz", + "integrity": "sha512-ZQnSFO1la8P7auIOQECnm0sSuoMeaSq0EEdXMBFF2QJO4uNcwbyhSgG3MruWNbFTqCLmxVwGOl7LZ9kASvHdeQ==", + "dev": true, + "requires": { + "define-properties": "^1.1.3" + }, + "dependencies": { + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "dev": true, "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" + "object-keys": "^1.0.12" } - }, - "jest-validate": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.2.tgz", - "integrity": "sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==", + } + } + }, + "globby": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-9.2.0.tgz", + "integrity": "sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==", + "dev": true, + "requires": { + "@types/glob": "^7.1.1", + "array-union": "^1.0.2", + "dir-glob": "^2.2.2", + "fast-glob": "^2.2.6", + "glob": "^7.1.3", + "ignore": "^4.0.3", + "pify": "^4.0.1", + "slash": "^2.0.0" + }, + "dependencies": { + "dir-glob": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz", + "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==", "dev": true, "requires": { - "@jest/types": "^26.6.2", - "camelcase": "^6.0.0", - "chalk": "^4.0.0", - "jest-get-type": "^26.3.0", - "leven": "^3.1.0", - "pretty-format": "^26.6.2" + "path-type": "^3.0.0" } }, - "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "fast-glob": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", + "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", "dev": true, "requires": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" + "@mrmlnc/readdir-enhanced": "^2.2.1", + "@nodelib/fs.stat": "^1.1.2", + "glob-parent": "^3.1.0", + "is-glob": "^4.0.0", + "merge2": "^1.2.3", + "micromatch": "^3.1.10" } }, - "pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", + "glob": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.5.tgz", + "integrity": "sha512-J9dlskqUXK1OeTOYBEn5s8aMukWMwWfs+rPTn/jn50Ux4MNXVhubL1wu/j2t+H4NVI+cXEcCaYellqaPVGXNqQ==", "dev": true, "requires": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, - "react-is": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.1.tgz", - "integrity": "sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA==", + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "dev": true }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + }, + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true } } }, - "jest-dev-server": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/jest-dev-server/-/jest-dev-server-4.4.0.tgz", - "integrity": "sha512-STEHJ3iPSC8HbrQ3TME0ozGX2KT28lbT4XopPxUm2WimsX3fcB3YOptRh12YphQisMhfqNSNTZUmWyT3HEXS2A==", + "globjoin": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", + "integrity": "sha1-L0SUrIkZ43Z8XLtpHp9GMyQoXUM=", + "dev": true + }, + "good-listener": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", + "integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=", + "requires": { + "delegate": "^3.1.2" + } + }, + "got": { + "version": "10.7.0", + "resolved": "https://registry.npmjs.org/got/-/got-10.7.0.tgz", + "integrity": "sha512-aWTDeNw9g+XqEZNcTjMMZSy7B7yE9toWOFYip7ofFTLleJhvZwUxxTxkTpKvF+p1SAA4VHmuEy7PiHTHyq8tJg==", "dev": true, "requires": { - "chalk": "^3.0.0", - "cwd": "^0.10.0", - "find-process": "^1.4.3", - "prompts": "^2.3.0", - "spawnd": "^4.4.0", - "tree-kill": "^1.2.2", - "wait-on": "^3.3.0" + "@sindresorhus/is": "^2.0.0", + "@szmarczak/http-timer": "^4.0.0", + "@types/cacheable-request": "^6.0.1", + "cacheable-lookup": "^2.0.0", + "cacheable-request": "^7.0.1", + "decompress-response": "^5.0.0", + "duplexer3": "^0.1.4", + "get-stream": "^5.0.0", + "lowercase-keys": "^2.0.0", + "mimic-response": "^2.1.0", + "p-cancelable": "^2.0.0", + "p-event": "^4.0.0", + "responselike": "^2.0.0", + "to-readable-stream": "^2.0.0", + "type-fest": "^0.10.0" }, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "get-stream": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz", + "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==", "dev": true, "requires": { - "color-convert": "^2.0.1" + "pump": "^3.0.0" } }, - "chalk": { + "pump": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dev": true, "requires": { - "color-name": "~1.1.4" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "type-fest": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.10.0.tgz", + "integrity": "sha512-EUV9jo4sffrwlg8s0zDhP0T2WD3pru5Xi0+HTE3zTUmBaZNhfkite9PdSJwdXLwPVW0jnAHT56pZHIOYckPEiw==", "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + } + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" + }, + "gradient-parser": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/gradient-parser/-/gradient-parser-0.1.5.tgz", + "integrity": "sha1-DH4heVWeXOfY1x9EI6+TcQCyJIw=" + }, + "gud": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gud/-/gud-1.0.0.tgz", + "integrity": "sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw==", + "dev": true + }, + "gzip-size": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz", + "integrity": "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==", + "dev": true, + "requires": { + "duplexer": "^0.1.1", + "pify": "^4.0.1" + }, + "dependencies": { + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "tree-kill": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + } + } + }, + "handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true + }, + "handlebars": { + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "dev": true, + "requires": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4", + "wordwrap": "^1.0.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true } } }, - "jest-diff": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz", - "integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==", + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true + }, + "har-validator": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", "dev": true, "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" + "ajv": "^6.5.5", + "har-schema": "^2.0.0" }, "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "@types/istanbul-reports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", - "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "requires": { - "@types/istanbul-lib-report": "*" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" } - }, + } + } + }, + "hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + }, + "dependencies": { "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + } + } + }, + "has-bigints": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "has-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-glob/-/has-glob-1.0.0.tgz", + "integrity": "sha1-mqqe7b/7G6OZCnsAEPtnjuAIEgc=", + "dev": true, + "requires": { + "is-glob": "^3.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "dev": true, "requires": { - "color-convert": "^2.0.1" + "is-extglob": "^2.1.0" } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, + } + } + }, + "has-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=" + }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + }, + "dependencies": { + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + } + } + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "requires": { - "color-name": "~1.1.4" + "is-buffer": "^1.1.5" } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "jest-get-type": { - "version": "26.3.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", - "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", + } + } + }, + "hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "dev": true, + "requires": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, - "pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, "requires": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" } }, - "react-is": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.1.tgz", - "integrity": "sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA==", + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } + } + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "hast-to-hyperscript": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz", + "integrity": "sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA==", + "dev": true, + "requires": { + "@types/unist": "^2.0.3", + "comma-separated-tokens": "^1.0.0", + "property-information": "^5.3.0", + "space-separated-tokens": "^1.0.0", + "style-to-object": "^0.3.0", + "unist-util-is": "^4.0.0", + "web-namespaces": "^1.0.0" + }, + "dependencies": { + "unist-util-is": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", + "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", "dev": true } } }, - "jest-docblock": { - "version": "26.0.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-26.0.0.tgz", - "integrity": "sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w==", - "dev": true, - "requires": { - "detect-newline": "^3.0.0" - } - }, - "jest-each": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-26.6.2.tgz", - "integrity": "sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A==", + "hast-util-from-parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-6.0.1.tgz", + "integrity": "sha512-jeJUWiN5pSxW12Rh01smtVkZgZr33wBokLzKLwinYOUfSzm1Nl/c3GUGebDyOKjdsRgMvoVbV0VpAcpjF4NrJA==", "dev": true, "requires": { - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "jest-get-type": "^26.3.0", - "jest-util": "^26.6.2", - "pretty-format": "^26.6.2" + "@types/parse5": "^5.0.0", + "hastscript": "^6.0.0", + "property-information": "^5.0.0", + "vfile": "^4.0.0", + "vfile-location": "^3.2.0", + "web-namespaces": "^1.0.0" }, "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "dev": true + }, + "unist-util-stringify-position": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", + "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", "dev": true, "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" + "@types/unist": "^2.0.2" } }, - "@types/istanbul-reports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", - "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", + "vfile": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", + "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", "dev": true, "requires": { - "@types/istanbul-lib-report": "*" + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^2.0.0", + "vfile-message": "^2.0.0" } }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "vfile-location": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz", + "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==", "dev": true }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "vfile-message": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", + "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", "dev": true, "requires": { - "color-convert": "^2.0.1" + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" } + } + } + }, + "hast-util-parse-selector": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz", + "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==", + "dev": true + }, + "hast-util-raw": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-6.0.1.tgz", + "integrity": "sha512-ZMuiYA+UF7BXBtsTBNcLBF5HzXzkyE6MLzJnL605LKE8GJylNjGc4jjxazAHUtcwT5/CEt6afRKViYB4X66dig==", + "dev": true, + "requires": { + "@types/hast": "^2.0.0", + "hast-util-from-parse5": "^6.0.0", + "hast-util-to-parse5": "^6.0.0", + "html-void-elements": "^1.0.0", + "parse5": "^6.0.0", + "unist-util-position": "^3.0.0", + "vfile": "^4.0.0", + "web-namespaces": "^1.0.0", + "xtend": "^4.0.0", + "zwitch": "^1.0.0" + }, + "dependencies": { + "is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "dev": true }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } + "parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "unist-util-stringify-position": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", + "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", "dev": true, "requires": { - "color-name": "~1.1.4" + "@types/unist": "^2.0.2" } }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "vfile": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", + "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", "dev": true, "requires": { - "to-regex-range": "^5.0.1" + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^2.0.0", + "vfile-message": "^2.0.0" } }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "jest-get-type": { - "version": "26.3.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", - "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", - "dev": true - }, - "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", + "vfile-message": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", + "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", "dev": true, "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" } - }, - "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + } + } + }, + "hast-util-to-parse5": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz", + "integrity": "sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ==", + "dev": true, + "requires": { + "hast-to-hyperscript": "^9.0.0", + "property-information": "^5.0.0", + "web-namespaces": "^1.0.0", + "xtend": "^4.0.0", + "zwitch": "^1.0.0" + } + }, + "hastscript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz", + "integrity": "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==", + "dev": true, + "requires": { + "@types/hast": "^2.0.0", + "comma-separated-tokens": "^1.0.0", + "hast-util-parse-selector": "^2.0.0", + "property-information": "^5.0.0", + "space-separated-tokens": "^1.0.0" + } + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, + "hermes-engine": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/hermes-engine/-/hermes-engine-0.9.0.tgz", + "integrity": "sha512-r7U+Y4P2Qg/igFVZN+DpT7JFfXUn1MM4dFne8aW+cCrF6RRymof+VqrUHs1kl07j8h8V2CNesU19RKgWbr3qPw==" + }, + "hermes-parser": { + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.4.7.tgz", + "integrity": "sha512-jc+zCtXbtwTiXoMAoXOHepxAaGVFIp89wwE9qcdwnMd/uGVEtPoY8FaFSsx0ThPvyKirdR2EsIIDVrpbSXz1Ag==" + }, + "hermes-profile-transformer": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/hermes-profile-transformer/-/hermes-profile-transformer-0.0.6.tgz", + "integrity": "sha512-cnN7bQUm65UWOy6cbGcCcZ3rpwW8Q/j4OP5aWRhEry4Z2t2aR1cjrbp0BS+KiBN0smvP1caBgAuxutvyvJILzQ==", + "requires": { + "source-map": "^0.7.3" + }, + "dependencies": { + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" + } + } + }, + "hex-color-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", + "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==", + "dev": true + }, + "hey-listen": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/hey-listen/-/hey-listen-1.0.8.tgz", + "integrity": "sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q==" + }, + "highlight-words-core": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/highlight-words-core/-/highlight-words-core-1.2.2.tgz", + "integrity": "sha512-BXUKIkUuh6cmmxzi5OIbUJxrG8OAk2MqoL1DtO3Wo9D2faJg2ph5ntyuQeLqaHJmzER6H5tllCDA9ZnNe9BVGg==" + }, + "highlight.js": { + "version": "10.7.3", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", + "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", + "dev": true + }, + "history": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/history/-/history-5.1.0.tgz", + "integrity": "sha512-zPuQgPacm2vH2xdORvGGz1wQMuHSIB56yNAy5FnLuwOwgSYyPKptJtcMm6Ev+hRGeS+GzhbmRacHzvlESbFwDg==", + "requires": { + "@babel/runtime": "^7.7.6" + } + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dev": true, + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "requires": { + "react-is": "^16.7.0" + } + }, + "homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "dev": true, + "requires": { + "parse-passwd": "^1.0.0" + } + }, + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" + }, + "hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "hpq": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/hpq/-/hpq-1.3.0.tgz", + "integrity": "sha512-fvYTvdCFOWQupGxqkahrkA+ERBuMdzkxwtUdKrxR6rmMd4Pfl+iZ1QiQYoaZ0B/v0y59MOMnz3XFUWbT50/NWA==" + }, + "hsl-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", + "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=", + "dev": true + }, + "hsla-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", + "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=", + "dev": true + }, + "html-element-map": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/html-element-map/-/html-element-map-1.2.0.tgz", + "integrity": "sha512-0uXq8HsuG1v2TmQ8QkIhzbrqeskE4kn52Q18QJ9iAA/SnHoEKXWiUxHQtclRsCFWEUD2So34X+0+pZZu862nnw==", + "dev": true, + "requires": { + "array-filter": "^1.0.0" + } + }, + "html-encoding-sniffer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", + "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "dev": true, + "requires": { + "whatwg-encoding": "^1.0.5" + } + }, + "html-entities": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.2.tgz", + "integrity": "sha512-c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ==", + "dev": true + }, + "html-escaper": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.0.tgz", + "integrity": "sha512-a4u9BeERWGu/S8JiWEAQcdrg9v4QArtP9keViQjGMdff20fBdd8waotXaNmODqBe6uZ3Nafi7K/ho4gCQHV3Ig==", + "dev": true + }, + "html-minifier-terser": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", + "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==", + "dev": true, + "requires": { + "camel-case": "^4.1.1", + "clean-css": "^4.2.3", + "commander": "^4.1.1", + "he": "^1.2.0", + "param-case": "^3.0.3", + "relateurl": "^0.2.7", + "terser": "^4.6.3" + }, + "dependencies": { + "commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true + } + } + }, + "html-tags": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.1.0.tgz", + "integrity": "sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==", + "dev": true + }, + "html-void-elements": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz", + "integrity": "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==", + "dev": true + }, + "html-webpack-plugin": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.5.2.tgz", + "integrity": "sha512-q5oYdzjKUIPQVjOosjgvCHQOv9Ett9CYYHlgvJeXG0qQvdSojnBq4vAdQBwn1+yGveAwHCoe/rMR86ozX3+c2A==", + "dev": true, + "requires": { + "@types/html-minifier-terser": "^5.0.0", + "@types/tapable": "^1.0.5", + "@types/webpack": "^4.41.8", + "html-minifier-terser": "^5.0.1", + "loader-utils": "^1.2.3", + "lodash": "^4.17.20", + "pretty-error": "^2.1.1", + "tapable": "^1.1.3", + "util.promisify": "1.0.0" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", "dev": true, "requires": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" + "minimist": "^1.2.0" } }, - "pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", "dev": true, "requires": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" } }, - "react-is": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.1.tgz", - "integrity": "sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA==", + "tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", "dev": true + } + } + }, + "htmlparser2": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz", + "integrity": "sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=", + "dev": true, + "requires": { + "domelementtype": "^1.3.0", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^2.0.2" + } + }, + "htmlparser2-without-node-native": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/htmlparser2-without-node-native/-/htmlparser2-without-node-native-3.9.2.tgz", + "integrity": "sha1-s+0FDYd9D/NGWWnjOYd7f59mMfY=", + "requires": { + "domelementtype": "^1.3.0", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "eventemitter2": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.2" + } + }, + "http-cache-semantics": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", + "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==", + "dev": true + }, + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", + "dev": true + }, + "http-errors": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" + }, + "dependencies": { + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" } } }, - "jest-environment-jsdom": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz", - "integrity": "sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q==", + "http-parser-js": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz", + "integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==", + "dev": true + }, + "http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "dependencies": { + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + } + } + }, + "http-proxy-agent": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", + "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", + "dev": true, + "requires": { + "agent-base": "4", + "debug": "3.1.0" + } + }, + "http-proxy-middleware": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.1.tgz", + "integrity": "sha512-cfaXRVoZxSed/BmkA7SwBVNI9Kj7HFltaE5rqYOub5kWzWZ+gofV2koVN1j2rMW7pEfSSlCHGJ31xmuyFyfLOg==", "dev": true, "requires": { - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2", - "jsdom": "^16.4.0" + "@types/http-proxy": "^1.17.5", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" }, "dependencies": { - "@jest/fake-timers": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-26.6.2.tgz", - "integrity": "sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "@sinonjs/fake-timers": "^6.0.1", - "@types/node": "*", - "jest-message-util": "^26.6.2", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2" - } - }, - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "@types/istanbul-reports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", - "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", - "dev": true, - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/stack-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.0.tgz", - "integrity": "sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==", - "dev": true - }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, "braces": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", @@ -38039,27 +37594,6 @@ "fill-range": "^7.0.1" } }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true - }, "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -38069,11 +37603,14 @@ "to-regex-range": "^5.0.1" } }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } }, "is-number": { "version": "7.0.0", @@ -38081,157 +37618,366 @@ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, - "jest-message-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz", - "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==", + "is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true + }, + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "@jest/types": "^26.6.2", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.2", - "pretty-format": "^26.6.2", - "slash": "^3.0.0", - "stack-utils": "^2.0.2" + "braces": "^3.0.1", + "picomatch": "^2.2.3" } }, - "jest-mock": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-26.6.2.tgz", - "integrity": "sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew==", + "picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*" + "is-number": "^7.0.0" } + } + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", + "dev": true + }, + "https-proxy-agent": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", + "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", + "dev": true, + "requires": { + "agent-base": "^4.3.0", + "debug": "^3.1.0" + } + }, + "human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true + }, + "humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", + "dev": true, + "requires": { + "ms": "^2.0.0" + } + }, + "husky": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/husky/-/husky-7.0.0.tgz", + "integrity": "sha512-xK7lO0EtSzfFPiw+oQncQVy/XqV7UVVjxBByc+Iv5iK3yhW9boDoWgvZy3OGo48QKg/hUtZkzz0hi2HXa0kn7w==", + "dev": true + }, + "iconv-lite": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", + "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "icss-utils": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz", + "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==", + "dev": true, + "requires": { + "postcss": "^7.0.14" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true }, - "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dev": true, "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, - "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "ieee754": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", + "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==" + }, + "iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", + "dev": true + }, + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true + }, + "ignore-walk": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-4.0.1.tgz", + "integrity": "sha512-rzDQLaW4jQbh2YrOFlJdCtX8qgJTehFRYiUB2r1osqTeDzV/3+Jh8fz1oAPzUThf3iku8Ds4IDqawI5d8mUiQw==", + "dev": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "image-size": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.6.3.tgz", + "integrity": "sha512-47xSUiQioGaB96nqtp5/q55m0aBQSQdyIloMOc/x+QVTDZLNmXE892IIDrJ0hM1A5vcNUDD5tDffkSP5lCaIIA==" + }, + "immer": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/immer/-/immer-8.0.1.tgz", + "integrity": "sha512-aqXhGP7//Gui2+UrEtvxZxSquQVXTpZ7KDxfCcKAF3Vysvw0CViVaW9RZ1j1xlIYqaaaipBoqdqeibkc18PNvA==", + "dev": true + }, + "import-fresh": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.1.0.tgz", + "integrity": "sha512-PpuksHKGt8rXfWEr9m9EHIpgyyaltBy8+eF6GJM0QCAxMgxCfucMF3mjecK2QsJr0amJW7gTqh5/wht0z2UhEQ==", + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" + } + } + }, + "import-lazy": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", + "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", + "dev": true + }, + "import-local": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", + "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", + "dev": true, + "requires": { + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" + "locate-path": "^3.0.0" } }, - "pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" } }, - "react-is": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.1.tgz", - "integrity": "sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA==", - "dev": true + "p-limit": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", + "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } }, - "slash": { + "p-locate": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "stack-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { - "escape-string-regexp": "^2.0.0" + "p-limit": "^2.0.0" } }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", "dev": true, "requires": { - "is-number": "^7.0.0" + "find-up": "^3.0.0" } } } }, - "jest-environment-node": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-26.6.2.tgz", - "integrity": "sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag==", + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" + }, + "indent-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", + "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", + "dev": true + }, + "indexes-of": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", + "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", + "dev": true + }, + "infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "init-package-json": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/init-package-json/-/init-package-json-1.10.3.tgz", + "integrity": "sha512-zKSiXKhQveNteyhcj1CoOP8tqp1QuxPIPBl8Bid99DGLFqA1p87M6lNgfjJHSBoWJJlidGOv5rWjyYKEB3g2Jw==", "dev": true, "requires": { - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2" + "glob": "^7.1.1", + "npm-package-arg": "^4.0.0 || ^5.0.0 || ^6.0.0", + "promzard": "^0.3.0", + "read": "~1.0.1", + "read-package-json": "1 || 2", + "semver": "2.x || 3.x || 4 || 5", + "validate-npm-package-license": "^3.0.1", + "validate-npm-package-name": "^3.0.0" }, "dependencies": { - "@jest/fake-timers": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-26.6.2.tgz", - "integrity": "sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "@sinonjs/fake-timers": "^6.0.1", - "@types/node": "*", - "jest-message-util": "^26.6.2", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2" - } - }, - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "npm-package-arg": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-6.1.1.tgz", + "integrity": "sha512-qBpssaL3IOZWi5vEKUKW0cO7kzLeT+EQO9W8RsLOZf76KF9E/K9+wH0C7t06HXPpaH8WH5xF1MExLuCwbTqRUg==", "dev": true, "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" + "hosted-git-info": "^2.7.1", + "osenv": "^0.1.5", + "semver": "^5.6.0", + "validate-npm-package-name": "^3.0.0" } }, - "@types/istanbul-reports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", - "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "inline-style-parser": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", + "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==", + "dev": true + }, + "inquirer": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.1.0.tgz", + "integrity": "sha512-5fJMWEmikSYu0nv/flMc475MhGbB7TSPd/2IpFV4I4rMklboCH2rQjYY5kKiYGHqUF9gvaambupcJFFG9dvReg==", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^3.0.0", + "cli-cursor": "^3.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.15", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.5.3", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + }, + "dependencies": { + "ansi-escapes": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", + "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", "dev": true, "requires": { - "@types/istanbul-lib-report": "*" + "type-fest": "^0.11.0" } }, - "@types/stack-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.0.tgz", - "integrity": "sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==", - "dev": true - }, "ansi-regex": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", @@ -38239,21 +37985,32 @@ "dev": true }, "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", "dev": true, "requires": { + "@types/color-name": "^1.1.1", "color-convert": "^2.0.1" } }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, "requires": { - "fill-range": "^7.0.1" + "restore-cursor": "^3.1.0" } }, "color-convert": { @@ -38271,1582 +38028,1436 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "dev": true, "requires": { - "to-regex-range": "^5.0.1" + "escape-string-regexp": "^1.0.5" } }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true }, - "jest-message-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz", - "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==", + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "onetime": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", + "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "@jest/types": "^26.6.2", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.2", - "pretty-format": "^26.6.2", - "slash": "^3.0.0", - "stack-utils": "^2.0.2" + "mimic-fn": "^2.1.0" } }, - "jest-mock": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-26.6.2.tgz", - "integrity": "sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew==", + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dev": true, "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*" + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" } }, - "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", + "run-async": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.0.tgz", + "integrity": "sha512-xJTbh/d7Lm7SBhc1tNvTpeCHaEzoyxPrqNlvSdMfBTYwaY++UJFyXUOxAtsRUXjlqOfj8luNaR9vjCh4KeV+pg==", "dev": true, "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" + "is-promise": "^2.1.0" + }, + "dependencies": { + "is-promise": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", + "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", + "dev": true + } } }, - "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "rxjs": { + "version": "6.5.5", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.5.tgz", + "integrity": "sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ==", "dev": true, "requires": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" + "tslib": "^1.9.0" } }, - "pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", "dev": true, "requires": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" } }, - "react-is": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.1.tgz", - "integrity": "sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "stack-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==", + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "dev": true, "requires": { - "escape-string-regexp": "^2.0.0" + "ansi-regex": "^5.0.0" } }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", "dev": true, "requires": { - "is-number": "^7.0.0" + "has-flag": "^4.0.0" } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "type-fest": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", + "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", + "dev": true } } }, - "jest-get-type": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.9.0.tgz", - "integrity": "sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==", - "dev": true - }, - "jest-haste-map": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", - "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", + "internal-ip": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-6.2.0.tgz", + "integrity": "sha512-D8WGsR6yDt8uq7vDMu7mjcR+yRMm3dW8yufyChmszWRjcSHuxLBkR3GdS2HZAjodsaGuCvXeEJpueisXJULghg==", + "dev": true, "requires": { - "@jest/types": "^26.6.2", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.1.2", - "graceful-fs": "^4.2.4", - "jest-regex-util": "^26.0.0", - "jest-serializer": "^26.6.2", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "micromatch": "^4.0.2", - "sane": "^4.0.3", - "walker": "^1.0.7" + "default-gateway": "^6.0.0", + "ipaddr.js": "^1.9.1", + "is-ip": "^3.1.0", + "p-event": "^4.2.0" }, "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "@types/istanbul-reports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", - "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "p-event": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz", + "integrity": "sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==", + "dev": true, "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "p-timeout": "^3.1.0" } }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "dev": true, "requires": { - "fill-range": "^7.0.1" + "p-finally": "^1.0.0" } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + } + } + }, + "internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "dependencies": { + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, "requires": { - "to-regex-range": "^5.0.1" + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" } }, - "graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - }, - "micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + } + } + }, + "interpret": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", + "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", + "dev": true + }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "requires": { + "loose-envify": "^1.0.0" + } + }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" + }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true + }, + "irregular-plurals": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-3.2.0.tgz", + "integrity": "sha512-YqTdPLfwP7YFN0SsD3QUVCkm9ZG2VzOXv3DOrw5G5mkMbVwptTwVcFv7/C0vOpBmgTxAeTG19XpUs1E522LW9Q==", + "dev": true + }, + "is-absolute-url": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", + "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", + "dev": true + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - }, - "dependencies": { - "picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==" - } + "is-buffer": "^1.1.5" } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + } + } + }, + "is-alphabetical": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.2.tgz", + "integrity": "sha512-V0xN4BYezDHcBSKb1QHUFMlR4as/XEuCZBzMJUU4n7+Cbt33SmUnSol+pnXFvLxSHNq2CemUXNdaXV6Flg7+xg==", + "dev": true + }, + "is-alphanumeric": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz", + "integrity": "sha1-Spzvcdr0wAHB2B1j0UDPU/1oifQ=", + "dev": true + }, + "is-alphanumerical": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.2.tgz", + "integrity": "sha512-pyfU/0kHdISIgslFfZN9nfY1Gk3MquQgUm1mJTjdkEPpkAKNWuBTSqFwewOpR7N351VkErCiyV71zX7mlQQqsg==", + "dev": true, + "requires": { + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" + } + }, + "is-arguments": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz", + "integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==", + "dev": true, + "requires": { + "call-bind": "^1.0.0" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + }, + "is-bigint": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.1.tgz", + "integrity": "sha512-J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg==", + "dev": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-boolean-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.0.1.tgz", + "integrity": "sha512-TqZuVwa/sppcrhUCAYkGBk7w0yxfQQnxq28fjkO53tnK9FQXmdwz2JS5+GjsWQ6RByES1K40nI+yDic5c9/aAQ==", + "dev": true + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "is-builtin-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "dev": true, + "requires": { + "builtin-modules": "^1.0.0" + } + }, + "is-callable": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==" + }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "requires": { + "ci-info": "^2.0.0" + } + }, + "is-color-stop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", + "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", + "dev": true, + "requires": { + "css-color-names": "^0.0.4", + "hex-color-regex": "^1.1.0", + "hsl-regex": "^1.0.0", + "hsla-regex": "^1.0.0", + "rgb-regex": "^1.0.1", + "rgba-regex": "^1.0.0" + }, + "dependencies": { + "css-color-names": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", + "dev": true + } + } + }, + "is-core-module": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", + "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "requires": { + "has": "^1.0.3" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { - "is-number": "^7.0.0" + "is-buffer": "^1.1.5" } } } }, - "jest-jasmine2": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz", - "integrity": "sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg==", + "is-date-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=" + }, + "is-decimal": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.2.tgz", + "integrity": "sha512-TRzl7mOCchnhchN+f3ICUCzYvL9ul7R+TYOsZ8xia++knyZAJfv/uA1FvQXsAnYIl1T3B2X5E/J7Wb1QXiIBXg==", + "dev": true + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + } + } + }, + "is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=" + }, + "is-docker": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.0.0.tgz", + "integrity": "sha512-pJEdRugimx4fBMra5z2/5iRdZ63OhYV0vr0Dwm5+xtW4D1FvRkB8hamMIhnWfyJeDdyr/aa7BDyNbtG38VxgoQ==", + "dev": true + }, + "is-dom": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-dom/-/is-dom-1.1.0.tgz", + "integrity": "sha512-u82f6mvhYxRPKpw8V1N0W8ce1xXwOrQtgGcxl6UCL5zBmZu3is/18K0rR7uFCnMDuAsS/3W54mGL4vsaFUQlEQ==", + "dev": true, + "requires": { + "is-object": "^1.0.1", + "is-window": "^1.0.2" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-finite": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", + "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "is-function": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", + "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==", + "dev": true + }, + "is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true + }, + "is-glob": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", + "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-hexadecimal": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.2.tgz", + "integrity": "sha512-but/G3sapV3MNyqiDBLrOi4x8uCIw0RY3o/Vb5GT0sMFHrVV7731wFSVy41T5FO1og7G0gXLJh0MkgPRouko/A==", + "dev": true + }, + "is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true + }, + "is-ip": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-ip/-/is-ip-3.1.0.tgz", + "integrity": "sha512-35vd5necO7IitFPjd/YBeqwWnyDWbuLH9ZXQdMfDA8TEo7pv5X8yfrvVO3xbJbLUlERCMvf6X0hTUamQxCYJ9Q==", "dev": true, "requires": { - "@babel/traverse": "^7.1.0", - "@jest/environment": "^26.6.2", - "@jest/source-map": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^26.6.2", - "is-generator-fn": "^2.0.0", - "jest-each": "^26.6.2", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-runtime": "^26.6.3", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "pretty-format": "^26.6.2", - "throat": "^5.0.0" + "ip-regex": "^4.0.0" }, "dependencies": { - "@jest/console": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.2.tgz", - "integrity": "sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^26.6.2", - "jest-util": "^26.6.2", - "slash": "^3.0.0" - } - }, - "@jest/source-map": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-26.6.2.tgz", - "integrity": "sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA==", - "dev": true, - "requires": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.4", - "source-map": "^0.6.0" - } - }, - "@jest/test-result": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.2.tgz", - "integrity": "sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==", - "dev": true, - "requires": { - "@jest/console": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - } - }, - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "@types/istanbul-reports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", - "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", - "dev": true, - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/stack-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.0.tgz", - "integrity": "sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==", - "dev": true - }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { + "ip-regex": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "jest-message-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz", - "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@jest/types": "^26.6.2", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.2", - "pretty-format": "^26.6.2", - "slash": "^3.0.0", - "stack-utils": "^2.0.2" - } - }, - "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" - } - }, - "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" - } - }, - "pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - } - }, - "react-is": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.1.tgz", - "integrity": "sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz", + "integrity": "sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==", "dev": true - }, - "stack-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==", - "dev": true, + } + } + }, + "is-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "dev": true + }, + "is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==" + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { - "escape-string-regexp": "^2.0.0" + "is-buffer": "^1.1.5" } - }, - "throat": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", - "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + } + } + }, + "is-number-object": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.4.tgz", + "integrity": "sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==", + "dev": true + }, + "is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "dev": true + }, + "is-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz", + "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==", + "dev": true + }, + "is-observable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-observable/-/is-observable-1.1.0.tgz", + "integrity": "sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA==", + "dev": true, + "requires": { + "symbol-observable": "^1.1.0" + } + }, + "is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "dev": true + }, + "is-path-in-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", + "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", + "dev": true, + "requires": { + "is-path-inside": "^2.1.0" + }, + "dependencies": { + "is-path-inside": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", + "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", "dev": true, "requires": { - "is-number": "^7.0.0" + "path-is-inside": "^1.0.2" } } } }, - "jest-junit": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/jest-junit/-/jest-junit-11.0.0.tgz", - "integrity": "sha512-kuBDK5PlxRSDM0qxxzkAS6AcwJOYVJTPCLUl64YywV+IDS6TwxkPCXWz2Mj5X+XaC06fxF7mSCB0lP04RBS71Q==", + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "requires": { + "isobject": "^3.0.1" + } + }, + "is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true + }, + "is-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==" + }, + "is-regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "requires": { + "has": "^1.0.1" + } + }, + "is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", + "dev": true + }, + "is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", + "dev": true + }, + "is-root": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", + "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==", + "dev": true + }, + "is-set": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "dev": true + }, + "is-shared-array-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", + "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", + "dev": true + }, + "is-ssh": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.3.2.tgz", + "integrity": "sha512-elEw0/0c2UscLrNG+OAorbP539E3rhliKPg+hDMWN9VwrDXfYK+4PBEykDPfxlYYtQvl84TascnQyobfQLHEhQ==", + "dev": true, + "requires": { + "protocols": "^1.1.0" + } + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + }, + "is-string": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", + "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", + "dev": true + }, + "is-subset": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz", + "integrity": "sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY=", + "dev": true + }, + "is-symbol": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz", + "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=" + }, + "is-text-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", + "integrity": "sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=", + "dev": true, + "requires": { + "text-extensions": "^1.0.0" + } + }, + "is-touch-device": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-touch-device/-/is-touch-device-1.0.1.tgz", + "integrity": "sha512-LAYzo9kMT1b2p19L/1ATGt2XcSilnzNlyvq6c0pbPRVisLbAPpLqr53tIJS00kvrTkj0HtR8U7+u8X0yR8lPSw==" + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "is-weakref": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.1.tgz", + "integrity": "sha512-b2jKc2pQZjaeFYWEf7ScFj+Be1I+PXmlu572Q8coTXZ+LD/QQZ7ShPMst8h16riVgyXTQwUsFEl74mDvc/3MHQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.0" + } + }, + "is-whitespace-character": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", + "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==", + "dev": true + }, + "is-window": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-window/-/is-window-1.0.2.tgz", + "integrity": "sha1-LIlspT25feRdPDMTOmXYyfVjSA0=", + "dev": true + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" + }, + "is-word-character": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz", + "integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==", + "dev": true + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "istanbul-lib-coverage": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", + "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", "dev": true, "requires": { - "jest-validate": "^24.9.0", - "mkdirp": "^1.0.4", - "strip-ansi": "^5.2.0", - "uuid": "^3.3.3", - "xml": "^1.0.1" + "@babel/core": "^7.7.5", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" }, "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true } } }, - "jest-leak-detector": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz", - "integrity": "sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg==", + "istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", "dev": true, "requires": { - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" }, "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "@types/istanbul-reports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", - "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", - "dev": true, - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "jest-get-type": { - "version": "26.3.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", - "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", "dev": true, "requires": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" + "has-flag": "^4.0.0" } - }, - "react-is": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.1.tgz", - "integrity": "sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA==", - "dev": true } } }, - "jest-matcher-utils": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz", - "integrity": "sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw==", + "istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", "dev": true, "requires": { - "chalk": "^4.0.0", - "jest-diff": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" }, "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "@types/istanbul-reports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", - "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", - "dev": true, - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dev": true, "requires": { - "color-name": "~1.1.4" + "ms": "2.1.2" } }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "jest-get-type": { - "version": "26.3.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", - "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - } - }, - "react-is": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.1.tgz", - "integrity": "sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA==", + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true } } }, - "jest-pnp-resolver": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", - "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", - "dev": true - }, - "jest-regex-util": { - "version": "26.0.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", - "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==" - }, - "jest-resolve": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.2.tgz", - "integrity": "sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==", + "istanbul-reports": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz", + "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==", "dev": true, "requires": { - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^26.6.2", - "read-pkg-up": "^7.0.1", - "resolve": "^1.18.1", - "slash": "^3.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "@types/istanbul-reports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", - "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", - "dev": true, - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" - } - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "parse-json": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz", - "integrity": "sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, - "read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "requires": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "dependencies": { - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true - } - } - }, - "read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "requires": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - } - }, - "resolve": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", - "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", - "dev": true, - "requires": { - "is-core-module": "^2.1.0", - "path-parse": "^1.0.6" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - } + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" } }, - "jest-resolve-dependencies": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz", - "integrity": "sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg==", + "iterate-iterator": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/iterate-iterator/-/iterate-iterator-1.0.2.tgz", + "integrity": "sha512-t91HubM4ZDQ70M9wqp+pcNpu8OyJ9UAtXntT/Bcsvp5tZMnz9vRa+IunKXeI8AnfZMTv0jNuVEmGeLSMjVvfPw==", + "dev": true + }, + "iterate-value": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/iterate-value/-/iterate-value-1.0.2.tgz", + "integrity": "sha512-A6fMAio4D2ot2r/TYzr4yUWrmwNdsN5xL7+HUiyACE4DXm+q8HtPcnFTp+NnW3k4N05tZ7FVYFFb2CR13NxyHQ==", "dev": true, "requires": { - "@jest/types": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-snapshot": "^26.6.2" - }, - "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "@types/istanbul-reports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", - "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", - "dev": true, - "requires": { - "@types/istanbul-lib-report": "*" - } - } + "es-get-iterator": "^1.0.2", + "iterate-iterator": "^1.0.1" } }, - "jest-runner": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-26.6.3.tgz", - "integrity": "sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ==", - "dev": true, - "requires": { - "@jest/console": "^26.6.2", - "@jest/environment": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.7.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-config": "^26.6.3", - "jest-docblock": "^26.0.0", - "jest-haste-map": "^26.6.2", - "jest-leak-detector": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-resolve": "^26.6.2", - "jest-runtime": "^26.6.3", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "source-map-support": "^0.5.6", - "throat": "^5.0.0" + "jed": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/jed/-/jed-1.1.1.tgz", + "integrity": "sha1-elSbvZ/+FYWwzQoZHiAwVb7ldLQ=" + }, + "jest": { + "version": "27.4.5", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.4.5.tgz", + "integrity": "sha512-uT5MiVN3Jppt314kidCk47MYIRilJjA/l2mxwiuzzxGUeJIvA8/pDaJOAX5KWvjAo7SCydcW0/4WEtgbLMiJkg==", + "dev": true, + "requires": { + "@jest/core": "^27.4.5", + "import-local": "^3.0.2", + "jest-cli": "^27.4.5" }, "dependencies": { - "@jest/console": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.2.tgz", - "integrity": "sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^26.6.2", - "jest-util": "^26.6.2", - "slash": "^3.0.0" - } - }, - "@jest/test-result": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.2.tgz", - "integrity": "sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==", - "dev": true, - "requires": { - "@jest/console": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - } - }, "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.4.2.tgz", + "integrity": "sha512-j35yw0PMTPpZsUoOBiuHzr1zTYoad1cVIE0ajEjcrJONxxrko/IRGKkXx3os0Nsi4Hu3+5VmDbVfq5WhG/pWAg==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^15.0.0", + "@types/yargs": "^16.0.0", "chalk": "^4.0.0" } }, - "@types/istanbul-reports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", - "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", + "@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", "dev": true, "requires": { - "@types/istanbul-lib-report": "*" + "@types/yargs-parser": "*" } }, - "@types/stack-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.0.tgz", - "integrity": "sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==", + "ci-info": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", + "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==", "dev": true }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", "dev": true }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "import-local": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.3.tgz", + "integrity": "sha512-bE9iaUY3CXH8Cwfan/abDKAxe1KGT9kyGsBPqf6DMK/z0a2OzAsrukeYNgIH6cH5Xr452jb1TUL8rSfCLjZ9uA==", "dev": true, "requires": { - "color-convert": "^2.0.1" + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" } }, - "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "jest-cli": { + "version": "27.4.5", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.4.5.tgz", + "integrity": "sha512-hrky3DSgE0u7sQxaCL7bdebEPHx5QzYmrGuUjaPLmPE8jx5adtvGuOlRspvMoVLTTDOHRnZDoRLYJuA+VCI7Hg==", "dev": true, "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "@jest/core": "^27.4.5", + "@jest/test-result": "^27.4.2", + "@jest/types": "^27.4.2", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "import-local": "^3.0.2", + "jest-config": "^27.4.5", + "jest-util": "^27.4.2", + "jest-validate": "^27.4.2", + "prompts": "^2.0.1", + "yargs": "^16.2.0" } }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "jest-util": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.4.2.tgz", + "integrity": "sha512-YuxxpXU6nlMan9qyLuxHaMMOzXAl5aGZWCSzben5DhLHemYQxCc4YK+4L3ZrCutT8GPQ+ui9k5D8rUJoDioMnA==", "dev": true, "requires": { - "fill-range": "^7.0.1" + "@jest/types": "^27.4.2", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.4", + "picomatch": "^2.2.3" } }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "requires": { - "color-name": "~1.1.4" + "p-locate": "^4.1.0" } }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "requires": { - "to-regex-range": "^5.0.1" + "p-try": "^2.0.0" } }, - "fsevents": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.2.1.tgz", - "integrity": "sha512-bTLYHSeC0UH/EFXS9KqWnXuOl/wHK5Z/d+ghd5AsFMYN7wIGkUCOJyzy88+wJKkZPGON8u4Z9f6U4FdgURE9qA==", + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, - "optional": true + "requires": { + "p-limit": "^2.2.0" + } }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, - "has-flag": { + "path-exists": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true }, - "jest-haste-map": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", - "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, "requires": { - "@jest/types": "^26.6.2", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.1.2", - "graceful-fs": "^4.2.4", - "jest-regex-util": "^26.0.0", - "jest-serializer": "^26.6.2", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "micromatch": "^4.0.2", - "sane": "^4.0.3", - "walker": "^1.0.7" + "find-up": "^4.0.0" } }, - "jest-message-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz", - "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==", + "resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "@jest/types": "^26.6.2", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.2", - "pretty-format": "^26.6.2", - "slash": "^3.0.0", - "stack-utils": "^2.0.2" + "resolve-from": "^5.0.0" } }, - "jest-serializer": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", - "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + } + } + }, + "jest-changed-files": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.4.2.tgz", + "integrity": "sha512-/9x8MjekuzUQoPjDHbBiXbNEBauhrPU2ct7m8TfCg69ywt1y/N+yYwGh3gCpnqUS3klYWDU/lSNgv+JhoD2k1A==", + "dev": true, + "requires": { + "@jest/types": "^27.4.2", + "execa": "^5.0.0", + "throat": "^6.0.1" + }, + "dependencies": { + "@jest/types": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.4.2.tgz", + "integrity": "sha512-j35yw0PMTPpZsUoOBiuHzr1zTYoad1cVIE0ajEjcrJONxxrko/IRGKkXx3os0Nsi4Hu3+5VmDbVfq5WhG/pWAg==", "dev": true, "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "graceful-fs": "^4.2.4" + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" } }, - "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", + "@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", "dev": true, "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" + "@types/yargs-parser": "*" } }, - "jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" } }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, "requires": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" } }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true }, - "pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - } + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true }, - "react-is": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.1.tgz", - "integrity": "sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA==", + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true }, - "stack-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==", + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, "requires": { - "escape-string-regexp": "^2.0.0" + "path-key": "^3.0.0" } }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, "requires": { - "has-flag": "^4.0.0" + "mimic-fn": "^2.1.0" + } + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" } }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "signal-exit": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", + "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", + "dev": true + }, "throat": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", - "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", + "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==", "dev": true }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "requires": { - "is-number": "^7.0.0" + "isexe": "^2.0.0" } } } }, - "jest-runtime": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-26.6.3.tgz", - "integrity": "sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw==", + "jest-circus": { + "version": "27.4.5", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.4.5.tgz", + "integrity": "sha512-eTNWa9wsvBwPykhMMShheafbwyakcdHZaEYh5iRrQ0PFJxkDP/e3U/FvzGuKWu2WpwUA3C3hPlfpuzvOdTVqnw==", "dev": true, "requires": { - "@jest/console": "^26.6.2", - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/globals": "^26.6.2", - "@jest/source-map": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/yargs": "^15.0.0", + "@jest/environment": "^27.4.4", + "@jest/test-result": "^27.4.2", + "@jest/types": "^27.4.2", + "@types/node": "*", "chalk": "^4.0.0", - "cjs-module-lexer": "^0.6.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.4", - "jest-config": "^26.6.3", - "jest-haste-map": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-mock": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", + "co": "^4.6.0", + "dedent": "^0.7.0", + "expect": "^27.4.2", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.4.2", + "jest-matcher-utils": "^27.4.2", + "jest-message-util": "^27.4.2", + "jest-runtime": "^27.4.5", + "jest-snapshot": "^27.4.5", + "jest-util": "^27.4.2", + "pretty-format": "^27.4.2", "slash": "^3.0.0", - "strip-bom": "^4.0.0", - "yargs": "^15.4.1" + "stack-utils": "^2.0.3", + "throat": "^6.0.1" }, "dependencies": { - "@jest/console": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.2.tgz", - "integrity": "sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^26.6.2", - "jest-util": "^26.6.2", - "slash": "^3.0.0" - } - }, - "@jest/fake-timers": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-26.6.2.tgz", - "integrity": "sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "@sinonjs/fake-timers": "^6.0.1", - "@types/node": "*", - "jest-message-util": "^26.6.2", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2" - } - }, - "@jest/source-map": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-26.6.2.tgz", - "integrity": "sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA==", - "dev": true, - "requires": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.4", - "source-map": "^0.6.0" - } - }, - "@jest/test-result": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.2.tgz", - "integrity": "sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==", - "dev": true, - "requires": { - "@jest/console": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - } - }, "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.4.2.tgz", + "integrity": "sha512-j35yw0PMTPpZsUoOBiuHzr1zTYoad1cVIE0ajEjcrJONxxrko/IRGKkXx3os0Nsi4Hu3+5VmDbVfq5WhG/pWAg==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^15.0.0", + "@types/yargs": "^16.0.0", "chalk": "^4.0.0" } }, - "@types/istanbul-reports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", - "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", + "@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", "dev": true, "requires": { - "@types/istanbul-lib-report": "*" + "@types/yargs-parser": "*" } }, - "@types/stack-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.0.tgz", - "integrity": "sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==", - "dev": true - }, "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true }, - "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } + "ci-info": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", + "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==", + "dev": true }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "expect": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.4.2.tgz", + "integrity": "sha512-BjAXIDC6ZOW+WBFNg96J22D27Nq5ohn+oGcuP2rtOtcjuxNoV9McpQ60PcQWhdFOSBIQdR72e+4HdnbZTFSTyg==", "dev": true, "requires": { - "fill-range": "^7.0.1" + "@jest/types": "^27.4.2", + "ansi-styles": "^5.0.0", + "jest-get-type": "^27.4.0", + "jest-matcher-utils": "^27.4.2", + "jest-message-util": "^27.4.2", + "jest-regex-util": "^27.4.0" } }, - "camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", "dev": true }, - "cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "jest-get-type": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.4.0.tgz", + "integrity": "sha512-tk9o+ld5TWq41DkK14L4wox4s2D9MtTpKaAVzXfr5CUKm5ZK2ExcaFE0qls2W71zE/6R2TxxrK9w2r6svAFDBQ==", + "dev": true + }, + "jest-regex-util": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.4.0.tgz", + "integrity": "sha512-WeCpMpNnqJYMQoOjm1nTtsgbR4XHAk1u00qDoNBQoykM280+/TmgA5Qh5giC1ecy6a5d4hbSsHzpBtu5yvlbEg==", + "dev": true + }, + "jest-util": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.4.2.tgz", + "integrity": "sha512-YuxxpXU6nlMan9qyLuxHaMMOzXAl5aGZWCSzben5DhLHemYQxCc4YK+4L3ZrCutT8GPQ+ui9k5D8rUJoDioMnA==", "dev": true, "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" + "@jest/types": "^27.4.2", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.4", + "picomatch": "^2.2.3" } }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "pretty-format": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.4.2.tgz", + "integrity": "sha512-p0wNtJ9oLuvgOQDEIZ9zQjZffK7KtyR6Si0jnXULIDwrlNF8Cuir3AZP0hHv0jmKuNN/edOnbMjnzd4uTcmWiw==", "dev": true, "requires": { - "color-name": "~1.1.4" + "@jest/types": "^27.4.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" } }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "dev": true }, - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "throat": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", + "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==", "dev": true - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + } + } + }, + "jest-config": { + "version": "27.4.5", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.4.5.tgz", + "integrity": "sha512-t+STVJtPt+fpqQ8GBw850NtSQbnDOw/UzdPfzDaHQ48/AylQlW7LHj3dH+ndxhC1UxJ0Q3qkq7IH+nM1skwTwA==", + "dev": true, + "requires": { + "@babel/core": "^7.1.0", + "@jest/test-sequencer": "^27.4.5", + "@jest/types": "^27.4.2", + "babel-jest": "^27.4.5", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.4", + "jest-circus": "^27.4.5", + "jest-environment-jsdom": "^27.4.4", + "jest-environment-node": "^27.4.4", + "jest-get-type": "^27.4.0", + "jest-jasmine2": "^27.4.5", + "jest-regex-util": "^27.4.0", + "jest-resolve": "^27.4.5", + "jest-runner": "^27.4.5", + "jest-util": "^27.4.2", + "jest-validate": "^27.4.2", + "micromatch": "^4.0.4", + "pretty-format": "^27.4.2", + "slash": "^3.0.0" + }, + "dependencies": { + "@jest/types": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.4.2.tgz", + "integrity": "sha512-j35yw0PMTPpZsUoOBiuHzr1zTYoad1cVIE0ajEjcrJONxxrko/IRGKkXx3os0Nsi4Hu3+5VmDbVfq5WhG/pWAg==", "dev": true, "requires": { - "to-regex-range": "^5.0.1" + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" } }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", "dev": true, "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "@types/yargs-parser": "*" } }, - "fsevents": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.2.1.tgz", - "integrity": "sha512-bTLYHSeC0UH/EFXS9KqWnXuOl/wHK5Z/d+ghd5AsFMYN7wIGkUCOJyzy88+wJKkZPGON8u4Z9f6U4FdgURE9qA==", - "dev": true, - "optional": true + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "fill-range": "^7.0.1" } }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "ci-info": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", + "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==", "dev": true }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", "dev": true }, "is-number": { @@ -39856,696 +39467,903 @@ "dev": true }, "jest-get-type": { - "version": "26.3.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", - "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.4.0.tgz", + "integrity": "sha512-tk9o+ld5TWq41DkK14L4wox4s2D9MtTpKaAVzXfr5CUKm5ZK2ExcaFE0qls2W71zE/6R2TxxrK9w2r6svAFDBQ==", "dev": true }, - "jest-haste-map": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", - "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.1.2", - "graceful-fs": "^4.2.4", - "jest-regex-util": "^26.0.0", - "jest-serializer": "^26.6.2", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "micromatch": "^4.0.2", - "sane": "^4.0.3", - "walker": "^1.0.7" - } + "jest-regex-util": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.4.0.tgz", + "integrity": "sha512-WeCpMpNnqJYMQoOjm1nTtsgbR4XHAk1u00qDoNBQoykM280+/TmgA5Qh5giC1ecy6a5d4hbSsHzpBtu5yvlbEg==", + "dev": true }, - "jest-message-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz", - "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==", + "jest-util": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.4.2.tgz", + "integrity": "sha512-YuxxpXU6nlMan9qyLuxHaMMOzXAl5aGZWCSzben5DhLHemYQxCc4YK+4L3ZrCutT8GPQ+ui9k5D8rUJoDioMnA==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "@jest/types": "^26.6.2", - "@types/stack-utils": "^2.0.0", + "@jest/types": "^27.4.2", + "@types/node": "*", "chalk": "^4.0.0", + "ci-info": "^3.2.0", "graceful-fs": "^4.2.4", - "micromatch": "^4.0.2", - "pretty-format": "^26.6.2", - "slash": "^3.0.0", - "stack-utils": "^2.0.2" + "picomatch": "^2.2.3" } }, - "jest-mock": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-26.6.2.tgz", - "integrity": "sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew==", + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", "dev": true, "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*" + "braces": "^3.0.1", + "picomatch": "^2.2.3" } }, - "jest-serializer": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", - "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "pretty-format": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.4.2.tgz", + "integrity": "sha512-p0wNtJ9oLuvgOQDEIZ9zQjZffK7KtyR6Si0jnXULIDwrlNF8Cuir3AZP0hHv0jmKuNN/edOnbMjnzd4uTcmWiw==", "dev": true, "requires": { - "@types/node": "*", - "graceful-fs": "^4.2.4" + "@jest/types": "^27.4.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" } }, - "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", + "react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" + "is-number": "^7.0.0" } - }, - "jest-validate": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.2.tgz", - "integrity": "sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==", + } + } + }, + "jest-dev-server": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/jest-dev-server/-/jest-dev-server-6.0.2.tgz", + "integrity": "sha512-cVpBu4KvNnefZsiustbaQmgGEKn72K6yk0OMgXDJ3yMT9N24ZM16TG0QgEacHPkrHKirOXZa1GN9Mi/lNl9Y+Q==", + "dev": true, + "requires": { + "chalk": "^4.1.2", + "cwd": "^0.10.0", + "find-process": "^1.4.5", + "prompts": "^2.4.1", + "spawnd": "^6.0.2", + "tree-kill": "^1.2.2", + "wait-on": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "@jest/types": "^26.6.2", - "camelcase": "^6.0.0", - "chalk": "^4.0.0", - "jest-get-type": "^26.3.0", - "leven": "^3.1.0", - "pretty-format": "^26.6.2" + "color-convert": "^2.0.1" } }, - "jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { - "p-locate": "^4.1.0" + "color-name": "~1.1.4" } }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" + "has-flag": "^4.0.0" } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + } + } + }, + "jest-diff": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz", + "integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "diff-sequences": "^26.6.2", + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.2" + } + }, + "jest-docblock": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.4.0.tgz", + "integrity": "sha512-7TBazUdCKGV7svZ+gh7C8esAnweJoG+SvcF6Cjqj4l17zA2q1cMwx2JObSioubk317H+cjcHgP+7fTs60paulg==", + "dev": true, + "requires": { + "detect-newline": "^3.0.0" + } + }, + "jest-each": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.4.2.tgz", + "integrity": "sha512-53V2MNyW28CTruB3lXaHNk6PkiIFuzdOC9gR3C6j8YE/ACfrPnz+slB0s17AgU1TtxNzLuHyvNlLJ+8QYw9nBg==", + "dev": true, + "requires": { + "@jest/types": "^27.4.2", + "chalk": "^4.0.0", + "jest-get-type": "^27.4.0", + "jest-util": "^27.4.2", + "pretty-format": "^27.4.2" + }, + "dependencies": { + "@jest/types": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.4.2.tgz", + "integrity": "sha512-j35yw0PMTPpZsUoOBiuHzr1zTYoad1cVIE0ajEjcrJONxxrko/IRGKkXx3os0Nsi4Hu3+5VmDbVfq5WhG/pWAg==", "dev": true, "requires": { - "p-try": "^2.0.0" + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" } }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", "dev": true, "requires": { - "p-limit": "^2.2.0" + "@types/yargs-parser": "*" } }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true }, - "pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - } - }, - "react-is": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.1.tgz", - "integrity": "sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA==", + "ci-info": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", + "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==", "dev": true }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", "dev": true }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "jest-get-type": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.4.0.tgz", + "integrity": "sha512-tk9o+ld5TWq41DkK14L4wox4s2D9MtTpKaAVzXfr5CUKm5ZK2ExcaFE0qls2W71zE/6R2TxxrK9w2r6svAFDBQ==", "dev": true }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "jest-util": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.4.2.tgz", + "integrity": "sha512-YuxxpXU6nlMan9qyLuxHaMMOzXAl5aGZWCSzben5DhLHemYQxCc4YK+4L3ZrCutT8GPQ+ui9k5D8rUJoDioMnA==", + "dev": true, + "requires": { + "@jest/types": "^27.4.2", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.4", + "picomatch": "^2.2.3" + } + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true }, - "stack-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==", + "pretty-format": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.4.2.tgz", + "integrity": "sha512-p0wNtJ9oLuvgOQDEIZ9zQjZffK7KtyR6Si0jnXULIDwrlNF8Cuir3AZP0hHv0jmKuNN/edOnbMjnzd4uTcmWiw==", "dev": true, "requires": { - "escape-string-regexp": "^2.0.0" + "@jest/types": "^27.4.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" } }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + } + } + }, + "jest-environment-jsdom": { + "version": "27.4.4", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.4.4.tgz", + "integrity": "sha512-cYR3ndNfHBqQgFvS1RL7dNqSvD//K56j/q1s2ygNHcfTCAp12zfIromO1w3COmXrxS8hWAh7+CmZmGCIoqGcGA==", + "dev": true, + "requires": { + "@jest/environment": "^27.4.4", + "@jest/fake-timers": "^27.4.2", + "@jest/types": "^27.4.2", + "@types/node": "*", + "jest-mock": "^27.4.2", + "jest-util": "^27.4.2", + "jsdom": "^16.6.0" + }, + "dependencies": { + "@jest/types": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.4.2.tgz", + "integrity": "sha512-j35yw0PMTPpZsUoOBiuHzr1zTYoad1cVIE0ajEjcrJONxxrko/IRGKkXx3os0Nsi4Hu3+5VmDbVfq5WhG/pWAg==", "dev": true, "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" } }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", "dev": true, "requires": { - "ansi-regex": "^5.0.0" + "@types/yargs-parser": "*" } }, - "strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "ci-info": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", + "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==", "dev": true }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", + "dev": true + }, + "jest-util": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.4.2.tgz", + "integrity": "sha512-YuxxpXU6nlMan9qyLuxHaMMOzXAl5aGZWCSzben5DhLHemYQxCc4YK+4L3ZrCutT8GPQ+ui9k5D8rUJoDioMnA==", "dev": true, "requires": { - "has-flag": "^4.0.0" + "@jest/types": "^27.4.2", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.4", + "picomatch": "^2.2.3" } }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + } + } + }, + "jest-environment-node": { + "version": "27.4.4", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.4.4.tgz", + "integrity": "sha512-D+v3lbJ2GjQTQR23TK0kY3vFVmSeea05giInI41HHOaJnAwOnmUHTZgUaZL+VxUB43pIzoa7PMwWtCVlIUoVoA==", + "dev": true, + "requires": { + "@jest/environment": "^27.4.4", + "@jest/fake-timers": "^27.4.2", + "@jest/types": "^27.4.2", + "@types/node": "*", + "jest-mock": "^27.4.2", + "jest-util": "^27.4.2" + }, + "dependencies": { + "@jest/types": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.4.2.tgz", + "integrity": "sha512-j35yw0PMTPpZsUoOBiuHzr1zTYoad1cVIE0ajEjcrJONxxrko/IRGKkXx3os0Nsi4Hu3+5VmDbVfq5WhG/pWAg==", "dev": true, "requires": { - "is-number": "^7.0.0" + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" } }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", "dev": true, "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "@types/yargs-parser": "*" } }, - "y18n": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", - "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", + "ci-info": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", + "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==", "dev": true }, - "yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dev": true, - "requires": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - } + "graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", + "dev": true }, - "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "jest-util": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.4.2.tgz", + "integrity": "sha512-YuxxpXU6nlMan9qyLuxHaMMOzXAl5aGZWCSzben5DhLHemYQxCc4YK+4L3ZrCutT8GPQ+ui9k5D8rUJoDioMnA==", "dev": true, "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - } + "@jest/types": "^27.4.2", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.4", + "picomatch": "^2.2.3" } + }, + "picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "dev": true } } }, - "jest-serializer": { + "jest-get-type": { + "version": "26.3.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", + "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", + "dev": true + }, + "jest-haste-map": { "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", - "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", + "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", "requires": { + "@jest/types": "^26.6.2", + "@types/graceful-fs": "^4.1.2", "@types/node": "*", - "graceful-fs": "^4.2.4" + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "fsevents": "^2.1.2", + "graceful-fs": "^4.2.4", + "jest-regex-util": "^26.0.0", + "jest-serializer": "^26.6.2", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", + "micromatch": "^4.0.2", + "sane": "^4.0.3", + "walker": "^1.0.7" }, "dependencies": { + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, "graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" - } - } - }, - "jest-serializer-enzyme": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/jest-serializer-enzyme/-/jest-serializer-enzyme-1.0.0.tgz", - "integrity": "sha1-+LUJDRrk0QW7rr8E0zvl3ymI8Fk=", - "dev": true, - "requires": { - "enzyme-to-json": "^1.4.4" - }, - "dependencies": { - "enzyme-to-json": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/enzyme-to-json/-/enzyme-to-json-1.6.0.tgz", - "integrity": "sha512-izMrbriQySEiWDUR0NeAyzCiRBncgDjfX5bt3xobkyUinEA79q8UuBNUfWFyjX2ahhP2G8k1GN4kG9NAUF405g==", - "dev": true, + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", "requires": { - "lodash.filter": "^4.6.0", - "lodash.isnil": "^4.0.0", - "lodash.isplainobject": "^4.0.6", - "lodash.omitby": "^4.6.0", - "lodash.range": "^3.2.0", - "object-values": "^1.0.0", - "object.entries": "^1.0.4" + "braces": "^3.0.1", + "picomatch": "^2.2.3" + }, + "dependencies": { + "picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==" + } + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" } } } }, - "jest-snapshot": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-26.6.2.tgz", - "integrity": "sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og==", + "jest-jasmine2": { + "version": "27.4.5", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.4.5.tgz", + "integrity": "sha512-oUnvwhJDj2LhOiUB1kdnJjkx8C5PwgUZQb9urF77mELH9DGR4e2GqpWQKBOYXWs5+uTN9BGDqRz3Aeg5Wts7aw==", "dev": true, "requires": { - "@babel/types": "^7.0.0", - "@jest/types": "^26.6.2", - "@types/babel__traverse": "^7.0.4", - "@types/prettier": "^2.0.0", + "@babel/traverse": "^7.1.0", + "@jest/environment": "^27.4.4", + "@jest/source-map": "^27.4.0", + "@jest/test-result": "^27.4.2", + "@jest/types": "^27.4.2", + "@types/node": "*", "chalk": "^4.0.0", - "expect": "^26.6.2", - "graceful-fs": "^4.2.4", - "jest-diff": "^26.6.2", - "jest-get-type": "^26.3.0", - "jest-haste-map": "^26.6.2", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-resolve": "^26.6.2", - "natural-compare": "^1.4.0", - "pretty-format": "^26.6.2", - "semver": "^7.3.2" + "co": "^4.6.0", + "expect": "^27.4.2", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.4.2", + "jest-matcher-utils": "^27.4.2", + "jest-message-util": "^27.4.2", + "jest-runtime": "^27.4.5", + "jest-snapshot": "^27.4.5", + "jest-util": "^27.4.2", + "pretty-format": "^27.4.2", + "throat": "^6.0.1" }, "dependencies": { "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.4.2.tgz", + "integrity": "sha512-j35yw0PMTPpZsUoOBiuHzr1zTYoad1cVIE0ajEjcrJONxxrko/IRGKkXx3os0Nsi4Hu3+5VmDbVfq5WhG/pWAg==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^15.0.0", + "@types/yargs": "^16.0.0", "chalk": "^4.0.0" } }, - "@types/istanbul-reports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", - "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", + "@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", "dev": true, "requires": { - "@types/istanbul-lib-report": "*" + "@types/yargs-parser": "*" } }, - "@types/prettier": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.1.6.tgz", - "integrity": "sha512-6gOkRe7OIioWAXfnO/2lFiv+SJichKVSys1mSsgyrYHSEjk8Ctv4tSR/Odvnu+HWlH2C8j53dahU03XmQdd5fA==", + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, - "@types/stack-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.0.tgz", - "integrity": "sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==", + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "ci-info": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", + "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==", "dev": true }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "expect": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.4.2.tgz", + "integrity": "sha512-BjAXIDC6ZOW+WBFNg96J22D27Nq5ohn+oGcuP2rtOtcjuxNoV9McpQ60PcQWhdFOSBIQdR72e+4HdnbZTFSTyg==", "dev": true, "requires": { - "color-convert": "^2.0.1" + "@jest/types": "^27.4.2", + "ansi-styles": "^5.0.0", + "jest-get-type": "^27.4.0", + "jest-matcher-utils": "^27.4.2", + "jest-message-util": "^27.4.2", + "jest-regex-util": "^27.4.0" } }, - "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } + "graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", + "dev": true }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } + "jest-get-type": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.4.0.tgz", + "integrity": "sha512-tk9o+ld5TWq41DkK14L4wox4s2D9MtTpKaAVzXfr5CUKm5ZK2ExcaFE0qls2W71zE/6R2TxxrK9w2r6svAFDBQ==", + "dev": true }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "jest-regex-util": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.4.0.tgz", + "integrity": "sha512-WeCpMpNnqJYMQoOjm1nTtsgbR4XHAk1u00qDoNBQoykM280+/TmgA5Qh5giC1ecy6a5d4hbSsHzpBtu5yvlbEg==", + "dev": true + }, + "jest-util": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.4.2.tgz", + "integrity": "sha512-YuxxpXU6nlMan9qyLuxHaMMOzXAl5aGZWCSzben5DhLHemYQxCc4YK+4L3ZrCutT8GPQ+ui9k5D8rUJoDioMnA==", "dev": true, "requires": { - "color-name": "~1.1.4" + "@jest/types": "^27.4.2", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.4", + "picomatch": "^2.2.3" } }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "pretty-format": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.4.2.tgz", + "integrity": "sha512-p0wNtJ9oLuvgOQDEIZ9zQjZffK7KtyR6Si0jnXULIDwrlNF8Cuir3AZP0hHv0jmKuNN/edOnbMjnzd4uTcmWiw==", "dev": true, "requires": { - "to-regex-range": "^5.0.1" + "@jest/types": "^27.4.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" } }, - "fsevents": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.2.1.tgz", - "integrity": "sha512-bTLYHSeC0UH/EFXS9KqWnXuOl/wHK5Z/d+ghd5AsFMYN7wIGkUCOJyzy88+wJKkZPGON8u4Z9f6U4FdgURE9qA==", - "dev": true, - "optional": true - }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "dev": true }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "throat": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", + "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==", "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + } + } + }, + "jest-junit": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/jest-junit/-/jest-junit-13.0.0.tgz", + "integrity": "sha512-JSHR+Dhb32FGJaiKkqsB7AR3OqWKtldLd6ZH2+FJ8D4tsweb8Id8zEVReU4+OlrRO1ZluqJLQEETm+Q6/KilBg==", + "dev": true, + "requires": { + "mkdirp": "^1.0.4", + "strip-ansi": "^6.0.1", + "uuid": "^8.3.2", + "xml": "^1.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, - "jest-get-type": { - "version": "26.3.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", - "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true }, - "jest-haste-map": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", - "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { - "@jest/types": "^26.6.2", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.1.2", - "graceful-fs": "^4.2.4", - "jest-regex-util": "^26.0.0", - "jest-serializer": "^26.6.2", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "micromatch": "^4.0.2", - "sane": "^4.0.3", - "walker": "^1.0.7" + "ansi-regex": "^5.0.1" } }, - "jest-message-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz", - "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==", + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true + } + } + }, + "jest-leak-detector": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.4.2.tgz", + "integrity": "sha512-ml0KvFYZllzPBJWDei3mDzUhyp/M4ubKebX++fPaudpe8OsxUE+m+P6ciVLboQsrzOCWDjE20/eXew9QMx/VGw==", + "dev": true, + "requires": { + "jest-get-type": "^27.4.0", + "pretty-format": "^27.4.2" + }, + "dependencies": { + "@jest/types": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.4.2.tgz", + "integrity": "sha512-j35yw0PMTPpZsUoOBiuHzr1zTYoad1cVIE0ajEjcrJONxxrko/IRGKkXx3os0Nsi4Hu3+5VmDbVfq5WhG/pWAg==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "@jest/types": "^26.6.2", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.2", - "pretty-format": "^26.6.2", - "slash": "^3.0.0", - "stack-utils": "^2.0.2" + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" } }, - "jest-serializer": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", - "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", + "@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", "dev": true, "requires": { - "@types/node": "*", - "graceful-fs": "^4.2.4" + "@types/yargs-parser": "*" } }, - "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + }, + "jest-get-type": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.4.0.tgz", + "integrity": "sha512-tk9o+ld5TWq41DkK14L4wox4s2D9MtTpKaAVzXfr5CUKm5ZK2ExcaFE0qls2W71zE/6R2TxxrK9w2r6svAFDBQ==", + "dev": true + }, + "pretty-format": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.4.2.tgz", + "integrity": "sha512-p0wNtJ9oLuvgOQDEIZ9zQjZffK7KtyR6Si0jnXULIDwrlNF8Cuir3AZP0hHv0jmKuNN/edOnbMjnzd4uTcmWiw==", "dev": true, "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" + "@jest/types": "^27.4.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" } }, - "jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + } + } + }, + "jest-matcher-utils": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.4.2.tgz", + "integrity": "sha512-jyP28er3RRtMv+fmYC/PKG8wvAmfGcSNproVTW2Y0P/OY7/hWUOmsPfxN1jOhM+0u2xU984u2yEagGivz9OBGQ==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "jest-diff": "^27.4.2", + "jest-get-type": "^27.4.0", + "pretty-format": "^27.4.2" + }, + "dependencies": { + "@jest/types": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.4.2.tgz", + "integrity": "sha512-j35yw0PMTPpZsUoOBiuHzr1zTYoad1cVIE0ajEjcrJONxxrko/IRGKkXx3os0Nsi4Hu3+5VmDbVfq5WhG/pWAg==", "dev": true, "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" } }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", "dev": true, "requires": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" + "@types/yargs-parser": "*" } }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, - "pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - } - }, - "react-is": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.1.tgz", - "integrity": "sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA==", + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "diff-sequences": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.4.0.tgz", + "integrity": "sha512-YqiQzkrsmHMH5uuh8OdQFU9/ZpADnwzml8z0O5HvRNda+5UZsaX/xN+AAxfR2hWq1Y7HZnAzO9J5lJXOuDz2Ww==", "dev": true }, - "stack-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==", + "jest-diff": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.4.2.tgz", + "integrity": "sha512-ujc9ToyUZDh9KcqvQDkk/gkbf6zSaeEg9AiBxtttXW59H/AcqEYp1ciXAtJp+jXWva5nAf/ePtSsgWwE5mqp4Q==", "dev": true, "requires": { - "escape-string-regexp": "^2.0.0" + "chalk": "^4.0.0", + "diff-sequences": "^27.4.0", + "jest-get-type": "^27.4.0", + "pretty-format": "^27.4.2" } }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } + "jest-get-type": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.4.0.tgz", + "integrity": "sha512-tk9o+ld5TWq41DkK14L4wox4s2D9MtTpKaAVzXfr5CUKm5ZK2ExcaFE0qls2W71zE/6R2TxxrK9w2r6svAFDBQ==", + "dev": true }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "pretty-format": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.4.2.tgz", + "integrity": "sha512-p0wNtJ9oLuvgOQDEIZ9zQjZffK7KtyR6Si0jnXULIDwrlNF8Cuir3AZP0hHv0jmKuNN/edOnbMjnzd4uTcmWiw==", "dev": true, "requires": { - "is-number": "^7.0.0" + "@jest/types": "^27.4.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" } + }, + "react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true } } }, - "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", + "jest-message-util": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.4.2.tgz", + "integrity": "sha512-OMRqRNd9E0DkBLZpFtZkAGYOXl6ZpoMtQJWTAREJKDOFa0M6ptB7L67tp+cszMBkvSgKOhNtQp2Vbcz3ZZKo/w==", + "dev": true, "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*", + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.4.2", + "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" + "micromatch": "^4.0.4", + "pretty-format": "^27.4.2", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" }, "dependencies": { "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.4.2.tgz", + "integrity": "sha512-j35yw0PMTPpZsUoOBiuHzr1zTYoad1cVIE0ajEjcrJONxxrko/IRGKkXx3os0Nsi4Hu3+5VmDbVfq5WhG/pWAg==", + "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^15.0.0", + "@types/yargs": "^16.0.0", "chalk": "^4.0.0" } }, - "@types/istanbul-reports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", - "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", + "@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dev": true, "requires": { - "@types/istanbul-lib-report": "*" + "@types/yargs-parser": "*" } }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + }, "braces": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, "requires": { "fill-range": "^7.0.1" } @@ -40554,24 +40372,28 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, "requires": { "to-regex-range": "^5.0.1" } }, "graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", + "dev": true }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true }, "micromatch": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, "requires": { "braces": "^3.0.1", "picomatch": "^2.2.3" @@ -40580,213 +40402,131 @@ "picomatch": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==" - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "requires": { - "is-number": "^7.0.0" - } - } - } - }, - "jest-validate": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-24.9.0.tgz", - "integrity": "sha512-HPIt6C5ACwiqSiwi+OfSSHbK8sG7akG8eATl+IPKaeIjtPOeBUd/g3J7DghugzxrGjI93qS/+RPKe1H6PqvhRQ==", - "dev": true, - "requires": { - "@jest/types": "^24.9.0", - "camelcase": "^5.3.1", - "chalk": "^2.0.1", - "jest-get-type": "^24.9.0", - "leven": "^3.1.0", - "pretty-format": "^24.9.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", "dev": true }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "pretty-format": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.4.2.tgz", + "integrity": "sha512-p0wNtJ9oLuvgOQDEIZ9zQjZffK7KtyR6Si0jnXULIDwrlNF8Cuir3AZP0hHv0jmKuNN/edOnbMjnzd4uTcmWiw==", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "@jest/types": "^27.4.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" } }, - "pretty-format": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz", - "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==", + "react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "requires": { - "@jest/types": "^24.9.0", - "ansi-regex": "^4.0.0", - "ansi-styles": "^3.2.0", - "react-is": "^16.8.4" + "is-number": "^7.0.0" } } } }, - "jest-watch-typeahead": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-0.6.1.tgz", - "integrity": "sha512-ITVnHhj3Jd/QkqQcTqZfRgjfyRhDFM/auzgVo2RKvSwi18YMvh0WvXDJFoFED6c7jd/5jxtu4kSOb9PTu2cPVg==", + "jest-mock": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.4.2.tgz", + "integrity": "sha512-PDDPuyhoukk20JrQKeofK12hqtSka7mWH0QQuxSNgrdiPsrnYYLS6wbzu/HDlxZRzji5ylLRULeuI/vmZZDrYA==", "dev": true, "requires": { - "ansi-escapes": "^4.3.1", - "chalk": "^4.0.0", - "jest-regex-util": "^26.0.0", - "jest-watcher": "^26.3.0", - "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0" + "@jest/types": "^27.4.2", + "@types/node": "*" }, "dependencies": { - "ansi-escapes": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", - "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", + "@jest/types": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.4.2.tgz", + "integrity": "sha512-j35yw0PMTPpZsUoOBiuHzr1zTYoad1cVIE0ajEjcrJONxxrko/IRGKkXx3os0Nsi4Hu3+5VmDbVfq5WhG/pWAg==", "dev": true, "requires": { - "type-fest": "^0.11.0" + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" } }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", "dev": true, "requires": { - "ansi-regex": "^5.0.0" + "@types/yargs-parser": "*" } - }, - "type-fest": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", - "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", - "dev": true } } }, - "jest-watcher": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-26.6.2.tgz", - "integrity": "sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ==", + "jest-pnp-resolver": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", + "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", + "dev": true + }, + "jest-regex-util": { + "version": "26.0.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", + "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==" + }, + "jest-resolve": { + "version": "27.4.5", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.4.5.tgz", + "integrity": "sha512-xU3z1BuOz/hUhVUL+918KqUgK+skqOuUsAi7A+iwoUldK6/+PW+utK8l8cxIWT9AW7IAhGNXjSAh1UYmjULZZw==", "dev": true, "requires": { - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "ansi-escapes": "^4.2.1", + "@jest/types": "^27.4.2", "chalk": "^4.0.0", - "jest-util": "^26.6.2", - "string-length": "^4.0.1" + "graceful-fs": "^4.2.4", + "jest-haste-map": "^27.4.5", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^27.4.2", + "jest-validate": "^27.4.2", + "resolve": "^1.20.0", + "resolve.exports": "^1.1.0", + "slash": "^3.0.0" }, "dependencies": { - "@jest/console": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.2.tgz", - "integrity": "sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^26.6.2", - "jest-util": "^26.6.2", - "slash": "^3.0.0" - } - }, - "@jest/test-result": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.2.tgz", - "integrity": "sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==", - "dev": true, - "requires": { - "@jest/console": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - } - }, "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.4.2.tgz", + "integrity": "sha512-j35yw0PMTPpZsUoOBiuHzr1zTYoad1cVIE0ajEjcrJONxxrko/IRGKkXx3os0Nsi4Hu3+5VmDbVfq5WhG/pWAg==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^15.0.0", + "@types/yargs": "^16.0.0", "chalk": "^4.0.0" } }, - "@types/istanbul-reports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", - "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", - "dev": true, - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/stack-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.0.tgz", - "integrity": "sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==", - "dev": true - }, - "ansi-escapes": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", - "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", + "@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", "dev": true, "requires": { - "type-fest": "^0.11.0" - } - }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "@types/yargs-parser": "*" + } + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "dev": true, "requires": { - "color-convert": "^2.0.1" + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" } }, "braces": { @@ -40798,25 +40538,10 @@ "fill-range": "^7.0.1" } }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "ci-info": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", + "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==", "dev": true }, "fill-range": { @@ -40829,89 +40554,150 @@ } }, "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", "dev": true }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "is-core-module": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", + "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, - "jest-message-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz", - "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==", + "jest-haste-map": { + "version": "27.4.5", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.4.5.tgz", + "integrity": "sha512-oJm1b5qhhPs78K24EDGifWS0dELYxnoBiDhatT/FThgB9yxqUm5F6li3Pv+Q+apMBmmPNzOBnZ7ZxWMB1Leq1Q==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "@jest/types": "^26.6.2", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", + "@jest/types": "^27.4.2", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "fsevents": "^2.3.2", "graceful-fs": "^4.2.4", - "micromatch": "^4.0.2", - "pretty-format": "^26.6.2", - "slash": "^3.0.0", - "stack-utils": "^2.0.2" + "jest-regex-util": "^27.4.0", + "jest-serializer": "^27.4.0", + "jest-util": "^27.4.2", + "jest-worker": "^27.4.5", + "micromatch": "^4.0.4", + "walker": "^1.0.7" + } + }, + "jest-regex-util": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.4.0.tgz", + "integrity": "sha512-WeCpMpNnqJYMQoOjm1nTtsgbR4XHAk1u00qDoNBQoykM280+/TmgA5Qh5giC1ecy6a5d4hbSsHzpBtu5yvlbEg==", + "dev": true + }, + "jest-serializer": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.4.0.tgz", + "integrity": "sha512-RDhpcn5f1JYTX2pvJAGDcnsNTnsV9bjYPU8xcV+xPwOXnUPOQwf4ZEuiU6G9H1UztH+OapMgu/ckEVwO87PwnQ==", + "dev": true, + "requires": { + "@types/node": "*", + "graceful-fs": "^4.2.4" } }, "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.4.2.tgz", + "integrity": "sha512-YuxxpXU6nlMan9qyLuxHaMMOzXAl5aGZWCSzben5DhLHemYQxCc4YK+4L3ZrCutT8GPQ+ui9k5D8rUJoDioMnA==", "dev": true, "requires": { - "@jest/types": "^26.6.2", + "@jest/types": "^27.4.2", "@types/node": "*", "chalk": "^4.0.0", + "ci-info": "^3.2.0", "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" + "picomatch": "^2.2.3" + }, + "dependencies": { + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + } } }, - "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "jest-worker": { + "version": "27.4.5", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.5.tgz", + "integrity": "sha512-f2s8kEdy15cv9r7q4KkzGXvlY0JTcmCbMHZBfSQDwW77REr45IDWwd0lksDFeVHH2jJ5pqb90T77XscrjeGzzg==", "dev": true, "requires": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" } }, - "pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", "dev": true, "requires": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" + "braces": "^3.0.1", + "picomatch": "^2.2.3" + }, + "dependencies": { + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + } } }, - "react-is": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.1.tgz", - "integrity": "sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA==", + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, - "stack-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==", + "resolve": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.21.0.tgz", + "integrity": "sha512-3wCbTpk5WJlyE4mSOtDLhqQmGFi0/TD9VPwmiolnk8U0wRgMEktqCXd3vy5buTO3tljvalNvKrjHEfrd2WpEKA==", "dev": true, "requires": { - "escape-string-regexp": "^2.0.0" + "is-core-module": "^2.8.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" } }, "to-regex-range": { @@ -40922,869 +40708,453 @@ "requires": { "is-number": "^7.0.0" } - }, - "type-fest": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", - "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", - "dev": true } } }, - "jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "jest-resolve-dependencies": { + "version": "27.4.5", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.4.5.tgz", + "integrity": "sha512-elEVvkvRK51y037NshtEkEnukMBWvlPzZHiL847OrIljJ8yIsujD2GXRPqDXC4rEVKbcdsy7W0FxoZb4WmEs7w==", + "dev": true, "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" + "@jest/types": "^27.4.2", + "jest-regex-util": "^27.4.0", + "jest-snapshot": "^27.4.5" }, "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "@jest/types": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.4.2.tgz", + "integrity": "sha512-j35yw0PMTPpZsUoOBiuHzr1zTYoad1cVIE0ajEjcrJONxxrko/IRGKkXx3os0Nsi4Hu3+5VmDbVfq5WhG/pWAg==", + "dev": true, "requires": { - "has-flag": "^4.0.0" + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" } - } - } - }, - "jetifier": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/jetifier/-/jetifier-1.6.8.tgz", - "integrity": "sha512-3Zi16h6L5tXDRQJTb221cnRoVG9/9OvreLdLU2/ZjRv/GILL+2Cemt0IKvkowwkDpvouAU1DQPOJ7qaiHeIdrw==" - }, - "joi": { - "version": "17.4.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.4.0.tgz", - "integrity": "sha512-F4WiW2xaV6wc1jxete70Rw4V/VuMd6IN+a5ilZsxG4uYtUXWu2kq9W5P2dz30e7Gmw8RCbY/u/uk+dMPma9tAg==", - "requires": { - "@hapi/hoek": "^9.0.0", - "@hapi/topo": "^5.0.0", - "@sideway/address": "^4.1.0", - "@sideway/formula": "^3.0.0", - "@sideway/pinpoint": "^2.0.0" - }, - "dependencies": { - "@hapi/hoek": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.0.tgz", - "integrity": "sha512-sqKVVVOe5ivCaXDWivIJYVSaEgdQK9ul7a4Kity5Iw7u9+wBAPbX1RMSnLLmp7O4Vzj0WOWwMAJsTL00xwaNug==" }, - "@hapi/topo": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.0.0.tgz", - "integrity": "sha512-tFJlT47db0kMqVm3H4nQYgn6Pwg10GTZHb1pwmSiv1K4ks6drQOtfEF5ZnPjkvC+y4/bUPHK+bc87QvLcL+WMw==", + "@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dev": true, "requires": { - "@hapi/hoek": "^9.0.0" + "@types/yargs-parser": "*" } - } - } - }, - "js-string-escape": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz", - "integrity": "sha1-4mJbrbwNZ8dTPp7cEGjFh65BN+8=", - "dev": true - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true, - "optional": true - }, - "jsc-android": { - "version": "245459.0.0", - "resolved": "https://registry.npmjs.org/jsc-android/-/jsc-android-245459.0.0.tgz", - "integrity": "sha512-wkjURqwaB1daNkDi2OYYbsLnIdC/lUM2nPXQKRs5pqEU9chDg435bjvo+LSaHotDENygHQDHe+ntUkkw2gwMtg==" - }, - "jscodeshift": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.11.0.tgz", - "integrity": "sha512-SdRK2C7jjs4k/kT2mwtO07KJN9RnjxtKn03d9JVj6c3j9WwaLcFYsICYDnLAzY0hp+wG2nxl+Cm2jWLiNVYb8g==", - "requires": { - "@babel/core": "^7.1.6", - "@babel/parser": "^7.1.6", - "@babel/plugin-proposal-class-properties": "^7.1.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.1.0", - "@babel/plugin-proposal-optional-chaining": "^7.1.0", - "@babel/plugin-transform-modules-commonjs": "^7.1.0", - "@babel/preset-flow": "^7.0.0", - "@babel/preset-typescript": "^7.1.0", - "@babel/register": "^7.0.0", - "babel-core": "^7.0.0-bridge.0", - "colors": "^1.1.2", - "flow-parser": "0.*", - "graceful-fs": "^4.2.4", - "micromatch": "^3.1.10", - "neo-async": "^2.5.0", - "node-dir": "^0.1.17", - "recast": "^0.20.3", - "temp": "^0.8.1", - "write-file-atomic": "^2.3.0" - }, - "dependencies": { - "colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==" }, - "graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" + "jest-regex-util": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.4.0.tgz", + "integrity": "sha512-WeCpMpNnqJYMQoOjm1nTtsgbR4XHAk1u00qDoNBQoykM280+/TmgA5Qh5giC1ecy6a5d4hbSsHzpBtu5yvlbEg==", + "dev": true } } }, - "jsdoctypeparser": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/jsdoctypeparser/-/jsdoctypeparser-9.0.0.tgz", - "integrity": "sha512-jrTA2jJIL6/DAEILBEh2/w9QxCuwmvNXIry39Ay/HVfhE3o2yVV0U44blYkqdHA/OKloJEqvJy0xU+GSdE2SIw==", - "dev": true - }, - "jsdom": { - "version": "16.4.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.4.0.tgz", - "integrity": "sha512-lYMm3wYdgPhrl7pDcRmvzPhhrGVBeVhPIqeHjzeiHN3DFmD1RBpbExbi8vU7BJdH8VAZYovR8DMt0PNNDM7k8w==", + "jest-runner": { + "version": "27.4.5", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.4.5.tgz", + "integrity": "sha512-/irauncTfmY1WkTaRQGRWcyQLzK1g98GYG/8QvIPviHgO1Fqz1JYeEIsSfF+9mc/UTA6S+IIHFgKyvUrtiBIZg==", "dev": true, "requires": { - "abab": "^2.0.3", - "acorn": "^7.1.1", - "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", - "cssstyle": "^2.2.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.0", - "domexception": "^2.0.1", - "escodegen": "^1.14.1", - "html-encoding-sniffer": "^2.0.1", - "is-potential-custom-element-name": "^1.0.0", - "nwsapi": "^2.2.0", - "parse5": "5.1.1", - "request": "^2.88.2", - "request-promise-native": "^1.0.8", - "saxes": "^5.0.0", - "symbol-tree": "^3.2.4", - "tough-cookie": "^3.0.1", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0", - "ws": "^7.2.3", - "xml-name-validator": "^3.0.0" + "@jest/console": "^27.4.2", + "@jest/environment": "^27.4.4", + "@jest/test-result": "^27.4.2", + "@jest/transform": "^27.4.5", + "@jest/types": "^27.4.2", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "jest-docblock": "^27.4.0", + "jest-environment-jsdom": "^27.4.4", + "jest-environment-node": "^27.4.4", + "jest-haste-map": "^27.4.5", + "jest-leak-detector": "^27.4.2", + "jest-message-util": "^27.4.2", + "jest-resolve": "^27.4.5", + "jest-runtime": "^27.4.5", + "jest-util": "^27.4.2", + "jest-worker": "^27.4.5", + "source-map-support": "^0.5.6", + "throat": "^6.0.1" }, "dependencies": { - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true - }, - "escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", - "dev": true, - "requires": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - } - }, - "mime-db": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", - "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", - "dev": true - }, - "mime-types": { - "version": "2.1.27", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", - "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", - "dev": true, - "requires": { - "mime-db": "1.44.0" - } - }, - "parse5": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", - "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", - "dev": true - }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "dev": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - } - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true - }, - "tough-cookie": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz", - "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==", - "dev": true, - "requires": { - "ip-regex": "^2.1.0", - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, - "tr46": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.0.2.tgz", - "integrity": "sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg==", + "@jest/transform": { + "version": "27.4.5", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.4.5.tgz", + "integrity": "sha512-PuMet2UlZtlGzwc6L+aZmR3I7CEBpqadO03pU40l2RNY2fFJ191b9/ITB44LNOhVtsyykx0OZvj0PCyuLm7Eew==", "dev": true, "requires": { - "punycode": "^2.1.1" + "@babel/core": "^7.1.0", + "@jest/types": "^27.4.2", + "babel-plugin-istanbul": "^6.0.0", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^27.4.5", + "jest-regex-util": "^27.4.0", + "jest-util": "^27.4.2", + "micromatch": "^4.0.4", + "pirates": "^4.0.1", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" } }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true - }, - "webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "dev": true - }, - "whatwg-url": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.4.0.tgz", - "integrity": "sha512-vwTUFf6V4zhcPkWp/4CQPr1TW9Ml6SF4lVyaIMBdJw5i6qUUJ1QWM4Z6YYVkfka0OUIzVo/0aNtGVGk256IKWw==", + "@jest/types": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.4.2.tgz", + "integrity": "sha512-j35yw0PMTPpZsUoOBiuHzr1zTYoad1cVIE0ajEjcrJONxxrko/IRGKkXx3os0Nsi4Hu3+5VmDbVfq5WhG/pWAg==", "dev": true, "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^2.0.2", - "webidl-conversions": "^6.1.0" + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" } }, - "ws": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.2.tgz", - "integrity": "sha512-T4tewALS3+qsrpGI/8dqNMLIVdq/g/85U98HPMa6F0m6xTbvhXU6RCQLqPH3+SlomNV/LdY6RXEbBpMH6EOJnA==", - "dev": true - } - } - }, - "jsdom-jscore-rn": { - "version": "git+https://github.com/iamcco/jsdom-jscore-rn.git#a562f3d57c27c13e5bfc8cf82d496e69a3ba2800", - "from": "git+https://github.com/iamcco/jsdom-jscore-rn.git#a562f3d57c27c13e5bfc8cf82d496e69a3ba2800", - "requires": { - "htmlparser2-without-node-native": "^3.9.2", - "querystring": "^0.2.0" - } - }, - "jsesc": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.1.tgz", - "integrity": "sha1-5CGiqOINawgZ3yiQj3glJrlt0f4=" - }, - "json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "json2php": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/json2php/-/json2php-0.0.4.tgz", - "integrity": "sha1-a9haHdpqXdfpECK7JEA8wbfC7jQ=", - "dev": true - }, - "json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "dev": true - }, - "jsonc-parser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", - "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", - "dev": true - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" - }, - "jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", - "dev": true - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "jsx-ast-utils": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz", - "integrity": "sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q==", - "dev": true, - "requires": { - "array-includes": "^3.1.2", - "object.assign": "^4.1.2" - }, - "dependencies": { - "array-includes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.2.tgz", - "integrity": "sha512-w2GspexNQpx+PutG3QpT437/BenZBj0M/MZGn5mzv/MofYqo0xmRHzn4lFsoDlWJ+THYsGJmFlW68WlDFx7VRw==", + "@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", "dev": true, "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "get-intrinsic": "^1.0.1", - "is-string": "^1.0.5" + "@types/yargs-parser": "*" } }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "dev": true, "requires": { - "object-keys": "^1.0.12" + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" } }, - "es-abstract": { - "version": "1.18.0-next.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", - "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-negative-zero": "^2.0.0", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - }, - "dependencies": { - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - } + "fill-range": "^7.0.1" } }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "ci-info": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", + "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==", + "dev": true + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "to-regex-range": "^5.0.1" } }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", "dev": true }, - "is-callable": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", - "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "is-regex": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", - "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "jest-haste-map": { + "version": "27.4.5", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.4.5.tgz", + "integrity": "sha512-oJm1b5qhhPs78K24EDGifWS0dELYxnoBiDhatT/FThgB9yxqUm5F6li3Pv+Q+apMBmmPNzOBnZ7ZxWMB1Leq1Q==", "dev": true, "requires": { - "has-symbols": "^1.0.1" + "@jest/types": "^27.4.2", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "fsevents": "^2.3.2", + "graceful-fs": "^4.2.4", + "jest-regex-util": "^27.4.0", + "jest-serializer": "^27.4.0", + "jest-util": "^27.4.2", + "jest-worker": "^27.4.5", + "micromatch": "^4.0.4", + "walker": "^1.0.7" } }, - "is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "jest-regex-util": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.4.0.tgz", + "integrity": "sha512-WeCpMpNnqJYMQoOjm1nTtsgbR4XHAk1u00qDoNBQoykM280+/TmgA5Qh5giC1ecy6a5d4hbSsHzpBtu5yvlbEg==", + "dev": true + }, + "jest-serializer": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.4.0.tgz", + "integrity": "sha512-RDhpcn5f1JYTX2pvJAGDcnsNTnsV9bjYPU8xcV+xPwOXnUPOQwf4ZEuiU6G9H1UztH+OapMgu/ckEVwO87PwnQ==", "dev": true, "requires": { - "has-symbols": "^1.0.1" + "@types/node": "*", + "graceful-fs": "^4.2.4" } }, - "object-inspect": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", - "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==", - "dev": true - }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "jest-util": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.4.2.tgz", + "integrity": "sha512-YuxxpXU6nlMan9qyLuxHaMMOzXAl5aGZWCSzben5DhLHemYQxCc4YK+4L3ZrCutT8GPQ+ui9k5D8rUJoDioMnA==", "dev": true, "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" + "@jest/types": "^27.4.2", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.4", + "picomatch": "^2.2.3" }, "dependencies": { - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true } } }, - "string.prototype.trimend": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz", - "integrity": "sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw==", + "jest-worker": { + "version": "27.4.5", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.5.tgz", + "integrity": "sha512-f2s8kEdy15cv9r7q4KkzGXvlY0JTcmCbMHZBfSQDwW77REr45IDWwd0lksDFeVHH2jJ5pqb90T77XscrjeGzzg==", "dev": true, "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" } - } - } - }, - "jszip": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.2.2.tgz", - "integrity": "sha512-NmKajvAFQpbg3taXQXr/ccS2wcucR1AZ+NtyWp2Nq7HHVsXhcJFR8p0Baf32C2yVvBylFWVeKf+WI2AnvlPhpA==", - "requires": { - "lie": "~3.3.0", - "pako": "~1.0.2", - "readable-stream": "~2.3.6", - "set-immediate-shim": "~1.0.1" - } - }, - "junk": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/junk/-/junk-3.1.0.tgz", - "integrity": "sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==", - "dev": true - }, - "keyv": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.0.tgz", - "integrity": "sha512-U7ioE8AimvRVLfw4LffyOIRhL2xVgmE8T22L6i0BucSnBUyv4w+I7VN/zVZwRKHOI6ZRUcdMdWHQ8KSUvGpEog==", - "dev": true, - "requires": { - "json-buffer": "3.0.1" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" - }, - "klaw": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", - "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", - "requires": { - "graceful-fs": "^4.1.9" - } - }, - "klaw-sync": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", - "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11" - } - }, - "kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==" - }, - "klona": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.4.tgz", - "integrity": "sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA==", - "dev": true - }, - "known-css-properties": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.20.0.tgz", - "integrity": "sha512-URvsjaA9ypfreqJ2/ylDr5MUERhJZ+DhguoWRr2xgS5C7aGCalXo+ewL+GixgKBfhT2vuL02nbIgNGqVWgTOYw==", - "dev": true - }, - "language-subtag-registry": { - "version": "0.3.21", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz", - "integrity": "sha512-L0IqwlIXjilBVVYKFT37X9Ih11Um5NEl9cbJIuU/SwP/zEEAbBPOnEeeuxVMf45ydWQRDQN3Nqc96OgbH1K+Pg==", - "dev": true - }, - "language-tags": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", - "integrity": "sha1-0yHbxNowuovzAk4ED6XBRmH5GTo=", - "dev": true, - "requires": { - "language-subtag-registry": "~0.3.2" - } - }, - "last-call-webpack-plugin": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz", - "integrity": "sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w==", - "dev": true, - "requires": { - "lodash": "^4.17.5", - "webpack-sources": "^1.1.0" - }, - "dependencies": { + }, + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + }, + "dependencies": { + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + } + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, - "webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" + "has-flag": "^4.0.0" + } + }, + "throat": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", + "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" } } } }, - "lazy-cache": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", - "dev": true - }, - "lazy-universal-dotenv": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lazy-universal-dotenv/-/lazy-universal-dotenv-3.0.1.tgz", - "integrity": "sha512-prXSYk799h3GY3iOWnC6ZigYzMPjxN2svgjJ9shk7oMadSNX3wXy0B6F32PMJv7qtMnrIbUxoEHzbutvxR2LBQ==", - "dev": true, - "requires": { - "@babel/runtime": "^7.5.0", - "app-root-dir": "^1.0.2", - "core-js": "^3.0.4", - "dotenv": "^8.0.0", - "dotenv-expand": "^5.1.0" - } - }, - "lazystream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", - "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", - "dev": true, - "requires": { - "readable-stream": "^2.0.5" - } - }, - "lerna": { - "version": "3.22.1", - "resolved": "https://registry.npmjs.org/lerna/-/lerna-3.22.1.tgz", - "integrity": "sha512-vk1lfVRFm+UuEFA7wkLKeSF7Iz13W+N/vFd48aW2yuS7Kv0RbNm2/qcDPV863056LMfkRlsEe+QYOw3palj5Lg==", - "dev": true, - "requires": { - "@lerna/add": "3.21.0", - "@lerna/bootstrap": "3.21.0", - "@lerna/changed": "3.21.0", - "@lerna/clean": "3.21.0", - "@lerna/cli": "3.18.5", - "@lerna/create": "3.22.0", - "@lerna/diff": "3.21.0", - "@lerna/exec": "3.21.0", - "@lerna/import": "3.22.0", - "@lerna/info": "3.21.0", - "@lerna/init": "3.21.0", - "@lerna/link": "3.21.0", - "@lerna/list": "3.21.0", - "@lerna/publish": "3.22.1", - "@lerna/run": "3.21.0", - "@lerna/version": "3.22.1", - "import-local": "^2.0.0", - "npmlog": "^4.1.2" - } - }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "lie": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", - "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", - "requires": { - "immediate": "~3.0.5" - } - }, - "lilconfig": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.3.tgz", - "integrity": "sha512-EHKqr/+ZvdKCifpNrJCKxBTgk5XupZA3y/aCPY9mxfgBzmgh93Mt/WqjjQ38oMxXuvDokaKiM3lAgvSH2sjtHg==", - "dev": true - }, - "line-height": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/line-height/-/line-height-0.3.1.tgz", - "integrity": "sha1-SxIF7d4YKHKl76PI9iCzGHqcVMk=", - "requires": { - "computed-style": "~0.1.3" - } - }, - "lines-and-columns": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=" - }, - "linkify-it": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.2.tgz", - "integrity": "sha512-gDBO4aHNZS6coiZCKVhSNh43F9ioIL4JwRjLZPkoLIY4yZFwg264Y5lu2x6rb1Js42Gh6Yqm2f6L2AJcnkzinQ==", - "dev": true, - "requires": { - "uc.micro": "^1.0.1" - } - }, - "lint-staged": { - "version": "9.2.5", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-9.2.5.tgz", - "integrity": "sha512-d99gTBFMJ29159+9iRvaMEQstmNcPAbQbhHSYw6D/1FncvFdIj8lWHztaq3Uq+tbZPABHXQ/fyN7Rp1QwF8HIw==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "commander": "^2.20.0", - "cosmiconfig": "^5.2.1", - "debug": "^4.1.1", - "dedent": "^0.7.0", - "del": "^5.0.0", - "execa": "^2.0.3", - "listr": "^0.14.3", - "log-symbols": "^3.0.0", - "micromatch": "^4.0.2", - "normalize-path": "^3.0.0", - "please-upgrade-node": "^3.1.1", - "string-argv": "^0.3.0", - "stringify-object": "^3.3.0" + "jest-runtime": { + "version": "27.4.5", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.4.5.tgz", + "integrity": "sha512-CIYqwuJQXHQtPd/idgrx4zgJ6iCb6uBjQq1RSAGQrw2S8XifDmoM1Ot8NRd80ooAm+ZNdHVwsktIMGlA1F1FAQ==", + "dev": true, + "requires": { + "@jest/console": "^27.4.2", + "@jest/environment": "^27.4.4", + "@jest/globals": "^27.4.4", + "@jest/source-map": "^27.4.0", + "@jest/test-result": "^27.4.2", + "@jest/transform": "^27.4.5", + "@jest/types": "^27.4.2", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "execa": "^5.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^27.4.5", + "jest-message-util": "^27.4.2", + "jest-mock": "^27.4.2", + "jest-regex-util": "^27.4.0", + "jest-resolve": "^27.4.5", + "jest-snapshot": "^27.4.5", + "jest-util": "^27.4.2", + "jest-validate": "^27.4.2", + "slash": "^3.0.0", + "strip-bom": "^4.0.0", + "yargs": "^16.2.0" }, "dependencies": { - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "@jest/transform": { + "version": "27.4.5", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.4.5.tgz", + "integrity": "sha512-PuMet2UlZtlGzwc6L+aZmR3I7CEBpqadO03pU40l2RNY2fFJ191b9/ITB44LNOhVtsyykx0OZvj0PCyuLm7Eew==", "dev": true, "requires": { - "fill-range": "^7.0.1" + "@babel/core": "^7.1.0", + "@jest/types": "^27.4.2", + "babel-plugin-istanbul": "^6.0.0", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^27.4.5", + "jest-regex-util": "^27.4.0", + "jest-util": "^27.4.2", + "micromatch": "^4.0.4", + "pirates": "^4.0.1", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" } }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "@jest/types": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.4.2.tgz", + "integrity": "sha512-j35yw0PMTPpZsUoOBiuHzr1zTYoad1cVIE0ajEjcrJONxxrko/IRGKkXx3os0Nsi4Hu3+5VmDbVfq5WhG/pWAg==", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" } }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true + "@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } }, - "cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "dev": true, "requires": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" } }, - "cross-spawn": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.1.tgz", - "integrity": "sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg==", + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "fill-range": "^7.0.1" } }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "ci-info": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", + "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==", + "dev": true + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, "requires": { - "ms": "^2.1.1" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" } }, "execa": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-2.1.0.tgz", - "integrity": "sha512-Y/URAVapfbYy2Xp/gb6A0E7iR8xeqOCXsuuaoMn7A5PzrXUK84E1gyiEfq0wQd/GHA6GsoHWwhNq8anb0mleIw==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, "requires": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", "is-stream": "^2.0.0", "merge-stream": "^2.0.0", - "npm-run-path": "^3.0.0", - "onetime": "^5.1.0", - "p-finally": "^2.0.0", - "signal-exit": "^3.0.2", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", "strip-final-newline": "^2.0.0" + }, + "dependencies": { + "signal-exit": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", + "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", + "dev": true + } } }, "fill-range": { @@ -41797,24 +41167,43 @@ } }, "get-stream": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz", - "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true }, - "import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, "requires": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, + "graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true + }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -41822,34 +41211,97 @@ "dev": true }, "is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true + }, + "jest-haste-map": { + "version": "27.4.5", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.4.5.tgz", + "integrity": "sha512-oJm1b5qhhPs78K24EDGifWS0dELYxnoBiDhatT/FThgB9yxqUm5F6li3Pv+Q+apMBmmPNzOBnZ7ZxWMB1Leq1Q==", + "dev": true, + "requires": { + "@jest/types": "^27.4.2", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "fsevents": "^2.3.2", + "graceful-fs": "^4.2.4", + "jest-regex-util": "^27.4.0", + "jest-serializer": "^27.4.0", + "jest-util": "^27.4.2", + "jest-worker": "^27.4.5", + "micromatch": "^4.0.4", + "walker": "^1.0.7" + } + }, + "jest-regex-util": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.4.0.tgz", + "integrity": "sha512-WeCpMpNnqJYMQoOjm1nTtsgbR4XHAk1u00qDoNBQoykM280+/TmgA5Qh5giC1ecy6a5d4hbSsHzpBtu5yvlbEg==", "dev": true }, - "log-symbols": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", - "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", + "jest-serializer": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.4.0.tgz", + "integrity": "sha512-RDhpcn5f1JYTX2pvJAGDcnsNTnsV9bjYPU8xcV+xPwOXnUPOQwf4ZEuiU6G9H1UztH+OapMgu/ckEVwO87PwnQ==", "dev": true, "requires": { - "chalk": "^2.4.2" + "@types/node": "*", + "graceful-fs": "^4.2.4" } }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true + "jest-util": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.4.2.tgz", + "integrity": "sha512-YuxxpXU6nlMan9qyLuxHaMMOzXAl5aGZWCSzben5DhLHemYQxCc4YK+4L3ZrCutT8GPQ+ui9k5D8rUJoDioMnA==", + "dev": true, + "requires": { + "@jest/types": "^27.4.2", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.4", + "picomatch": "^2.2.3" + }, + "dependencies": { + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + } + } + }, + "jest-worker": { + "version": "27.4.5", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.5.tgz", + "integrity": "sha512-f2s8kEdy15cv9r7q4KkzGXvlY0JTcmCbMHZBfSQDwW77REr45IDWwd0lksDFeVHH2jJ5pqb90T77XscrjeGzzg==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + } }, "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", "dev": true, "requires": { "braces": "^3.0.1", - "picomatch": "^2.0.5" + "picomatch": "^2.2.3" + }, + "dependencies": { + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + } } }, "mimic-fn": { @@ -41858,12 +41310,6 @@ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -41871,55 +41317,29 @@ "dev": true }, "npm-run-path": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-3.1.0.tgz", - "integrity": "sha512-Dbl4A/VfiVGLgQv29URL9xshU8XDY1GeLy+fsaZ1AA8JDSfjvr5P5+pzRbWqRSBxk6/DW7MIh8lTM/PaGnP2kg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, "requires": { "path-key": "^3.0.0" } }, "onetime": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", - "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, "requires": { "mimic-fn": "^2.1.0" } }, - "p-finally": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-2.0.1.tgz", - "integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==", - "dev": true - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, "path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -41935,6 +41355,27 @@ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -41952,2005 +41393,2098 @@ "requires": { "isexe": "^2.0.0" } + }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } } } }, - "listr": { - "version": "0.14.3", - "resolved": "https://registry.npmjs.org/listr/-/listr-0.14.3.tgz", - "integrity": "sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA==", - "dev": true, + "jest-serializer": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", + "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", "requires": { - "@samverschueren/stream-to-observable": "^0.3.0", - "is-observable": "^1.1.0", - "is-promise": "^2.1.0", - "is-stream": "^1.1.0", - "listr-silent-renderer": "^1.1.1", - "listr-update-renderer": "^0.5.0", - "listr-verbose-renderer": "^0.5.0", - "p-map": "^2.0.0", - "rxjs": "^6.3.3" + "@types/node": "*", + "graceful-fs": "^4.2.4" }, "dependencies": { - "is-promise": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", - "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", - "dev": true - }, - "p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", - "dev": true + "graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" } } }, - "listr-silent-renderer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz", - "integrity": "sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4=", - "dev": true - }, - "listr-update-renderer": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz", - "integrity": "sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA==", + "jest-snapshot": { + "version": "27.4.5", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.4.5.tgz", + "integrity": "sha512-eCi/iM1YJFrJWiT9de4+RpWWWBqsHiYxFG9V9o/n0WXs6GpW4lUt4FAHAgFPTLPqCUVzrMQmSmTZSgQzwqR7IQ==", "dev": true, "requires": { - "chalk": "^1.1.3", - "cli-truncate": "^0.2.1", - "elegant-spinner": "^1.0.1", - "figures": "^1.7.0", - "indent-string": "^3.0.0", - "log-symbols": "^1.0.2", - "log-update": "^2.3.0", - "strip-ansi": "^3.0.1" + "@babel/core": "^7.7.2", + "@babel/generator": "^7.7.2", + "@babel/parser": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.0.0", + "@jest/transform": "^27.4.5", + "@jest/types": "^27.4.2", + "@types/babel__traverse": "^7.0.4", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^27.4.2", + "graceful-fs": "^4.2.4", + "jest-diff": "^27.4.2", + "jest-get-type": "^27.4.0", + "jest-haste-map": "^27.4.5", + "jest-matcher-utils": "^27.4.2", + "jest-message-util": "^27.4.2", + "jest-resolve": "^27.4.5", + "jest-util": "^27.4.2", + "natural-compare": "^1.4.0", + "pretty-format": "^27.4.2", + "semver": "^7.3.2" }, "dependencies": { + "@jest/transform": { + "version": "27.4.5", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.4.5.tgz", + "integrity": "sha512-PuMet2UlZtlGzwc6L+aZmR3I7CEBpqadO03pU40l2RNY2fFJ191b9/ITB44LNOhVtsyykx0OZvj0PCyuLm7Eew==", + "dev": true, + "requires": { + "@babel/core": "^7.1.0", + "@jest/types": "^27.4.2", + "babel-plugin-istanbul": "^6.0.0", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^27.4.5", + "jest-regex-util": "^27.4.0", + "jest-util": "^27.4.2", + "micromatch": "^4.0.4", + "pirates": "^4.0.1", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + } + }, + "@jest/types": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.4.2.tgz", + "integrity": "sha512-j35yw0PMTPpZsUoOBiuHzr1zTYoad1cVIE0ajEjcrJONxxrko/IRGKkXx3os0Nsi4Hu3+5VmDbVfq5WhG/pWAg==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + } + }, + "@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "dev": true, "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" } }, - "figures": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, "requires": { - "escape-string-regexp": "^1.0.5", - "object-assign": "^4.1.0" + "fill-range": "^7.0.1" } }, - "log-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", - "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", + "ci-info": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", + "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==", + "dev": true + }, + "diff-sequences": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.4.0.tgz", + "integrity": "sha512-YqiQzkrsmHMH5uuh8OdQFU9/ZpADnwzml8z0O5HvRNda+5UZsaX/xN+AAxfR2hWq1Y7HZnAzO9J5lJXOuDz2Ww==", + "dev": true + }, + "expect": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.4.2.tgz", + "integrity": "sha512-BjAXIDC6ZOW+WBFNg96J22D27Nq5ohn+oGcuP2rtOtcjuxNoV9McpQ60PcQWhdFOSBIQdR72e+4HdnbZTFSTyg==", "dev": true, "requires": { - "chalk": "^1.0.0" + "@jest/types": "^27.4.2", + "ansi-styles": "^5.0.0", + "jest-get-type": "^27.4.0", + "jest-matcher-utils": "^27.4.2", + "jest-message-util": "^27.4.2", + "jest-regex-util": "^27.4.0" } }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "to-regex-range": "^5.0.1" } }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", "dev": true - } - } - }, - "listr-verbose-renderer": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz", - "integrity": "sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "cli-cursor": "^2.1.0", - "date-fns": "^1.27.2", - "figures": "^2.0.0" - }, - "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "jest-diff": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.4.2.tgz", + "integrity": "sha512-ujc9ToyUZDh9KcqvQDkk/gkbf6zSaeEg9AiBxtttXW59H/AcqEYp1ciXAtJp+jXWva5nAf/ePtSsgWwE5mqp4Q==", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "chalk": "^4.0.0", + "diff-sequences": "^27.4.0", + "jest-get-type": "^27.4.0", + "pretty-format": "^27.4.2" } - } - } - }, - "livereload-js": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-2.4.0.tgz", - "integrity": "sha512-XPQH8Z2GDP/Hwz2PCDrh2mth4yFejwA1OZ/81Ti3LgKyhDcEjsSsqFWZojHG0va/duGd+WyosY7eXLDoOyqcPw==", - "dev": true - }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - } - }, - "loader-runner": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", - "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", - "dev": true - }, - "loader-utils": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", - "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", - "dev": true, - "requires": { - "big.js": "^3.1.3", - "emojis-list": "^2.0.0", - "json5": "^0.5.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "lodash._reinterpolate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", - "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", - "dev": true - }, - "lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "dev": true - }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" - }, - "lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=", - "dev": true - }, - "lodash.difference": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", - "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=", - "dev": true - }, - "lodash.differencewith": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.differencewith/-/lodash.differencewith-4.5.0.tgz", - "integrity": "sha1-uvr7yRi1UVTheRdqALsK76rIVLc=", - "dev": true - }, - "lodash.escape": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-4.0.1.tgz", - "integrity": "sha1-yQRGkMIeBClL6qUXcS/e0fqI3pg=", - "dev": true - }, - "lodash.filter": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz", - "integrity": "sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4=", - "dev": true - }, - "lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", - "dev": true - }, - "lodash.flattendeep": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", - "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", - "dev": true - }, - "lodash.get": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", - "dev": true - }, - "lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=", - "dev": true - }, - "lodash.ismatch": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", - "integrity": "sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc=", - "dev": true - }, - "lodash.isnil": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/lodash.isnil/-/lodash.isnil-4.0.0.tgz", - "integrity": "sha1-SeKM1VkBNFjIFMVHnTxmOiG/qmw=", - "dev": true - }, - "lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", - "dev": true - }, - "lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", - "dev": true - }, - "lodash.omitby": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.omitby/-/lodash.omitby-4.6.0.tgz", - "integrity": "sha1-XBX/R1StVVAWtTwEExHo8HkgR5E=", - "dev": true - }, - "lodash.range": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lodash.range/-/lodash.range-3.2.0.tgz", - "integrity": "sha1-9GHliPZmg/fq3q3lE+OKaaVloV0=", - "dev": true - }, - "lodash.set": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz", - "integrity": "sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM=", - "dev": true - }, - "lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", - "dev": true - }, - "lodash.template": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", - "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", - "dev": true, - "requires": { - "lodash._reinterpolate": "^3.0.0", - "lodash.templatesettings": "^4.0.0" - } - }, - "lodash.templatesettings": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", - "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", - "dev": true, - "requires": { - "lodash._reinterpolate": "^3.0.0" + }, + "jest-get-type": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.4.0.tgz", + "integrity": "sha512-tk9o+ld5TWq41DkK14L4wox4s2D9MtTpKaAVzXfr5CUKm5ZK2ExcaFE0qls2W71zE/6R2TxxrK9w2r6svAFDBQ==", + "dev": true + }, + "jest-haste-map": { + "version": "27.4.5", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.4.5.tgz", + "integrity": "sha512-oJm1b5qhhPs78K24EDGifWS0dELYxnoBiDhatT/FThgB9yxqUm5F6li3Pv+Q+apMBmmPNzOBnZ7ZxWMB1Leq1Q==", + "dev": true, + "requires": { + "@jest/types": "^27.4.2", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "fsevents": "^2.3.2", + "graceful-fs": "^4.2.4", + "jest-regex-util": "^27.4.0", + "jest-serializer": "^27.4.0", + "jest-util": "^27.4.2", + "jest-worker": "^27.4.5", + "micromatch": "^4.0.4", + "walker": "^1.0.7" + } + }, + "jest-regex-util": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.4.0.tgz", + "integrity": "sha512-WeCpMpNnqJYMQoOjm1nTtsgbR4XHAk1u00qDoNBQoykM280+/TmgA5Qh5giC1ecy6a5d4hbSsHzpBtu5yvlbEg==", + "dev": true + }, + "jest-serializer": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.4.0.tgz", + "integrity": "sha512-RDhpcn5f1JYTX2pvJAGDcnsNTnsV9bjYPU8xcV+xPwOXnUPOQwf4ZEuiU6G9H1UztH+OapMgu/ckEVwO87PwnQ==", + "dev": true, + "requires": { + "@types/node": "*", + "graceful-fs": "^4.2.4" + } + }, + "jest-util": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.4.2.tgz", + "integrity": "sha512-YuxxpXU6nlMan9qyLuxHaMMOzXAl5aGZWCSzben5DhLHemYQxCc4YK+4L3ZrCutT8GPQ+ui9k5D8rUJoDioMnA==", + "dev": true, + "requires": { + "@jest/types": "^27.4.2", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.4", + "picomatch": "^2.2.3" + }, + "dependencies": { + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + } + } + }, + "jest-worker": { + "version": "27.4.5", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.5.tgz", + "integrity": "sha512-f2s8kEdy15cv9r7q4KkzGXvlY0JTcmCbMHZBfSQDwW77REr45IDWwd0lksDFeVHH2jJ5pqb90T77XscrjeGzzg==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + } + }, + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + }, + "dependencies": { + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + } + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "pretty-format": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.4.2.tgz", + "integrity": "sha512-p0wNtJ9oLuvgOQDEIZ9zQjZffK7KtyR6Si0jnXULIDwrlNF8Cuir3AZP0hHv0jmKuNN/edOnbMjnzd4uTcmWiw==", + "dev": true, + "requires": { + "@jest/types": "^27.4.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + } + }, + "react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + } } }, - "lodash.throttle": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", - "integrity": "sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ=" - }, - "lodash.union": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", - "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=", - "dev": true - }, - "lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", - "dev": true - }, - "log-symbols": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", - "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "jest-util": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", + "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", "requires": { - "chalk": "^2.0.1" + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "is-ci": "^2.0.0", + "micromatch": "^4.0.2" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "fill-range": "^7.0.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + } + }, + "picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==" + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" } } } }, - "log-update": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-2.3.0.tgz", - "integrity": "sha1-iDKP19HOeTiykoN0bwsbwSayRwg=", + "jest-validate": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.4.2.tgz", + "integrity": "sha512-hWYsSUej+Fs8ZhOm5vhWzwSLmVaPAxRy+Mr+z5MzeaHm9AxUpXdoVMEW4R86y5gOobVfBsMFLk4Rb+QkiEpx1A==", "dev": true, "requires": { - "ansi-escapes": "^3.0.0", - "cli-cursor": "^2.0.0", - "wrap-ansi": "^3.0.1" + "@jest/types": "^27.4.2", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^27.4.0", + "leven": "^3.1.0", + "pretty-format": "^27.4.2" }, "dependencies": { - "wrap-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-3.0.1.tgz", - "integrity": "sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo=", + "@jest/types": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.4.2.tgz", + "integrity": "sha512-j35yw0PMTPpZsUoOBiuHzr1zTYoad1cVIE0ajEjcrJONxxrko/IRGKkXx3os0Nsi4Hu3+5VmDbVfq5WhG/pWAg==", "dev": true, "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0" + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + } + }, + "@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + }, + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + }, + "jest-get-type": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.4.0.tgz", + "integrity": "sha512-tk9o+ld5TWq41DkK14L4wox4s2D9MtTpKaAVzXfr5CUKm5ZK2ExcaFE0qls2W71zE/6R2TxxrK9w2r6svAFDBQ==", + "dev": true + }, + "pretty-format": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.4.2.tgz", + "integrity": "sha512-p0wNtJ9oLuvgOQDEIZ9zQjZffK7KtyR6Si0jnXULIDwrlNF8Cuir3AZP0hHv0jmKuNN/edOnbMjnzd4uTcmWiw==", + "dev": true, + "requires": { + "@jest/types": "^27.4.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" } + }, + "react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true } } }, - "logkitty": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/logkitty/-/logkitty-0.7.1.tgz", - "integrity": "sha512-/3ER20CTTbahrCrpYfPn7Xavv9diBROZpoXGVZDWMw4b/X4uuUwAC0ki85tgsdMRONURyIJbcOvS94QsUBYPbQ==", + "jest-watch-typeahead": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-1.0.0.tgz", + "integrity": "sha512-jxoszalAb394WElmiJTFBMzie/RDCF+W7Q29n5LzOPtcoQoHWfdUtHFkbhgf5NwWe8uMOxvKb/g7ea7CshfkTw==", + "dev": true, "requires": { - "ansi-fragments": "^0.2.1", - "dayjs": "^1.8.15", - "yargs": "^15.1.0" + "ansi-escapes": "^4.3.1", + "chalk": "^4.0.0", + "jest-regex-util": "^27.0.0", + "jest-watcher": "^27.0.0", + "slash": "^4.0.0", + "string-length": "^5.0.1", + "strip-ansi": "^7.0.1" }, "dependencies": { + "ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "requires": { + "type-fest": "^0.21.3" + } + }, "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + "char-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-2.0.0.tgz", + "integrity": "sha512-oGu2QekBMXgyQNWPDRQ001bjvDnZe4/zBTz37TMbiKz1NbNiyiH5hRkobe7npRN6GfbGbxMYFck/vQ1r9c1VMA==", + "dev": true }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "jest-regex-util": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.4.0.tgz", + "integrity": "sha512-WeCpMpNnqJYMQoOjm1nTtsgbR4XHAk1u00qDoNBQoykM280+/TmgA5Qh5giC1ecy6a5d4hbSsHzpBtu5yvlbEg==", + "dev": true }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true + }, + "string-length": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-5.0.1.tgz", + "integrity": "sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow==", + "dev": true, "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "char-regex": "^2.0.0", + "strip-ansi": "^7.0.1" } }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + "strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true + } + } + }, + "jest-watcher": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.4.2.tgz", + "integrity": "sha512-NJvMVyyBeXfDezhWzUOCOYZrUmkSCiatpjpm+nFUid74OZEHk6aMLrZAukIiFDwdbqp6mTM6Ui1w4oc+8EobQg==", + "dev": true, + "requires": { + "@jest/test-result": "^27.4.2", + "@jest/types": "^27.4.2", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "jest-util": "^27.4.2", + "string-length": "^4.0.1" + }, + "dependencies": { + "@jest/types": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.4.2.tgz", + "integrity": "sha512-j35yw0PMTPpZsUoOBiuHzr1zTYoad1cVIE0ajEjcrJONxxrko/IRGKkXx3os0Nsi4Hu3+5VmDbVfq5WhG/pWAg==", + "dev": true, "requires": { - "p-locate": "^4.1.0" + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" } }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dev": true, "requires": { - "p-try": "^2.0.0" + "@types/yargs-parser": "*" } }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, "requires": { - "p-limit": "^2.2.0" + "type-fest": "^0.21.3" } }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + "ci-info": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", + "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==", + "dev": true }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + "graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", + "dev": true }, - "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "jest-util": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.4.2.tgz", + "integrity": "sha512-YuxxpXU6nlMan9qyLuxHaMMOzXAl5aGZWCSzben5DhLHemYQxCc4YK+4L3ZrCutT8GPQ+ui9k5D8rUJoDioMnA==", + "dev": true, "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" + "@jest/types": "^27.4.2", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.4", + "picomatch": "^2.2.3" } }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "requires": { - "ansi-regex": "^5.0.0" - } + "picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "dev": true }, - "yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "requires": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - } + "type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true + } + } + }, + "jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, - "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" + "has-flag": "^4.0.0" } } } }, - "longest-streak": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.2.tgz", - "integrity": "sha512-TmYTeEYxiAmSVdpbnQDXGtvYOIRsCMg89CVZzwzc2o7GFL1CjoiRPjH5ec0NFAVlAx3fVof9dX/t6KKRAo2OWA==", - "dev": true - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } + "jetifier": { + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/jetifier/-/jetifier-1.6.8.tgz", + "integrity": "sha512-3Zi16h6L5tXDRQJTb221cnRoVG9/9OvreLdLU2/ZjRv/GILL+2Cemt0IKvkowwkDpvouAU1DQPOJ7qaiHeIdrw==" }, - "loud-rejection": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", - "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", - "dev": true, + "joi": { + "version": "17.5.0", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.5.0.tgz", + "integrity": "sha512-R7hR50COp7StzLnDi4ywOXHrBrgNXuUUfJWIR5lPY5Bm/pOD3jZaTwpluUXVLRWcoWZxkrHBBJ5hLxgnlehbdw==", "requires": { - "currently-unhandled": "^0.4.1", - "signal-exit": "^3.0.0" + "@hapi/hoek": "^9.0.0", + "@hapi/topo": "^5.0.0", + "@sideway/address": "^4.1.3", + "@sideway/formula": "^3.0.0", + "@sideway/pinpoint": "^2.0.0" + }, + "dependencies": { + "@sideway/address": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.3.tgz", + "integrity": "sha512-8ncEUtmnTsMmL7z1YPB47kPUq7LpKWJNFPsRzHiIajGC5uXlWGn+AmkYPcHNl8S4tcEGx+cnORnNYaw2wvL+LQ==", + "requires": { + "@hapi/hoek": "^9.0.0" + } + } } }, - "lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "dev": true, - "requires": { - "tslib": "^2.0.3" - } + "jpeg-js": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.3.tgz", + "integrity": "sha512-ru1HWKek8octvUHFHvE5ZzQ1yAsJmIvRdGWvSoKV52XKyuyYA437QWDttXT8eZXDSbuMpHlLzPDZUPd6idIz+Q==", + "dev": true }, - "lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "js-string-escape": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz", + "integrity": "sha1-4mJbrbwNZ8dTPp7cEGjFh65BN+8=", "dev": true }, - "lowlight": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/lowlight/-/lowlight-1.20.0.tgz", - "integrity": "sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==", - "dev": true, - "requires": { - "fault": "^1.0.0", - "highlight.js": "~10.7.0" - } + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, - "lru-cache": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", - "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", - "dev": true, + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" + "argparse": "^1.0.7", + "esprima": "^4.0.0" } }, - "lz-string": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.4.4.tgz", - "integrity": "sha1-wNjq82BZ9wV5bh40SBHPTEmNOiY=", - "dev": true + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true, + "optional": true }, - "macos-release": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.2.0.tgz", - "integrity": "sha512-iV2IDxZaX8dIcM7fG6cI46uNmHUxHE4yN+Z8tKHAW1TBPMZDIKHf/3L+YnOuj/FK9il14UaVdHmiQ1tsi90ltA==", - "dev": true + "jsc-android": { + "version": "250230.2.1", + "resolved": "https://registry.npmjs.org/jsc-android/-/jsc-android-250230.2.1.tgz", + "integrity": "sha512-KmxeBlRjwoqCnBBKGsihFtvsBHyUFlBxJPK4FzeYcIuBfdjv6jFys44JITAgSTbQD+vIdwMEfyZklsuQX0yI1Q==" }, - "make-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.0.0.tgz", - "integrity": "sha512-grNJDhb8b1Jm1qeqW5R/O63wUo4UXo2v2HMic6YT9i/HBlF93S8jkMgH7yugvY9ABDShH4VZMn8I+U8+fCNegw==", - "dev": true, + "jscodeshift": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.11.0.tgz", + "integrity": "sha512-SdRK2C7jjs4k/kT2mwtO07KJN9RnjxtKn03d9JVj6c3j9WwaLcFYsICYDnLAzY0hp+wG2nxl+Cm2jWLiNVYb8g==", "requires": { - "semver": "^6.0.0" + "@babel/core": "^7.1.6", + "@babel/parser": "^7.1.6", + "@babel/plugin-proposal-class-properties": "^7.1.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.1.0", + "@babel/plugin-proposal-optional-chaining": "^7.1.0", + "@babel/plugin-transform-modules-commonjs": "^7.1.0", + "@babel/preset-flow": "^7.0.0", + "@babel/preset-typescript": "^7.1.0", + "@babel/register": "^7.0.0", + "babel-core": "^7.0.0-bridge.0", + "colors": "^1.1.2", + "flow-parser": "0.*", + "graceful-fs": "^4.2.4", + "micromatch": "^3.1.10", + "neo-async": "^2.5.0", + "node-dir": "^0.1.17", + "recast": "^0.20.3", + "temp": "^0.8.1", + "write-file-atomic": "^2.3.0" }, "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true + "colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==" + }, + "graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" } } }, - "make-fetch-happen": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-5.0.2.tgz", - "integrity": "sha512-07JHC0r1ykIoruKO8ifMXu+xEU8qOXDFETylktdug6vJDACnP+HKevOu3PXyNPzFyTSlz8vrBYlBO1JZRe8Cag==", + "jsdoc-type-pratt-parser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-2.0.0.tgz", + "integrity": "sha512-sUuj2j48wxrEpbFjDp1sAesAxPiLT+z0SWVmMafyIINs6Lj5gIPKh3VrkBZu4E/Dv+wHpOot0m6H8zlHQjwqeQ==", + "dev": true + }, + "jsdom": { + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", + "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", "dev": true, "requires": { - "agentkeepalive": "^3.4.1", - "cacache": "^12.0.0", - "http-cache-semantics": "^3.8.1", - "http-proxy-agent": "^2.1.0", - "https-proxy-agent": "^2.2.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "node-fetch-npm": "^2.0.2", - "promise-retry": "^1.1.1", - "socks-proxy-agent": "^4.0.0", - "ssri": "^6.0.0" + "abab": "^2.0.5", + "acorn": "^8.2.4", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", + "html-encoding-sniffer": "^2.0.1", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.5.0", + "ws": "^7.4.6", + "xml-name-validator": "^3.0.0" }, "dependencies": { - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "acorn": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.6.0.tgz", + "integrity": "sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw==", "dev": true }, - "cacache": { - "version": "12.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", - "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": true, "requires": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" + "debug": "4" } }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "delayed-stream": "~1.0.0" } }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dev": true, "requires": { - "yallist": "^3.0.2" + "ms": "2.1.2" } }, - "mississippi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", - "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", + "form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", "dev": true, "requires": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^3.0.0", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" } }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", "dev": true, "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" } }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", "dev": true, "requires": { - "glob": "^7.1.3" + "agent-base": "6", + "debug": "4" } }, - "ssri": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "parse5": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", - "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + }, + "psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", + "dev": true + }, + "tough-cookie": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", + "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", "dev": true, "requires": { - "figgy-pudding": "^3.5.1" + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.1.2" } }, - "unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", "dev": true, "requires": { - "unique-slug": "^2.0.0" + "punycode": "^2.1.1" } }, - "y18n": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", - "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", + "webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", "dev": true }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "whatwg-url": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "dev": true, + "requires": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + } + }, + "ws": { + "version": "7.5.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.6.tgz", + "integrity": "sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA==", "dev": true } } }, - "makeerror": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", - "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", + "jsdom-jscore-rn": { + "version": "git+https://github.com/iamcco/jsdom-jscore-rn.git#a562f3d57c27c13e5bfc8cf82d496e69a3ba2800", + "from": "git+https://github.com/iamcco/jsdom-jscore-rn.git#a562f3d57c27c13e5bfc8cf82d496e69a3ba2800", "requires": { - "tmpl": "1.0.x" + "htmlparser2-without-node-native": "^3.9.2", + "querystring": "^0.2.0" } }, - "map-age-cleaner": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.2.tgz", - "integrity": "sha512-UN1dNocxQq44IhJyMI4TU8phc2m9BddacHRPRjKGLYaF0jqd3xLz0jS0skpAU9WgYyoR4gHtUpzytNBS385FWQ==", - "dev": true, - "requires": { - "p-defer": "^1.0.0" - } + "jsesc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.1.tgz", + "integrity": "sha1-5CGiqOINawgZ3yiQj3glJrlt0f4=" }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" + "json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true }, - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", "dev": true }, - "map-or-similar": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/map-or-similar/-/map-or-similar-1.5.0.tgz", - "integrity": "sha1-beJlMXSt+12e3DPGnT6Sobdvrwg=", + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, - "map-values": { + "json-stable-stringify-without-jsonify": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-values/-/map-values-1.0.1.tgz", - "integrity": "sha1-douOecAJvytk/ugG4ip7HEGQyZA=", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "json2php": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/json2php/-/json2php-0.0.4.tgz", + "integrity": "sha1-a9haHdpqXdfpECK7JEA8wbfC7jQ=", + "dev": true + }, + "json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", "requires": { - "object-visit": "^1.0.0" + "minimist": "^1.2.5" } }, - "markdown-escapes": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.2.tgz", - "integrity": "sha512-lbRZ2mE3Q9RtLjxZBZ9+IMl68DKIXaVAhwvwn9pmjnPLS0h/6kyBMgNhqi1xFJ/2yv6cSyv0jbiZavZv93JkkA==", + "jsonc-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", + "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", "dev": true }, - "markdown-it": { - "version": "12.0.4", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.0.4.tgz", - "integrity": "sha512-34RwOXZT8kyuOJy25oJNJoulO8L0bTHYWXcdZBYZqFnjIy3NgjeoM3FmPXIOFQ26/lSHYMr8oc62B6adxXcb3Q==", - "dev": true, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", "requires": { - "argparse": "^2.0.1", - "entities": "~2.1.0", - "linkify-it": "^3.0.1", - "mdurl": "^1.0.1", - "uc.micro": "^1.0.5" - }, - "dependencies": { - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "entities": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", - "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", - "dev": true - } + "graceful-fs": "^4.1.6" } }, - "markdown-table": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.2.tgz", - "integrity": "sha512-NcWuJFHDA8V3wkDgR/j4+gZx+YQwstPgfQDV8ndUeWWzta3dnDTBxpVzqS9lkmJAuV5YX35lmyojl6HO5JXAgw==", - "dev": true + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" }, - "markdown-to-jsx": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-7.1.3.tgz", - "integrity": "sha512-jtQ6VyT7rMT5tPV0g2EJakEnXLiPksnvlYtwQsVVZ611JsWGN8bQ1tVSDX4s6JllfEH6wmsYxNjTUAMrPmNA8w==", + "jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", "dev": true }, - "markdownlint": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.23.1.tgz", - "integrity": "sha512-iOEwhDfNmq2IJlaA8mzEkHYUi/Hwoa6Ss+HO5jkwUR6wQ4quFr0WzSx+Z9rsWZKUaPbyirIdL1zGmJRkWawr4Q==", + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", "dev": true, "requires": { - "markdown-it": "12.0.4" + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" } }, - "markdownlint-cli": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/markdownlint-cli/-/markdownlint-cli-0.27.1.tgz", - "integrity": "sha512-p1VV6aSbGrDlpUWzHizAnSNEQAweVR3qUI/AIUubxW7BGPXziSXkIED+uRtSohUlRS/jmqp3Wi4es5j6fIrdeQ==", + "jsx-ast-utils": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz", + "integrity": "sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q==", "dev": true, "requires": { - "commander": "~7.1.0", - "deep-extend": "~0.6.0", - "get-stdin": "~8.0.0", - "glob": "~7.1.6", - "ignore": "~5.1.8", - "js-yaml": "^4.0.0", - "jsonc-parser": "~3.0.0", - "lodash.differencewith": "~4.5.0", - "lodash.flatten": "~4.4.0", - "markdownlint": "~0.23.1", - "markdownlint-rule-helpers": "~0.14.0", - "minimatch": "~3.0.4", - "minimist": "~1.2.5", - "rc": "~1.2.8" + "array-includes": "^3.1.2", + "object.assign": "^4.1.2" }, "dependencies": { - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "commander": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.1.0.tgz", - "integrity": "sha512-pRxBna3MJe6HKnBGsDyMv8ETbptw3axEdYHoqNh7gu5oDcew8fs0xnivZGm06Ogk8zGAJ9VX+OPEr2GXEQK4dg==", - "dev": true - }, - "get-stdin": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", - "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", - "dev": true + "array-includes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.2.tgz", + "integrity": "sha512-w2GspexNQpx+PutG3QpT437/BenZBj0M/MZGn5mzv/MofYqo0xmRHzn4lFsoDlWJ+THYsGJmFlW68WlDFx7VRw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1", + "get-intrinsic": "^1.0.1", + "is-string": "^1.0.5" + } }, - "glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "dev": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "object-keys": "^1.0.12" } }, - "ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", - "dev": true + "es-abstract": { + "version": "1.18.0-next.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", + "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-negative-zero": "^2.0.0", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + }, + "dependencies": { + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + } + } }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, "requires": { - "argparse": "^2.0.1" + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" } - } - } - }, - "markdownlint-rule-helpers": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/markdownlint-rule-helpers/-/markdownlint-rule-helpers-0.14.0.tgz", - "integrity": "sha512-vRTPqSU4JK8vVXmjICHSBhwXUvbfh/VJo+j7hvxqe15tLJyomv3FLgFdFgb8kpj0Fe8SsJa/TZUAXv7/sN+N7A==", - "dev": true - }, - "mathml-tag-names": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", - "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", - "dev": true - }, - "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "mdast-squeeze-paragraphs": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz", - "integrity": "sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ==", - "dev": true, - "requires": { - "unist-util-remove": "^2.0.0" - } - }, - "mdast-util-compact": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-compact/-/mdast-util-compact-1.0.1.tgz", - "integrity": "sha1-zbX4TitqLTEU3zO9BdnLMuPECDo=", - "dev": true, - "requires": { - "unist-util-modify-children": "^1.0.0", - "unist-util-visit": "^1.1.0" - } - }, - "mdast-util-definitions": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz", - "integrity": "sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==", - "dev": true, - "requires": { - "unist-util-visit": "^2.0.0" - }, - "dependencies": { - "unist-util-is": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", - "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", "dev": true }, - "unist-util-visit": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", - "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", + "is-callable": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", + "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", + "dev": true + }, + "is-regex": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", + "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", "dev": true, "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" + "has-symbols": "^1.0.1" } }, - "unist-util-visit-parents": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", - "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", + "is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", "dev": true, "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" + "has-symbols": "^1.0.1" } - } - } - }, - "mdast-util-from-markdown": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.4.tgz", - "integrity": "sha512-jj891B5pV2r63n2kBTFh8cRI2uR9LQHsXG1zSDqfhXkIlDzrTcIlbB5+5aaYEkl8vOPIOPLf8VT7Ere1wWTMdw==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "mdast-util-to-string": "^2.0.0", - "micromark": "~2.11.0", - "parse-entities": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" - }, - "dependencies": { - "mdast-util-to-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", - "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", + }, + "object-inspect": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", + "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==", "dev": true }, - "parse-entities": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", - "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", "dev": true, "requires": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "dependencies": { + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + } } }, - "unist-util-stringify-position": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", - "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", + "string.prototype.trimend": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz", + "integrity": "sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw==", "dev": true, "requires": { - "@types/unist": "^2.0.2" + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" } } } }, - "mdast-util-inject": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-inject/-/mdast-util-inject-1.1.0.tgz", - "integrity": "sha1-2wa4tYW+lZotzS+H9HK6m3VvNnU=", + "junk": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/junk/-/junk-3.1.0.tgz", + "integrity": "sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==", + "dev": true + }, + "keyv": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.0.tgz", + "integrity": "sha512-U7ioE8AimvRVLfw4LffyOIRhL2xVgmE8T22L6i0BucSnBUyv4w+I7VN/zVZwRKHOI6ZRUcdMdWHQ8KSUvGpEog==", "dev": true, "requires": { - "mdast-util-to-string": "^1.0.0" + "json-buffer": "3.0.1" } }, - "mdast-util-to-hast": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz", - "integrity": "sha512-BW3LM9SEMnjf4HXXVApZMt8gLQWVNXc3jryK0nJu/rOXPOnlkUjmdkDlmxMirpbU9ILncGFIwLH/ubnWBbcdgA==", - "dev": true, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" + }, + "klaw": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", "requires": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "mdast-util-definitions": "^4.0.0", - "mdurl": "^1.0.0", - "unist-builder": "^2.0.0", - "unist-util-generated": "^1.0.0", - "unist-util-position": "^3.0.0", - "unist-util-visit": "^2.0.0" - }, - "dependencies": { - "unist-util-is": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", - "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", - "dev": true - }, - "unist-util-visit": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", - "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - } - }, - "unist-util-visit-parents": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", - "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - } - } + "graceful-fs": "^4.1.9" } }, - "mdast-util-to-markdown": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.1.tgz", - "integrity": "sha512-4qJtZ0qdyYeexAXoOZiU0uHIFVncJAmCkHkSluAsvDaVWODtPyNEo9I1ns0T4ulxu2EHRH5u/bt1cV0pdHCX+A==", + "klaw-sync": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", + "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==", "dev": true, "requires": { - "@types/unist": "^2.0.0", - "longest-streak": "^2.0.0", - "mdast-util-to-string": "^2.0.0", - "parse-entities": "^2.0.0", - "repeat-string": "^1.0.0", - "zwitch": "^1.0.0" - }, - "dependencies": { - "mdast-util-to-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", - "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", - "dev": true - }, - "parse-entities": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", - "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", - "dev": true, - "requires": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" - } - } + "graceful-fs": "^4.1.11" } }, - "mdast-util-to-string": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-1.0.5.tgz", - "integrity": "sha512-2qLt/DEOo5F6nc2VFScQiHPzQ0XXcabquRJxKMhKte8nt42o08HUxNDPk7tt0YPxnWjAT11I1SYi0X0iPnfI5A==", + "kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==" + }, + "klona": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.4.tgz", + "integrity": "sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA==", "dev": true }, - "mdn-data": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-1.1.4.tgz", - "integrity": "sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA==", + "known-css-properties": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.24.0.tgz", + "integrity": "sha512-RTSoaUAfLvpR357vWzAz/50Q/BmHfmE6ETSWfutT0AJiw10e6CmcdYRQJlLRd95B53D0Y2aD1jSxD3V3ySF+PA==", "dev": true }, - "mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=", + "language-subtag-registry": { + "version": "0.3.21", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz", + "integrity": "sha512-L0IqwlIXjilBVVYKFT37X9Ih11Um5NEl9cbJIuU/SwP/zEEAbBPOnEeeuxVMf45ydWQRDQN3Nqc96OgbH1K+Pg==", "dev": true }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "language-tags": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", + "integrity": "sha1-0yHbxNowuovzAk4ED6XBRmH5GTo=", + "dev": true, + "requires": { + "language-subtag-registry": "~0.3.2" + } + }, + "lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", "dev": true }, - "memfs": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.2.2.tgz", - "integrity": "sha512-RE0CwmIM3CEvpcdK3rZ19BC4E6hv9kADkMN5rPduRak58cNArWLi/9jFLsa4rhsjfVxMP3v0jO7FHXq7SvFY5Q==", + "lazy-universal-dotenv": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lazy-universal-dotenv/-/lazy-universal-dotenv-3.0.1.tgz", + "integrity": "sha512-prXSYk799h3GY3iOWnC6ZigYzMPjxN2svgjJ9shk7oMadSNX3wXy0B6F32PMJv7qtMnrIbUxoEHzbutvxR2LBQ==", "dev": true, "requires": { - "fs-monkey": "1.0.3" + "@babel/runtime": "^7.5.0", + "app-root-dir": "^1.0.2", + "core-js": "^3.0.4", + "dotenv": "^8.0.0", + "dotenv-expand": "^5.1.0" } }, - "memize": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/memize/-/memize-1.1.0.tgz", - "integrity": "sha512-K4FcPETOMTwe7KL2LK0orMhpOmWD2wRGwWWpbZy0fyArwsyIKR8YJVz8+efBAh3BO4zPqlSICu4vsLTRRqtFAg==" + "lazystream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", + "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", + "dev": true, + "requires": { + "readable-stream": "^2.0.5" + } }, - "memoize-one": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", - "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==", - "dev": true + "lerna": { + "version": "3.22.1", + "resolved": "https://registry.npmjs.org/lerna/-/lerna-3.22.1.tgz", + "integrity": "sha512-vk1lfVRFm+UuEFA7wkLKeSF7Iz13W+N/vFd48aW2yuS7Kv0RbNm2/qcDPV863056LMfkRlsEe+QYOw3palj5Lg==", + "dev": true, + "requires": { + "@lerna/add": "3.21.0", + "@lerna/bootstrap": "3.21.0", + "@lerna/changed": "3.21.0", + "@lerna/clean": "3.21.0", + "@lerna/cli": "3.18.5", + "@lerna/create": "3.22.0", + "@lerna/diff": "3.21.0", + "@lerna/exec": "3.21.0", + "@lerna/import": "3.22.0", + "@lerna/info": "3.21.0", + "@lerna/init": "3.21.0", + "@lerna/link": "3.21.0", + "@lerna/list": "3.21.0", + "@lerna/publish": "3.22.1", + "@lerna/run": "3.21.0", + "@lerna/version": "3.22.1", + "import-local": "^2.0.0", + "npmlog": "^4.1.2" + } }, - "memoizerific": { - "version": "1.11.3", - "resolved": "https://registry.npmjs.org/memoizerific/-/memoizerific-1.11.3.tgz", - "integrity": "sha1-fIekZGREwy11Q4VwkF8tvRsagFo=", + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", "dev": true, "requires": { - "map-or-similar": "^1.5.0" + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" } }, - "memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "lilconfig": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.3.tgz", + "integrity": "sha512-EHKqr/+ZvdKCifpNrJCKxBTgk5XupZA3y/aCPY9mxfgBzmgh93Mt/WqjjQ38oMxXuvDokaKiM3lAgvSH2sjtHg==", + "dev": true + }, + "line-height": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/line-height/-/line-height-0.3.1.tgz", + "integrity": "sha1-SxIF7d4YKHKl76PI9iCzGHqcVMk=", + "requires": { + "computed-style": "~0.1.3" + } + }, + "lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=" + }, + "linkify-it": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", + "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", "dev": true, "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" + "uc.micro": "^1.0.1" } }, - "meow": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.0.tgz", - "integrity": "sha512-fNWkgM1UVMey2kf24yLiccxLihc5W+6zVus3/N0b+VfnJgxV99E9u04X6NAiKdg6ED7DAQBX5sy36NM0QJZkWA==", + "lint-staged": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-10.0.1.tgz", + "integrity": "sha512-Qk48GmcMX8zFzhuJsf0ZquILxnnDkY56Y+/y1TGxEe4S5P+RetnisiF0Z15t+Gwa5PMNAG4dPxqGHabW7L4zwg==", "dev": true, "requires": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" + "chalk": "^3.0.0", + "commander": "^4.0.1", + "cosmiconfig": "^6.0.0", + "debug": "^4.1.1", + "dedent": "^0.7.0", + "execa": "^3.4.0", + "listr": "^0.14.3", + "log-symbols": "^3.0.0", + "micromatch": "^4.0.2", + "normalize-path": "^3.0.0", + "please-upgrade-node": "^3.2.0", + "stringify-object": "^3.3.0" }, "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "camelcase-keys": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", - "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" + "color-convert": "^2.0.1" } }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "fill-range": "^7.0.1" } }, - "hosted-git-info": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.7.tgz", - "integrity": "sha512-fWqc0IcuXs+BmE9orLDyVykAG9GJtGLGuZAAqgcckPgv5xad4AcXGIv8galtQvlwutxSlaMcdw7BUtq2EIvqCQ==", + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", "dev": true, "requires": { - "lru-cache": "^6.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { - "p-locate": "^4.1.0" + "color-name": "~1.1.4" } }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, - "map-obj": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.1.0.tgz", - "integrity": "sha512-glc9y00wgtwcDmp7GaE/0b0OnxpNJsVf3ael/An6Fe2Q51LLwN1er6sdomLRzz5h0+yMpiYLhWYF5R7HeqVd4g==", + "commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", "dev": true }, - "minimist-options": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", - "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", + "cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", "dev": true, "requires": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0", - "kind-of": "^6.0.3" + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" } }, - "normalize-package-data": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.0.tgz", - "integrity": "sha512-6lUjEI0d3v6kFrtgA/lOx4zHCWULXsFNIjHolnZCKCTLA6m/G625cdn3O7eNmT0iD3jfo6HZ9cdImGZwf21prw==", + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, "requires": { - "hosted-git-info": "^3.0.6", - "resolve": "^1.17.0", - "semver": "^7.3.2", - "validate-npm-package-license": "^3.0.1" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" } }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "requires": { - "p-try": "^2.0.0" + "ms": "2.1.2" } }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "execa": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-3.4.0.tgz", + "integrity": "sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g==", "dev": true, "requires": { - "p-limit": "^2.2.0" + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "p-finally": "^2.0.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" } }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "parse-json": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz", - "integrity": "sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ==", + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" + "to-regex-range": "^5.0.1" } }, - "path-exists": { + "has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, - "quick-lru": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true }, - "read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "log-symbols": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", + "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", "dev": true, "requires": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" + "chalk": "^2.4.2" }, "dependencies": { - "hosted-git-info": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", - "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", - "dev": true + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" } }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } } } }, - "read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dev": true, "requires": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "dependencies": { - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - } + "braces": "^3.0.2", + "picomatch": "^2.3.1" } }, - "redent": { + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "normalize-path": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", - "dev": true, - "requires": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" - } + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true }, - "resolve": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", - "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, "requires": { - "is-core-module": "^2.1.0", - "path-parse": "^1.0.6" + "path-key": "^3.0.0" } }, - "strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, "requires": { - "min-indent": "^1.0.0" + "mimic-fn": "^2.1.0" } }, - "trim-newlines": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.0.tgz", - "integrity": "sha512-C4+gOpvmxaSMKuEf9Qc134F1ZuOHVXKRbtEflf4NTtuuJDEIJ9p5PXsalL8SkeRw+qit1Mo+yuvMPAKwWg/1hA==", + "p-finally": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-2.0.1.tgz", + "integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==", "dev": true }, - "type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true }, - "yallist": { + "path-type": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true }, - "yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true - } - } - }, - "merge-deep": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/merge-deep/-/merge-deep-3.0.3.tgz", - "integrity": "sha512-qtmzAS6t6grwEkNrunqTBdn0qKwFgNWvlxUbAV8es9M7Ot1EbyApytCnvE0jALPa46ZpKDUo527kKiaWplmlFA==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "clone-deep": "^0.2.4", - "kind-of": "^3.0.2" - }, - "dependencies": { - "clone-deep": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-0.2.4.tgz", - "integrity": "sha1-TnPdCen7lxzDhnDF3O2cGJZIHMY=", + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, "requires": { - "for-own": "^0.1.3", - "is-plain-object": "^2.0.1", - "kind-of": "^3.0.2", - "lazy-cache": "^1.0.3", - "shallow-clone": "^0.1.2" + "shebang-regex": "^3.0.0" } }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "has-flag": "^4.0.0" } }, - "shallow-clone": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-0.1.2.tgz", - "integrity": "sha1-WQnodLp3EG1zrEFM/sH/yofZcGA=", + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "requires": { - "is-extendable": "^0.1.1", - "kind-of": "^2.0.1", - "lazy-cache": "^0.2.3", - "mixin-object": "^2.0.1" - }, - "dependencies": { - "kind-of": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-2.0.1.tgz", - "integrity": "sha1-AY7HpM5+OobLkUG+UZ0kyPqpgbU=", - "dev": true, - "requires": { - "is-buffer": "^1.0.2" - } - }, - "lazy-cache": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz", - "integrity": "sha1-f+3fLctu23fRHvHRF6tf/fCrG2U=", - "dev": true - } + "is-number": "^7.0.0" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" } } } }, - "merge-descriptors": { + "listenercount": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", + "integrity": "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc=", "dev": true }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" - }, - "merge2": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.3.tgz", - "integrity": "sha512-gdUU1Fwj5ep4kplwcmftruWofEFt6lfpkkr3h860CXbAB9c3hGb55EOL2ali0Td5oebvW0E1+3Sr+Ur7XfKpRA==", - "dev": true + "listr": { + "version": "0.14.3", + "resolved": "https://registry.npmjs.org/listr/-/listr-0.14.3.tgz", + "integrity": "sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA==", + "dev": true, + "requires": { + "@samverschueren/stream-to-observable": "^0.3.0", + "is-observable": "^1.1.0", + "is-promise": "^2.1.0", + "is-stream": "^1.1.0", + "listr-silent-renderer": "^1.1.1", + "listr-update-renderer": "^0.5.0", + "listr-verbose-renderer": "^0.5.0", + "p-map": "^2.0.0", + "rxjs": "^6.3.3" + }, + "dependencies": { + "is-promise": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", + "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", + "dev": true + }, + "p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "dev": true + } + } }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "listr-silent-renderer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz", + "integrity": "sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4=", "dev": true }, - "metro": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/metro/-/metro-0.64.0.tgz", - "integrity": "sha512-G2OC08Rzfs0kqnSEuKo2yZxR+/eNUpA93Ru45c60uN0Dw3HPrDi+ZBipgFftC6iLE0l+6hu8roFFIofotWxybw==", + "listr-update-renderer": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz", + "integrity": "sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA==", + "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/core": "^7.0.0", - "@babel/generator": "^7.5.0", - "@babel/parser": "^7.0.0", - "@babel/template": "^7.0.0", - "@babel/traverse": "^7.0.0", - "@babel/types": "^7.0.0", - "absolute-path": "^0.0.0", - "accepts": "^1.3.7", - "async": "^2.4.0", - "chalk": "^4.0.0", - "ci-info": "^2.0.0", - "connect": "^3.6.5", - "debug": "^2.2.0", - "denodeify": "^1.2.1", - "error-stack-parser": "^2.0.6", - "fs-extra": "^1.0.0", - "graceful-fs": "^4.1.3", - "image-size": "^0.6.0", - "invariant": "^2.2.4", - "jest-haste-map": "^26.5.2", - "jest-worker": "^26.0.0", - "lodash.throttle": "^4.1.1", - "metro-babel-register": "0.64.0", - "metro-babel-transformer": "0.64.0", - "metro-cache": "0.64.0", - "metro-cache-key": "0.64.0", - "metro-config": "0.64.0", - "metro-core": "0.64.0", - "metro-hermes-compiler": "0.64.0", - "metro-inspector-proxy": "0.64.0", - "metro-minify-uglify": "0.64.0", - "metro-react-native-babel-preset": "0.64.0", - "metro-resolver": "0.64.0", - "metro-runtime": "0.64.0", - "metro-source-map": "0.64.0", - "metro-symbolicate": "0.64.0", - "metro-transform-plugins": "0.64.0", - "metro-transform-worker": "0.64.0", - "mime-types": "^2.1.27", - "mkdirp": "^0.5.1", - "node-fetch": "^2.2.0", - "nullthrows": "^1.1.1", - "rimraf": "^2.5.4", - "serialize-error": "^2.1.0", - "source-map": "^0.5.6", - "strip-ansi": "^6.0.0", - "temp": "0.8.3", - "throat": "^5.0.0", - "ws": "^1.1.5", - "yargs": "^15.3.1" + "chalk": "^1.1.3", + "cli-truncate": "^0.2.1", + "elegant-spinner": "^1.0.1", + "figures": "^1.7.0", + "indent-string": "^3.0.0", + "log-symbols": "^1.0.2", + "log-update": "^2.3.0", + "strip-ansi": "^3.0.1" }, "dependencies": { "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "fs-extra": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz", - "integrity": "sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA=", - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0" - } - }, - "glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - }, - "jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "requires": { - "p-locate": "^4.1.0" - } - }, - "mime-db": { - "version": "1.47.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz", - "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==" - }, - "mime-types": { - "version": "2.1.30", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz", - "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==", - "requires": { - "mime-db": "1.47.0" - } + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { - "p-try": "^2.0.0" - } + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, "requires": { - "p-limit": "^2.2.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "figures": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "dev": true, "requires": { - "glob": "^7.1.3" + "escape-string-regexp": "^1.0.5", + "object-assign": "^4.1.0" } }, - "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "log-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", + "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", + "dev": true, "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" + "chalk": "^1.0.0" } }, "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "ws": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz", - "integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, "requires": { - "options": ">=0.0.5", - "ultron": "1.0.x" + "ansi-regex": "^2.0.0" } }, - "yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "listr-verbose-renderer": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz", + "integrity": "sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "cli-cursor": "^2.1.0", + "date-fns": "^1.27.2", + "figures": "^2.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, "requires": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - } - }, - "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + } + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + }, + "dependencies": { + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" + "error-ex": "^1.2.0" } } } }, - "metro-babel-register": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/metro-babel-register/-/metro-babel-register-0.64.0.tgz", - "integrity": "sha512-Kf6YvE3kIRumGnjK0Q9LqGDIdnsX9eFGtNBmBuCVDuB9wGGA/5CgX8We8W7Y44dz1RGTcHJRhfw5iGg+pwC3aQ==", + "loader-runner": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", + "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", + "dev": true + }, + "loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "dev": true, "requires": { - "@babel/core": "^7.0.0", - "@babel/plugin-proposal-class-properties": "^7.0.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0", - "@babel/plugin-proposal-optional-chaining": "^7.0.0", - "@babel/plugin-transform-flow-strip-types": "^7.0.0", - "@babel/plugin-transform-modules-commonjs": "^7.0.0", - "@babel/register": "^7.0.0", - "escape-string-regexp": "^1.0.5" + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" } }, - "metro-babel-transformer": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.64.0.tgz", - "integrity": "sha512-itZaxKTgmKGEZWxNzbSZBc22NngrMZzoUNuU92aHSTGkYi2WH4XlvzEHsstmIKHMsRVKl75cA+mNmgk4gBFJKw==", + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, "requires": { - "@babel/core": "^7.0.0", - "metro-source-map": "0.64.0", - "nullthrows": "^1.1.1" + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" } }, - "metro-cache": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.64.0.tgz", - "integrity": "sha512-QvGfxe/1QQYM9XOlR8W1xqE9eHDw/AgJIgYGn/TxZxBu9Zga+Rgs1omeSZju45D8w5VWgMr83ma5kACgzvOecg==", + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "lodash._reinterpolate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", + "dev": true + }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true + }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" + }, + "lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=", + "dev": true + }, + "lodash.difference": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", + "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=", + "dev": true + }, + "lodash.escape": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-4.0.1.tgz", + "integrity": "sha1-yQRGkMIeBClL6qUXcS/e0fqI3pg=", + "dev": true + }, + "lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", + "dev": true + }, + "lodash.flattendeep": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", + "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", + "dev": true + }, + "lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", + "dev": true + }, + "lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" + }, + "lodash.ismatch": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", + "integrity": "sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc=", + "dev": true + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", + "dev": true + }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "lodash.set": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz", + "integrity": "sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM=", + "dev": true + }, + "lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", + "dev": true + }, + "lodash.template": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", + "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", + "dev": true, "requires": { - "metro-core": "0.64.0", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4" + "lodash._reinterpolate": "^3.0.0", + "lodash.templatesettings": "^4.0.0" + } + }, + "lodash.templatesettings": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", + "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", + "dev": true, + "requires": { + "lodash._reinterpolate": "^3.0.0" + } + }, + "lodash.throttle": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", + "integrity": "sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ=" + }, + "lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "dev": true + }, + "lodash.union": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", + "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=", + "dev": true + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", + "dev": true + }, + "log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "requires": { + "chalk": "^2.0.1" }, "dependencies": { - "glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "requires": { - "glob": "^7.1.3" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } } } }, - "metro-cache-key": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.64.0.tgz", - "integrity": "sha512-O9B65G8L/fopck45ZhdRosyVZdMtUQuX5mBWEC1NRj02iWBIUPLmYMjrunqIe8vHipCMp3DtTCm/65IlBmO8jg==" - }, - "metro-config": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.64.0.tgz", - "integrity": "sha512-QhM4asnX5KhlRWaugwVGNNXhX0Z85u5nK0UQ/A90bBb4xWyXqUe20e788VtdA75rkQiiI6wXTCIHWT0afbnjwQ==", + "log-update": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-2.3.0.tgz", + "integrity": "sha1-iDKP19HOeTiykoN0bwsbwSayRwg=", + "dev": true, "requires": { - "cosmiconfig": "^5.0.5", - "jest-validate": "^26.5.2", - "metro": "0.64.0", - "metro-cache": "0.64.0", - "metro-core": "0.64.0", - "metro-runtime": "0.64.0" + "ansi-escapes": "^3.0.0", + "cli-cursor": "^2.0.0", + "wrap-ansi": "^3.0.1" }, "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "@types/istanbul-reports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", - "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==" - }, - "cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", - "requires": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" - } - }, - "import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", - "requires": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" - } - }, - "jest-get-type": { - "version": "26.3.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", - "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==" - }, - "jest-validate": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.2.tgz", - "integrity": "sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==", - "requires": { - "@jest/types": "^26.6.2", - "camelcase": "^6.0.0", - "chalk": "^4.0.0", - "jest-get-type": "^26.3.0", - "leven": "^3.1.0", - "pretty-format": "^26.6.2" - } - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "wrap-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-3.0.1.tgz", + "integrity": "sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo=", + "dev": true, "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0" } } } }, - "metro-core": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.64.0.tgz", - "integrity": "sha512-v8ZQ5j72EaUwamQ8pLfHlOHTyp7SbdazvHPzFGDpHnwIQqIT0Bw3Syg8R4regTlVG3ngpeSEAi005UITljmMcQ==", - "requires": { - "jest-haste-map": "^26.5.2", - "lodash.throttle": "^4.1.1", - "metro-resolver": "0.64.0" - } - }, - "metro-hermes-compiler": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/metro-hermes-compiler/-/metro-hermes-compiler-0.64.0.tgz", - "integrity": "sha512-CLAjVDWGAoGhbi2ZyPHnH5YDdfrDIx6+tzFWfHGIMTZkYBXsYta9IfYXBV8lFb6BIbrXLjlXZAOoosknetMPOA==" - }, - "metro-inspector-proxy": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/metro-inspector-proxy/-/metro-inspector-proxy-0.64.0.tgz", - "integrity": "sha512-KywbH3GNSz9Iqw4UH3smgaV2dBHHYMISeN7ORntDL/G+xfgPc6vt13d+zFb907YpUcXj5N0vdoiAHI5V/0y8IA==", + "logkitty": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/logkitty/-/logkitty-0.7.1.tgz", + "integrity": "sha512-/3ER20CTTbahrCrpYfPn7Xavv9diBROZpoXGVZDWMw4b/X4uuUwAC0ki85tgsdMRONURyIJbcOvS94QsUBYPbQ==", "requires": { - "connect": "^3.6.5", - "debug": "^2.2.0", - "ws": "^1.1.5", - "yargs": "^15.3.1" + "ansi-fragments": "^0.2.1", + "dayjs": "^1.8.15", + "yargs": "^15.1.0" }, "dependencies": { "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, "camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -44005,30 +43539,21 @@ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" }, "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" + "strip-ansi": "^6.0.1" } }, "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "ws": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz", - "integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "requires": { - "options": ">=0.0.5", - "ultron": "1.0.x" + "ansi-regex": "^5.0.1" } }, "yargs": { @@ -44060,625 +43585,373 @@ } } }, - "metro-minify-uglify": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/metro-minify-uglify/-/metro-minify-uglify-0.64.0.tgz", - "integrity": "sha512-DRwRstqXR5qfte9Nuwoov5dRXxL7fJeVlO5fGyOajWeO3+AgPjvjXh/UcLJqftkMWTPGUFuzAD5/7JC5v5FLWw==", - "requires": { - "uglify-es": "^3.1.9" - } - }, - "metro-react-native-babel-preset": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.64.0.tgz", - "integrity": "sha512-HcZ0RWQRuJfpPiaHyFQJzcym+/dDIVUPwUAXWoub/C4GkGu+mPjp8vqK6g0FxokCnnI2TK0gZTza2IDfiNNscQ==", - "requires": { - "@babel/core": "^7.0.0", - "@babel/plugin-proposal-class-properties": "^7.0.0", - "@babel/plugin-proposal-export-default-from": "^7.0.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0", - "@babel/plugin-proposal-object-rest-spread": "^7.0.0", - "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", - "@babel/plugin-proposal-optional-chaining": "^7.0.0", - "@babel/plugin-syntax-dynamic-import": "^7.0.0", - "@babel/plugin-syntax-export-default-from": "^7.0.0", - "@babel/plugin-syntax-flow": "^7.2.0", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.0.0", - "@babel/plugin-syntax-optional-chaining": "^7.0.0", - "@babel/plugin-transform-arrow-functions": "^7.0.0", - "@babel/plugin-transform-block-scoping": "^7.0.0", - "@babel/plugin-transform-classes": "^7.0.0", - "@babel/plugin-transform-computed-properties": "^7.0.0", - "@babel/plugin-transform-destructuring": "^7.0.0", - "@babel/plugin-transform-exponentiation-operator": "^7.0.0", - "@babel/plugin-transform-flow-strip-types": "^7.0.0", - "@babel/plugin-transform-for-of": "^7.0.0", - "@babel/plugin-transform-function-name": "^7.0.0", - "@babel/plugin-transform-literals": "^7.0.0", - "@babel/plugin-transform-modules-commonjs": "^7.0.0", - "@babel/plugin-transform-object-assign": "^7.0.0", - "@babel/plugin-transform-parameters": "^7.0.0", - "@babel/plugin-transform-react-display-name": "^7.0.0", - "@babel/plugin-transform-react-jsx": "^7.0.0", - "@babel/plugin-transform-react-jsx-self": "^7.0.0", - "@babel/plugin-transform-react-jsx-source": "^7.0.0", - "@babel/plugin-transform-regenerator": "^7.0.0", - "@babel/plugin-transform-runtime": "^7.0.0", - "@babel/plugin-transform-shorthand-properties": "^7.0.0", - "@babel/plugin-transform-spread": "^7.0.0", - "@babel/plugin-transform-sticky-regex": "^7.0.0", - "@babel/plugin-transform-template-literals": "^7.0.0", - "@babel/plugin-transform-typescript": "^7.5.0", - "@babel/plugin-transform-unicode-regex": "^7.0.0", - "@babel/template": "^7.0.0", - "react-refresh": "^0.4.0" - } - }, - "metro-react-native-babel-transformer": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.64.0.tgz", - "integrity": "sha512-K1sHO3ODBFCr7uEiCQ4RvVr+cQg0EHQF8ChVPnecGh/WDD8udrTq9ECwB0dRfMjAvlsHtRUlJm6ZSI8UPgum2w==", - "requires": { - "@babel/core": "^7.0.0", - "babel-preset-fbjs": "^3.3.0", - "metro-babel-transformer": "0.64.0", - "metro-react-native-babel-preset": "0.64.0", - "metro-source-map": "0.64.0", - "nullthrows": "^1.1.1" - } - }, - "metro-resolver": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.64.0.tgz", - "integrity": "sha512-cJ26Id8Zf+HmS/1vFwu71K3u7ep/+HeXXAJIeVDYf+niE7AWB9FijyMtAlQgbD8elWqv1leJCnQ/xHRFBfGKYA==", - "requires": { - "absolute-path": "^0.0.0" - } - }, - "metro-runtime": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.64.0.tgz", - "integrity": "sha512-m7XbWOaIOeFX7YcxUhmnOi6Pg8EaeL89xyZ+quZyZVF1aNoTr4w8FfbKxvijpjsytKHIZtd+43m2Wt5JrqyQmQ==" - }, - "metro-source-map": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.64.0.tgz", - "integrity": "sha512-OCG2rtcp5cLEGYvAbfkl6mEc0J2FPRP4/UCEly+juBk7hawS9bCBMBfhJm/HIsvY1frk6nT2Vsl1O8YBbwyx2g==", - "requires": { - "@babel/traverse": "^7.0.0", - "@babel/types": "^7.0.0", - "invariant": "^2.2.4", - "metro-symbolicate": "0.64.0", - "nullthrows": "^1.1.1", - "ob1": "0.64.0", - "source-map": "^0.5.6", - "vlq": "^1.0.0" - } - }, - "metro-symbolicate": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.64.0.tgz", - "integrity": "sha512-qIi+YRrDWnLVmydj6gwidYLPaBsakZRibGWSspuXgHAxOI3UuLwlo4dpQ73Et0gyHjI7ZvRMRY8JPiOntf9AQQ==", - "requires": { - "invariant": "^2.2.4", - "metro-source-map": "0.64.0", - "nullthrows": "^1.1.1", - "source-map": "^0.5.6", - "through2": "^2.0.1", - "vlq": "^1.0.0" - } - }, - "metro-transform-plugins": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.64.0.tgz", - "integrity": "sha512-iTIRBD/wBI98plfxj8jAoNUUXfXLNlyvcjPtshhpGvdwu9pzQilGfnDnOaaK+vbITcOk9w5oQectXyJwAqTr1A==", - "requires": { - "@babel/core": "^7.0.0", - "@babel/generator": "^7.5.0", - "@babel/template": "^7.0.0", - "@babel/traverse": "^7.0.0", - "nullthrows": "^1.1.1" - } + "longest-streak": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.2.tgz", + "integrity": "sha512-TmYTeEYxiAmSVdpbnQDXGtvYOIRsCMg89CVZzwzc2o7GFL1CjoiRPjH5ec0NFAVlAx3fVof9dX/t6KKRAo2OWA==", + "dev": true }, - "metro-transform-worker": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.64.0.tgz", - "integrity": "sha512-wegRtK8GyLF6IPZRBJp+zsORgA4iX0h1DRpknyAMDCtSbJ4VU2xV/AojteOgAsDvY3ucAGsvfuZLNDJHUdUNHQ==", + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "requires": { - "@babel/core": "^7.0.0", - "@babel/generator": "^7.5.0", - "@babel/parser": "^7.0.0", - "@babel/types": "^7.0.0", - "babel-preset-fbjs": "^3.3.0", - "metro": "0.64.0", - "metro-babel-transformer": "0.64.0", - "metro-cache": "0.64.0", - "metro-cache-key": "0.64.0", - "metro-hermes-compiler": "0.64.0", - "metro-source-map": "0.64.0", - "metro-transform-plugins": "0.64.0", - "nullthrows": "^1.1.1" + "js-tokens": "^3.0.0 || ^4.0.0" } }, - "microevent.ts": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/microevent.ts/-/microevent.ts-0.1.1.tgz", - "integrity": "sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g==", - "dev": true - }, - "micromark": { - "version": "2.11.2", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.2.tgz", - "integrity": "sha512-IXuP76p2uj8uMg4FQc1cRE7lPCLsfAXuEfdjtdO55VRiFO1asrCSQ5g43NmPqFtRwzEnEhafRVzn2jg0UiKArQ==", + "loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", "dev": true, "requires": { - "debug": "^4.0.0", - "parse-entities": "^2.0.0" - }, - "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "parse-entities": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", - "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", - "dev": true, - "requires": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" - } - } + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" } }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" + "tslib": "^2.0.3" } }, - "micromodal": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/micromodal/-/micromodal-0.4.6.tgz", - "integrity": "sha512-2VDso2a22jWPpqwuWT/4RomVpoU3Bl9qF9D01xzwlNp5UVsImeA0gY4nSpF44vqcQtQOtkiMUV9EZkAJSRxBsg==" + "lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "lowlight": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/lowlight/-/lowlight-1.20.0.tgz", + "integrity": "sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==", "dev": true, "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" + "fault": "^1.0.0", + "highlight.js": "~10.7.0" } }, - "mime": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", - "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==" - }, - "mime-db": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", - "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", - "dev": true - }, - "mime-types": { - "version": "2.1.18", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", - "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "lru-cache": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", + "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", "dev": true, "requires": { - "mime-db": "~1.33.0" + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" } }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" + "lz-string": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.4.4.tgz", + "integrity": "sha1-wNjq82BZ9wV5bh40SBHPTEmNOiY=", + "dev": true }, - "mimic-response": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", - "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", + "macos-release": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.2.0.tgz", + "integrity": "sha512-iV2IDxZaX8dIcM7fG6cI46uNmHUxHE4yN+Z8tKHAW1TBPMZDIKHf/3L+YnOuj/FK9il14UaVdHmiQ1tsi90ltA==", "dev": true }, - "min-document": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", + "make-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.0.0.tgz", + "integrity": "sha512-grNJDhb8b1Jm1qeqW5R/O63wUo4UXo2v2HMic6YT9i/HBlF93S8jkMgH7yugvY9ABDShH4VZMn8I+U8+fCNegw==", "dev": true, "requires": { - "dom-walk": "^0.1.0" + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, - "min-indent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.0.tgz", - "integrity": "sha1-z8RcN+nsDY8KDsPdTvf3w6vjklY=", - "dev": true - }, - "mini-css-extract-plugin": { - "version": "1.3.9", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-1.3.9.tgz", - "integrity": "sha512-Ac4s+xhVbqlyhXS5J/Vh/QXUz3ycXlCqoCPpg0vdfhsIBH9eg/It/9L1r1XhSCH737M1lqcWnMuWL13zcygn5A==", + "make-fetch-happen": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-5.0.2.tgz", + "integrity": "sha512-07JHC0r1ykIoruKO8ifMXu+xEU8qOXDFETylktdug6vJDACnP+HKevOu3PXyNPzFyTSlz8vrBYlBO1JZRe8Cag==", "dev": true, "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0", - "webpack-sources": "^1.1.0" + "agentkeepalive": "^3.4.1", + "cacache": "^12.0.0", + "http-cache-semantics": "^3.8.1", + "http-proxy-agent": "^2.1.0", + "https-proxy-agent": "^2.2.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "node-fetch-npm": "^2.0.2", + "promise-retry": "^1.1.1", + "socks-proxy-agent": "^4.0.0", + "ssri": "^6.0.0" }, "dependencies": { - "@types/json-schema": { - "version": "7.0.7", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", - "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==", + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", "dev": true }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "cacache": { + "version": "12.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", + "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", "dev": true, "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" } }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true - }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", "dev": true }, - "json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "dev": true, "requires": { - "minimist": "^1.2.5" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, - "loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "dev": true + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" + "yallist": "^3.0.2" } }, - "schema-utils": { + "mississippi": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", "dev": true, "requires": { - "@types/json-schema": "^7.0.6", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" } }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dev": true, "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } - } - } - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, - "minimist-options": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-3.0.2.tgz", - "integrity": "sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==", - "dev": true, - "requires": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0" - } - }, - "minipass": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz", - "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - }, - "dependencies": { - "yallist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", - "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", - "dev": true - } - } - }, - "minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.1.tgz", - "integrity": "sha512-UFqVihv6PQgwj8/yTGvl9kPz7xIAY+R5z6XYjRInD3Gk3qx6QGSD6zEcpeG4Dy/lQnv1J6zv8ejV90hyYIKf3w==", + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dev": true, "requires": { - "yallist": "^4.0.0" + "glob": "^7.1.3" } }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.1.tgz", - "integrity": "sha512-UFqVihv6PQgwj8/yTGvl9kPz7xIAY+R5z6XYjRInD3Gk3qx6QGSD6zEcpeG4Dy/lQnv1J6zv8ejV90hyYIKf3w==", + "unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", "dev": true, "requires": { - "yallist": "^4.0.0" + "unique-slug": "^2.0.0" } }, "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true } } }, - "minipass-pipeline": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.2.tgz", - "integrity": "sha512-3JS5A2DKhD2g0Gg8x3yamO0pj7YeKGwVlDS90pF++kxptwx/F+B//roxf9SqYil5tQo65bijy+dAuAFZmYOouA==", - "dev": true, + "makeerror": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", + "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", "requires": { - "minipass": "^3.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.1.tgz", - "integrity": "sha512-UFqVihv6PQgwj8/yTGvl9kPz7xIAY+R5z6XYjRInD3Gk3qx6QGSD6zEcpeG4Dy/lQnv1J6zv8ejV90hyYIKf3w==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } + "tmpl": "1.0.x" } }, - "minizlib": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.1.tgz", - "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==", + "map-age-cleaner": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", + "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", "dev": true, "requires": { - "minipass": "^2.2.1" + "p-defer": "^1.0.0" } }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" + }, + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + }, + "map-or-similar": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/map-or-similar/-/map-or-similar-1.5.0.tgz", + "integrity": "sha1-beJlMXSt+12e3DPGnT6Sobdvrwg=", + "dev": true + }, + "map-values": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-values/-/map-values-1.0.1.tgz", + "integrity": "sha1-douOecAJvytk/ugG4ip7HEGQyZA=", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "requires": { - "is-plain-object": "^2.0.4" - } - } + "object-visit": "^1.0.0" } }, - "mixin-object": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", - "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=", + "markdown-escapes": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.2.tgz", + "integrity": "sha512-lbRZ2mE3Q9RtLjxZBZ9+IMl68DKIXaVAhwvwn9pmjnPLS0h/6kyBMgNhqi1xFJ/2yv6cSyv0jbiZavZv93JkkA==", + "dev": true + }, + "markdown-it": { + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", + "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", "dev": true, "requires": { - "for-in": "^0.1.3", - "is-extendable": "^0.1.1" + "argparse": "^2.0.1", + "entities": "~2.1.0", + "linkify-it": "^3.0.1", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" }, "dependencies": { - "for-in": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz", - "integrity": "sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE=", + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "entities": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", + "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", "dev": true } } }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "requires": { - "minimist": "0.0.8" - }, - "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" - } - } - }, - "mkdirp-promise": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz", - "integrity": "sha1-6bj2jlUsaKnBcTuEiD96HdA5uKE=", - "dev": true, - "requires": { - "mkdirp": "*" - } - }, - "modify-values": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", - "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", + "markdown-table": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.2.tgz", + "integrity": "sha512-NcWuJFHDA8V3wkDgR/j4+gZx+YQwstPgfQDV8ndUeWWzta3dnDTBxpVzqS9lkmJAuV5YX35lmyojl6HO5JXAgw==", "dev": true }, - "moment": { - "version": "2.22.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.22.1.tgz", - "integrity": "sha512-shJkRTSebXvsVqk56I+lkb2latjBs8I+pc2TzWc545y2iFnSjm7Wg0QMh+ZWcdSLQyGEau5jI8ocnmkyTgr9YQ==" + "markdown-to-jsx": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-7.1.3.tgz", + "integrity": "sha512-jtQ6VyT7rMT5tPV0g2EJakEnXLiPksnvlYtwQsVVZ611JsWGN8bQ1tVSDX4s6JllfEH6wmsYxNjTUAMrPmNA8w==", + "dev": true }, - "moment-timezone": { - "version": "0.5.31", - "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.31.tgz", - "integrity": "sha512-+GgHNg8xRhMXfEbv81iDtrVeTcWt0kWmTEY1XQK14dICTXnWJnT0dxdlPspwqF3keKMVPXwayEsk1DI0AA/jdA==", + "markdownlint": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.25.1.tgz", + "integrity": "sha512-AG7UkLzNa1fxiOv5B+owPsPhtM4D6DoODhsJgiaNg1xowXovrYgOnLqAgOOFQpWOlHFVQUzjMY5ypNNTeov92g==", + "dev": true, "requires": { - "moment": ">= 2.9.0" + "markdown-it": "12.3.2" } }, - "moo": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/moo/-/moo-0.4.3.tgz", - "integrity": "sha512-gFD2xGCl8YFgGHsqJ9NKRVdwlioeW3mI1iqfLNYQOv0+6JRwG58Zk9DIGQgyIaffSYaO1xsKnMaYzzNr1KyIAw==", - "dev": true - }, - "mousetrap": { - "version": "1.6.5", - "resolved": "https://registry.npmjs.org/mousetrap/-/mousetrap-1.6.5.tgz", - "integrity": "sha512-QNo4kEepaIBwiT8CDhP98umTetp+JNfQYBWvC1pc6/OAibuXtRcxZ58Qz8skvEHYvURne/7R8T5VoOI7rDsEUA==" - }, - "move-concurrently": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", - "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "markdownlint-cli": { + "version": "0.31.1", + "resolved": "https://registry.npmjs.org/markdownlint-cli/-/markdownlint-cli-0.31.1.tgz", + "integrity": "sha512-keIOMwQn+Ch7MoBwA+TdkyVMuxAeZFEGmIIlvwgV0Z1TGS5MxPnRr29XCLhkNzCHU+uNKGjU+VEjLX+Z9kli6g==", "dev": true, "requires": { - "aproba": "^1.1.1", - "copy-concurrently": "^1.0.0", - "fs-write-stream-atomic": "^1.0.8", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.3" + "commander": "~9.0.0", + "get-stdin": "~9.0.0", + "glob": "~7.2.0", + "ignore": "~5.2.0", + "js-yaml": "^4.1.0", + "jsonc-parser": "~3.0.0", + "markdownlint": "~0.25.1", + "markdownlint-rule-helpers": "~0.16.0", + "minimatch": "~3.0.5", + "run-con": "~1.2.10" }, "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "commander": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.0.0.tgz", + "integrity": "sha512-JJfP2saEKbQqvW+FI93OYUB4ByV5cizMpFMiiJI8xDbBvQvSkIk0VvQdn1CZ8mqAO8Loq2h0gYTYtDFUZUeERw==", + "dev": true + }, + "get-stdin": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-9.0.0.tgz", + "integrity": "sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==", + "dev": true + }, "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -44689,360 +43962,726 @@ "path-is-absolute": "^1.0.0" } }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "requires": { - "glob": "^7.1.3" + "argparse": "^2.0.1" + } + }, + "minimatch": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", + "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" } } } }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "markdownlint-rule-helpers": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/markdownlint-rule-helpers/-/markdownlint-rule-helpers-0.16.0.tgz", + "integrity": "sha512-oEacRUVeTJ5D5hW1UYd2qExYI0oELdYK72k1TKGvIeYJIbqQWAz476NAc7LNixSySUhcNl++d02DvX0ccDk9/w==", + "dev": true }, - "multimatch": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-3.0.0.tgz", - "integrity": "sha512-22foS/gqQfANZ3o+W7ST2x25ueHDVNWl/b9OlGcLpy/iKxjCpvcNCM51YCenUi7Mt/jAjjqv8JwZRs8YP5sRjA==", + "mathml-tag-names": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", + "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", + "dev": true + }, + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "dev": true, "requires": { - "array-differ": "^2.0.3", - "array-union": "^1.0.2", - "arrify": "^1.0.1", - "minimatch": "^3.0.4" + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, - "mustache": { + "mdast-squeeze-paragraphs": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.0.0.tgz", - "integrity": "sha512-FJgjyX/IVkbXBXYUwH+OYwQKqWpFPLaLVESd70yHjSDunwzV2hZOoTBvPf4KLoxesUzzyfTH6F784Uqd7Wm5yA==", - "dev": true - }, - "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", - "dev": true - }, - "mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "resolved": "https://registry.npmjs.org/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz", + "integrity": "sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ==", "dev": true, "requires": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" + "unist-util-remove": "^2.0.0" } }, - "nan": { - "version": "2.14.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", - "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", + "mdast-util-compact": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-compact/-/mdast-util-compact-1.0.1.tgz", + "integrity": "sha1-zbX4TitqLTEU3zO9BdnLMuPECDo=", "dev": true, - "optional": true + "requires": { + "unist-util-modify-children": "^1.0.0", + "unist-util-visit": "^1.1.0" + } }, - "nanoid": { - "version": "3.1.23", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", - "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==" + "mdast-util-definitions": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz", + "integrity": "sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==", + "dev": true, + "requires": { + "unist-util-visit": "^2.0.0" + }, + "dependencies": { + "unist-util-is": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", + "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", + "dev": true + }, + "unist-util-visit": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", + "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" + } + }, + "unist-util-visit-parents": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", + "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0" + } + } + } }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "mdast-util-inject": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-inject/-/mdast-util-inject-1.1.0.tgz", + "integrity": "sha1-2wa4tYW+lZotzS+H9HK6m3VvNnU=", + "dev": true, "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "mdast-util-to-string": "^1.0.0" } }, - "native-url": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/native-url/-/native-url-0.2.6.tgz", - "integrity": "sha512-k4bDC87WtgrdD362gZz6zoiXQrl40kYlBmpfmSjwRO1VU0V5ccwJTlxuE72F6m3V0vc1xOf6n3UCP9QyerRqmA==", + "mdast-util-to-hast": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz", + "integrity": "sha512-BW3LM9SEMnjf4HXXVApZMt8gLQWVNXc3jryK0nJu/rOXPOnlkUjmdkDlmxMirpbU9ILncGFIwLH/ubnWBbcdgA==", "dev": true, "requires": { - "querystring": "^0.2.0" + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "mdast-util-definitions": "^4.0.0", + "mdurl": "^1.0.0", + "unist-builder": "^2.0.0", + "unist-util-generated": "^1.0.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^2.0.0" + }, + "dependencies": { + "unist-util-is": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", + "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", + "dev": true + }, + "unist-util-visit": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", + "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" + } + }, + "unist-util-visit-parents": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", + "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0" + } + } } }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "mdast-util-to-string": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-1.0.5.tgz", + "integrity": "sha512-2qLt/DEOo5F6nc2VFScQiHPzQ0XXcabquRJxKMhKte8nt42o08HUxNDPk7tt0YPxnWjAT11I1SYi0X0iPnfI5A==", "dev": true }, - "nearley": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/nearley/-/nearley-2.15.1.tgz", - "integrity": "sha512-8IUY/rUrKz2mIynUGh8k+tul1awMKEjeHHC5G3FHvvyAW6oq4mQfNp2c0BMea+sYZJvYcrrM6GmZVIle/GRXGw==", + "mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" + }, + "mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=", + "dev": true + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true + }, + "mem": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/mem/-/mem-8.1.1.tgz", + "integrity": "sha512-qFCFUDs7U3b8mBDPyz5EToEKoAkgCzqquIgi9nkkR9bixxOVOre+09lbuH7+9Kn2NFpm56M3GUWVbU2hQgdACA==", "dev": true, "requires": { - "moo": "^0.4.3", - "nomnom": "~1.6.2", - "railroad-diagrams": "^1.0.0", - "randexp": "0.4.6", - "semver": "^5.4.1" + "map-age-cleaner": "^0.1.3", + "mimic-fn": "^3.1.0" }, "dependencies": { - "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "mimic-fn": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz", + "integrity": "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==", "dev": true } } }, - "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" + "memfs": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.2.2.tgz", + "integrity": "sha512-RE0CwmIM3CEvpcdK3rZ19BC4E6hv9kADkMN5rPduRak58cNArWLi/9jFLsa4rhsjfVxMP3v0jO7FHXq7SvFY5Q==", + "dev": true, + "requires": { + "fs-monkey": "1.0.3" + } }, - "neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + "memize": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/memize/-/memize-1.1.0.tgz", + "integrity": "sha512-K4FcPETOMTwe7KL2LK0orMhpOmWD2wRGwWWpbZy0fyArwsyIKR8YJVz8+efBAh3BO4zPqlSICu4vsLTRRqtFAg==" }, - "nested-error-stacks": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.1.0.tgz", - "integrity": "sha512-AO81vsIO1k1sM4Zrd6Hu7regmJN1NSiAja10gc4bX3F0wd+9rQmcuHQaHVQCYIEC8iFXnE+mavh23GOt7wBgug==", + "memoize-one": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", + "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==", "dev": true }, - "nice-try": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.4.tgz", - "integrity": "sha512-2NpiFHqC87y/zFke0fC0spBXL3bBsoh/p5H1EFhshxjCR5+0g2d6BiXbUFz9v1sAcxsk2htp2eQnNIci2dIYcA==" + "memoizerific": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/memoizerific/-/memoizerific-1.11.3.tgz", + "integrity": "sha1-fIekZGREwy11Q4VwkF8tvRsagFo=", + "dev": true, + "requires": { + "map-or-similar": "^1.5.0" + } }, - "no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", "dev": true, "requires": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" + "errno": "^0.1.3", + "readable-stream": "^2.0.1" } }, - "nocache": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/nocache/-/nocache-2.1.0.tgz", - "integrity": "sha512-0L9FvHG3nfnnmaEQPjT9xhfN4ISk0A8/2j4M37Np4mcDesJjHgEUfgPhdCyZuFI954tjokaIj/A3NdpFNdEh4Q==" + "memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=", + "dev": true }, - "nock": { - "version": "12.0.3", - "resolved": "https://registry.npmjs.org/nock/-/nock-12.0.3.tgz", - "integrity": "sha512-QNb/j8kbFnKCiyqi9C5DD0jH/FubFGj5rt9NQFONXwQm3IPB0CULECg/eS3AU1KgZb/6SwUa4/DTRKhVxkGABw==", + "meow": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.0.tgz", + "integrity": "sha512-fNWkgM1UVMey2kf24yLiccxLihc5W+6zVus3/N0b+VfnJgxV99E9u04X6NAiKdg6ED7DAQBX5sy36NM0QJZkWA==", "dev": true, "requires": { - "debug": "^4.1.0", - "json-stringify-safe": "^5.0.1", - "lodash": "^4.17.13", - "propagate": "^2.0.0" + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" }, "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "hosted-git-info": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", + "integrity": "sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "map-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.1.0.tgz", + "integrity": "sha512-glc9y00wgtwcDmp7GaE/0b0OnxpNJsVf3ael/An6Fe2Q51LLwN1er6sdomLRzz5h0+yMpiYLhWYF5R7HeqVd4g==", + "dev": true + }, + "minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", + "dev": true, + "requires": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + } + }, + "normalize-package-data": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.0.tgz", + "integrity": "sha512-6lUjEI0d3v6kFrtgA/lOx4zHCWULXsFNIjHolnZCKCTLA6m/G625cdn3O7eNmT0iD3jfo6HZ9cdImGZwf21prw==", + "dev": true, + "requires": { + "hosted-git-info": "^3.0.6", + "resolve": "^1.17.0", + "semver": "^7.3.2", + "validate-npm-package-license": "^3.0.1" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "parse-json": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz", + "integrity": "sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "dev": true + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "dependencies": { + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + } + } + }, + "redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", "dev": true, "requires": { - "ms": "^2.1.1" + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" } }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "resolve": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", + "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", + "dev": true, + "requires": { + "is-core-module": "^2.1.0", + "path-parse": "^1.0.6" + } + }, + "strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "requires": { + "min-indent": "^1.0.0" + } + }, + "trim-newlines": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.0.tgz", + "integrity": "sha512-C4+gOpvmxaSMKuEf9Qc134F1ZuOHVXKRbtEflf4NTtuuJDEIJ9p5PXsalL8SkeRw+qit1Mo+yuvMPAKwWg/1hA==", "dev": true - } - } - }, - "node-dir": { - "version": "0.1.17", - "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz", - "integrity": "sha1-X1Zl2TNRM1yqvvjxxVRRbPXx5OU=", - "requires": { - "minimatch": "^3.0.2" - } - }, - "node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" - }, - "node-fetch-npm": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/node-fetch-npm/-/node-fetch-npm-2.0.4.tgz", - "integrity": "sha512-iOuIQDWDyjhv9qSDrj9aq/klt6F9z1p2otB3AV7v3zBDcL/x+OfGsvGQZZCcMZbUf4Ujw1xGNQkjvGnVT22cKg==", - "dev": true, - "requires": { - "encoding": "^0.1.11", - "json-parse-better-errors": "^1.0.0", - "safe-buffer": "^5.1.1" - } - }, - "node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=" - }, - "node-libs-browser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", - "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", - "dev": true, - "requires": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^3.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", - "path-browserify": "0.0.1", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "stream-http": "^2.7.2", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", - "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.11.0", - "vm-browserify": "^1.0.1" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + }, + "type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", "dev": true } } }, - "node-modules-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", - "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=" - }, - "node-releases": { - "version": "1.1.71", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.71.tgz", - "integrity": "sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==" - }, - "node-stream-zip": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/node-stream-zip/-/node-stream-zip-1.13.4.tgz", - "integrity": "sha512-M2nPvnSWFFH+fgLIRZDqmhshmuzXcr+ce9BsHQX/30pXR+cEz/USMYmx9ZAFYy837W2QoDoNzhFtbZhfzaMk9A==" - }, - "node-watch": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/node-watch/-/node-watch-0.7.0.tgz", - "integrity": "sha512-OOBiglke5SlRQT5WYfwXTmYqTfXjcTNBHpalyHLtLxDpQYVpVRkJqabcch1kmwJsjV/J4OZuzEafeb4soqtFZA==", - "dev": true - }, - "nomnom": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/nomnom/-/nomnom-1.6.2.tgz", - "integrity": "sha1-hKZqJgF0QI/Ft3oY+IjszET7aXE=", - "dev": true, - "requires": { - "colors": "0.5.x", - "underscore": "~1.4.4" - } - }, - "normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "merge-deep": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/merge-deep/-/merge-deep-3.0.3.tgz", + "integrity": "sha512-qtmzAS6t6grwEkNrunqTBdn0qKwFgNWvlxUbAV8es9M7Ot1EbyApytCnvE0jALPa46ZpKDUo527kKiaWplmlFA==", "dev": true, "requires": { - "hosted-git-info": "^2.1.4", - "is-builtin-module": "^1.0.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" + "arr-union": "^3.1.0", + "clone-deep": "^0.2.4", + "kind-of": "^3.0.2" }, "dependencies": { - "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", - "dev": true + "clone-deep": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-0.2.4.tgz", + "integrity": "sha1-TnPdCen7lxzDhnDF3O2cGJZIHMY=", + "dev": true, + "requires": { + "for-own": "^0.1.3", + "is-plain-object": "^2.0.1", + "kind-of": "^3.0.2", + "lazy-cache": "^1.0.3", + "shallow-clone": "^0.1.2" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + }, + "shallow-clone": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-0.1.2.tgz", + "integrity": "sha1-WQnodLp3EG1zrEFM/sH/yofZcGA=", + "dev": true, + "requires": { + "is-extendable": "^0.1.1", + "kind-of": "^2.0.1", + "lazy-cache": "^0.2.3", + "mixin-object": "^2.0.1" + }, + "dependencies": { + "kind-of": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-2.0.1.tgz", + "integrity": "sha1-AY7HpM5+OobLkUG+UZ0kyPqpgbU=", + "dev": true, + "requires": { + "is-buffer": "^1.0.2" + } + }, + "lazy-cache": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz", + "integrity": "sha1-f+3fLctu23fRHvHRF6tf/fCrG2U=", + "dev": true + } + } } } }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "requires": { - "remove-trailing-separator": "^1.0.1" - } - }, - "normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", "dev": true }, - "normalize-selector": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/normalize-selector/-/normalize-selector-0.2.0.tgz", - "integrity": "sha1-0LFF62kRicY6eNIB3E/bEpPvDAM=", - "dev": true + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" }, - "normalize-url": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", - "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", + "merge2": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.3.tgz", + "integrity": "sha512-gdUU1Fwj5ep4kplwcmftruWofEFt6lfpkkr3h860CXbAB9c3hGb55EOL2ali0Td5oebvW0E1+3Sr+Ur7XfKpRA==", "dev": true }, - "npm-bundled": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.6.tgz", - "integrity": "sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g==", + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", "dev": true }, - "npm-lifecycle": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/npm-lifecycle/-/npm-lifecycle-3.1.5.tgz", - "integrity": "sha512-lDLVkjfZmvmfvpvBzA4vzee9cn+Me4orq0QF8glbswJVEbIcSNWib7qGOffolysc3teCqbbPZZkzbr3GQZTL1g==", - "dev": true, + "metro": { + "version": "0.66.2", + "resolved": "https://registry.npmjs.org/metro/-/metro-0.66.2.tgz", + "integrity": "sha512-uNsISfcQ3iKKSHoN5Q+LAh0l3jeeg7ZcNZ/4BAHGsk02erA0OP+l2m+b5qYVoPptHz9Oc3KyG5oGJoTu41pWjg==", "requires": { - "byline": "^5.0.0", - "graceful-fs": "^4.1.15", - "node-gyp": "^5.0.2", - "resolve-from": "^4.0.0", - "slide": "^1.1.6", - "uid-number": "0.0.6", - "umask": "^1.1.0", - "which": "^1.3.1" + "@babel/code-frame": "^7.0.0", + "@babel/core": "^7.14.0", + "@babel/generator": "^7.14.0", + "@babel/parser": "^7.14.0", + "@babel/template": "^7.0.0", + "@babel/traverse": "^7.14.0", + "@babel/types": "^7.0.0", + "absolute-path": "^0.0.0", + "accepts": "^1.3.7", + "async": "^2.4.0", + "chalk": "^4.0.0", + "ci-info": "^2.0.0", + "connect": "^3.6.5", + "debug": "^2.2.0", + "denodeify": "^1.2.1", + "error-stack-parser": "^2.0.6", + "fs-extra": "^1.0.0", + "graceful-fs": "^4.1.3", + "hermes-parser": "0.4.7", + "image-size": "^0.6.0", + "invariant": "^2.2.4", + "jest-haste-map": "^26.5.2", + "jest-worker": "^26.0.0", + "lodash.throttle": "^4.1.1", + "metro-babel-register": "0.66.2", + "metro-babel-transformer": "0.66.2", + "metro-cache": "0.66.2", + "metro-cache-key": "0.66.2", + "metro-config": "0.66.2", + "metro-core": "0.66.2", + "metro-hermes-compiler": "0.66.2", + "metro-inspector-proxy": "0.66.2", + "metro-minify-uglify": "0.66.2", + "metro-react-native-babel-preset": "0.66.2", + "metro-resolver": "0.66.2", + "metro-runtime": "0.66.2", + "metro-source-map": "0.66.2", + "metro-symbolicate": "0.66.2", + "metro-transform-plugins": "0.66.2", + "metro-transform-worker": "0.66.2", + "mime-types": "^2.1.27", + "mkdirp": "^0.5.1", + "node-fetch": "^2.2.0", + "nullthrows": "^1.1.1", + "rimraf": "^2.5.4", + "serialize-error": "^2.1.0", + "source-map": "^0.5.6", + "strip-ansi": "^6.0.0", + "temp": "0.8.3", + "throat": "^5.0.0", + "ws": "^1.1.5", + "yargs": "^15.3.1" }, "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "requires": { + "lodash": "^4.17.14" + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "fs-extra": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz", + "integrity": "sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA=", + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0" + } + }, "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -45052,2103 +44691,2126 @@ "path-is-absolute": "^1.0.0" } }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, - "node-gyp": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-5.1.1.tgz", - "integrity": "sha512-WH0WKGi+a4i4DUt2mHnvocex/xPLp9pYt5R6M2JdFB7pJ7Z34hveZ4nDTGTiLXCkitA9T8HFZjhinBCiVHYcWw==", - "dev": true, + "jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", "requires": { - "env-paths": "^2.2.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.2", - "mkdirp": "^0.5.1", - "nopt": "^4.0.1", - "npmlog": "^4.1.2", - "request": "^2.88.0", - "rimraf": "^2.6.3", - "semver": "^5.7.1", - "tar": "^4.4.12", - "which": "^1.3.1" + "graceful-fs": "^4.1.6" } }, - "nopt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", - "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", - "dev": true, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "requires": { - "abbrev": "1", - "osenv": "^0.1.4" + "p-locate": "^4.1.0" } }, - "resolve-from": { + "metro-babel-transformer": { + "version": "0.66.2", + "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.66.2.tgz", + "integrity": "sha512-aJ/7fc/Xkofw8Fqa51OTDhBzBz26mmpIWrXAZcPdQ8MSTt883EWncxeCEjasc79NJ89BRi7sOkkaWZo2sXlKvw==", + "requires": { + "@babel/core": "^7.14.0", + "hermes-parser": "0.4.7", + "metro-source-map": "0.66.2", + "nullthrows": "^1.1.1" + } + }, + "metro-react-native-babel-preset": { + "version": "0.66.2", + "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.66.2.tgz", + "integrity": "sha512-H/nLBAz0MgfDloSe1FjyH4EnbokHFdncyERvLPXDACY3ROVRCeUyFNo70ywRGXW2NMbrV4H7KUyU4zkfWhC2HQ==", + "requires": { + "@babel/core": "^7.14.0", + "@babel/plugin-proposal-class-properties": "^7.0.0", + "@babel/plugin-proposal-export-default-from": "^7.0.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-proposal-object-rest-spread": "^7.0.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", + "@babel/plugin-proposal-optional-chaining": "^7.0.0", + "@babel/plugin-syntax-dynamic-import": "^7.0.0", + "@babel/plugin-syntax-export-default-from": "^7.0.0", + "@babel/plugin-syntax-flow": "^7.2.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-syntax-optional-chaining": "^7.0.0", + "@babel/plugin-transform-arrow-functions": "^7.0.0", + "@babel/plugin-transform-async-to-generator": "^7.0.0", + "@babel/plugin-transform-block-scoping": "^7.0.0", + "@babel/plugin-transform-classes": "^7.0.0", + "@babel/plugin-transform-computed-properties": "^7.0.0", + "@babel/plugin-transform-destructuring": "^7.0.0", + "@babel/plugin-transform-exponentiation-operator": "^7.0.0", + "@babel/plugin-transform-flow-strip-types": "^7.0.0", + "@babel/plugin-transform-for-of": "^7.0.0", + "@babel/plugin-transform-function-name": "^7.0.0", + "@babel/plugin-transform-literals": "^7.0.0", + "@babel/plugin-transform-modules-commonjs": "^7.0.0", + "@babel/plugin-transform-object-assign": "^7.0.0", + "@babel/plugin-transform-parameters": "^7.0.0", + "@babel/plugin-transform-react-display-name": "^7.0.0", + "@babel/plugin-transform-react-jsx": "^7.0.0", + "@babel/plugin-transform-react-jsx-self": "^7.0.0", + "@babel/plugin-transform-react-jsx-source": "^7.0.0", + "@babel/plugin-transform-regenerator": "^7.0.0", + "@babel/plugin-transform-runtime": "^7.0.0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0", + "@babel/plugin-transform-spread": "^7.0.0", + "@babel/plugin-transform-sticky-regex": "^7.0.0", + "@babel/plugin-transform-template-literals": "^7.0.0", + "@babel/plugin-transform-typescript": "^7.5.0", + "@babel/plugin-transform-unicode-regex": "^7.0.0", + "@babel/template": "^7.0.0", + "react-refresh": "^0.4.0" + } + }, + "metro-source-map": { + "version": "0.66.2", + "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.66.2.tgz", + "integrity": "sha512-038tFmB7vSh73VQcDWIbr5O1m+WXWyYafDaOy+1A/2K308YP0oj33gbEgDnZsLZDwcJ+xt1x6KUEBIzlX4YGeQ==", + "requires": { + "@babel/traverse": "^7.14.0", + "@babel/types": "^7.0.0", + "invariant": "^2.2.4", + "metro-symbolicate": "0.66.2", + "nullthrows": "^1.1.1", + "ob1": "0.66.2", + "source-map": "^0.5.6", + "vlq": "^1.0.0" + } + }, + "metro-symbolicate": { + "version": "0.66.2", + "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.66.2.tgz", + "integrity": "sha512-u+DeQHyAFXVD7mVP+GST/894WHJ3i/U8oEJFnT7U3P52ZuLgX8n4tMNxhqZU12RcLR6etF8143aP0Ktx1gFLEQ==", + "requires": { + "invariant": "^2.2.4", + "metro-source-map": "0.66.2", + "nullthrows": "^1.1.1", + "source-map": "^0.5.6", + "through2": "^2.0.1", + "vlq": "^1.0.0" + } + }, + "mime-db": { + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==" + }, + "mime-types": { + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", + "requires": { + "mime-db": "1.51.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + }, + "path-exists": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + }, + "react-refresh": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.4.3.tgz", + "integrity": "sha512-Hwln1VNuGl/6bVwnd0Xdn1e84gT/8T9aYNL+HAKDArLCS7LWjwr7StE30IEYbIkx0Vi3vs+coQxe+SQDbGbbpA==" }, "rimraf": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, "requires": { "glob": "^7.1.3" } }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" + }, + "ws": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz", + "integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==", + "requires": { + "options": ">=0.0.5", + "ultron": "1.0.x" + } + }, + "yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "requires": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + } + }, + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } } } }, - "npm-normalize-package-bin": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", - "dev": true + "metro-babel-register": { + "version": "0.66.2", + "resolved": "https://registry.npmjs.org/metro-babel-register/-/metro-babel-register-0.66.2.tgz", + "integrity": "sha512-3F+vsVubUPJYKfVMeol8/7pd8CC287Rw92QYzJD8LEmI980xcgwMUEVBZ0UIAUwlLgiJG/f4Mwhuji2EeBXrPg==", + "requires": { + "@babel/core": "^7.14.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-proposal-optional-chaining": "^7.0.0", + "@babel/plugin-syntax-class-properties": "^7.0.0", + "@babel/plugin-transform-flow-strip-types": "^7.0.0", + "@babel/plugin-transform-modules-commonjs": "^7.0.0", + "@babel/register": "^7.0.0", + "escape-string-regexp": "^1.0.5" + } }, - "npm-package-arg": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.0.1.tgz", - "integrity": "sha512-/h5Fm6a/exByzFSTm7jAyHbgOqErl9qSNJDQF32Si/ZzgwT2TERVxRxn3Jurw1wflgyVVAxnFR4fRHPM7y1ClQ==", - "dev": true, + "metro-babel-transformer": { + "version": "0.66.2", + "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.66.2.tgz", + "integrity": "sha512-aJ/7fc/Xkofw8Fqa51OTDhBzBz26mmpIWrXAZcPdQ8MSTt883EWncxeCEjasc79NJ89BRi7sOkkaWZo2sXlKvw==", "requires": { - "hosted-git-info": "^3.0.2", - "semver": "^7.0.0", - "validate-npm-package-name": "^3.0.0" + "@babel/core": "^7.14.0", + "hermes-parser": "0.4.7", + "metro-source-map": "0.66.2", + "nullthrows": "^1.1.1" + } + }, + "metro-cache": { + "version": "0.66.2", + "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.66.2.tgz", + "integrity": "sha512-5QCYJtJOHoBSbL3H4/Fpl36oA697C3oYHqsce+Hk/dh2qtODUGpS3gOBhvP1B8iB+H8jJMyR75lZq129LJEsIQ==", + "requires": { + "metro-core": "0.66.2", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4" }, "dependencies": { - "hosted-git-info": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.4.tgz", - "integrity": "sha512-4oT62d2jwSDBbLLFLZE+1vPuQ1h8p9wjrJ8Mqx5TjsyWmBMV5B13eJqn8pvluqubLf3cJPTfiYCIwNwDNmzScQ==", - "dev": true, + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "requires": { - "lru-cache": "^5.1.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "requires": { - "yallist": "^3.0.2" + "glob": "^7.1.3" } - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true } } }, - "npm-package-json-lint": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/npm-package-json-lint/-/npm-package-json-lint-5.0.0.tgz", - "integrity": "sha512-a7meq98EnSqniPWNhTj0TMJbTFKr8SPEkQep3iPCQVJWfhQ8fKI5+bUSgNyEbYfzfIrIjMTb0r/tCkX7FX+bYQ==", - "dev": true, + "metro-cache-key": { + "version": "0.66.2", + "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.66.2.tgz", + "integrity": "sha512-WtkNmRt41qOpHh1MkNA4nLiQ/m7iGL90ysSKD+fcLqlUnOBKJptPQm0ZUv8Kfqk18ddWX2KmsSbq+Sf3I6XohQ==" + }, + "metro-config": { + "version": "0.66.2", + "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.66.2.tgz", + "integrity": "sha512-0C+PrKKIBNNzLZUKN/8ZDJS2U5FLMOTXDWbvBHIdqb6YXz8WplXR2+xlSlaSCCi5b+GR7cWFWUNeKA4GQS1/AQ==", "requires": { - "ajv": "^6.12.0", - "ajv-errors": "^1.0.1", - "chalk": "^4.0.0", - "cosmiconfig": "^6.0.0", - "debug": "^4.1.1", - "globby": "^11.0.0", - "ignore": "^5.1.4", - "is-plain-obj": "^2.1.0", - "jsonc-parser": "^2.2.1", - "log-symbols": "^3.0.0", - "meow": "^6.1.0", - "plur": "^4.0.0", - "semver": "^7.2.2", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.0" + "cosmiconfig": "^5.0.5", + "jest-validate": "^26.5.2", + "metro": "0.66.2", + "metro-cache": "0.66.2", + "metro-core": "0.66.2", + "metro-runtime": "0.66.2" }, "dependencies": { - "@nodelib/fs.stat": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", - "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==", - "dev": true - }, - "ajv": { - "version": "6.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.0.tgz", - "integrity": "sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw==", - "dev": true, + "@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" } }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", "requires": { - "fill-range": "^7.0.1" + "@types/istanbul-lib-report": "*" } }, "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.1.tgz", + "integrity": "sha512-tVI4q5jjFV5CavAU8DXfza/TJcZutVKo/5Foskmsqcm0MsL91moHvwiGNnqaa2o6PF/7yT5ikDRcVcl8Rj6LCA==" }, - "camelcase-keys": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", - "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", - "dev": true, + "cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", "requires": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" } }, - "cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", - "dev": true, + "import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.7.2" + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" } }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, + "jest-get-type": { + "version": "26.3.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", + "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==" + }, + "jest-validate": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.2.tgz", + "integrity": "sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==", "requires": { - "ms": "^2.1.1" + "@jest/types": "^26.6.2", + "camelcase": "^6.0.0", + "chalk": "^4.0.0", + "jest-get-type": "^26.3.0", + "leven": "^3.1.0", + "pretty-format": "^26.6.2" } }, - "fast-deep-equal": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz", - "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==", - "dev": true - }, - "fast-glob": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.1.1.tgz", - "integrity": "sha512-nTCREpBY8w8r+boyFYAx21iL6faSsQynliPHM4Uf56SbkyohCNxpVPEH9xrF5TXKy+IsjkPUHDKiUkzBVRXn9g==", - "dev": true, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.0", - "merge2": "^1.3.0", - "micromatch": "^4.0.2" + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" } + } + } + }, + "metro-core": { + "version": "0.66.2", + "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.66.2.tgz", + "integrity": "sha512-JieLZkef/516yxXYvQxWnf3OWw5rcgWRy76K8JV/wr/i8LGVGulPAXlIi445/QZzXVydzRVASKAEVqyxM5F4mA==", + "requires": { + "jest-haste-map": "^26.5.2", + "lodash.throttle": "^4.1.1", + "metro-resolver": "0.66.2" + } + }, + "metro-hermes-compiler": { + "version": "0.66.2", + "resolved": "https://registry.npmjs.org/metro-hermes-compiler/-/metro-hermes-compiler-0.66.2.tgz", + "integrity": "sha512-nCVL1g9uR6vrw5+X1wjwZruRyMkndnzGRMqjqoljf+nGEqBTD607CR7elXw4fMWn/EM+1y0Vdq5altUu9LdgCA==" + }, + "metro-inspector-proxy": { + "version": "0.66.2", + "resolved": "https://registry.npmjs.org/metro-inspector-proxy/-/metro-inspector-proxy-0.66.2.tgz", + "integrity": "sha512-gnLc9121eznwP0iiA9tCBW8qZjwIsCgwHWMF1g1Qaki9le9tzeJv3dK4/lFNGxyfSaLO7vahQEhsEYsiRnTROg==", + "requires": { + "connect": "^3.6.5", + "debug": "^2.2.0", + "ws": "^1.1.5", + "yargs": "^15.3.1" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { - "to-regex-range": "^5.0.1" + "ms": "2.0.0" } }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, "find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, "requires": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" } }, - "glob-parent": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", - "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", - "dev": true, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "requires": { - "is-glob": "^4.0.1" + "p-locate": "^4.1.0" } }, - "globby": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.0.tgz", - "integrity": "sha512-iuehFnR3xu5wBBtm4xi0dMe92Ob87ufyu/dHwpDYfbcpYpIbrO5OnS8M1vWvrBhSGEJ3/Ecj7gnX76P8YxpPEg==", - "dev": true, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", - "slash": "^3.0.0" + "p-try": "^2.0.0" } }, - "ignore": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.4.tgz", - "integrity": "sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A==", - "dev": true + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "requires": { + "p-limit": "^2.2.0" + } }, - "indent-string": { + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + }, + "path-exists": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "requires": { - "is-extglob": "^2.1.1" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" } }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } }, - "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "ws": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz", + "integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==", + "requires": { + "options": ">=0.0.5", + "ultron": "1.0.x" + } + }, + "yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "requires": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + } + }, + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "metro-minify-uglify": { + "version": "0.66.2", + "resolved": "https://registry.npmjs.org/metro-minify-uglify/-/metro-minify-uglify-0.66.2.tgz", + "integrity": "sha512-7TUK+L5CmB5x1PVnFbgmjzHW4CUadq9H5jgp0HfFoWT1skXAyEsx0DHkKDXwnot0khnNhBOEfl62ctQOnE110Q==", + "requires": { + "uglify-es": "^3.1.9" + }, + "dependencies": { + "commander": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", + "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "uglify-es": { + "version": "3.3.9", + "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz", + "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==", + "requires": { + "commander": "~2.13.0", + "source-map": "~0.6.1" + } + } + } + }, + "metro-react-native-babel-preset": { + "version": "0.66.2", + "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.66.2.tgz", + "integrity": "sha512-H/nLBAz0MgfDloSe1FjyH4EnbokHFdncyERvLPXDACY3ROVRCeUyFNo70ywRGXW2NMbrV4H7KUyU4zkfWhC2HQ==", + "dev": true, + "requires": { + "@babel/core": "^7.14.0", + "@babel/plugin-proposal-class-properties": "^7.0.0", + "@babel/plugin-proposal-export-default-from": "^7.0.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-proposal-object-rest-spread": "^7.0.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", + "@babel/plugin-proposal-optional-chaining": "^7.0.0", + "@babel/plugin-syntax-dynamic-import": "^7.0.0", + "@babel/plugin-syntax-export-default-from": "^7.0.0", + "@babel/plugin-syntax-flow": "^7.2.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-syntax-optional-chaining": "^7.0.0", + "@babel/plugin-transform-arrow-functions": "^7.0.0", + "@babel/plugin-transform-async-to-generator": "^7.0.0", + "@babel/plugin-transform-block-scoping": "^7.0.0", + "@babel/plugin-transform-classes": "^7.0.0", + "@babel/plugin-transform-computed-properties": "^7.0.0", + "@babel/plugin-transform-destructuring": "^7.0.0", + "@babel/plugin-transform-exponentiation-operator": "^7.0.0", + "@babel/plugin-transform-flow-strip-types": "^7.0.0", + "@babel/plugin-transform-for-of": "^7.0.0", + "@babel/plugin-transform-function-name": "^7.0.0", + "@babel/plugin-transform-literals": "^7.0.0", + "@babel/plugin-transform-modules-commonjs": "^7.0.0", + "@babel/plugin-transform-object-assign": "^7.0.0", + "@babel/plugin-transform-parameters": "^7.0.0", + "@babel/plugin-transform-react-display-name": "^7.0.0", + "@babel/plugin-transform-react-jsx": "^7.0.0", + "@babel/plugin-transform-react-jsx-self": "^7.0.0", + "@babel/plugin-transform-react-jsx-source": "^7.0.0", + "@babel/plugin-transform-regenerator": "^7.0.0", + "@babel/plugin-transform-runtime": "^7.0.0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0", + "@babel/plugin-transform-spread": "^7.0.0", + "@babel/plugin-transform-sticky-regex": "^7.0.0", + "@babel/plugin-transform-template-literals": "^7.0.0", + "@babel/plugin-transform-typescript": "^7.5.0", + "@babel/plugin-transform-unicode-regex": "^7.0.0", + "@babel/template": "^7.0.0", + "react-refresh": "^0.4.0" + }, + "dependencies": { + "react-refresh": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.4.3.tgz", + "integrity": "sha512-Hwln1VNuGl/6bVwnd0Xdn1e84gT/8T9aYNL+HAKDArLCS7LWjwr7StE30IEYbIkx0Vi3vs+coQxe+SQDbGbbpA==", "dev": true + } + } + }, + "metro-react-native-babel-transformer": { + "version": "0.66.2", + "resolved": "https://registry.npmjs.org/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.66.2.tgz", + "integrity": "sha512-z1ab7ihIT0pJrwgi9q2IH+LcW/xUWMQ0hH+Mrk7wbKQB0RnJdXFoxphrfoVHBHMUu+TBPetUcEkKawkK1e7Cng==", + "requires": { + "@babel/core": "^7.14.0", + "babel-preset-fbjs": "^3.4.0", + "hermes-parser": "0.4.7", + "metro-babel-transformer": "0.66.2", + "metro-react-native-babel-preset": "0.66.2", + "metro-source-map": "0.66.2", + "nullthrows": "^1.1.1" + }, + "dependencies": { + "metro-babel-transformer": { + "version": "0.66.2", + "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.66.2.tgz", + "integrity": "sha512-aJ/7fc/Xkofw8Fqa51OTDhBzBz26mmpIWrXAZcPdQ8MSTt883EWncxeCEjasc79NJ89BRi7sOkkaWZo2sXlKvw==", + "requires": { + "@babel/core": "^7.14.0", + "hermes-parser": "0.4.7", + "metro-source-map": "0.66.2", + "nullthrows": "^1.1.1" + } + }, + "metro-react-native-babel-preset": { + "version": "0.66.2", + "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.66.2.tgz", + "integrity": "sha512-H/nLBAz0MgfDloSe1FjyH4EnbokHFdncyERvLPXDACY3ROVRCeUyFNo70ywRGXW2NMbrV4H7KUyU4zkfWhC2HQ==", + "requires": { + "@babel/core": "^7.14.0", + "@babel/plugin-proposal-class-properties": "^7.0.0", + "@babel/plugin-proposal-export-default-from": "^7.0.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-proposal-object-rest-spread": "^7.0.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", + "@babel/plugin-proposal-optional-chaining": "^7.0.0", + "@babel/plugin-syntax-dynamic-import": "^7.0.0", + "@babel/plugin-syntax-export-default-from": "^7.0.0", + "@babel/plugin-syntax-flow": "^7.2.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-syntax-optional-chaining": "^7.0.0", + "@babel/plugin-transform-arrow-functions": "^7.0.0", + "@babel/plugin-transform-async-to-generator": "^7.0.0", + "@babel/plugin-transform-block-scoping": "^7.0.0", + "@babel/plugin-transform-classes": "^7.0.0", + "@babel/plugin-transform-computed-properties": "^7.0.0", + "@babel/plugin-transform-destructuring": "^7.0.0", + "@babel/plugin-transform-exponentiation-operator": "^7.0.0", + "@babel/plugin-transform-flow-strip-types": "^7.0.0", + "@babel/plugin-transform-for-of": "^7.0.0", + "@babel/plugin-transform-function-name": "^7.0.0", + "@babel/plugin-transform-literals": "^7.0.0", + "@babel/plugin-transform-modules-commonjs": "^7.0.0", + "@babel/plugin-transform-object-assign": "^7.0.0", + "@babel/plugin-transform-parameters": "^7.0.0", + "@babel/plugin-transform-react-display-name": "^7.0.0", + "@babel/plugin-transform-react-jsx": "^7.0.0", + "@babel/plugin-transform-react-jsx-self": "^7.0.0", + "@babel/plugin-transform-react-jsx-source": "^7.0.0", + "@babel/plugin-transform-regenerator": "^7.0.0", + "@babel/plugin-transform-runtime": "^7.0.0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0", + "@babel/plugin-transform-spread": "^7.0.0", + "@babel/plugin-transform-sticky-regex": "^7.0.0", + "@babel/plugin-transform-template-literals": "^7.0.0", + "@babel/plugin-transform-typescript": "^7.5.0", + "@babel/plugin-transform-unicode-regex": "^7.0.0", + "@babel/template": "^7.0.0", + "react-refresh": "^0.4.0" + } + }, + "metro-source-map": { + "version": "0.66.2", + "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.66.2.tgz", + "integrity": "sha512-038tFmB7vSh73VQcDWIbr5O1m+WXWyYafDaOy+1A/2K308YP0oj33gbEgDnZsLZDwcJ+xt1x6KUEBIzlX4YGeQ==", + "requires": { + "@babel/traverse": "^7.14.0", + "@babel/types": "^7.0.0", + "invariant": "^2.2.4", + "metro-symbolicate": "0.66.2", + "nullthrows": "^1.1.1", + "ob1": "0.66.2", + "source-map": "^0.5.6", + "vlq": "^1.0.0" + } }, - "jsonc-parser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-2.2.1.tgz", - "integrity": "sha512-o6/yDBYccGvTz1+QFevz6l6OBZ2+fMVu2JZ9CIhzsYRX4mjaK5IyX9eldUdCmga16zlgQxyrj5pt9kzuj2C02w==", + "react-refresh": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.4.3.tgz", + "integrity": "sha512-Hwln1VNuGl/6bVwnd0Xdn1e84gT/8T9aYNL+HAKDArLCS7LWjwr7StE30IEYbIkx0Vi3vs+coQxe+SQDbGbbpA==" + } + } + }, + "metro-resolver": { + "version": "0.66.2", + "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.66.2.tgz", + "integrity": "sha512-pXQAJR/xauRf4kWFj2/hN5a77B4jLl0Fom5I3PHp6Arw/KxSBp0cnguXpGLwNQ6zQC0nxKCoYGL9gQpzMnN7Hw==", + "requires": { + "absolute-path": "^0.0.0" + } + }, + "metro-runtime": { + "version": "0.66.2", + "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.66.2.tgz", + "integrity": "sha512-vFhKBk2ot9FS4b+2v0OTa/guCF/QDAOJubY0CNg7PzCS5+w4y3IvZIcPX4SSS1t8pYEZBLvtdtTDarlDl81xmg==" + }, + "metro-source-map": { + "version": "0.66.2", + "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.66.2.tgz", + "integrity": "sha512-038tFmB7vSh73VQcDWIbr5O1m+WXWyYafDaOy+1A/2K308YP0oj33gbEgDnZsLZDwcJ+xt1x6KUEBIzlX4YGeQ==", + "requires": { + "@babel/traverse": "^7.14.0", + "@babel/types": "^7.0.0", + "invariant": "^2.2.4", + "metro-symbolicate": "0.66.2", + "nullthrows": "^1.1.1", + "ob1": "0.66.2", + "source-map": "^0.5.6", + "vlq": "^1.0.0" + } + }, + "metro-symbolicate": { + "version": "0.66.2", + "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.66.2.tgz", + "integrity": "sha512-u+DeQHyAFXVD7mVP+GST/894WHJ3i/U8oEJFnT7U3P52ZuLgX8n4tMNxhqZU12RcLR6etF8143aP0Ktx1gFLEQ==", + "requires": { + "invariant": "^2.2.4", + "metro-source-map": "0.66.2", + "nullthrows": "^1.1.1", + "source-map": "^0.5.6", + "through2": "^2.0.1", + "vlq": "^1.0.0" + } + }, + "metro-transform-plugins": { + "version": "0.66.2", + "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.66.2.tgz", + "integrity": "sha512-KTvqplh0ut7oDKovvDG6yzXM02R6X+9b2oVG+qYq8Zd3aCGTi51ASx4ThCNkAHyEvCuJdYg9fxXTL+j+wvhB5w==", + "requires": { + "@babel/core": "^7.14.0", + "@babel/generator": "^7.14.0", + "@babel/template": "^7.0.0", + "@babel/traverse": "^7.14.0", + "nullthrows": "^1.1.1" + } + }, + "metro-transform-worker": { + "version": "0.66.2", + "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.66.2.tgz", + "integrity": "sha512-dO4PtYOMGB7Vzte8aIzX39xytODhmbJrBYPu+zYzlDjyefJZT7BkZ0LkPIThtyJi96xWcGqi9JBSo0CeRupAHw==", + "requires": { + "@babel/core": "^7.14.0", + "@babel/generator": "^7.14.0", + "@babel/parser": "^7.14.0", + "@babel/types": "^7.0.0", + "babel-preset-fbjs": "^3.4.0", + "metro": "0.66.2", + "metro-babel-transformer": "0.66.2", + "metro-cache": "0.66.2", + "metro-cache-key": "0.66.2", + "metro-hermes-compiler": "0.66.2", + "metro-source-map": "0.66.2", + "metro-transform-plugins": "0.66.2", + "nullthrows": "^1.1.1" + } + }, + "microevent.ts": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/microevent.ts/-/microevent.ts-0.1.1.tgz", + "integrity": "sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g==", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "micromodal": { + "version": "0.4.10", + "resolved": "https://registry.npmjs.org/micromodal/-/micromodal-0.4.10.tgz", + "integrity": "sha512-BUrEnzMPFBwK8nOE4xUDYHLrlGlLULQVjpja99tpJQPSUEWgw3kTLp1n1qv0HmKU29AiHE7Y7sMLiRziDK4ghQ==" + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "mime": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", + "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==" + }, + "mime-db": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", + "dev": true + }, + "mime-types": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "dev": true, + "requires": { + "mime-db": "~1.33.0" + } + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" + }, + "mimic-response": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", + "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", + "dev": true + }, + "min-document": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", + "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", + "dev": true, + "requires": { + "dom-walk": "^0.1.0" + } + }, + "min-indent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.0.tgz", + "integrity": "sha1-z8RcN+nsDY8KDsPdTvf3w6vjklY=", + "dev": true + }, + "mini-css-extract-plugin": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.5.1.tgz", + "integrity": "sha512-CRC6E2yedNjfOA3nQjpqAkpnranxhxmilhBPYtldnXcPT/QZb3aJFzvt0pp8W1jhuLR/E0zDa+QEHuC/HhhaLQ==", + "dev": true, + "requires": { + "schema-utils": "^4.0.0" + }, + "dependencies": { + "@types/json-schema": { + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", "dev": true }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "log-symbols": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", - "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", + "ajv": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz", + "integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==", "dev": true, "requires": { - "chalk": "^2.4.2" - }, - "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - } + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" } }, - "map-obj": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.1.0.tgz", - "integrity": "sha512-glc9y00wgtwcDmp7GaE/0b0OnxpNJsVf3ael/An6Fe2Q51LLwN1er6sdomLRzz5h0+yMpiYLhWYF5R7HeqVd4g==", - "dev": true - }, - "meow": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-6.1.0.tgz", - "integrity": "sha512-iIAoeI01v6pmSfObAAWFoITAA4GgiT45m4SmJgoxtZfvI0fyZwhV4d0lTwiUXvAKIPlma05Feb2Xngl52Mj5Cg==", + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "dev": true, "requires": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.1.1", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.0.0", - "minimist-options": "^4.0.1", - "normalize-package-data": "^2.5.0", - "read-pkg-up": "^7.0.0", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.8.1", - "yargs-parser": "^18.1.1" + "fast-deep-equal": "^3.1.3" } }, - "merge2": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.3.0.tgz", - "integrity": "sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw==", + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true }, - "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" - } - }, - "minimist-options": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.0.2.tgz", - "integrity": "sha512-seq4hpWkYSUh1y7NXxzucwAN9yVlBc3Upgdjz8vLCP97jG8kaOmzYrVH/m7tQ1NYD1wdtZbSLfdy4zFmRWuc/w==", + "schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", "dev": true, "requires": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0" - }, - "dependencies": { - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", - "dev": true - } + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + } + } + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "minimist-options": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-3.0.2.tgz", + "integrity": "sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==", + "dev": true, + "requires": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0" + } + }, + "minipass": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz", + "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + }, + "dependencies": { + "yallist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", "dev": true - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + } + } + }, + "minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz", + "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", "dev": true, "requires": { - "p-limit": "^2.2.0" + "yallist": "^4.0.0" } }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true - }, - "parse-json": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.0.tgz", - "integrity": "sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==", + } + } + }, + "minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz", + "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1", - "lines-and-columns": "^1.1.6" + "yallist": "^4.0.0" } }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, - "path-type": { + "yallist": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "quick-lru": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true - }, - "read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "requires": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "dependencies": { - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true - } - } - }, - "read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "requires": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - } - }, - "redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", - "dev": true, - "requires": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" - } - }, - "resolve": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.1.tgz", - "integrity": "sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==", + } + } + }, + "minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz", + "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", "dev": true, "requires": { - "path-parse": "^1.0.6" + "yallist": "^4.0.0" } }, - "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true - }, - "strip-indent": { + } + } + }, + "mississippi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", + "dev": true, + "requires": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + }, + "dependencies": { + "pump": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dev": true, "requires": { - "min-indent": "^1.0.0" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } - }, - "strip-json-comments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.0.tgz", - "integrity": "sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w==", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, + } + } + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "requires": { - "is-number": "^7.0.0" + "is-plain-object": "^2.0.4" } - }, - "trim-newlines": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.0.tgz", - "integrity": "sha512-C4+gOpvmxaSMKuEf9Qc134F1ZuOHVXKRbtEflf4NTtuuJDEIJ9p5PXsalL8SkeRw+qit1Mo+yuvMPAKwWg/1hA==", - "dev": true - }, - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + } + } + }, + "mixin-object": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", + "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=", + "dev": true, + "requires": { + "for-in": "^0.1.3", + "is-extendable": "^0.1.1" + }, + "dependencies": { + "for-in": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz", + "integrity": "sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE=", "dev": true - }, - "yargs-parser": { - "version": "18.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.2.tgz", - "integrity": "sha512-hlIPNR3IzC1YuL1c2UwwDKpXlNFBqD1Fswwh1khz5+d8Cq/8yc/Mn0i+rQXduu8hcrFKvO7Eryk+09NecTQAAQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } } } }, - "npm-packlist": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.4.tgz", - "integrity": "sha512-zTLo8UcVYtDU3gdeaFu2Xu0n0EvelfHDGuqtNIn5RO7yQj4H1TqNdBc/yZjxnWA0PVB8D3Woyp0i5B43JwQ6Vw==", + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + } + } + }, + "mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "dev": true + }, + "mkdirp-promise": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz", + "integrity": "sha1-6bj2jlUsaKnBcTuEiD96HdA5uKE=", "dev": true, "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" + "mkdirp": "*" } }, - "npm-pick-manifest": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-3.0.2.tgz", - "integrity": "sha512-wNprTNg+X5nf+tDi+hbjdHhM4bX+mKqv6XmPh7B5eG+QY9VARfQPfCEH013H5GqfNj6ee8Ij2fg8yk0mzps1Vw==", + "mockdate": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/mockdate/-/mockdate-3.0.5.tgz", + "integrity": "sha512-iniQP4rj1FhBdBYS/+eQv7j1tadJ9lJtdzgOpvsOHng/GbcDh2Fhdeq+ZRldrPYdXvCyfFUmFeEwEGXZB5I/AQ==" + }, + "modify-values": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", + "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", + "dev": true + }, + "moment": { + "version": "2.22.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.22.1.tgz", + "integrity": "sha512-shJkRTSebXvsVqk56I+lkb2latjBs8I+pc2TzWc545y2iFnSjm7Wg0QMh+ZWcdSLQyGEau5jI8ocnmkyTgr9YQ==" + }, + "moment-timezone": { + "version": "0.5.31", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.31.tgz", + "integrity": "sha512-+GgHNg8xRhMXfEbv81iDtrVeTcWt0kWmTEY1XQK14dICTXnWJnT0dxdlPspwqF3keKMVPXwayEsk1DI0AA/jdA==", + "requires": { + "moment": ">= 2.9.0" + } + }, + "moo": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/moo/-/moo-0.4.3.tgz", + "integrity": "sha512-gFD2xGCl8YFgGHsqJ9NKRVdwlioeW3mI1iqfLNYQOv0+6JRwG58Zk9DIGQgyIaffSYaO1xsKnMaYzzNr1KyIAw==", + "dev": true + }, + "mousetrap": { + "version": "1.6.5", + "resolved": "https://registry.npmjs.org/mousetrap/-/mousetrap-1.6.5.tgz", + "integrity": "sha512-QNo4kEepaIBwiT8CDhP98umTetp+JNfQYBWvC1pc6/OAibuXtRcxZ58Qz8skvEHYvURne/7R8T5VoOI7rDsEUA==" + }, + "move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", "dev": true, "requires": { - "figgy-pudding": "^3.5.1", - "npm-package-arg": "^6.0.0", - "semver": "^5.4.1" + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" }, "dependencies": { - "npm-package-arg": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-6.1.1.tgz", - "integrity": "sha512-qBpssaL3IOZWi5vEKUKW0cO7kzLeT+EQO9W8RsLOZf76KF9E/K9+wH0C7t06HXPpaH8WH5xF1MExLuCwbTqRUg==", + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "dev": true, "requires": { - "hosted-git-info": "^2.7.1", - "osenv": "^0.1.5", - "semver": "^5.6.0", - "validate-npm-package-name": "^3.0.0" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } } } }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "requires": { - "path-key": "^2.0.0" - } - }, - "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "multicast-dns": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", + "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", "dev": true, "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" + "dns-packet": "^1.3.1", + "thunky": "^1.0.2" } }, - "nth-check": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz", - "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=", + "multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", + "dev": true + }, + "multimatch": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-3.0.0.tgz", + "integrity": "sha512-22foS/gqQfANZ3o+W7ST2x25ueHDVNWl/b9OlGcLpy/iKxjCpvcNCM51YCenUi7Mt/jAjjqv8JwZRs8YP5sRjA==", "dev": true, "requires": { - "boolbase": "~1.0.0" + "array-differ": "^2.0.3", + "array-union": "^1.0.2", + "arrify": "^1.0.1", + "minimatch": "^3.0.4" } }, - "nullthrows": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", - "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==" - }, - "num2fraction": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", - "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", + "mustache": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.0.0.tgz", + "integrity": "sha512-FJgjyX/IVkbXBXYUwH+OYwQKqWpFPLaLVESd70yHjSDunwzV2hZOoTBvPf4KLoxesUzzyfTH6F784Uqd7Wm5yA==", "dev": true }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", "dev": true }, - "nwsapi": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", - "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", - "dev": true + "mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "requires": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true + "nan": { + "version": "2.14.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", + "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", + "dev": true, + "optional": true }, - "ob1": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.64.0.tgz", - "integrity": "sha512-CO1N+5dhvy+MoAwxz8+fymEUcwsT4a+wHhrHFb02LppcJdHxgcBWviwEhUwKOD2kLMQ7ijrrzybOqpGcqEtvpQ==" + "nanoid": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", + "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==" }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "nearley": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/nearley/-/nearley-2.15.1.tgz", + "integrity": "sha512-8IUY/rUrKz2mIynUGh8k+tul1awMKEjeHHC5G3FHvvyAW6oq4mQfNp2c0BMea+sYZJvYcrrM6GmZVIle/GRXGw==", + "dev": true, "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" + "moo": "^0.4.3", + "nomnom": "~1.6.2", + "railroad-diagrams": "^1.0.0", + "randexp": "0.4.6", + "semver": "^5.4.1" }, "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } + "semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "dev": true } } }, - "object-filter": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/object-filter/-/object-filter-1.0.2.tgz", - "integrity": "sha1-rwt5f/6+r4pSxmN87b6IFs/sG8g=", - "dev": true - }, - "object-inspect": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", - "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==", - "dev": true + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" }, - "object-keys": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz", - "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==" + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" }, - "object-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/object-values/-/object-values-1.0.0.tgz", - "integrity": "sha1-cq+DljARnluYw7AruMJ+MjcVgQU=", + "nested-error-stacks": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.1.0.tgz", + "integrity": "sha512-AO81vsIO1k1sM4Zrd6Hu7regmJN1NSiAja10gc4bX3F0wd+9rQmcuHQaHVQCYIEC8iFXnE+mavh23GOt7wBgug==", "dev": true }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "requires": { - "isobject": "^3.0.0" - } - }, - "object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" - } - }, - "object.entries": { + "nice-try": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.0.4.tgz", - "integrity": "sha1-G/mk3SKI9bM/Opk9JXZh8F0WGl8=", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.4.tgz", + "integrity": "sha512-2NpiFHqC87y/zFke0fC0spBXL3bBsoh/p5H1EFhshxjCR5+0g2d6BiXbUFz9v1sAcxsk2htp2eQnNIci2dIYcA==" + }, + "no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", "dev": true, "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.6.1", - "function-bind": "^1.1.0", - "has": "^1.0.1" + "lower-case": "^2.0.2", + "tslib": "^2.0.3" } }, - "object.fromentries": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.3.tgz", - "integrity": "sha512-IDUSMXs6LOSJBWE++L0lzIbSqHl9KDCfff2x/JSEIDtEUavUnyMYC2ZGay/04Zq4UT8lvd4xNhU4/YHKibAOlw==", + "nocache": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/nocache/-/nocache-2.1.0.tgz", + "integrity": "sha512-0L9FvHG3nfnnmaEQPjT9xhfN4ISk0A8/2j4M37Np4mcDesJjHgEUfgPhdCyZuFI954tjokaIj/A3NdpFNdEh4Q==" + }, + "nock": { + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/nock/-/nock-12.0.3.tgz", + "integrity": "sha512-QNb/j8kbFnKCiyqi9C5DD0jH/FubFGj5rt9NQFONXwQm3IPB0CULECg/eS3AU1KgZb/6SwUa4/DTRKhVxkGABw==", "dev": true, "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "has": "^1.0.3" + "debug": "^4.1.0", + "json-stringify-safe": "^5.0.1", + "lodash": "^4.17.13", + "propagate": "^2.0.0" }, "dependencies": { - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "es-abstract": { - "version": "1.18.0-next.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", - "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-negative-zero": "^2.0.0", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - }, - "dependencies": { - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - } - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - }, - "is-callable": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", - "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", - "dev": true - }, - "is-regex": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", - "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", - "dev": true, - "requires": { - "has-symbols": "^1.0.1" - } - }, - "is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "dev": true, "requires": { - "has-symbols": "^1.0.1" + "ms": "^2.1.1" } }, - "object-inspect": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", - "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==", + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true - }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - }, - "dependencies": { - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - } - } - }, - "string.prototype.trimend": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz", - "integrity": "sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" - } - }, - "string.prototype.trimstart": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz", - "integrity": "sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" - } } } }, - "object.getownpropertydescriptors": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", - "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", - "dev": true, + "node-dir": { + "version": "0.1.17", + "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz", + "integrity": "sha1-X1Zl2TNRM1yqvvjxxVRRbPXx5OU=", "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.5.1" + "minimatch": "^3.0.2" } }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" + }, + "node-fetch-npm": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/node-fetch-npm/-/node-fetch-npm-2.0.4.tgz", + "integrity": "sha512-iOuIQDWDyjhv9qSDrj9aq/klt6F9z1p2otB3AV7v3zBDcL/x+OfGsvGQZZCcMZbUf4Ujw1xGNQkjvGnVT22cKg==", + "dev": true, "requires": { - "isobject": "^3.0.1" + "encoding": "^0.1.11", + "json-parse-better-errors": "^1.0.0", + "safe-buffer": "^5.1.1" } }, - "object.values": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.2.tgz", - "integrity": "sha512-MYC0jvJopr8EK6dPBiO8Nb9mvjdypOachO5REGk6MXzujbBrAisKo3HmdEI6kZDL6fC31Mwee/5YbtMebixeag==", + "node-forge": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", + "dev": true + }, + "node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=" + }, + "node-libs-browser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", + "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", + "dev": true, "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "has": "^1.0.3" - }, - "dependencies": { - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "requires": { - "object-keys": "^1.0.12" - } - }, - "es-abstract": { - "version": "1.18.0-next.2", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.2.tgz", - "integrity": "sha512-Ih4ZMFHEtZupnUh6497zEL4y2+w8+1ljnCyaTa+adcoafI1GOvMwFlDjBLfWR7y9VLfrjRJe9ocuHY1PSR9jjw==", - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.1", - "object-inspect": "^1.9.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.3", - "string.prototype.trimstart": "^1.0.3" - }, - "dependencies": { - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - } - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" - }, - "is-callable": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", - "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==" - }, - "is-regex": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", - "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", - "requires": { - "has-symbols": "^1.0.1" - } - }, - "is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", - "requires": { - "has-symbols": "^1.0.1" - } - }, - "object-inspect": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", - "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==" - }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - }, - "dependencies": { - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - } - } - }, - "string.prototype.trimend": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz", - "integrity": "sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw==", - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" - } + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "0.0.1", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.0", + "url": "^0.11.0", + "util": "^0.11.0", + "vm-browserify": "^1.0.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true } } }, - "objectorarray": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/objectorarray/-/objectorarray-1.0.5.tgz", - "integrity": "sha512-eJJDYkhJFFbBBAxeh8xW+weHlkI28n2ZdQV/J/DNfWfSKlGEf2xcfAbZTv3riEXHAhL9SVOTs2pRmXiSTf78xg==", - "dev": true + "node-modules-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", + "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=" }, - "octokit-pagination-methods": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/octokit-pagination-methods/-/octokit-pagination-methods-1.1.0.tgz", - "integrity": "sha512-fZ4qZdQ2nxJvtcasX7Ghl+WlWS/d9IgnBIwFZXVNNZUmzpno91SX5bc5vuxiuKoCtK78XxGGNuSCrDC7xYB3OQ==", + "node-releases": { + "version": "1.1.77", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.77.tgz", + "integrity": "sha512-rB1DUFUNAN4Gn9keO2K1efO35IDK7yKHCdCaIMvFO7yUYmmZYeDjnGKle26G4rwj+LKRQpjyUUvMkPglwGCYNQ==", "dev": true }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "requires": { - "ee-first": "1.1.1" - } + "node-stream-zip": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/node-stream-zip/-/node-stream-zip-1.15.0.tgz", + "integrity": "sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw==" }, - "on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" + "node-watch": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/node-watch/-/node-watch-0.7.0.tgz", + "integrity": "sha512-OOBiglke5SlRQT5WYfwXTmYqTfXjcTNBHpalyHLtLxDpQYVpVRkJqabcch1kmwJsjV/J4OZuzEafeb4soqtFZA==", + "dev": true }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "nomnom": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/nomnom/-/nomnom-1.6.2.tgz", + "integrity": "sha1-hKZqJgF0QI/Ft3oY+IjszET7aXE=", + "dev": true, "requires": { - "wrappy": "1" + "colors": "0.5.x", + "underscore": "~1.4.4" } }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "dev": true, "requires": { - "mimic-fn": "^1.0.0" + "hosted-git-info": "^2.1.4", + "is-builtin-module": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "dev": true + } } }, - "open": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz", - "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==", + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "requires": { - "is-wsl": "^1.1.0" + "remove-trailing-separator": "^1.0.1" } }, - "opener": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", - "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", "dev": true }, - "optimize-css-assets-webpack-plugin": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-6.0.1.tgz", - "integrity": "sha512-BshV2UZPfggZLdUfN3zFBbG4sl/DynUI+YCB6fRRDWaqO2OiWN8GPcp4Y0/fEV6B3k9Hzyk3czve3V/8B/SzKQ==", + "normalize-selector": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/normalize-selector/-/normalize-selector-0.2.0.tgz", + "integrity": "sha1-0LFF62kRicY6eNIB3E/bEpPvDAM=", + "dev": true + }, + "normalize-url": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", + "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", + "dev": true + }, + "npm-bundled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", + "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", + "dev": true, + "requires": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-lifecycle": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/npm-lifecycle/-/npm-lifecycle-3.1.5.tgz", + "integrity": "sha512-lDLVkjfZmvmfvpvBzA4vzee9cn+Me4orq0QF8glbswJVEbIcSNWib7qGOffolysc3teCqbbPZZkzbr3GQZTL1g==", "dev": true, "requires": { - "cssnano": "^5.0.2", - "last-call-webpack-plugin": "^3.0.0", - "postcss": "^8.2.1" + "byline": "^5.0.0", + "graceful-fs": "^4.1.15", + "node-gyp": "^5.0.2", + "resolve-from": "^4.0.0", + "slide": "^1.1.6", + "uid-number": "0.0.6", + "umask": "^1.1.0", + "which": "^1.3.1" }, "dependencies": { - "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true - }, - "css-color-names": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-1.0.1.tgz", - "integrity": "sha512-/loXYOch1qU1biStIFsHH8SxTmOseh1IJqFvy8IujXOm1h+QjUdDhkzOrR5HG8K8mlxREj0yfi8ewCHx0eMxzA==", - "dev": true - }, - "css-declaration-sorter": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.1.1.tgz", - "integrity": "sha512-BZ1aOuif2Sb7tQYY1GeCjG7F++8ggnwUkH5Ictw0mrdpqpEd+zWmcPdstnH2TItlb74FqR0DrVEieon221T/1Q==", - "dev": true, - "requires": { - "timsort": "^0.3.0" - } - }, - "css-select": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz", - "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==", + "fs-minipass": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", + "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", "dev": true, "requires": { - "boolbase": "^1.0.0", - "css-what": "^5.0.0", - "domhandler": "^4.2.0", - "domutils": "^2.6.0", - "nth-check": "^2.0.0" + "minipass": "^2.6.0" } }, - "css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "dev": true, "requires": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, - "css-what": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.0.1.tgz", - "integrity": "sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg==", + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", "dev": true }, - "cssnano": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.7.tgz", - "integrity": "sha512-7C0tbb298hef3rq+TtBbMuezBQ9VrFtrQEsPNuBKNVgWny/67vdRsnq8EoNu7TRjAHURgYvWlRIpCUmcMZkRzw==", - "dev": true, - "requires": { - "cssnano-preset-default": "^5.1.3", - "is-resolvable": "^1.1.0", - "lilconfig": "^2.0.3", - "yaml": "^1.10.2" - } - }, - "cssnano-preset-default": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.1.3.tgz", - "integrity": "sha512-qo9tX+t4yAAZ/yagVV3b+QBKeLklQbmgR3wI7mccrDcR+bEk9iHgZN1E7doX68y9ThznLya3RDmR+nc7l6/2WQ==", - "dev": true, - "requires": { - "css-declaration-sorter": "^6.0.3", - "cssnano-utils": "^2.0.1", - "postcss-calc": "^8.0.0", - "postcss-colormin": "^5.2.0", - "postcss-convert-values": "^5.0.1", - "postcss-discard-comments": "^5.0.1", - "postcss-discard-duplicates": "^5.0.1", - "postcss-discard-empty": "^5.0.1", - "postcss-discard-overridden": "^5.0.1", - "postcss-merge-longhand": "^5.0.2", - "postcss-merge-rules": "^5.0.2", - "postcss-minify-font-values": "^5.0.1", - "postcss-minify-gradients": "^5.0.1", - "postcss-minify-params": "^5.0.1", - "postcss-minify-selectors": "^5.1.0", - "postcss-normalize-charset": "^5.0.1", - "postcss-normalize-display-values": "^5.0.1", - "postcss-normalize-positions": "^5.0.1", - "postcss-normalize-repeat-style": "^5.0.1", - "postcss-normalize-string": "^5.0.1", - "postcss-normalize-timing-functions": "^5.0.1", - "postcss-normalize-unicode": "^5.0.1", - "postcss-normalize-url": "^5.0.2", - "postcss-normalize-whitespace": "^5.0.1", - "postcss-ordered-values": "^5.0.2", - "postcss-reduce-initial": "^5.0.1", - "postcss-reduce-transforms": "^5.0.1", - "postcss-svgo": "^5.0.2", - "postcss-unique-selectors": "^5.0.1" - } - }, - "csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "minipass": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", "dev": true, "requires": { - "css-tree": "^1.1.2" + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" } }, - "dom-serializer": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", - "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", + "minizlib": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", + "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", "dev": true, "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" + "minipass": "^2.9.0" } }, - "domelementtype": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", - "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", - "dev": true - }, - "domhandler": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", - "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", + "node-gyp": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-5.1.1.tgz", + "integrity": "sha512-WH0WKGi+a4i4DUt2mHnvocex/xPLp9pYt5R6M2JdFB7pJ7Z34hveZ4nDTGTiLXCkitA9T8HFZjhinBCiVHYcWw==", "dev": true, "requires": { - "domelementtype": "^2.2.0" + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.2", + "mkdirp": "^0.5.1", + "nopt": "^4.0.1", + "npmlog": "^4.1.2", + "request": "^2.88.0", + "rimraf": "^2.6.3", + "semver": "^5.7.1", + "tar": "^4.4.12", + "which": "^1.3.1" } }, - "domutils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.7.0.tgz", - "integrity": "sha512-8eaHa17IwJUPAiB+SoTYBo5mCdeMgdcAoXJ59m6DT1vw+5iLS3gNoqYaRowaBKtGVrOF1Jz4yDTgYKLK2kvfJg==", + "nopt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", + "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", "dev": true, "requires": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" + "abbrev": "1", + "osenv": "^0.1.4" } }, - "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true - }, - "is-absolute-url": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", - "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", - "dev": true - }, - "mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", - "dev": true - }, - "normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, - "nth-check": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.0.tgz", - "integrity": "sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q==", - "dev": true, - "requires": { - "boolbase": "^1.0.0" - } - }, - "postcss-calc": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.0.0.tgz", - "integrity": "sha512-5NglwDrcbiy8XXfPM11F3HeC6hoT9W7GUH/Zi5U/p7u3Irv4rHhdDcIZwG0llHXV4ftsBjpfWMXAnXNl4lnt8g==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.0.2" - } - }, - "postcss-colormin": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.2.0.tgz", - "integrity": "sha512-+HC6GfWU3upe5/mqmxuqYZ9B2Wl4lcoUUNkoaX59nEWV4EtADCMiBqui111Bu8R8IvaZTmqmxrqOAqjbHIwXPw==", - "dev": true, - "requires": { - "browserslist": "^4.16.6", - "caniuse-api": "^3.0.0", - "colord": "^2.0.1", - "postcss-value-parser": "^4.1.0" - } - }, - "postcss-convert-values": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.0.1.tgz", - "integrity": "sha512-C3zR1Do2BkKkCgC0g3sF8TS0koF2G+mN8xxayZx3f10cIRmTaAnpgpRQZjNekTZxM2ciSPoh2IWJm0VZx8NoQg==", + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dev": true, "requires": { - "postcss-value-parser": "^4.1.0" + "glob": "^7.1.3" } }, - "postcss-discard-comments": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.0.1.tgz", - "integrity": "sha512-lgZBPTDvWrbAYY1v5GYEv8fEO/WhKOu/hmZqmCYfrpD6eyDWWzAOsl2rF29lpvziKO02Gc5GJQtlpkTmakwOWg==", - "dev": true - }, - "postcss-discard-duplicates": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.1.tgz", - "integrity": "sha512-svx747PWHKOGpAXXQkCc4k/DsWo+6bc5LsVrAsw+OU+Ibi7klFZCyX54gjYzX4TH+f2uzXjRviLARxkMurA2bA==", - "dev": true - }, - "postcss-discard-empty": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.0.1.tgz", - "integrity": "sha512-vfU8CxAQ6YpMxV2SvMcMIyF2LX1ZzWpy0lqHDsOdaKKLQVQGVP1pzhrI9JlsO65s66uQTfkQBKBD/A5gp9STFw==", + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true }, - "postcss-discard-overridden": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.0.1.tgz", - "integrity": "sha512-Y28H7y93L2BpJhrdUR2SR2fnSsT+3TVx1NmVQLbcnZWwIUpJ7mfcTC6Za9M2PG6w8j7UQRfzxqn8jU2VwFxo3Q==", + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true }, - "postcss-merge-longhand": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.0.2.tgz", - "integrity": "sha512-BMlg9AXSI5G9TBT0Lo/H3PfUy63P84rVz3BjCFE9e9Y9RXQZD3+h3YO1kgTNsNJy7bBc1YQp8DmSnwLIW5VPcw==", - "dev": true, - "requires": { - "css-color-names": "^1.0.1", - "postcss-value-parser": "^4.1.0", - "stylehacks": "^5.0.1" - } - }, - "postcss-merge-rules": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.0.2.tgz", - "integrity": "sha512-5K+Md7S3GwBewfB4rjDeol6V/RZ8S+v4B66Zk2gChRqLTCC8yjnHQ601omj9TKftS19OPGqZ/XzoqpzNQQLwbg==", - "dev": true, - "requires": { - "browserslist": "^4.16.6", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^2.0.1", - "postcss-selector-parser": "^6.0.5", - "vendors": "^1.0.3" + "tar": { + "version": "4.4.19", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz", + "integrity": "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==", + "dev": true, + "requires": { + "chownr": "^1.1.4", + "fs-minipass": "^1.2.7", + "minipass": "^2.9.0", + "minizlib": "^1.3.3", + "mkdirp": "^0.5.5", + "safe-buffer": "^5.2.1", + "yallist": "^3.1.1" }, "dependencies": { - "postcss-selector-parser": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", - "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dev": true, "requires": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" + "minimist": "^1.2.5" } } } }, - "postcss-minify-font-values": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.0.1.tgz", - "integrity": "sha512-7JS4qIsnqaxk+FXY1E8dHBDmraYFWmuL6cgt0T1SWGRO5bzJf8sUoelwa4P88LEWJZweHevAiDKxHlofuvtIoA==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.1.0" - } - }, - "postcss-minify-gradients": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.0.1.tgz", - "integrity": "sha512-odOwBFAIn2wIv+XYRpoN2hUV3pPQlgbJ10XeXPq8UY2N+9ZG42xu45lTn/g9zZ+d70NKSQD6EOi6UiCMu3FN7g==", + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } + } + }, + "npm-normalize-package-bin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", + "dev": true + }, + "npm-package-arg": { + "version": "8.1.5", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.5.tgz", + "integrity": "sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q==", + "dev": true, + "requires": { + "hosted-git-info": "^4.0.1", + "semver": "^7.3.4", + "validate-npm-package-name": "^3.0.0" + }, + "dependencies": { + "hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, "requires": { - "cssnano-utils": "^2.0.1", - "is-color-stop": "^1.1.0", - "postcss-value-parser": "^4.1.0" + "lru-cache": "^6.0.0" } }, - "postcss-minify-params": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.0.1.tgz", - "integrity": "sha512-4RUC4k2A/Q9mGco1Z8ODc7h+A0z7L7X2ypO1B6V8057eVK6mZ6xwz6QN64nHuHLbqbclkX1wyzRnIrdZehTEHw==", + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "requires": { - "alphanum-sort": "^1.0.2", - "browserslist": "^4.16.0", - "cssnano-utils": "^2.0.1", - "postcss-value-parser": "^4.1.0", - "uniqs": "^2.0.0" + "yallist": "^4.0.0" } }, - "postcss-minify-selectors": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.1.0.tgz", - "integrity": "sha512-NzGBXDa7aPsAcijXZeagnJBKBPMYLaJJzB8CQh6ncvyl2sIndLVWfbcDi0SBjRWk5VqEjXvf8tYwzoKf4Z07og==", + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "npm-package-json-lint": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/npm-package-json-lint/-/npm-package-json-lint-5.0.0.tgz", + "integrity": "sha512-a7meq98EnSqniPWNhTj0TMJbTFKr8SPEkQep3iPCQVJWfhQ8fKI5+bUSgNyEbYfzfIrIjMTb0r/tCkX7FX+bYQ==", + "dev": true, + "requires": { + "ajv": "^6.12.0", + "ajv-errors": "^1.0.1", + "chalk": "^4.0.0", + "cosmiconfig": "^6.0.0", + "debug": "^4.1.1", + "globby": "^11.0.0", + "ignore": "^5.1.4", + "is-plain-obj": "^2.1.0", + "jsonc-parser": "^2.2.1", + "log-symbols": "^3.0.0", + "meow": "^6.1.0", + "plur": "^4.0.0", + "semver": "^7.2.2", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.0" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "requires": { - "alphanum-sort": "^1.0.2", - "postcss-selector-parser": "^6.0.5" - }, - "dependencies": { - "postcss-selector-parser": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", - "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", - "dev": true, - "requires": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - } - } + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" } }, - "postcss-normalize-charset": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.0.1.tgz", - "integrity": "sha512-6J40l6LNYnBdPSk+BHZ8SF+HAkS4q2twe5jnocgd+xWpz/mx/5Sa32m3W1AA8uE8XaXN+eg8trIlfu8V9x61eg==", + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true }, - "postcss-normalize-display-values": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.0.1.tgz", - "integrity": "sha512-uupdvWk88kLDXi5HEyI9IaAJTE3/Djbcrqq8YgjvAVuzgVuqIk3SuJWUisT2gaJbZm1H9g5k2w1xXilM3x8DjQ==", - "dev": true, - "requires": { - "cssnano-utils": "^2.0.1", - "postcss-value-parser": "^4.1.0" - } - }, - "postcss-normalize-positions": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.0.1.tgz", - "integrity": "sha512-rvzWAJai5xej9yWqlCb1OWLd9JjW2Ex2BCPzUJrbaXmtKtgfL8dBMOOMTX6TnvQMtjk3ei1Lswcs78qKO1Skrg==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.1.0" - } + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true }, - "postcss-normalize-repeat-style": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.0.1.tgz", - "integrity": "sha512-syZ2itq0HTQjj4QtXZOeefomckiV5TaUO6ReIEabCh3wgDs4Mr01pkif0MeVwKyU/LHEkPJnpwFKRxqWA/7O3w==", + "camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", "dev": true, "requires": { - "cssnano-utils": "^2.0.1", - "postcss-value-parser": "^4.1.0" + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" } }, - "postcss-normalize-string": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.0.1.tgz", - "integrity": "sha512-Ic8GaQ3jPMVl1OEn2U//2pm93AXUcF3wz+OriskdZ1AOuYV25OdgS7w9Xu2LO5cGyhHCgn8dMXh9bO7vi3i9pA==", + "cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", "dev": true, "requires": { - "postcss-value-parser": "^4.1.0" + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" } }, - "postcss-normalize-timing-functions": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.0.1.tgz", - "integrity": "sha512-cPcBdVN5OsWCNEo5hiXfLUnXfTGtSFiBU9SK8k7ii8UD7OLuznzgNRYkLZow11BkQiiqMcgPyh4ZqXEEUrtQ1Q==", + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dev": true, "requires": { - "cssnano-utils": "^2.0.1", - "postcss-value-parser": "^4.1.0" + "ms": "2.1.2" } }, - "postcss-normalize-unicode": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.0.1.tgz", - "integrity": "sha512-kAtYD6V3pK0beqrU90gpCQB7g6AOfP/2KIPCVBKJM2EheVsBQmx/Iof+9zR9NFKLAx4Pr9mDhogB27pmn354nA==", + "globby": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", + "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", "dev": true, "requires": { - "browserslist": "^4.16.0", - "postcss-value-parser": "^4.1.0" + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" } }, - "postcss-normalize-url": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.0.2.tgz", - "integrity": "sha512-k4jLTPUxREQ5bpajFQZpx8bCF2UrlqOTzP9kEqcEnOfwsRshWs2+oAFIHfDQB8GO2PaUaSE0NlTAYtbluZTlHQ==", - "dev": true, - "requires": { - "is-absolute-url": "^3.0.3", - "normalize-url": "^6.0.1", - "postcss-value-parser": "^4.1.0" - } + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true }, - "postcss-normalize-whitespace": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.0.1.tgz", - "integrity": "sha512-iPklmI5SBnRvwceb/XH568yyzK0qRVuAG+a1HFUsFRf11lEJTiQQa03a4RSCQvLKdcpX7XsI1Gen9LuLoqwiqA==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.1.0" - } + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true }, - "postcss-ordered-values": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.0.2.tgz", - "integrity": "sha512-8AFYDSOYWebJYLyJi3fyjl6CqMEG/UVworjiyK1r573I56kb3e879sCJLGvR3merj+fAdPpVplXKQZv+ey6CgQ==", - "dev": true, - "requires": { - "cssnano-utils": "^2.0.1", - "postcss-value-parser": "^4.1.0" - } + "jsonc-parser": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-2.3.1.tgz", + "integrity": "sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg==", + "dev": true }, - "postcss-reduce-initial": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.0.1.tgz", - "integrity": "sha512-zlCZPKLLTMAqA3ZWH57HlbCjkD55LX9dsRyxlls+wfuRfqCi5mSlZVan0heX5cHr154Dq9AfbH70LyhrSAezJw==", + "log-symbols": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", + "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", "dev": true, "requires": { - "browserslist": "^4.16.0", - "caniuse-api": "^3.0.0" + "chalk": "^2.4.2" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + } } }, - "postcss-reduce-transforms": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.0.1.tgz", - "integrity": "sha512-a//FjoPeFkRuAguPscTVmRQUODP+f3ke2HqFNgGPwdYnpeC29RZdCBvGRGTsKpMURb/I3p6jdKoBQ2zI+9Q7kA==", - "dev": true, - "requires": { - "cssnano-utils": "^2.0.1", - "postcss-value-parser": "^4.1.0" - } + "map-obj": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", + "dev": true }, - "postcss-svgo": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.0.2.tgz", - "integrity": "sha512-YzQuFLZu3U3aheizD+B1joQ94vzPfE6BNUcSYuceNxlVnKKsOtdo6hL9/zyC168Q8EwfLSgaDSalsUGa9f2C0A==", + "meow": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/meow/-/meow-6.1.1.tgz", + "integrity": "sha512-3YffViIt2QWgTy6Pale5QpopX/IvU3LPL03jOTqp6pGj3VjesdO/U8CuHMKpnQr4shCNCM5fd5XFFvIIl6JBHg==", "dev": true, "requires": { - "postcss-value-parser": "^4.1.0", - "svgo": "^2.3.0" + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "^4.0.2", + "normalize-package-data": "^2.5.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.13.1", + "yargs-parser": "^18.1.3" } }, - "postcss-unique-selectors": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.0.1.tgz", - "integrity": "sha512-gwi1NhHV4FMmPn+qwBNuot1sG1t2OmacLQ/AX29lzyggnjd+MnVD5uqQmpXO3J17KGL2WAxQruj1qTd3H0gG/w==", + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", "dev": true, "requires": { - "alphanum-sort": "^1.0.2", - "postcss-selector-parser": "^6.0.5", - "uniqs": "^2.0.0" + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" }, "dependencies": { - "postcss-selector-parser": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", - "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", - "dev": true, - "requires": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - } + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true } } }, - "postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "stylehacks": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.0.1.tgz", - "integrity": "sha512-Es0rVnHIqbWzveU1b24kbw92HsebBepxfcqe5iix7t9j0PQqhs0IxXVXv0pY2Bxa08CgMkzD6OWql7kbGOuEdA==", - "dev": true, - "requires": { - "browserslist": "^4.16.0", - "postcss-selector-parser": "^6.0.4" - } - }, - "svgo": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.3.1.tgz", - "integrity": "sha512-riDDIQgXpEnn0BEl9Gvhh1LNLIyiusSpt64IR8upJu7MwxnzetmF/Y57pXQD2NMX2lVyMRzXt5f2M5rO4wG7Dw==", + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "requires": { - "@trysound/sax": "0.1.1", - "chalk": "^4.1.0", - "commander": "^7.1.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.2", - "csso": "^4.2.0", - "stable": "^0.1.8" + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } } }, - "vendors": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", - "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==", + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true }, - "yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true - } - } - }, - "optionator": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", - "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", - "dev": true, - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.4", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "wordwrap": "~1.0.0" - } - }, - "options": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", - "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=" - }, - "ora": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/ora/-/ora-4.0.2.tgz", - "integrity": "sha512-YUOZbamht5mfLxPmk4M35CD/5DuOkAacxlEUbStVXpBAt4fyhBf+vZHI/HRkI++QUp3sNoeA2Gw4C+hi4eGSig==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.2.0", - "is-interactive": "^1.0.0", - "log-symbols": "^3.0.0", - "strip-ansi": "^5.2.0", - "wcwidth": "^1.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", "dev": true }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" } }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", "dev": true, "requires": { - "restore-cursor": "^3.1.0" + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" } }, - "log-symbols": { + "strip-indent": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", - "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", "dev": true, "requires": { - "chalk": "^2.4.2" + "min-indent": "^1.0.0" } }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true }, - "onetime": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", - "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } + "trim-newlines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", + "dev": true }, - "restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } + "type-fest": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", + "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", + "dev": true }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "dev": true, "requires": { - "ansi-regex": "^4.1.0" + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" } } } }, - "os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", - "dev": true - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true - }, - "os-name": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-name/-/os-name-3.1.0.tgz", - "integrity": "sha512-h8L+8aNjNcMpo/mAIBPn5PXCM16iyPGjHNWo6U1YO8sJTMHtEtyczI6QJnLoplswm6goopQkqc7OAnjhWcugVg==", - "dev": true, - "requires": { - "macos-release": "^2.2.0", - "windows-release": "^3.1.0" - } - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" - }, - "osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "dev": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "overlayscrollbars": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/overlayscrollbars/-/overlayscrollbars-1.13.1.tgz", - "integrity": "sha512-gIQfzgGgu1wy80EB4/6DaJGHMEGmizq27xHIESrzXq0Y/J0Ay1P3DWk6tuVmEPIZH15zaBlxeEJOqdJKmowHCQ==", - "dev": true - }, - "p-all": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-all/-/p-all-2.1.0.tgz", - "integrity": "sha512-HbZxz5FONzz/z2gJfk6bFca0BCiSRF8jU3yCsWOen/vR6lZjfPOu/e7L3uFzTW1i0H8TlC3vqQstEJPQL4/uLA==", - "dev": true, - "requires": { - "p-map": "^2.0.0" - }, - "dependencies": { - "p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", - "dev": true - } - } - }, - "p-cancelable": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.0.0.tgz", - "integrity": "sha512-wvPXDmbMmu2ksjkB4Z3nZWTSkJEb9lqVdMaCKpZUGJG9TMiNp9XcbG3fn9fPKjem04fJMJnXoyFPk2FmgiaiNg==", - "dev": true - }, - "p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", - "dev": true - }, - "p-each-series": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", - "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==", - "dev": true - }, - "p-event": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-event/-/p-event-4.1.0.tgz", - "integrity": "sha512-4vAd06GCsgflX4wHN1JqrMzBh/8QZ4j+rzp0cd2scXRwuBEv+QR3wrVA5aLhWDLw4y2WgDKvzWF3CCLmVM1UgA==", - "dev": true, - "requires": { - "p-timeout": "^2.0.1" - } - }, - "p-filter": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-2.1.0.tgz", - "integrity": "sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==", + "npm-packlist": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-3.0.0.tgz", + "integrity": "sha512-L/cbzmutAwII5glUcf2DBRNY/d0TFd4e/FnaZigJV6JD85RHZXJFGwCndjMWiiViiWSsWt3tiOLpI3ByTnIdFQ==", "dev": true, "requires": { - "p-map": "^2.0.0" + "glob": "^7.1.6", + "ignore-walk": "^4.0.1", + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1" }, "dependencies": { - "p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", - "dev": true - } - } - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" - }, - "p-is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", - "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", - "dev": true - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-map": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", - "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "p-map-series": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-map-series/-/p-map-series-1.0.0.tgz", - "integrity": "sha1-v5j+V1cFZYqeE1G++4WuTB8Hvco=", - "dev": true, - "requires": { - "p-reduce": "^1.0.0" - } - }, - "p-pipe": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-1.2.0.tgz", - "integrity": "sha1-SxoROZoRUgpneQ7loMHViB1r7+k=", - "dev": true - }, - "p-queue": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-4.0.0.tgz", - "integrity": "sha512-3cRXXn3/O0o3+eVmUroJPSj/esxoEFIm0ZOno/T+NzG/VZgPOqQ8WKmlNqubSEpZmCIngEy34unkHGg83ZIBmg==", - "dev": true, - "requires": { - "eventemitter3": "^3.1.0" - } - }, - "p-reduce": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz", - "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=", - "dev": true - }, - "p-timeout": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz", - "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==", - "dev": true, - "requires": { - "p-finally": "^1.0.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, - "p-waterfall": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-waterfall/-/p-waterfall-1.0.0.tgz", - "integrity": "sha1-ftlLPOszMngjU69qrhGqn8I1uwA=", - "dev": true, - "requires": { - "p-reduce": "^1.0.0" - } - }, - "pako": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.8.tgz", - "integrity": "sha512-6i0HVbUfcKaTv+EG8ZTr75az7GFXcLYk9UyLEg7Notv/Ma+z/UG3TCoz6GiNeOrn1E/e63I0X/Hpw18jHOTUnA==" - }, - "parallel-transform": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz", - "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", - "dev": true, - "requires": { - "cyclist": "~0.2.2", - "inherits": "^2.0.3", - "readable-stream": "^2.1.5" - } - }, - "param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", - "dev": true, - "requires": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "requires": { - "callsites": "^3.0.0" - } - }, - "parse-asn1": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz", - "integrity": "sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==", - "dev": true, - "requires": { - "asn1.js": "^4.0.0", - "browserify-aes": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, - "parse-entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-1.1.2.tgz", - "integrity": "sha512-5N9lmQ7tmxfXf+hO3X6KRG6w7uYO/HL9fHalSySTdyn63C3WNvTM/1R8tn1u1larNcEbo3Slcy2bsVDQqvEpUg==", - "dev": true, - "requires": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" - } - }, - "parse-github-repo-url": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/parse-github-repo-url/-/parse-github-repo-url-1.4.1.tgz", - "integrity": "sha1-nn2LslKmy2ukJZUGC3v23z28H1A=", - "dev": true - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "^1.2.0" - } - }, - "parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", - "dev": true - }, - "parse-path": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-4.0.2.tgz", - "integrity": "sha512-HSqVz6iuXSiL8C1ku5Gl1Z5cwDd9Wo0q8CoffdAghP6bz8pJa1tcMC+m4N+z6VAS8QdksnIGq1TB6EgR4vPR6w==", - "dev": true, - "requires": { - "is-ssh": "^1.3.0", - "protocols": "^1.4.0" - } - }, - "parse-url": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-5.0.2.tgz", - "integrity": "sha512-Czj+GIit4cdWtxo3ISZCvLiUjErSo0iI3wJ+q9Oi3QuMYTI6OZu+7cewMWZ+C1YAnKhYTk6/TLuhIgCypLthPA==", - "dev": true, - "requires": { - "is-ssh": "^1.3.0", - "normalize-url": "^3.3.0", - "parse-path": "^4.0.0", - "protocols": "^1.4.0" - } - }, - "parse5": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", - "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } + } }, - "pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "npm-pick-manifest": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-3.0.2.tgz", + "integrity": "sha512-wNprTNg+X5nf+tDi+hbjdHhM4bX+mKqv6XmPh7B5eG+QY9VARfQPfCEH013H5GqfNj6ee8Ij2fg8yk0mzps1Vw==", "dev": true, "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" + "figgy-pudding": "^3.5.1", + "npm-package-arg": "^6.0.0", + "semver": "^5.4.1" + }, + "dependencies": { + "npm-package-arg": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-6.1.1.tgz", + "integrity": "sha512-qBpssaL3IOZWi5vEKUKW0cO7kzLeT+EQO9W8RsLOZf76KF9E/K9+wH0C7t06HXPpaH8WH5xF1MExLuCwbTqRUg==", + "dev": true, + "requires": { + "hosted-git-info": "^2.7.1", + "osenv": "^0.1.5", + "semver": "^5.6.0", + "validate-npm-package-name": "^3.0.0" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } } }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" - }, - "patch-package": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-6.2.2.tgz", - "integrity": "sha512-YqScVYkVcClUY0v8fF0kWOjDYopzIM8e3bj/RU1DPeEF14+dCGm6UeOYm4jvCyxqIEQ5/eJzmbWfDWnUleFNMg==", + "npm-run-all": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", + "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", "dev": true, "requires": { - "@yarnpkg/lockfile": "^1.1.0", - "chalk": "^2.4.2", + "ansi-styles": "^3.2.1", + "chalk": "^2.4.1", "cross-spawn": "^6.0.5", - "find-yarn-workspace-root": "^1.2.1", - "fs-extra": "^7.0.1", - "is-ci": "^2.0.0", - "klaw-sync": "^6.0.0", - "minimist": "^1.2.0", - "rimraf": "^2.6.3", - "semver": "^5.6.0", - "slash": "^2.0.0", - "tmp": "^0.0.33" + "memorystream": "^0.3.1", + "minimatch": "^3.0.4", + "pidtree": "^0.3.0", + "read-pkg": "^3.0.0", + "shell-quote": "^1.6.1", + "string.prototype.padend": "^3.0.0" }, "dependencies": { "chalk": { @@ -47175,38 +46837,43 @@ "which": "^1.2.9" } }, - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", "dev": true, "requires": { "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" } }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "dev": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" } }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", "dev": true, "requires": { - "glob": "^7.1.3" + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" } }, "semver": { @@ -47215,619 +46882,757 @@ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true }, - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true } } }, - "path-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", - "dev": true - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" - }, - "path-parse": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", - "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=" - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", - "dev": true + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "requires": { + "path-key": "^2.0.0" + } }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", "dev": true, "requires": { - "pify": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" } }, - "pbkdf2": { - "version": "3.0.17", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", - "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", + "nth-check": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz", + "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=", "dev": true, "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" + "boolbase": "~1.0.0" } }, - "pegjs": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/pegjs/-/pegjs-0.10.0.tgz", - "integrity": "sha1-z4uvrm7d/0tafvsYUmnqr0YQ3b0=" + "nullthrows": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", + "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==" }, - "pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", + "num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", "dev": true }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", "dev": true }, - "phpegjs": { - "version": "1.0.0-beta7", - "resolved": "https://registry.npmjs.org/phpegjs/-/phpegjs-1.0.0-beta7.tgz", - "integrity": "sha1-uLbthQGYB//Q7+ID4AKj5e2LTZQ=" + "nwsapi": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", + "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", + "dev": true }, - "picomatch": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.0.7.tgz", - "integrity": "sha512-oLHIdio3tZ0qH76NybpeneBhYVj0QFTfXEFTc/B3zKQspYfYYkWYgFsmzo+4kvId/bQRcNkVeguI3y+CD22BtA==" + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "ob1": { + "version": "0.66.2", + "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.66.2.tgz", + "integrity": "sha512-RFewnL/RjE0qQBOuM+2bbY96zmJPIge/aDtsiDbLSb+MOiK8CReAhBHDgL+zrA3F1hQk00lMWpUwYcep750plA==" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-filter": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/object-filter/-/object-filter-1.0.2.tgz", + "integrity": "sha1-rwt5f/6+r4pSxmN87b6IFs/sG8g=", "dev": true }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "object-inspect": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", + "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==", "dev": true }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", "dev": true, "requires": { - "pinkie": "^2.0.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "dependencies": { + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + } } }, - "pirates": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", - "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", "requires": { - "node-modules-regexp": "^1.0.0" + "isobject": "^3.0.0" } }, - "pkg-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", - "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", - "dev": true, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", "requires": { - "find-up": "^2.1.0" + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" } }, - "pkg-up": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", - "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", + "object.fromentries": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.3.tgz", + "integrity": "sha512-IDUSMXs6LOSJBWE++L0lzIbSqHl9KDCfff2x/JSEIDtEUavUnyMYC2ZGay/04Zq4UT8lvd4xNhU4/YHKibAOlw==", "dev": true, "requires": { - "find-up": "^3.0.0" + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1", + "has": "^1.0.3" }, "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "dev": true, "requires": { - "locate-path": "^3.0.0" + "object-keys": "^1.0.12" } }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "es-abstract": { + "version": "1.18.0-next.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", + "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", "dev": true, "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-negative-zero": "^2.0.0", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + }, + "dependencies": { + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + } } }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, "requires": { - "p-try": "^2.0.0" + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" } }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true + }, + "is-callable": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", + "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", + "dev": true + }, + "is-regex": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", + "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", "dev": true, "requires": { - "p-limit": "^2.0.0" + "has-symbols": "^1.0.1" } }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + }, + "object-inspect": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", + "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==", "dev": true - } - } - }, - "platform": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/platform/-/platform-1.3.5.tgz", - "integrity": "sha512-TuvHS8AOIZNAlE77WUDiR4rySV/VMptyMfcfeoMgs4P8apaZM3JrnbzBiixKUv+XR6i+BXrQh8WAnjaSPFO65Q==", - "dev": true - }, - "please-upgrade-node": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", - "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", - "dev": true, - "requires": { - "semver-compare": "^1.0.0" - } - }, - "plist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.2.tgz", - "integrity": "sha512-MSrkwZBdQ6YapHy87/8hDU8MnIcyxBKjeF+McXnr5A9MtffPewTs7G3hlpodT5TacyfIyFTaJEhh3GGcmasTgQ==", - "requires": { - "base64-js": "^1.5.1", - "xmlbuilder": "^9.0.7", - "xmldom": "^0.5.0" - }, - "dependencies": { - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" - } - } - }, - "plur": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/plur/-/plur-4.0.0.tgz", - "integrity": "sha512-4UGewrYgqDFw9vV6zNV+ADmPAUAfJPKtGvb/VdpQAx25X5f3xXdGdyOEVFwkl8Hl/tl7+xbeHqSEM+D5/TirUg==", - "dev": true, - "requires": { - "irregular-plurals": "^3.2.0" - } - }, - "pnp-webpack-plugin": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz", - "integrity": "sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg==", - "dev": true, - "requires": { - "ts-pnp": "^1.1.6" - } - }, - "polished": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/polished/-/polished-4.1.3.tgz", - "integrity": "sha512-ocPAcVBUOryJEKe0z2KLd1l9EBa1r5mSwlKpExmrLzsnIzJo4axsoU9O2BjOTkDGDT4mZ0WFE5XKTlR3nLnZOA==", - "dev": true, - "requires": { - "@babel/runtime": "^7.14.0" - }, - "dependencies": { - "@babel/runtime": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.6.tgz", - "integrity": "sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg==", + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", "dev": true, "requires": { - "regenerator-runtime": "^0.13.4" + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "dependencies": { + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + } } - } - } - }, - "popmotion": { - "version": "9.3.6", - "resolved": "https://registry.npmjs.org/popmotion/-/popmotion-9.3.6.tgz", - "integrity": "sha512-ZTbXiu6zIggXzIliMi8LGxXBF5ST+wkpXGEjeTUDUOCdSQ356hij/xjeUdv0F8zCQNeqB1+PR5/BB+gC+QLAPw==", - "requires": { - "framesync": "5.3.0", - "hey-listen": "^1.0.8", - "style-value-types": "4.1.4", - "tslib": "^2.1.0" - } - }, - "portfinder": { - "version": "1.0.25", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.25.tgz", - "integrity": "sha512-6ElJnHBbxVA1XSLgBp7G1FiCkQdlqGzuF7DswL5tcea+E8UpuvPU7beVAjjRwCioTS9ZluNbu+ZyRvgTsmqEBg==", - "dev": true, - "requires": { - "async": "^2.6.2", - "debug": "^3.1.1", - "mkdirp": "^0.5.1" - }, - "dependencies": { - "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + }, + "string.prototype.trimend": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz", + "integrity": "sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw==", "dev": true, "requires": { - "lodash": "^4.17.14" + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" } }, - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "string.prototype.trimstart": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz", + "integrity": "sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg==", "dev": true, "requires": { - "ms": "^2.1.1" + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true } } }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" - }, - "postcss": { - "version": "8.2.15", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.15.tgz", - "integrity": "sha512-2zO3b26eJD/8rb106Qu2o7Qgg52ND5HPjcyQiK2B98O388h43A448LCslC0dI2P97wCAQRJsFvwTRcXxTKds+Q==", + "object.getownpropertydescriptors": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", + "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", "dev": true, "requires": { - "colorette": "^1.2.2", - "nanoid": "^3.1.23", - "source-map": "^0.6.1" - }, - "dependencies": { - "colorette": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", - "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", - "dev": true - }, - "nanoid": { - "version": "3.1.23", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", - "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "define-properties": "^1.1.2", + "es-abstract": "^1.5.1" } }, - "postcss-calc": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.5.tgz", - "integrity": "sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg==", + "object.hasown": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.0.tgz", + "integrity": "sha512-MhjYRfj3GBlhSkDHo6QmvgjRLXQ2zndabdf3nX0yTyZK9rPfxb6uRpAac8HXNLy1GpqWtZ81Qh4v3uOls2sRAg==", "dev": true, "requires": { - "postcss": "^7.0.27", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.0.2" + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "es-abstract": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", + "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.1", + "is-string": "^1.0.7", + "is-weakref": "^1.0.1", + "object-inspect": "^1.11.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" }, "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true } } }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" } }, - "postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", - "dev": true + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", "dev": true }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" } - } - } - }, - "postcss-colormin": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", - "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", - "dev": true, - "requires": { - "browserslist": "^4.0.0", - "color": "^3.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + }, + "is-callable": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "dev": true + }, + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" } }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "has-tostringtag": "^1.0.0" } }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "has-symbols": "^1.0.2" } - } - } - }, - "postcss-convert-values": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", - "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", - "dev": true, - "requires": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + }, + "object-inspect": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", + "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", + "dev": true + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" }, "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true } } }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", "dev": true, "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" } }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true + "string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" } } } }, - "postcss-discard-comments": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", - "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", - "dev": true, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "requires": { + "isobject": "^3.0.1" + } + }, + "object.values": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.2.tgz", + "integrity": "sha512-MYC0jvJopr8EK6dPBiO8Nb9mvjdypOachO5REGk6MXzujbBrAisKo3HmdEI6kZDL6fC31Mwee/5YbtMebixeag==", "requires": { - "postcss": "^7.0.0" + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1", + "has": "^1.0.3" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "object-keys": "^1.0.12" + } + }, + "es-abstract": { + "version": "1.18.0-next.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.2.tgz", + "integrity": "sha512-Ih4ZMFHEtZupnUh6497zEL4y2+w8+1ljnCyaTa+adcoafI1GOvMwFlDjBLfWR7y9VLfrjRJe9ocuHY1PSR9jjw==", + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.1", + "object-inspect": "^1.9.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.3", + "string.prototype.trimstart": "^1.0.3" }, "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", "requires": { - "has-flag": "^3.0.0" + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" } } }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" } }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, + "is-callable": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", + "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==" + }, + "is-regex": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", + "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", + "requires": { + "has-symbols": "^1.0.1" + } + }, + "is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "requires": { + "has-symbols": "^1.0.1" + } + }, + "object-inspect": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", + "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==" + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "dependencies": { + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + } + } + }, + "string.prototype.trimend": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz", + "integrity": "sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw==", "requires": { - "has-flag": "^3.0.0" + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" } } } }, - "postcss-discard-duplicates": { + "objectorarray": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/objectorarray/-/objectorarray-1.0.5.tgz", + "integrity": "sha512-eJJDYkhJFFbBBAxeh8xW+weHlkI28n2ZdQV/J/DNfWfSKlGEf2xcfAbZTv3riEXHAhL9SVOTs2pRmXiSTf78xg==", + "dev": true + }, + "obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "octokit-pagination-methods": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/octokit-pagination-methods/-/octokit-pagination-methods-1.1.0.tgz", + "integrity": "sha512-fZ4qZdQ2nxJvtcasX7Ghl+WlWS/d9IgnBIwFZXVNNZUmzpno91SX5bc5vuxiuKoCtK78XxGGNuSCrDC7xYB3OQ==", + "dev": true + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "open": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz", + "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==", + "requires": { + "is-wsl": "^1.1.0" + } + }, + "opener": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "dev": true + }, + "optionator": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.4", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "wordwrap": "~1.0.0" + } + }, + "options": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", + "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=" + }, + "ora": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", - "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", + "resolved": "https://registry.npmjs.org/ora/-/ora-4.0.2.tgz", + "integrity": "sha512-YUOZbamht5mfLxPmk4M35CD/5DuOkAacxlEUbStVXpBAt4fyhBf+vZHI/HRkI++QUp3sNoeA2Gw4C+hi4eGSig==", "dev": true, "requires": { - "postcss": "^7.0.0" + "chalk": "^2.4.2", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.2.0", + "is-interactive": "^1.0.0", + "log-symbols": "^3.0.0", + "strip-ansi": "^5.2.0", + "wcwidth": "^1.0.1" }, "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -47837,517 +47642,419 @@ "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "restore-cursor": "^3.1.0" } }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "log-symbols": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", + "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "chalk": "^2.4.2" } - } - } - }, - "postcss-discard-empty": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", - "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", - "dev": true, - "requires": { - "postcss": "^7.0.0" - }, - "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "onetime": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", + "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "mimic-fn": "^2.1.0" } }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dev": true, "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" } }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "ansi-regex": "^4.1.0" } } } }, - "postcss-discard-overridden": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", - "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", + "os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", + "dev": true + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, + "os-name": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/os-name/-/os-name-3.1.0.tgz", + "integrity": "sha512-h8L+8aNjNcMpo/mAIBPn5PXCM16iyPGjHNWo6U1YO8sJTMHtEtyczI6QJnLoplswm6goopQkqc7OAnjhWcugVg==", "dev": true, "requires": { - "postcss": "^7.0.0" - }, - "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "macos-release": "^2.2.0", + "windows-release": "^3.1.0" } }, - "postcss-flexbugs-fixes": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-4.2.1.tgz", - "integrity": "sha512-9SiofaZ9CWpQWxOwRh1b/r85KD5y7GgvsNt1056k6OYLvWUun0czCvogfJgylC22uJTwW1KzY3Gz65NZRlvoiQ==", + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", "dev": true, "requires": { - "postcss": "^7.0.26" + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "overlayscrollbars": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/overlayscrollbars/-/overlayscrollbars-1.13.1.tgz", + "integrity": "sha512-gIQfzgGgu1wy80EB4/6DaJGHMEGmizq27xHIESrzXq0Y/J0Ay1P3DWk6tuVmEPIZH15zaBlxeEJOqdJKmowHCQ==", + "dev": true + }, + "p-all": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-all/-/p-all-2.1.0.tgz", + "integrity": "sha512-HbZxz5FONzz/z2gJfk6bFca0BCiSRF8jU3yCsWOen/vR6lZjfPOu/e7L3uFzTW1i0H8TlC3vqQstEJPQL4/uLA==", + "dev": true, + "requires": { + "p-map": "^2.0.0" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, - "postcss-html": { - "version": "0.36.0", - "resolved": "https://registry.npmjs.org/postcss-html/-/postcss-html-0.36.0.tgz", - "integrity": "sha512-HeiOxGcuwID0AFsNAL0ox3mW6MHH5cstWN1Z3Y+n6H+g12ih7LHdYxWwEA/QmrebctLjo79xz9ouK3MroHwOJw==", + "p-cancelable": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.0.0.tgz", + "integrity": "sha512-wvPXDmbMmu2ksjkB4Z3nZWTSkJEb9lqVdMaCKpZUGJG9TMiNp9XcbG3fn9fPKjem04fJMJnXoyFPk2FmgiaiNg==", + "dev": true + }, + "p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", + "dev": true + }, + "p-event": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-4.1.0.tgz", + "integrity": "sha512-4vAd06GCsgflX4wHN1JqrMzBh/8QZ4j+rzp0cd2scXRwuBEv+QR3wrVA5aLhWDLw4y2WgDKvzWF3CCLmVM1UgA==", + "dev": true, + "requires": { + "p-timeout": "^2.0.1" + } + }, + "p-filter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-2.1.0.tgz", + "integrity": "sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==", "dev": true, "requires": { - "htmlparser2": "^3.10.0" + "p-map": "^2.0.0" }, "dependencies": { - "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", "dev": true - }, - "htmlparser2": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", - "dev": true, - "requires": { - "domelementtype": "^1.3.1", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.1.1" - } - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } } } }, - "postcss-less": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/postcss-less/-/postcss-less-3.1.4.tgz", - "integrity": "sha512-7TvleQWNM2QLcHqvudt3VYjULVB49uiW6XzEUFmvwHzvsOEF5MwBrIXZDJQvJNFGjJQTzSzZnDoCJ8h/ljyGXA==", + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, "requires": { - "postcss": "^7.0.14" + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "p-map-series": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-map-series/-/p-map-series-1.0.0.tgz", + "integrity": "sha1-v5j+V1cFZYqeE1G++4WuTB8Hvco=", + "dev": true, + "requires": { + "p-reduce": "^1.0.0" + } + }, + "p-pipe": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-1.2.0.tgz", + "integrity": "sha1-SxoROZoRUgpneQ7loMHViB1r7+k=", + "dev": true + }, + "p-queue": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-4.0.0.tgz", + "integrity": "sha512-3cRXXn3/O0o3+eVmUroJPSj/esxoEFIm0ZOno/T+NzG/VZgPOqQ8WKmlNqubSEpZmCIngEy34unkHGg83ZIBmg==", + "dev": true, + "requires": { + "eventemitter3": "^3.1.0" + } + }, + "p-reduce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz", + "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=", + "dev": true + }, + "p-retry": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.1.tgz", + "integrity": "sha512-e2xXGNhZOZ0lfgR9kL34iGlU8N/KO0xZnQxVEwdeOvpqNDQfdnxIYizvWtK8RglUa3bGqI8g0R/BdfzLMxRkiA==", + "dev": true, + "requires": { + "@types/retry": "^0.12.0", + "retry": "^0.13.1" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, - "postcss-loader": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-4.2.0.tgz", - "integrity": "sha512-mqgScxHqbiz1yxbnNcPdKYo/6aVt+XExURmEbQlviFVWogDbM4AJ0A/B+ZBpYsJrTRxKw7HyRazg9x0Q9SWwLA==", + "p-timeout": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz", + "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==", + "dev": true, + "requires": { + "p-finally": "^1.0.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "p-waterfall": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-waterfall/-/p-waterfall-1.0.0.tgz", + "integrity": "sha1-ftlLPOszMngjU69qrhGqn8I1uwA=", + "dev": true, + "requires": { + "p-reduce": "^1.0.0" + } + }, + "pako": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.8.tgz", + "integrity": "sha512-6i0HVbUfcKaTv+EG8ZTr75az7GFXcLYk9UyLEg7Notv/Ma+z/UG3TCoz6GiNeOrn1E/e63I0X/Hpw18jHOTUnA==", + "dev": true + }, + "parallel-transform": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz", + "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", + "dev": true, + "requires": { + "cyclist": "~0.2.2", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + } + }, + "param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dev": true, + "requires": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-asn1": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "dev": true, + "requires": { + "asn1.js": "^5.2.0", + "browserify-aes": "^1.0.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "parse-entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-1.1.2.tgz", + "integrity": "sha512-5N9lmQ7tmxfXf+hO3X6KRG6w7uYO/HL9fHalSySTdyn63C3WNvTM/1R8tn1u1larNcEbo3Slcy2bsVDQqvEpUg==", + "dev": true, + "requires": { + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" + } + }, + "parse-github-repo-url": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/parse-github-repo-url/-/parse-github-repo-url-1.4.1.tgz", + "integrity": "sha1-nn2LslKmy2ukJZUGC3v23z28H1A=", + "dev": true + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", + "dev": true + }, + "parse-path": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-4.0.2.tgz", + "integrity": "sha512-HSqVz6iuXSiL8C1ku5Gl1Z5cwDd9Wo0q8CoffdAghP6bz8pJa1tcMC+m4N+z6VAS8QdksnIGq1TB6EgR4vPR6w==", + "dev": true, + "requires": { + "is-ssh": "^1.3.0", + "protocols": "^1.4.0" + } + }, + "parse-url": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-5.0.2.tgz", + "integrity": "sha512-Czj+GIit4cdWtxo3ISZCvLiUjErSo0iI3wJ+q9Oi3QuMYTI6OZu+7cewMWZ+C1YAnKhYTk6/TLuhIgCypLthPA==", "dev": true, "requires": { - "cosmiconfig": "^7.0.0", - "klona": "^2.0.4", - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0", - "semver": "^7.3.4" - }, - "dependencies": { - "@types/json-schema": { - "version": "7.0.7", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", - "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==", - "dev": true - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true - }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.6", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - }, - "semver": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } + "is-ssh": "^1.3.0", + "normalize-url": "^3.3.0", + "parse-path": "^4.0.0", + "protocols": "^1.4.0" } }, - "postcss-media-query-parser": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", - "integrity": "sha1-J7Ocb02U+Bsac7j3Y1HGCeXO8kQ=", - "dev": true + "parse5": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", + "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", + "dev": true, + "requires": { + "@types/node": "*" + } }, - "postcss-merge-longhand": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", - "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", "dev": true, "requires": { - "css-color-names": "0.0.4", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "stylehacks": "^4.0.0" - }, - "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "no-case": "^3.0.4", + "tslib": "^2.0.3" } }, - "postcss-merge-rules": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", - "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" + }, + "patch-package": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-6.2.2.tgz", + "integrity": "sha512-YqScVYkVcClUY0v8fF0kWOjDYopzIM8e3bj/RU1DPeEF14+dCGm6UeOYm4jvCyxqIEQ5/eJzmbWfDWnUleFNMg==", "dev": true, "requires": { - "browserslist": "^4.0.0", - "caniuse-api": "^3.0.0", - "cssnano-util-same-parent": "^4.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0", - "vendors": "^1.0.0" + "@yarnpkg/lockfile": "^1.1.0", + "chalk": "^2.4.2", + "cross-spawn": "^6.0.5", + "find-yarn-workspace-root": "^1.2.1", + "fs-extra": "^7.0.1", + "is-ci": "^2.0.0", + "klaw-sync": "^6.0.0", + "minimist": "^1.2.0", + "rimraf": "^2.6.3", + "semver": "^5.6.0", + "slash": "^2.0.0", + "tmp": "^0.0.33" }, "dependencies": { "chalk": { @@ -48359,880 +48066,547 @@ "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "dev": true, - "requires": { - "is-obj": "^2.0.0" } }, - "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dev": true - }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } }, - "postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", "dev": true, "requires": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" } }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss-minify-font-values": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", - "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", - "dev": true, - "requires": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dev": true, "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "glob": "^7.1.3" } }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true } } }, - "postcss-minify-gradients": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", - "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", + "path-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", + "dev": true + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "dev": true, "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "is-color-stop": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "pify": "^3.0.0" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, - "postcss-minify-params": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", - "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", + "pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", "dev": true, "requires": { - "alphanum-sort": "^1.0.0", - "browserslist": "^4.0.0", - "cssnano-util-get-arguments": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "uniqs": "^2.0.0" - }, - "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "pegjs": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/pegjs/-/pegjs-0.10.0.tgz", + "integrity": "sha1-z4uvrm7d/0tafvsYUmnqr0YQ3b0=" + }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", + "dev": true + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + }, + "phpegjs": { + "version": "1.0.0-beta7", + "resolved": "https://registry.npmjs.org/phpegjs/-/phpegjs-1.0.0-beta7.tgz", + "integrity": "sha1-uLbthQGYB//Q7+ID4AKj5e2LTZQ=" + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "picomatch": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.0.7.tgz", + "integrity": "sha512-oLHIdio3tZ0qH76NybpeneBhYVj0QFTfXEFTc/B3zKQspYfYYkWYgFsmzo+4kvId/bQRcNkVeguI3y+CD22BtA==" + }, + "pidtree": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", + "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", + "dev": true + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "^2.0.0" + } + }, + "pirates": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", + "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", + "requires": { + "node-modules-regexp": "^1.0.0" + } + }, + "pixelmatch": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-5.2.1.tgz", + "integrity": "sha512-WjcAdYSnKrrdDdqTcVEY7aB7UhhwjYQKYhHiBXdJef0MOaQeYpUdQ+iVyBLa5YBKS8MPVPPMX7rpOByISLpeEQ==", + "dev": true, + "requires": { + "pngjs": "^4.0.1" + }, + "dependencies": { + "pngjs": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-4.0.1.tgz", + "integrity": "sha512-rf5+2/ioHeQxR6IxuYNYGFytUyG3lma/WW1nsmjeHlWwtb2aByla6dkVc8pmJ9nplzkTA0q2xx7mMWrOTqT4Gg==", "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, - "postcss-minify-selectors": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", - "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", + "pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", "dev": true, "requires": { - "alphanum-sort": "^1.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0" + "find-up": "^2.1.0" + } + }, + "pkg-up": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", + "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", + "dev": true, + "requires": { + "find-up": "^3.0.0" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "locate-path": "^3.0.0" } }, - "dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { - "is-obj": "^2.0.0" + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" } }, - "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dev": true - }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "p-try": "^2.0.0" } }, - "postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" + "p-limit": "^2.0.0" } }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, - "postcss-modules-extract-imports": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz", - "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==", + "platform": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/platform/-/platform-1.3.5.tgz", + "integrity": "sha512-TuvHS8AOIZNAlE77WUDiR4rySV/VMptyMfcfeoMgs4P8apaZM3JrnbzBiixKUv+XR6i+BXrQh8WAnjaSPFO65Q==", + "dev": true + }, + "please-upgrade-node": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", + "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", "dev": true, "requires": { - "postcss": "^7.0.5" + "semver-compare": "^1.0.0" + } + }, + "plist": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.5.tgz", + "integrity": "sha512-83vX4eYdQp3vP9SxuYgEM/G/pJQqLUz/V/xzPrzruLs7fz7jxGQ1msZ/mg1nwZxUSuOp4sb+/bEIbRrbzZRxDA==", + "requires": { + "base64-js": "^1.5.1", + "xmlbuilder": "^9.0.7" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" } } }, - "postcss-modules-local-by-default": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz", - "integrity": "sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw==", + "plur": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/plur/-/plur-4.0.0.tgz", + "integrity": "sha512-4UGewrYgqDFw9vV6zNV+ADmPAUAfJPKtGvb/VdpQAx25X5f3xXdGdyOEVFwkl8Hl/tl7+xbeHqSEM+D5/TirUg==", "dev": true, "requires": { - "icss-utils": "^4.1.1", - "postcss": "^7.0.32", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - }, - "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "irregular-plurals": "^3.2.0" } }, - "postcss-modules-scope": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz", - "integrity": "sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==", + "pngjs": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-6.0.0.tgz", + "integrity": "sha512-TRzzuFRRmEoSW/p1KVAmiOgPco2Irlah+bGFCeNfJXxxYGwSw7YwAOAcd7X28K/m5bjBWKsC29KyoMfHbypayg==", + "dev": true + }, + "pnp-webpack-plugin": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz", + "integrity": "sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg==", "dev": true, "requires": { - "postcss": "^7.0.6", - "postcss-selector-parser": "^6.0.0" + "ts-pnp": "^1.1.6" + } + }, + "polished": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/polished/-/polished-4.1.3.tgz", + "integrity": "sha512-ocPAcVBUOryJEKe0z2KLd1l9EBa1r5mSwlKpExmrLzsnIzJo4axsoU9O2BjOTkDGDT4mZ0WFE5XKTlR3nLnZOA==", + "dev": true, + "requires": { + "@babel/runtime": "^7.14.0" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "@babel/runtime": { + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.6.tgz", + "integrity": "sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "regenerator-runtime": "^0.13.4" } } } }, - "postcss-modules-values": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz", - "integrity": "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==", + "popmotion": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/popmotion/-/popmotion-11.0.3.tgz", + "integrity": "sha512-Y55FLdj3UxkR7Vl3s7Qr4e9m0onSnP8W7d/xQLsoJM40vs6UKHFdygs6SWryasTZYqugMjm3BepCF4CWXDiHgA==", + "requires": { + "framesync": "6.0.1", + "hey-listen": "^1.0.8", + "style-value-types": "5.0.0", + "tslib": "^2.1.0" + } + }, + "portfinder": { + "version": "1.0.28", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", + "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", "dev": true, "requires": { - "icss-utils": "^4.0.0", - "postcss": "^7.0.6" + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.5" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "lodash": "^4.17.14" } }, - "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "ms": "^2.1.1" } }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "minimist": "^1.2.5" } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true } } }, - "postcss-normalize-charset": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", - "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" + }, + "postcss": { + "version": "8.4.5", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.5.tgz", + "integrity": "sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==", "dev": true, "requires": { - "postcss": "^7.0.0" + "nanoid": "^3.1.30", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.1" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, - "postcss-normalize-display-values": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", - "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", + "postcss-calc": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.0.0.tgz", + "integrity": "sha512-5NglwDrcbiy8XXfPM11F3HeC6hoT9W7GUH/Zi5U/p7u3Irv4rHhdDcIZwG0llHXV4ftsBjpfWMXAnXNl4lnt8g==", "dev": true, "requires": { - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.0.2" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, - "postcss-normalize-positions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", - "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", + "postcss-colormin": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.2.0.tgz", + "integrity": "sha512-+HC6GfWU3upe5/mqmxuqYZ9B2Wl4lcoUUNkoaX59nEWV4EtADCMiBqui111Bu8R8IvaZTmqmxrqOAqjbHIwXPw==", "dev": true, "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0", + "colord": "^2.0.1", + "postcss-value-parser": "^4.1.0" }, - "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dependencies": { + "postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, - "postcss-normalize-repeat-style": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", - "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", + "postcss-convert-values": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.0.1.tgz", + "integrity": "sha512-C3zR1Do2BkKkCgC0g3sF8TS0koF2G+mN8xxayZx3f10cIRmTaAnpgpRQZjNekTZxM2ciSPoh2IWJm0VZx8NoQg==", "dev": true, "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "postcss-value-parser": "^4.1.0" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, - "postcss-normalize-string": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", - "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", + "postcss-discard-comments": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.0.1.tgz", + "integrity": "sha512-lgZBPTDvWrbAYY1v5GYEv8fEO/WhKOu/hmZqmCYfrpD6eyDWWzAOsl2rF29lpvziKO02Gc5GJQtlpkTmakwOWg==", + "dev": true + }, + "postcss-discard-duplicates": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.1.tgz", + "integrity": "sha512-svx747PWHKOGpAXXQkCc4k/DsWo+6bc5LsVrAsw+OU+Ibi7klFZCyX54gjYzX4TH+f2uzXjRviLARxkMurA2bA==", + "dev": true + }, + "postcss-discard-empty": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.0.1.tgz", + "integrity": "sha512-vfU8CxAQ6YpMxV2SvMcMIyF2LX1ZzWpy0lqHDsOdaKKLQVQGVP1pzhrI9JlsO65s66uQTfkQBKBD/A5gp9STFw==", + "dev": true + }, + "postcss-discard-overridden": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.0.1.tgz", + "integrity": "sha512-Y28H7y93L2BpJhrdUR2SR2fnSsT+3TVx1NmVQLbcnZWwIUpJ7mfcTC6Za9M2PG6w8j7UQRfzxqn8jU2VwFxo3Q==", + "dev": true + }, + "postcss-flexbugs-fixes": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-4.2.1.tgz", + "integrity": "sha512-9SiofaZ9CWpQWxOwRh1b/r85KD5y7GgvsNt1056k6OYLvWUun0czCvogfJgylC22uJTwW1KzY3Gz65NZRlvoiQ==", "dev": true, "requires": { - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "postcss": "^7.0.26" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true }, "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dev": true, "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "source-map": { @@ -49240,428 +48614,180 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, - "postcss-normalize-timing-functions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", - "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", + "postcss-loader": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz", + "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==", "dev": true, "requires": { - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "cosmiconfig": "^7.0.0", + "klona": "^2.0.5", + "semver": "^7.3.5" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "klona": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", + "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==", "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, - "postcss-normalize-unicode": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", - "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", + "postcss-media-query-parser": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", + "integrity": "sha1-J7Ocb02U+Bsac7j3Y1HGCeXO8kQ=", + "dev": true + }, + "postcss-merge-longhand": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.0.2.tgz", + "integrity": "sha512-BMlg9AXSI5G9TBT0Lo/H3PfUy63P84rVz3BjCFE9e9Y9RXQZD3+h3YO1kgTNsNJy7bBc1YQp8DmSnwLIW5VPcw==", "dev": true, "requires": { - "browserslist": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "css-color-names": "^1.0.1", + "postcss-value-parser": "^4.1.0", + "stylehacks": "^5.0.1" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, - "postcss-normalize-url": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", - "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", + "postcss-merge-rules": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.0.2.tgz", + "integrity": "sha512-5K+Md7S3GwBewfB4rjDeol6V/RZ8S+v4B66Zk2gChRqLTCC8yjnHQ601omj9TKftS19OPGqZ/XzoqpzNQQLwbg==", "dev": true, "requires": { - "is-absolute-url": "^2.0.0", - "normalize-url": "^3.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^2.0.1", + "postcss-selector-parser": "^6.0.5", + "vendors": "^1.0.3" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "postcss-selector-parser": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", + "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" } } } }, - "postcss-normalize-whitespace": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", - "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", + "postcss-minify-font-values": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.0.1.tgz", + "integrity": "sha512-7JS4qIsnqaxk+FXY1E8dHBDmraYFWmuL6cgt0T1SWGRO5bzJf8sUoelwa4P88LEWJZweHevAiDKxHlofuvtIoA==", "dev": true, "requires": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "postcss-value-parser": "^4.1.0" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, - "postcss-ordered-values": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", - "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", + "postcss-minify-gradients": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.0.1.tgz", + "integrity": "sha512-odOwBFAIn2wIv+XYRpoN2hUV3pPQlgbJ10XeXPq8UY2N+9ZG42xu45lTn/g9zZ+d70NKSQD6EOi6UiCMu3FN7g==", "dev": true, "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "cssnano-utils": "^2.0.1", + "is-color-stop": "^1.1.0", + "postcss-value-parser": "^4.1.0" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, - "postcss-reduce-initial": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", - "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", + "postcss-minify-params": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.0.1.tgz", + "integrity": "sha512-4RUC4k2A/Q9mGco1Z8ODc7h+A0z7L7X2ypO1B6V8057eVK6mZ6xwz6QN64nHuHLbqbclkX1wyzRnIrdZehTEHw==", "dev": true, "requires": { - "browserslist": "^4.0.0", - "caniuse-api": "^3.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0" + "alphanum-sort": "^1.0.2", + "browserslist": "^4.16.0", + "cssnano-utils": "^2.0.1", + "postcss-value-parser": "^4.1.0", + "uniqs": "^2.0.0" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, - "postcss-reduce-transforms": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", - "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", + "postcss-minify-selectors": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.1.0.tgz", + "integrity": "sha512-NzGBXDa7aPsAcijXZeagnJBKBPMYLaJJzB8CQh6ncvyl2sIndLVWfbcDi0SBjRWk5VqEjXvf8tYwzoKf4Z07og==", "dev": true, "requires": { - "cssnano-util-get-match": "^4.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "alphanum-sort": "^1.0.2", + "postcss-selector-parser": "^6.0.5" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "postcss-selector-parser": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", + "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" } + } + } + }, + "postcss-modules-extract-imports": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz", + "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==", + "dev": true, + "requires": { + "postcss": "^7.0.5" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true }, "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dev": true, "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "source-map": { @@ -49669,124 +48795,75 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, - "postcss-resolve-nested-selector": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz", - "integrity": "sha1-Kcy8fDfe36wwTp//C/FZaz9qDk4=", - "dev": true - }, - "postcss-safe-parser": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-4.0.2.tgz", - "integrity": "sha512-Uw6ekxSWNLCPesSv/cmqf2bY/77z11O7jZGPax3ycZMFU/oi2DMH9i89AdHc1tRwFg/arFoEwX0IS3LCUxJh1g==", + "postcss-modules-local-by-default": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz", + "integrity": "sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw==", "dev": true, "requires": { - "postcss": "^7.0.26" + "icss-utils": "^4.1.1", + "postcss": "^7.0.32", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true }, "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dev": true, "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", "dev": true }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, - "postcss-sass": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/postcss-sass/-/postcss-sass-0.4.4.tgz", - "integrity": "sha512-BYxnVYx4mQooOhr+zer0qWbSPYnarAy8ZT7hAQtbxtgVf8gy+LSLT/hHGe35h14/pZDTw1DsxdbrwxBN++H+fg==", + "postcss-modules-scope": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz", + "integrity": "sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==", "dev": true, "requires": { - "gonzales-pe": "^4.3.0", - "postcss": "^7.0.21" + "postcss": "^7.0.6", + "postcss-selector-parser": "^6.0.0" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true }, "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dev": true, "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "source-map": { @@ -49794,58 +48871,33 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, - "postcss-scss": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-2.1.1.tgz", - "integrity": "sha512-jQmGnj0hSGLd9RscFw9LyuSVAa5Bl1/KBPqG1NQw9w8ND55nY4ZEsdlVuYJvLPpV+y0nwTV5v/4rHPzZRihQbA==", + "postcss-modules-values": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz", + "integrity": "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==", "dev": true, "requires": { + "icss-utils": "^4.0.0", "postcss": "^7.0.6" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true }, "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dev": true, "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "source-map": { @@ -49853,18 +48905,221 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "supports-color": { + } + } + }, + "postcss-normalize-charset": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.0.1.tgz", + "integrity": "sha512-6J40l6LNYnBdPSk+BHZ8SF+HAkS4q2twe5jnocgd+xWpz/mx/5Sa32m3W1AA8uE8XaXN+eg8trIlfu8V9x61eg==", + "dev": true + }, + "postcss-normalize-display-values": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.0.1.tgz", + "integrity": "sha512-uupdvWk88kLDXi5HEyI9IaAJTE3/Djbcrqq8YgjvAVuzgVuqIk3SuJWUisT2gaJbZm1H9g5k2w1xXilM3x8DjQ==", + "dev": true, + "requires": { + "cssnano-utils": "^2.0.1", + "postcss-value-parser": "^4.1.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", + "dev": true + } + } + }, + "postcss-normalize-positions": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.0.1.tgz", + "integrity": "sha512-rvzWAJai5xej9yWqlCb1OWLd9JjW2Ex2BCPzUJrbaXmtKtgfL8dBMOOMTX6TnvQMtjk3ei1Lswcs78qKO1Skrg==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.1.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", + "dev": true + } + } + }, + "postcss-normalize-repeat-style": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.0.1.tgz", + "integrity": "sha512-syZ2itq0HTQjj4QtXZOeefomckiV5TaUO6ReIEabCh3wgDs4Mr01pkif0MeVwKyU/LHEkPJnpwFKRxqWA/7O3w==", + "dev": true, + "requires": { + "cssnano-utils": "^2.0.1", + "postcss-value-parser": "^4.1.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", + "dev": true + } + } + }, + "postcss-normalize-string": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.0.1.tgz", + "integrity": "sha512-Ic8GaQ3jPMVl1OEn2U//2pm93AXUcF3wz+OriskdZ1AOuYV25OdgS7w9Xu2LO5cGyhHCgn8dMXh9bO7vi3i9pA==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.1.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", + "dev": true + } + } + }, + "postcss-normalize-timing-functions": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.0.1.tgz", + "integrity": "sha512-cPcBdVN5OsWCNEo5hiXfLUnXfTGtSFiBU9SK8k7ii8UD7OLuznzgNRYkLZow11BkQiiqMcgPyh4ZqXEEUrtQ1Q==", + "dev": true, + "requires": { + "cssnano-utils": "^2.0.1", + "postcss-value-parser": "^4.1.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", + "dev": true + } + } + }, + "postcss-normalize-unicode": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.0.1.tgz", + "integrity": "sha512-kAtYD6V3pK0beqrU90gpCQB7g6AOfP/2KIPCVBKJM2EheVsBQmx/Iof+9zR9NFKLAx4Pr9mDhogB27pmn354nA==", + "dev": true, + "requires": { + "browserslist": "^4.16.0", + "postcss-value-parser": "^4.1.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", + "dev": true + } + } + }, + "postcss-normalize-url": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.0.2.tgz", + "integrity": "sha512-k4jLTPUxREQ5bpajFQZpx8bCF2UrlqOTzP9kEqcEnOfwsRshWs2+oAFIHfDQB8GO2PaUaSE0NlTAYtbluZTlHQ==", + "dev": true, + "requires": { + "is-absolute-url": "^3.0.3", + "normalize-url": "^6.0.1", + "postcss-value-parser": "^4.1.0" + }, + "dependencies": { + "normalize-url": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true + }, + "postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", + "dev": true + } + } + }, + "postcss-normalize-whitespace": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.0.1.tgz", + "integrity": "sha512-iPklmI5SBnRvwceb/XH568yyzK0qRVuAG+a1HFUsFRf11lEJTiQQa03a4RSCQvLKdcpX7XsI1Gen9LuLoqwiqA==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.1.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", + "dev": true + } + } + }, + "postcss-ordered-values": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.0.2.tgz", + "integrity": "sha512-8AFYDSOYWebJYLyJi3fyjl6CqMEG/UVworjiyK1r573I56kb3e879sCJLGvR3merj+fAdPpVplXKQZv+ey6CgQ==", + "dev": true, + "requires": { + "cssnano-utils": "^2.0.1", + "postcss-value-parser": "^4.1.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", + "dev": true } } }, + "postcss-reduce-initial": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.0.1.tgz", + "integrity": "sha512-zlCZPKLLTMAqA3ZWH57HlbCjkD55LX9dsRyxlls+wfuRfqCi5mSlZVan0heX5cHr154Dq9AfbH70LyhrSAezJw==", + "dev": true, + "requires": { + "browserslist": "^4.16.0", + "caniuse-api": "^3.0.0" + } + }, + "postcss-reduce-transforms": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.0.1.tgz", + "integrity": "sha512-a//FjoPeFkRuAguPscTVmRQUODP+f3ke2HqFNgGPwdYnpeC29RZdCBvGRGTsKpMURb/I3p6jdKoBQ2zI+9Q7kA==", + "dev": true, + "requires": { + "cssnano-utils": "^2.0.1", + "postcss-value-parser": "^4.1.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", + "dev": true + } + } + }, + "postcss-resolve-nested-selector": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz", + "integrity": "sha1-Kcy8fDfe36wwTp//C/FZaz9qDk4=", + "dev": true + }, + "postcss-safe-parser": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz", + "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==", + "dev": true + }, "postcss-selector-parser": { "version": "6.0.4", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz", @@ -49878,130 +49133,42 @@ } }, "postcss-svgo": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz", - "integrity": "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.0.2.tgz", + "integrity": "sha512-YzQuFLZu3U3aheizD+B1joQ94vzPfE6BNUcSYuceNxlVnKKsOtdo6hL9/zyC168Q8EwfLSgaDSalsUGa9f2C0A==", "dev": true, "requires": { - "is-svg": "^3.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "svgo": "^1.0.0" + "postcss-value-parser": "^4.1.0", + "svgo": "^2.3.0" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, - "postcss-syntax": { - "version": "0.36.2", - "resolved": "https://registry.npmjs.org/postcss-syntax/-/postcss-syntax-0.36.2.tgz", - "integrity": "sha512-nBRg/i7E3SOHWxF3PpF5WnJM/jQ1YpY9000OaVXlAQj6Zp/kIqJxEDWIZ67tAd7NLuk7zqN4yqe9nc0oNAOs1w==", - "dev": true - }, "postcss-unique-selectors": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", - "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.0.1.tgz", + "integrity": "sha512-gwi1NhHV4FMmPn+qwBNuot1sG1t2OmacLQ/AX29lzyggnjd+MnVD5uqQmpXO3J17KGL2WAxQruj1qTd3H0gG/w==", "dev": true, "requires": { - "alphanum-sort": "^1.0.0", - "postcss": "^7.0.0", + "alphanum-sort": "^1.0.2", + "postcss-selector-parser": "^6.0.5", "uniqs": "^2.0.0" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "postcss-selector-parser": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", + "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" } } } @@ -50066,17 +49233,17 @@ } }, "@types/istanbul-reports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", - "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", "requires": { "@types/istanbul-lib-report": "*" } }, "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, "ansi-styles": { "version": "4.3.0", @@ -50140,14 +49307,6 @@ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true }, - "promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "requires": { - "asap": "~2.0.3" - } - }, "promise-inflight": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", @@ -50165,16 +49324,16 @@ } }, "promise.allsettled": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/promise.allsettled/-/promise.allsettled-1.0.4.tgz", - "integrity": "sha512-o73CbvQh/OnPFShxHcHxk0baXR2a1m4ozb85ha0H14VEoi/EJJLa9mnPfEWJx9RjA9MLfhdjZ8I6HhWtBa64Ag==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/promise.allsettled/-/promise.allsettled-1.0.5.tgz", + "integrity": "sha512-tVDqeZPoBC0SlzJHzWGZ2NKAguVq2oiYj7gbggbiTvH2itHohijTp7njOUA0aQ/nl+0lr/r6egmhoYu63UZ/pQ==", "dev": true, "requires": { - "array.prototype.map": "^1.0.3", + "array.prototype.map": "^1.0.4", "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "get-intrinsic": "^1.0.2", + "es-abstract": "^1.19.1", + "get-intrinsic": "^1.1.1", "iterate-value": "^1.0.2" }, "dependencies": { @@ -50198,22 +49357,202 @@ } }, "es-abstract": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", - "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", + "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", "dev": true, "requires": { "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", "has": "^1.0.3", "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.1", + "is-string": "^1.0.7", + "is-weakref": "^1.0.1", + "object-inspect": "^1.11.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + }, + "dependencies": { + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + } + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + }, + "is-callable": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "dev": true + }, + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "object-inspect": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.1.tgz", + "integrity": "sha512-If7BjFlpkzzBeV1cqgT3OSWT3azyoxDGajR+iGnFBfVV2EWyDyWaZZW2ERDjUaY2QM8i5jI3Sj7mhsM4DDAqWA==", + "dev": true + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "dependencies": { + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + } + } + }, + "string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + } + } + }, + "promise.prototype.finally": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/promise.prototype.finally/-/promise.prototype.finally-3.1.3.tgz", + "integrity": "sha512-EXRF3fC9/0gz4qkt/f5EP5iW4kj9oFpBICNpCNOb/52+8nlHIX07FPLbi/q4qYBQ1xZqivMzTpNQSnArVASolQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + }, + "dependencies": { + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "es-abstract": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", + "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.3", - "is-string": "^1.0.6", - "object-inspect": "^1.10.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.1", + "is-string": "^1.0.7", + "is-weakref": "^1.0.1", + "object-inspect": "^1.11.0", "object-keys": "^1.1.1", "object.assign": "^4.1.2", "string.prototype.trimend": "^1.0.4", @@ -50258,190 +49597,30 @@ "dev": true }, "is-callable": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", "dev": true }, "is-regex": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", - "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, "requires": { "call-bind": "^1.0.2", - "has-symbols": "^1.0.2" + "has-tostringtag": "^1.0.0" } }, "is-string": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", - "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", - "dev": true - }, - "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - }, - "dependencies": { - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - } - } - }, - "string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - } - } - }, - "promise.prototype.finally": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/promise.prototype.finally/-/promise.prototype.finally-3.1.2.tgz", - "integrity": "sha512-A2HuJWl2opDH0EafgdjwEw7HysI8ff/n4lW4QEVBCUXFk9QeGecBWv0Deph0UmLe3tTNYegz8MOjsVuE6SMoJA==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.0", - "function-bind": "^1.1.1" - }, - "dependencies": { - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "es-abstract": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", - "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.3", - "is-string": "^1.0.6", - "object-inspect": "^1.10.3", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" - }, - "dependencies": { - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - } - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - } - }, - "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true - }, - "is-callable": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", - "dev": true - }, - "is-regex": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", - "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "has-symbols": "^1.0.2" + "has-tostringtag": "^1.0.0" } }, - "is-string": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", - "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", - "dev": true - }, "is-symbol": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", @@ -50451,6 +49630,12 @@ "has-symbols": "^1.0.2" } }, + "object-inspect": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.1.tgz", + "integrity": "sha512-If7BjFlpkzzBeV1cqgT3OSWT3azyoxDGajR+iGnFBfVV2EWyDyWaZZW2ERDjUaY2QM8i5jI3Sj7mhsM4DDAqWA==", + "dev": true + }, "object.assign": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", @@ -50494,13 +49679,13 @@ } }, "prompts": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.3.1.tgz", - "integrity": "sha512-qIP2lQyCwYbdzcqHIUi2HAxiWixhoM9OdLCWf8txXsapC/X9YdsCoeyRIXE/GP+Q0J37Q7+XN/MFqbUa7IzXNA==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", "dev": true, "requires": { "kleur": "^3.0.3", - "sisteransi": "^1.0.4" + "sisteransi": "^1.0.5" } }, "promzard": { @@ -50538,6 +49723,31 @@ "integrity": "sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==", "dev": true }, + "proper-lockfile": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz", + "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.4", + "retry": "^0.12.0", + "signal-exit": "^3.0.2" + }, + "dependencies": { + "graceful-fs": { + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", + "dev": true + }, + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "dev": true + } + } + }, "property-information": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", @@ -50614,6 +49824,14 @@ "parse-asn1": "^5.0.0", "randombytes": "^2.0.1", "safe-buffer": "^5.1.2" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } } }, "pump": { @@ -50644,23 +49862,23 @@ "dev": true }, "puppeteer-core": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-10.1.0.tgz", - "integrity": "sha512-x2yDSJI/PRiWhDqAt1jd4rhTotxwjwKzHLIIqD2MlJ+TmzGJfBY9snAGIVXJwkWfKJg+Ef5xupdK0EbHDqBpFw==", + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-13.2.0.tgz", + "integrity": "sha512-EfQlh6osciVLf9dY0a/rLNE4DzaxfK+T97mYyd5opY9u2MyBrr8NbayBhK1NEDoUC1w+FYnNI1oZg2ybEF3MNQ==", "dev": true, "requires": { - "debug": "4.3.1", - "devtools-protocol": "0.0.883894", + "debug": "4.3.3", + "devtools-protocol": "0.0.960912", "extract-zip": "2.0.1", "https-proxy-agent": "5.0.0", - "node-fetch": "2.6.1", + "node-fetch": "2.6.7", "pkg-dir": "4.2.0", - "progress": "2.0.1", + "progress": "2.0.3", "proxy-from-env": "1.1.0", "rimraf": "3.0.2", - "tar-fs": "2.0.0", - "unbzip2-stream": "1.3.3", - "ws": "7.4.6" + "tar-fs": "2.1.1", + "unbzip2-stream": "1.4.3", + "ws": "8.2.3" }, "dependencies": { "agent-base": { @@ -50673,9 +49891,9 @@ } }, "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dev": true, "requires": { "ms": "2.1.2" @@ -50737,6 +49955,15 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, + "node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dev": true, + "requires": { + "whatwg-url": "^5.0.0" + } + }, "p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", @@ -50776,16 +50003,32 @@ "find-up": "^4.0.0" } }, - "progress": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.1.tgz", - "integrity": "sha512-OE+a6vzqazc+K6LxJrX5UPyKFvGnL5CYmq2jFGNIBWHpc4QyE49/YOumcrpQFJpfejmvRtbJzgO1zPmMCqlbBg==", + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", "dev": true }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=", + "dev": true + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "dev": true, + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "ws": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", + "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", "dev": true }, "yauzl": { @@ -50853,7 +50096,6 @@ "version": "3.4.1", "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", - "dev": true, "requires": { "performance-now": "^2.1.0" } @@ -50963,9 +50205,9 @@ }, "dependencies": { "@types/json-schema": { - "version": "7.0.7", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", - "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==", + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", "dev": true }, "ajv": { @@ -50986,69 +50228,19 @@ "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "dev": true }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - }, "schema-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.0.tgz", - "integrity": "sha512-tTEaeYkyIhEZ9uWgAjDerWov3T9MgX8dhhy2r0IGeeX4W8ngtGl1++dUve/RUqzuaASSh7shwCDJjEzthxki8w==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "dev": true, "requires": { - "@types/json-schema": "^7.0.7", + "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" } } } }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - } - }, "re-resizable": { "version": "6.9.0", "resolved": "https://registry.npmjs.org/re-resizable/-/re-resizable-6.9.0.tgz", @@ -51058,22 +50250,14 @@ } }, "react": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/react/-/react-17.0.1.tgz", - "integrity": "sha512-lG9c9UuMHdcAexXtigOZLX8exLWkW0Ku29qPRU8uhF2R9BN96dLCt0psvzPLlHc5OWkgymP3qwTRgbnw5BKx3w==", + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", + "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1" } }, - "react-addons-shallow-compare": { - "version": "15.6.3", - "resolved": "https://registry.npmjs.org/react-addons-shallow-compare/-/react-addons-shallow-compare-15.6.3.tgz", - "integrity": "sha512-EDJbgKTtGRLhr3wiGDXK/+AEJ59yqGS+tKE6mue0aNXT6ZMR7VJbbzIiT6akotmHg1BLj46ElJSb+NBMp80XBg==", - "requires": { - "object-assign": "^4.1.0" - } - }, "react-autosize-textarea": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/react-autosize-textarea/-/react-autosize-textarea-7.1.0.tgz", @@ -51085,30 +50269,9 @@ } }, "react-colorful": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/react-colorful/-/react-colorful-5.2.3.tgz", - "integrity": "sha512-lAge4syxosZg9SX8fJiwOLd9ZJSW3poPBtypnz1aMiFoHsRnK5G3+INGGx9DGtsrso4h5uFYbiFpjAfWyK3Kag==", - "dev": true - }, - "react-dates": { - "version": "17.2.0", - "resolved": "https://registry.npmjs.org/react-dates/-/react-dates-17.2.0.tgz", - "integrity": "sha512-RDlerU8DdRRrlYS0MQ7Z9igPWABGLDwz6+ykBNff67RM3Sset2TDqeuOr+R5o00Ggn5U47GeLsGcSDxlZd9cHw==", - "requires": { - "airbnb-prop-types": "^2.10.0", - "consolidated-events": "^1.1.1 || ^2.0.0", - "is-touch-device": "^1.0.1", - "lodash": "^4.1.1", - "object.assign": "^4.1.0", - "object.values": "^1.0.4", - "prop-types": "^15.6.1", - "react-addons-shallow-compare": "^15.6.2", - "react-moment-proptypes": "^1.6.0", - "react-outside-click-handler": "^1.2.0", - "react-portal": "^4.1.5", - "react-with-styles": "^3.2.0", - "react-with-styles-interface-css": "^4.0.2" - } + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/react-colorful/-/react-colorful-5.3.1.tgz", + "integrity": "sha512-nkP1w1LGe8PzhtOQO10xSDTsMWAYVj/Wm5c7ORk7CBngjCE7hHsknFRtosT5qMYkwWs8wSiU0sBwZ8dyzRbNEQ==" }, "react-dev-utils": { "version": "11.0.4", @@ -51142,16 +50305,19 @@ "text-table": "0.2.0" }, "dependencies": { - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true + "@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "dev": true, + "requires": { + "@babel/highlight": "^7.10.4" + } }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, "array-union": { @@ -51160,21 +50326,6 @@ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, "browserslist": { "version": "4.14.2", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.2.tgz", @@ -51217,40 +50368,12 @@ "which": "^2.0.1" } }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true - }, "escape-string-regexp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", "dev": true }, - "fast-glob": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.6.tgz", - "integrity": "sha512-GnLuqj/pvQ7pX8/L4J84nijv6sAnlwvSDpMkJi9i7nPmPxGtRPkBSStfvDW5l6nMdX9VWe+pkKWFTgD+vF2QSQ==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, "find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", @@ -51261,13 +50384,19 @@ "path-exists": "^4.0.0" } }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "fork-ts-checker-webpack-plugin": { + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-4.1.6.tgz", + "integrity": "sha512-DUxuQaKoqfNne8iikd14SAkh5uw4+8vNifp6gmA73yYNS6ywLIWSLD/n/mBzHQRpW3J7rbATEakmiA8JvkTyZw==", "dev": true, "requires": { - "is-glob": "^4.0.1" + "@babel/code-frame": "^7.5.5", + "chalk": "^2.4.1", + "micromatch": "^3.1.10", + "minimatch": "^3.0.4", + "semver": "^5.6.0", + "tapable": "^1.0.0", + "worker-rpc": "^0.1.0" } }, "globby": { @@ -51284,27 +50413,6 @@ "slash": "^3.0.0" } }, - "ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", - "dev": true - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, "is-wsl": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", @@ -51314,26 +50422,6 @@ "is-docker": "^2.0.0" } }, - "json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - }, "locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -51349,16 +50437,6 @@ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true }, - "micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - } - }, "open": { "version": "7.4.2", "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", @@ -51405,12 +50483,6 @@ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true }, - "picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", - "dev": true - }, "prompts": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.0.tgz", @@ -51421,6 +50493,12 @@ "sisteransi": "^1.0.5" } }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -51448,12 +50526,6 @@ "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", "dev": true }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, "strip-ansi": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", @@ -51463,15 +50535,6 @@ "ansi-regex": "^5.0.0" } }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -51484,9 +50547,9 @@ } }, "react-devtools-core": { - "version": "4.13.5", - "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-4.13.5.tgz", - "integrity": "sha512-k+P5VSKM6P22Go9IQ8dJmjj9fbztvKt1iRDI/4wS5oTvd1EnytIJMYB59wZt+D3kgp64jklNX/MRmY42xAQ08g==", + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-4.21.0.tgz", + "integrity": "sha512-clGWwJHV5MHwTwYyKc+7FZHwzdbzrD2/AoZSkicUcr6YLc3Za9a9FaLhccWDHfjQ+ron9yzNhDT6Tv+FiPkD3g==", "requires": { "shell-quote": "^1.6.1", "ws": "^7" @@ -51537,28 +50600,28 @@ } }, "react-docgen-typescript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/react-docgen-typescript/-/react-docgen-typescript-2.0.0.tgz", - "integrity": "sha512-lPf+KJKAo6a9klKyK4y8WwgaX+6t5/HkVjHOpJDMbmaXfXcV7zP0QgWtnEOc3ccEUXKvlHMGUMIS9f6Zgo1BSw==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/react-docgen-typescript/-/react-docgen-typescript-2.2.2.tgz", + "integrity": "sha512-tvg2ZtOpOi6QDwsb3GZhOjDkkX0h8Z2gipvTg6OVMUyoYoURhEiRNePT8NZItTVCDh39JJHnLdfCOkzoLbFnTg==", "dev": true }, "react-dom": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.1.tgz", - "integrity": "sha512-6eV150oJZ9U2t9svnsspTMrWNyHc6chX0KzDeAOXftRa8bNeOKTTfCJ7KorIwenkHd2xqVTBTCZd79yk/lx/Ug==", + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", + "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", - "scheduler": "^0.20.1" + "scheduler": "^0.20.2" } }, "react-draggable": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/react-draggable/-/react-draggable-4.4.3.tgz", - "integrity": "sha512-jV4TE59MBuWm7gb6Ns3Q1mxX8Azffb7oTtDtBgFkxRvhDp38YAARmRplrj0+XGkhOJB5XziArX+4HUUABtyZ0w==", + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/react-draggable/-/react-draggable-4.4.4.tgz", + "integrity": "sha512-6e0WdcNLwpBx/YIDpoyd2Xb04PB0elrDrulKUgdrIlwuYvxh5Ok9M+F8cljm8kPXXs43PmMzek9RrB1b7mLMqA==", "dev": true, "requires": { - "classnames": "^2.2.5", + "clsx": "^1.1.1", "prop-types": "^15.6.0" } }, @@ -51578,19 +50641,26 @@ } }, "react-element-to-jsx-string": { - "version": "14.3.2", - "resolved": "https://registry.npmjs.org/react-element-to-jsx-string/-/react-element-to-jsx-string-14.3.2.tgz", - "integrity": "sha512-WZbvG72cjLXAxV7VOuSzuHEaI3RHj10DZu8EcKQpkKcAj7+qAkG5XUeSdX5FXrA0vPrlx0QsnAzZEBJwzV0e+w==", + "version": "14.3.4", + "resolved": "https://registry.npmjs.org/react-element-to-jsx-string/-/react-element-to-jsx-string-14.3.4.tgz", + "integrity": "sha512-t4ZwvV6vwNxzujDQ+37bspnLwA4JlgUPWhLjBJWsNIDceAf6ZKUTCjdm08cN6WeZ5pTMKiCJkmAYnpmR4Bm+dg==", "dev": true, "requires": { - "@base2/pretty-print-object": "1.0.0", - "is-plain-object": "3.0.1" + "@base2/pretty-print-object": "1.0.1", + "is-plain-object": "5.0.0", + "react-is": "17.0.2" }, "dependencies": { "is-plain-object": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-3.0.1.tgz", - "integrity": "sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true + }, + "react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "dev": true } } @@ -51607,10 +50677,15 @@ "integrity": "sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==", "dev": true }, + "react-freeze": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/react-freeze/-/react-freeze-1.0.0.tgz", + "integrity": "sha512-yQaiOqDmoKqks56LN9MTgY06O0qQHgV4FUrikH357DydArSZHQhl0BJFqGKIZoTqi8JizF9Dxhuk1FIZD6qCaw==" + }, "react-helmet-async": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-1.0.9.tgz", - "integrity": "sha512-N+iUlo9WR3/u9qGMmP4jiYfaD6pe9IvDTapZLFJz2D3xlTlCM1Bzy4Ab3g72Nbajo/0ZyW+W9hdz8Hbe4l97pQ==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-1.2.2.tgz", + "integrity": "sha512-XgSQezeCbLfCxdZhDA3T/g27XZKnOYyOkruopTLSJj8RvFZwdXnM4djnfYaiBSDzOidDgTo1jcEozoRu/+P9UQ==", "dev": true, "requires": { "@babel/runtime": "^7.12.5", @@ -51629,6 +50704,17 @@ "prop-types": "^15.5.8" } }, + "react-inspector": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/react-inspector/-/react-inspector-5.1.1.tgz", + "integrity": "sha512-GURDaYzoLbW8pMGXwYPDBIv6nqei4kK7LPRZ9q9HCZF54wqXz/dnylBp/kfE9XmekBhHvLDdcYeyIwSrvtOiWg==", + "dev": true, + "requires": { + "@babel/runtime": "^7.0.0", + "is-dom": "^1.0.0", + "prop-types": "^15.0.0" + } + }, "react-is": { "version": "16.8.4", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.4.tgz", @@ -51649,328 +50735,43 @@ } }, "react-native": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.64.0.tgz", - "integrity": "sha512-8dhSHBthgGwAjU+OjqUEA49229ThPMQH7URH0u8L0xoQFCnZO2sZ9Wc6KcbxI0x9KSmjCMFFZqRe3w3QsRv64g==", - "requires": { - "@jest/create-cache-key-function": "^26.5.0", - "@react-native-community/cli": "^5.0.1-alpha.0", - "@react-native-community/cli-platform-android": "^5.0.1-alpha.0", - "@react-native-community/cli-platform-ios": "^5.0.1-alpha.0", + "version": "0.66.2", + "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.66.2.tgz", + "integrity": "sha512-d5Kp23kqAH0EmcyxyfjAr4rhVVzyK/J0cZ/JuopX16CBD4Nkad65KcJi1pyOpbhpP9L1aUUs+mRyK5kg0uLqJQ==", + "requires": { + "@jest/create-cache-key-function": "^27.0.1", + "@react-native-community/cli": "^6.0.0", + "@react-native-community/cli-platform-android": "^6.0.0", + "@react-native-community/cli-platform-ios": "^6.0.0", "@react-native/assets": "1.0.0", "@react-native/normalize-color": "1.0.0", - "@react-native/polyfills": "1.0.0", + "@react-native/polyfills": "2.0.0", "abort-controller": "^3.0.0", "anser": "^1.4.9", "base64-js": "^1.1.2", "event-target-shim": "^5.0.1", - "hermes-engine": "~0.7.0", + "hermes-engine": "~0.9.0", "invariant": "^2.2.4", - "jsc-android": "^245459.0.0", - "metro-babel-register": "0.64.0", - "metro-react-native-babel-transformer": "0.64.0", - "metro-runtime": "0.64.0", - "metro-source-map": "0.64.0", + "jsc-android": "^250230.2.1", + "metro-babel-register": "0.66.2", + "metro-react-native-babel-transformer": "0.66.2", + "metro-runtime": "0.66.2", + "metro-source-map": "0.66.2", "nullthrows": "^1.1.1", "pretty-format": "^26.5.2", "promise": "^8.0.3", "prop-types": "^15.7.2", - "react-devtools-core": "^4.6.0", - "react-native-codegen": "^0.0.6", + "react-devtools-core": "^4.13.0", + "react-native-codegen": "^0.0.7", "react-refresh": "^0.4.0", "regenerator-runtime": "^0.13.2", - "scheduler": "^0.20.1", - "shelljs": "^0.8.4", + "scheduler": "^0.20.2", "stacktrace-parser": "^0.1.3", "use-subscription": "^1.0.0", "whatwg-fetch": "^3.0.0", "ws": "^6.1.4" }, "dependencies": { - "@react-native-community/cli": { - "version": "5.0.1-alpha.2", - "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-5.0.1-alpha.2.tgz", - "integrity": "sha512-PP22TVV2VyELXhAX4PcBisasssastSEx23XDklfPoCPIXD2QgGC7y39n/b5I9tOzKi2qYswCEAcDpwXYwevGOg==", - "requires": { - "@react-native-community/cli-debugger-ui": "^5.0.1-alpha.1", - "@react-native-community/cli-hermes": "^5.0.1-alpha.1", - "@react-native-community/cli-server-api": "^5.0.1-alpha.2", - "@react-native-community/cli-tools": "^5.0.1-alpha.1", - "@react-native-community/cli-types": "^5.0.1-alpha.1", - "appdirsjs": "^1.2.4", - "chalk": "^3.0.0", - "command-exists": "^1.2.8", - "commander": "^2.19.0", - "cosmiconfig": "^5.1.0", - "deepmerge": "^3.2.0", - "envinfo": "^7.7.2", - "execa": "^1.0.0", - "find-up": "^4.1.0", - "fs-extra": "^8.1.0", - "glob": "^7.1.3", - "graceful-fs": "^4.1.3", - "joi": "^17.2.1", - "leven": "^3.1.0", - "lodash": "^4.17.15", - "metro": "^0.64.0", - "metro-config": "^0.64.0", - "metro-core": "^0.64.0", - "metro-react-native-babel-transformer": "^0.64.0", - "metro-resolver": "^0.64.0", - "metro-runtime": "^0.64.0", - "minimist": "^1.2.0", - "mkdirp": "^0.5.1", - "node-stream-zip": "^1.9.1", - "ora": "^3.4.0", - "pretty-format": "^26.6.2", - "prompts": "^2.4.0", - "semver": "^6.3.0", - "serve-static": "^1.13.1", - "strip-ansi": "^5.2.0", - "sudo-prompt": "^9.0.0", - "wcwidth": "^1.0.1" - } - }, - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - }, - "cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", - "requires": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" - } - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } - }, - "deepmerge": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-3.3.0.tgz", - "integrity": "sha512-GRQOafGHwMHpjPx9iCvTgpu9NojZ49q794EEL94JVEw6VaeA8XTUyBKvAkOOjBX9oJNiV6G3P+T+tihFjo2TqA==" - }, - "envinfo": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", - "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==" - }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "requires": { - "pump": "^3.0.0" - } - }, - "glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", - "requires": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "requires": { - "p-locate": "^4.1.0" - } - }, - "ora": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz", - "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==", - "requires": { - "chalk": "^2.4.2", - "cli-cursor": "^2.1.0", - "cli-spinners": "^2.0.0", - "log-symbols": "^2.2.0", - "strip-ansi": "^5.2.0", - "wcwidth": "^1.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" - }, "promise": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/promise/-/promise-8.1.0.tgz", @@ -51979,59 +50780,15 @@ "asap": "~2.0.6" } }, - "prompts": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.1.tgz", - "integrity": "sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ==", - "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - } - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - }, - "sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - }, - "whatwg-fetch": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", - "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==" + "react-refresh": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.4.3.tgz", + "integrity": "sha512-Hwln1VNuGl/6bVwnd0Xdn1e84gT/8T9aYNL+HAKDArLCS7LWjwr7StE30IEYbIkx0Vi3vs+coQxe+SQDbGbbpA==" }, "ws": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", - "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", + "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", "requires": { "async-limiter": "~1.0.0" } @@ -52047,9 +50804,9 @@ } }, "react-native-codegen": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/react-native-codegen/-/react-native-codegen-0.0.6.tgz", - "integrity": "sha512-cMvrUelD81wiPitEPiwE/TCNscIVauXxmt4NTGcy18HrUd0WRWXfYzAQGXm0eI87u3NMudNhqFj2NISJenxQHg==", + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/react-native-codegen/-/react-native-codegen-0.0.7.tgz", + "integrity": "sha512-dwNgR8zJ3ALr480QnAmpTiqvFo+rDtq6V5oCggKhYFlRjzOmVSFn3YD41u8ltvKS5G2nQ8gCs2vReFFnRGLYng==", "requires": { "flow-parser": "^0.121.0", "jscodeshift": "^0.11.0", @@ -52057,19 +50814,20 @@ } }, "react-native-gesture-handler": { - "version": "git+https://github.com/wordpress-mobile/react-native-gesture-handler.git#5282a8f3b5f4ef8439c9c60f90c99629658c4cc3", - "from": "git+https://github.com/wordpress-mobile/react-native-gesture-handler.git#1.10.1-wp", + "version": "https://raw.githubusercontent.com/wordpress-mobile/react-native-gesture-handler/2.2.0-wp-4/react-native-gesture-handler-2.2.0-wp-4.tgz", + "integrity": "sha512-3pHMTuMWAko1nFJYRRrdqjnEGmPKxPe7C/wRa4PZ+FCelqdXoomwMLp1Rw7q722MXpQbjxQsQplfgPL4X5KxvQ==", "requires": { "@egjs/hammerjs": "^2.0.17", - "fbjs": "^3.0.0", "hoist-non-react-statics": "^3.3.0", "invariant": "^2.2.4", + "lodash": "^4.17.21", "prop-types": "^15.7.2" } }, "react-native-get-random-values": { - "version": "git+https://github.com/wordpress-mobile/react-native-get-random-values.git#91140c28d87d6fa4f7303296ff2b6e214a078eed", - "from": "git+https://github.com/wordpress-mobile/react-native-get-random-values.git#v1.4.0-wp", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/react-native-get-random-values/-/react-native-get-random-values-1.4.0.tgz", + "integrity": "sha512-NnmEZcC5zfz+QEytFPM/fw818Hodw/BNbv7jGxU4pla4K2K9DCzG83IReMJqQ2wo552AYKguqrBG2SSn/U6rbA==", "requires": { "fast-base64-decode": "^1.0.0" } @@ -52079,10 +50837,10 @@ "from": "git+https://github.com/Riglerr/react-native-hr.git#2d01a5cf77212d100e8b99e0310cce5234f977b3" }, "react-native-hsv-color-picker": { - "version": "git+https://github.com/wordpress-mobile/react-native-hsv-color-picker.git#0b0b717c7f1c4f453922be8c574b0cf638b8f104", - "from": "git+https://github.com/wordpress-mobile/react-native-hsv-color-picker.git#v1.0.1-wp", + "version": "https://raw.githubusercontent.com/wordpress-mobile/react-native-hsv-color-picker/v1.0.1-wp-2/react-native-hsv-color-picker-1.0.1-wp-2.tgz", + "integrity": "sha512-IBbGVHgHCTOX/qCo92aVHuWciDA0gFLsSK5ErosviTlI/qVXI/JeBFBCu2hdaNhKKwf3IqkgPwwdSZDlPiQBqQ==", "requires": { - "react-native-linear-gradient": "git+https://github.com/wordpress-mobile/react-native-linear-gradient.git#v2.5.6-wp", + "react-native-linear-gradient": "https://raw.githubusercontent.com/wordpress-mobile/react-native-linear-gradient/v2.5.6-wp-2/react-native-linear-gradient-2.5.6-wp-2.tgz", "tinycolor2": "^1.4.1" } }, @@ -52092,16 +50850,16 @@ "integrity": "sha512-HOf0jzRnq2/aFUcdCJ9w9JGzN3gdEg0zFE4FyYlp4jtidqU03D5X7ZegGKfT1EWteR0gPBGp9ye5T5FvSWi9Yg==" }, "react-native-keyboard-aware-scroll-view": { - "version": "git+https://github.com/wordpress-mobile/react-native-keyboard-aware-scroll-view.git#3ada1ee7e79223ff2c1b2683e155e5f87b26b7b5", - "from": "git+https://github.com/wordpress-mobile/react-native-keyboard-aware-scroll-view.git#v0.8.8-wp", + "version": "https://raw.githubusercontent.com/wordpress-mobile/react-native-keyboard-aware-scroll-view/v0.8.8-wp-1/react-native-keyboard-aware-scroll-view-0.8.8-wp-1.tgz", + "integrity": "sha512-gp0xGZvr4TKFW5K5HM2uPsSsbSdONOlajEZohWVxLJJyVSToyaptt/amJrvkpWFqlqtcE9k22iEO/vzpnAgNRw==", "requires": { "prop-types": "^15.6.2", "react-native-iphone-x-helper": "^1.0.3" } }, "react-native-linear-gradient": { - "version": "git+https://github.com/wordpress-mobile/react-native-linear-gradient.git#875ec02beab4d1e97e5f4cca57ea3e436f4e8a1f", - "from": "git+https://github.com/wordpress-mobile/react-native-linear-gradient.git#v2.5.6-wp" + "version": "https://raw.githubusercontent.com/wordpress-mobile/react-native-linear-gradient/v2.5.6-wp-2/react-native-linear-gradient-2.5.6-wp-2.tgz", + "integrity": "sha512-XD9rsrONXD4TS76hbb5U3na9/8MUcP69sTgFvyrexgOu3ZbRyBlePZRXGWt9KB+7PK9659+jl+3Bu8d8cQ3iVA==" }, "react-native-modal": { "version": "11.10.0", @@ -52113,34 +50871,29 @@ } }, "react-native-prompt-android": { - "version": "git+https://github.com/wordpress-mobile/react-native-prompt-android.git#ea43e81db49aed3c284cd1decdbe2ac2fdabd58c", - "from": "git+https://github.com/wordpress-mobile/react-native-prompt-android.git#v1.0.0-wp" + "version": "https://raw.githubusercontent.com/wordpress-mobile/react-native-prompt-android/v1.0.0-wp-2/react-native-prompt-android-1.0.0-wp-2.tgz", + "integrity": "sha512-9whL4Kc5OU5Q89Dneq8oT8vpQTA/cEz24EIPXEQ2KGo1Dkf4qzer5+98YXJM2F8yitCP8UKHOL8WIiE7zukXBA==" }, "react-native-reanimated": { - "version": "git+https://github.com/wordpress-mobile/react-native-reanimated.git#1e482d83d83d5694dffa81f333ef570607d7b303", - "from": "git+https://github.com/wordpress-mobile/react-native-reanimated.git#1.9.0-wp", + "version": "https://raw.githubusercontent.com/wordpress-mobile/react-native-reanimated/2.4.1-wp-2/react-native-reanimated-2.4.1-wp-2.tgz", + "integrity": "sha512-8Mu7150ezI5PGBYAatqhQlau0nkeXMVNZIODAU7l1e7qjfEALZiuxKMkvWhFw1xBCqx+qRv24yYns7I5GGiZGQ==", "requires": { - "fbjs": "^1.0.0" + "@babel/plugin-transform-object-assign": "^7.10.4", + "@types/invariant": "^2.2.35", + "invariant": "^2.2.4", + "lodash.isequal": "^4.5.0", + "mockdate": "^3.0.2", + "react-native-screens": "^3.4.0", + "string-hash-64": "^1.0.3" }, "dependencies": { - "core-js": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", - "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==" - }, - "fbjs": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-1.0.0.tgz", - "integrity": "sha512-MUgcMEJaFhCaF1QtWGnmq9ZDRAzECTCRAF7O6UZIlAlkTs1SasiX9aP0Iw7wfD2mJ7wDTNfg2w7u5fSCwJk1OA==", + "react-native-screens": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/react-native-screens/-/react-native-screens-3.13.1.tgz", + "integrity": "sha512-xcrnuUs0qUrGpc2gOTDY4VgHHADQwp80mwR1prU/Q0JqbZN5W3koLhuOsT6FkSRKjR5t40l+4LcjhHdpqRB2HA==", "requires": { - "core-js": "^2.4.1", - "fbjs-css-vars": "^1.0.0", - "isomorphic-fetch": "^2.1.1", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.18" + "react-freeze": "^1.0.0", + "warn-once": "^0.1.0" } } } @@ -52151,11 +50904,24 @@ "integrity": "sha512-gBLv93P90sM6hk5HzUwTXzFuSDazTpg2ONi5iL9pnUsUfwdw2L9SKgjgVroxX10leGB9+0zz6/ycV+mItqr8OQ==", "requires": { "@types/react": "^16.8.8" + }, + "dependencies": { + "@types/react": { + "version": "16.14.24", + "resolved": "https://registry.npmjs.org/@types/react/-/react-16.14.24.tgz", + "integrity": "sha512-e7U2WC8XQP/xfR7bwhOhNFZKPTfW1ph+MiqtudKb8tSV8RyCsovQx2sNVtKoOryjxFKpHPPC/yNiGfdeVM5Gyw==", + "requires": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + } } }, "react-native-safe-area-context": { - "version": "git+https://github.com/wordpress-mobile/react-native-safe-area-context.git#efdae6b42ecff783f9b30cdd794f87e335307aac", - "from": "git+https://github.com/wordpress-mobile/react-native-safe-area-context.git#v3.2.0-wp" + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/react-native-safe-area-context/-/react-native-safe-area-context-3.2.0.tgz", + "integrity": "sha512-k2Nty4PwSnrg9HwrYeeE+EYqViYJoOFwEy9LxL5RIRfoqxAq/uQXNGwpUg2/u4gnKpBbEPa9eRh15KKMe/VHkA==" }, "react-native-sass-transformer": { "version": "1.4.0", @@ -52175,12 +50941,14 @@ } }, "react-native-screens": { - "version": "git+https://github.com/wordpress-mobile/react-native-screens.git#218b47b8ce22ddcdb17f3278cbc2955a00e22a78", - "from": "git+https://github.com/wordpress-mobile/react-native-screens.git#2.9.0-wp" + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/react-native-screens/-/react-native-screens-2.9.0.tgz", + "integrity": "sha512-5MaiUD6HA3nzY3JbVI8l3V7pKedtxQF3d8qktTVI0WmWXTI4QzqOU8r8fPVvfKo3MhOXwhWBjr+kQ7DZaIQQeg==" }, "react-native-svg": { - "version": "git+https://github.com/wordpress-mobile/react-native-svg.git#44af900ff8cd37a2c781029feca0cb18a22dddac", - "from": "git+https://github.com/wordpress-mobile/react-native-svg.git#v9.13.7-wp", + "version": "9.13.6", + "resolved": "https://registry.npmjs.org/react-native-svg/-/react-native-svg-9.13.6.tgz", + "integrity": "sha512-vjjuJhEhQCwWjqsgWyGy6/C/LIBM2REDxB40FU1PMhi8T3zQUwUHnA6M15pJKlQG8vaZyA+QnLyIVhjtujRgig==", "requires": { "css-select": "^2.0.2", "css-tree": "^1.0.0-alpha.37" @@ -52197,15 +50965,6 @@ "nth-check": "^1.0.2" } }, - "css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "requires": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - } - }, "css-what": { "version": "3.4.2", "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", @@ -52220,11 +50979,6 @@ "domelementtype": "1" } }, - "mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" - }, "nth-check": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", @@ -52232,11 +50986,6 @@ "requires": { "boolbase": "~1.0.0" } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" } } }, @@ -52261,10 +51010,26 @@ } }, "react-native-video": { - "version": "git+https://github.com/wordpress-mobile/react-native-video.git#c12d84e7972f5f763c336237b2003f0e6717051c", - "from": "git+https://github.com/wordpress-mobile/react-native-video.git#5.0.2-wp", + "version": "https://raw.githubusercontent.com/wordpress-mobile/react-native-video/5.2.0-wp-2/react-native-video-5.2.0-wp-2.tgz", + "integrity": "sha512-HLDADDlR5tlEaWVtbiJBk3Fa0UzQuNXiwk9vpWXP+Au7QL6FDJeRjubgwBZuVt5FhCjgPAzdDO6ixJcPatWS2g==", "requires": { - "prop-types": "^15.5.10" + "prop-types": "^15.7.2" + } + }, + "react-native-webview": { + "version": "11.6.2", + "resolved": "https://registry.npmjs.org/react-native-webview/-/react-native-webview-11.6.2.tgz", + "integrity": "sha512-7e5ltLBgqt1mX0gdTTS2nFPIjfS6y300wqJ4rLWqU71lDO+8ZeayfsF5qo83qxo2Go74CtLnSeWae4pdGwUqYw==", + "requires": { + "escape-string-regexp": "2.0.0", + "invariant": "2.2.4" + }, + "dependencies": { + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" + } } }, "react-outside-click-handler": { @@ -52309,14 +51074,29 @@ } }, "react-refresh": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.4.3.tgz", - "integrity": "sha512-Hwln1VNuGl/6bVwnd0Xdn1e84gT/8T9aYNL+HAKDArLCS7LWjwr7StE30IEYbIkx0Vi3vs+coQxe+SQDbGbbpA==" + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.10.0.tgz", + "integrity": "sha512-PgidR3wST3dDYKr6b4pJoqQFpPGNKDSCDx4cZoshjXipw3LzO7mG1My2pwEzz2JVkF+inx3xRpDeQLFQGH/hsQ==", + "dev": true }, - "react-resize-aware": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/react-resize-aware/-/react-resize-aware-3.1.0.tgz", - "integrity": "sha512-bIhHlxVTX7xKUz14ksXMEHjzCZPTpQZKZISY3nbTD273pDKPABGFNFBP6Tr42KECxzC5YQiKpMchjTVJCqaxpA==" + "react-router": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.1.1.tgz", + "integrity": "sha512-55o96RiDZmC0uD17DPqVmzzfdNd2Dc+EjkYvMAmHl43du/GItaTdFr5WwjTryNWPXZ+OOVQxQhwAX25UwxpHtw==", + "dev": true, + "requires": { + "history": "^5.1.0" + } + }, + "react-router-dom": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.1.1.tgz", + "integrity": "sha512-O3UH89DI4o+swd2q6lF4dSmpuNCxwkUXcj0zAFcVc1H+YoPE6T7uwoFMX0ws1pUvCY8lYDucFpOqCCdal6VFzg==", + "dev": true, + "requires": { + "history": "^5.1.0", + "react-router": "6.1.1" + } }, "react-select": { "version": "3.2.0", @@ -52355,6 +51135,21 @@ "@emotion/serialize": "^0.11.15", "@emotion/utils": "0.11.3", "babel-plugin-emotion": "^10.0.27" + }, + "dependencies": { + "@emotion/serialize": { + "version": "0.11.16", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-0.11.16.tgz", + "integrity": "sha512-G3J4o8by0VRrO+PFeSc3js2myYNOXVJ3Ya+RGVxnshRYgsvErfAOglKAiy1Eo1vhzxqtUvjCyS5gtewzkmvSSg==", + "dev": true, + "requires": { + "@emotion/hash": "0.8.0", + "@emotion/memoize": "0.7.4", + "@emotion/unitless": "0.7.5", + "@emotion/utils": "0.11.3", + "csstype": "^2.5.7" + } + } } }, "@emotion/utils": { @@ -52362,6 +51157,12 @@ "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-0.11.3.tgz", "integrity": "sha512-0o4l6pZC+hI88+bzuaX/6BgOvQVhbt2PfmxauVaYOGgbsAw14wdKyvMCZXnsnsHys94iadcF+RG/wZyx6+ZZBw==", "dev": true + }, + "csstype": { + "version": "2.6.19", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.19.tgz", + "integrity": "sha512-ZVxXaNy28/k3kJg0Fou5MiYpp88j7H9hLZp8PDC3jV0WFjfH5E9xHb56L0W59cPbKbcHXeP4qyT8PrHp8t6LcQ==", + "dev": true } } }, @@ -52384,9 +51185,9 @@ } }, "react-sizeme": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/react-sizeme/-/react-sizeme-3.0.1.tgz", - "integrity": "sha512-9Hf1NLgSbny1bha77l9HwvwwxQUJxFUqi44Ih+y3evA+PezBpGdCGlnvye6avss2cIgs9PgdYgMnfuzJWn/RUw==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/react-sizeme/-/react-sizeme-3.0.2.tgz", + "integrity": "sha512-xOIAOqqSSmKlKFJLO3inBQBdymzDuXx4iuwkNcJmC96jeiOg5ojByvL+g3MW9LPEsojLbC6pf68zOfobK8IPlw==", "dev": true, "requires": { "element-resize-detector": "^1.2.2", @@ -52395,15 +51196,6 @@ "throttle-debounce": "^3.0.1" } }, - "react-spring": { - "version": "8.0.20", - "resolved": "https://registry.npmjs.org/react-spring/-/react-spring-8.0.20.tgz", - "integrity": "sha512-40ZUQ5uI5YHsoQWLPchWNcEUh6zQ6qvcVDeTI2vW10ldoCN3PvDsII9wBH2xEbMl+BQvYmHzGdfLTQxPxJWGnQ==", - "requires": { - "@babel/runtime": "^7.3.1", - "prop-types": "^15.5.8" - } - }, "react-syntax-highlighter": { "version": "13.5.3", "resolved": "https://registry.npmjs.org/react-syntax-highlighter/-/react-syntax-highlighter-13.5.3.tgz", @@ -52418,15 +51210,15 @@ } }, "react-test-renderer": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-17.0.1.tgz", - "integrity": "sha512-/dRae3mj6aObwkjCcxZPlxDFh73XZLgvwhhyON2haZGUEhiaY5EjfAdw+d/rQmlcFwdTpMXCSGVk374QbCTlrA==", + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-17.0.2.tgz", + "integrity": "sha512-yaQ9cB89c17PUb0x6UfWRs7kQCorVdHlutU1boVPEsB8IDZH6n9tHxMacc3y0JoXOJUsZb/t/Mb8FUWMKaM7iQ==", "dev": true, "requires": { "object-assign": "^4.1.1", - "react-is": "^17.0.1", + "react-is": "^17.0.2", "react-shallow-renderer": "^16.13.1", - "scheduler": "^0.20.1" + "scheduler": "^0.20.2" }, "dependencies": { "react-is": { @@ -52460,11 +51252,6 @@ "prop-types": "^15.6.2" } }, - "react-use-gesture": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/react-use-gesture/-/react-use-gesture-9.0.0.tgz", - "integrity": "sha512-inTAcmX0Y8LWr7XViim5+6XlTsJ7kCgwYRrwxSu1Vkjv+8GyClHITFkGGKYXAv5QywZ8YqiJXpzFx8RZpEVF+w==" - }, "react-with-direction": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/react-with-direction/-/react-with-direction-1.3.1.tgz", @@ -52495,36 +51282,6 @@ } } }, - "react-with-styles": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/react-with-styles/-/react-with-styles-3.2.3.tgz", - "integrity": "sha512-MTI1UOvMHABRLj5M4WpODfwnveHaip6X7QUMI2x6zovinJiBXxzhA9AJP7MZNaKqg1JRFtHPXZdroUC8KcXwlQ==", - "requires": { - "hoist-non-react-statics": "^3.2.1", - "object.assign": "^4.1.0", - "prop-types": "^15.6.2", - "react-with-direction": "^1.3.0" - }, - "dependencies": { - "hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "requires": { - "react-is": "^16.7.0" - } - } - } - }, - "react-with-styles-interface-css": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/react-with-styles-interface-css/-/react-with-styles-interface-css-4.0.3.tgz", - "integrity": "sha512-wE43PIyjal2dexxyyx4Lhbcb+E42amoYPnkunRZkb9WTA+Z+9LagbyxwsI352NqMdFmghR0opg29dzDO4/YXbw==", - "requires": { - "array.prototype.flat": "^1.2.1", - "global-cache": "^1.2.1" - } - }, "read": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", @@ -52567,57 +51324,118 @@ } }, "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dev": true, "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" }, "dependencies": { - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true } } }, "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", "dev": true, "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" }, "dependencies": { "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" } }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "requires": { - "pinkie-promise": "^2.0.0" + "p-locate": "^4.1.0" } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true } } }, @@ -52648,17 +51466,27 @@ } }, "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, - "optional": true, "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" + "picomatch": "^2.2.1" + }, + "dependencies": { + "picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "dev": true + } } }, + "readline": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/readline/-/readline-1.3.0.tgz", + "integrity": "sha1-xYDXfvLPyHUrEySYBg3JeTp6wBw=" + }, "reakit": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/reakit/-/reakit-1.3.8.tgz", @@ -52693,9 +51521,9 @@ } }, "recast": { - "version": "0.20.4", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.20.4.tgz", - "integrity": "sha512-6qLIBGGRcwjrTZGIiBpJVC/NeuXpogXNyRQpqU1zWPUigCphvApoCs9KIwDYh1eDuJ6dAFlQoi/QUyE5KQ6RBQ==", + "version": "0.20.5", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.20.5.tgz", + "integrity": "sha512-E5qICoPoNL4yU0H0NoBDntNB0Q5oMSNh9usFctYniLBluTthi3RsQVBXIJNbApOlvSwW/RGxIuokPcAc59J5fQ==", "requires": { "ast-types": "0.14.2", "esprima": "~4.0.0", @@ -52710,14 +51538,6 @@ } } }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "requires": { - "resolve": "^1.1.6" - } - }, "recursive-readdir": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz", @@ -52749,18 +51569,13 @@ } }, "redux": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/redux/-/redux-4.1.0.tgz", - "integrity": "sha512-uI2dQN43zqLWCt6B/BMGRMY6db7TTY4qeHHfGeKb3EOhmOKjU3KdWvNLJyqaHRksv/ErdNH7cFZWg9jXtewy4g==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.1.2.tgz", + "integrity": "sha512-SH8PglcebESbd/shgf6mii6EIoRM0zrQyjcuQ+ojmfxjTtE0z9Y8pa62iA/OJ58qjP6j27uyW4kUF4jl/jd6sw==", "requires": { "@babel/runtime": "^7.9.2" } }, - "redux-multi": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/redux-multi/-/redux-multi-0.1.12.tgz", - "integrity": "sha1-KOH+XklnLLxb2KB/Cyrq8O+DVcI=" - }, "reflect.ownkeys": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/reflect.ownkeys/-/reflect.ownkeys-0.2.0.tgz", @@ -52945,9 +51760,9 @@ } }, "regexpp": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", - "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true }, "regexpu-core": { @@ -52964,9 +51779,9 @@ } }, "regextras": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/regextras/-/regextras-0.7.1.tgz", - "integrity": "sha512-9YXf6xtW+qzQ+hcMQXx95MOvfqXFgsKDZodX3qZB0x2n5Z94ioetIITsBtvJbiOyxa/6s9AtyweBLCdPmPko/w==", + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/regextras/-/regextras-0.8.0.tgz", + "integrity": "sha512-k519uI04Z3SaY0fLX843MRXnDeG2+vHOFsyhiPZvNLe7r8rD2YNRjq4BQLZZ0oAr2NrtvZlICsXysGNFPGa3CQ==", "dev": true }, "regjsgen": { @@ -53019,12 +51834,6 @@ "unist-util-visit": "^2.0.0" }, "dependencies": { - "is-absolute-url": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", - "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", - "dev": true - }, "unist-util-is": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", @@ -53136,9 +51945,9 @@ } }, "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dev": true, "requires": { "ms": "2.1.2" @@ -53162,15 +51971,6 @@ "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true }, - "json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -53334,9 +52134,9 @@ } }, "remark-slug": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/remark-slug/-/remark-slug-6.0.0.tgz", - "integrity": "sha512-ln67v5BrGKHpETnm6z6adlJPhESFJwfuZZ3jrmi+lKTzeZxh2tzFzUfDD4Pm2hRGOarHLuGToO86MNMZ/hA67Q==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/remark-slug/-/remark-slug-6.1.0.tgz", + "integrity": "sha512-oGCxDF9deA8phWvxFuyr3oSJsdyUAxMFbA0mZ7Y1Sas+emILtO+e5WutF9564gDsEN4IXaQXm5pFo6MLH+YmwQ==", "dev": true, "requires": { "github-slugger": "^1.0.0", @@ -53447,9 +52247,9 @@ } }, "css-what": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.0.1.tgz", - "integrity": "sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", + "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", "dev": true }, "dom-serializer": { @@ -53470,18 +52270,18 @@ "dev": true }, "domhandler": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", - "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", + "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", "dev": true, "requires": { "domelementtype": "^2.2.0" } }, "domutils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.7.0.tgz", - "integrity": "sha512-8eaHa17IwJUPAiB+SoTYBo5mCdeMgdcAoXJ59m6DT1vw+5iLS3gNoqYaRowaBKtGVrOF1Jz4yDTgYKLK2kvfJg==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", "dev": true, "requires": { "dom-serializer": "^1.0.1", @@ -53508,9 +52308,9 @@ } }, "nth-check": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.0.tgz", - "integrity": "sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", + "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", "dev": true, "requires": { "boolbase": "^1.0.0" @@ -53580,6 +52380,17 @@ "uuid": "^3.3.2" }, "dependencies": { + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, "mime-db": { "version": "1.40.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", @@ -53603,26 +52414,6 @@ } } }, - "request-promise-core": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", - "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", - "dev": true, - "requires": { - "lodash": "^4.17.19" - } - }, - "request-promise-native": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz", - "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==", - "dev": true, - "requires": { - "request-promise-core": "1.1.4", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" - } - }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -53645,10 +52436,23 @@ "integrity": "sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==", "dev": true }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "resize-observer-polyfill": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", + "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==", + "dev": true + }, "resolve": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz", "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==", + "dev": true, "requires": { "path-parse": "^1.0.5" } @@ -53721,6 +52525,12 @@ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" }, + "resolve.exports": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", + "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==", + "dev": true + }, "responselike": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz", @@ -53803,6 +52613,74 @@ "inherits": "^2.0.1" } }, + "role-selector": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/role-selector/-/role-selector-0.5.0.tgz", + "integrity": "sha512-Gck33A6q/7Lqi8puscm6lcn5JwXZ1a5U/IYc3KinlEOols4aITMiqsytlwFvQ6b3Mla5jjYq20KnBRs4aUJuQw==", + "dev": true, + "requires": { + "@testing-library/dom": "^8.11.3" + }, + "dependencies": { + "@testing-library/dom": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.11.3.tgz", + "integrity": "sha512-9LId28I+lx70wUiZjLvi1DB/WT2zGOxUh46glrSNMaWVx849kKAluezVzZrXJfTKKoQTmEOutLes/bHg4Bj3aA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^4.2.0", + "aria-query": "^5.0.0", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.4.4", + "pretty-format": "^27.0.2" + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + }, + "aria-query": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.0.0.tgz", + "integrity": "sha512-V+SM7AbUwJ+EBnB8+DXs0hPZHO0W6pqBcc0dW90OwtVG02PswOu/teuARoLQjdDOH+t9pJgGnW5/Qmouf3gPJg==", + "dev": true + }, + "dom-accessibility-api": { + "version": "0.5.11", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.11.tgz", + "integrity": "sha512-7X6GvzjYf4yTdRKuCVScV+aA9Fvh5r8WzWrXBH9w82ZWB/eYDMGCnazoC/YAqAzUJWHzLOnZqr46K3iEyUhUvw==", + "dev": true + }, + "pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + } + }, + "react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + } + } + }, "rst-selector-parser": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/rst-selector-parser/-/rst-selector-parser-2.2.3.tgz", @@ -53878,6 +52756,32 @@ } } }, + "run-con": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/run-con/-/run-con-1.2.10.tgz", + "integrity": "sha512-n7PZpYmMM26ZO21dd8y3Yw1TRtGABjRtgPSgFS/nhzfvbJMXFtJhJVyEgayMiP+w/23craJjsnfDvx4W4ue/HQ==", + "dev": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~2.0.0", + "minimist": "^1.2.5", + "strip-json-comments": "~3.1.1" + }, + "dependencies": { + "ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "dev": true + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + } + } + }, "run-parallel": { "version": "1.1.9", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz", @@ -53926,12 +52830,6 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, - "safe-json-parse": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/safe-json-parse/-/safe-json-parse-1.0.1.tgz", - "integrity": "sha1-PnZyPjjf3aE8mx0poeB//uSzC1c=", - "dev": true - }, "safe-regex": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", @@ -54140,91 +53038,13 @@ } }, "sass-loader": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-10.1.1.tgz", - "integrity": "sha512-W6gVDXAd5hR/WHsPicvZdjAWHBcEJ44UahgxcIE196fW2ong0ZHMPO1kZuI5q0VlvMQZh32gpv69PLWQm70qrw==", + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.1.0.tgz", + "integrity": "sha512-FVJZ9kxVRYNZTIe2xhw93n3xJNYZADr+q69/s98l9nTCrWASo+DR2Ot0s5xTKQDDEosUkatsGeHxcH4QBp5bSg==", "dev": true, "requires": { "klona": "^2.0.4", - "loader-utils": "^2.0.0", - "neo-async": "^2.6.2", - "schema-utils": "^3.0.0", - "semver": "^7.3.2" - }, - "dependencies": { - "@types/json-schema": { - "version": "7.0.7", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", - "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==", - "dev": true - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true - }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - }, - "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.6", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } + "neo-async": "^2.6.2" } }, "sax": { @@ -54259,6 +53079,20 @@ "ajv": "^6.1.0", "ajv-errors": "^1.0.0", "ajv-keywords": "^3.1.0" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + } } }, "select": { @@ -54266,12 +53100,47 @@ "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=" }, - "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", "dev": true }, + "selfsigned": { + "version": "1.10.11", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.11.tgz", + "integrity": "sha512-aVmbPOfViZqOZPgRBT0+3u4yZFHpmnIghLMlAcb5/xhp5ZtB/RVnKhz5vl2M32CLXAqR4kha9zfhNg0Lf/sxKA==", + "dev": true, + "requires": { + "node-forge": "^0.10.0" + } + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, "semver-compare": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", @@ -54279,9 +53148,9 @@ "dev": true }, "send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", + "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==", "requires": { "debug": "2.6.9", "depd": "~1.1.2", @@ -54290,9 +53159,9 @@ "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "~1.7.2", + "http-errors": "1.8.1", "mime": "1.6.0", - "ms": "2.1.1", + "ms": "2.1.3", "on-finished": "~2.3.0", "range-parser": "~1.2.1", "statuses": "~1.5.0" @@ -54319,9 +53188,9 @@ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" }, "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" } } }, @@ -54330,6 +53199,15 @@ "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-2.1.0.tgz", "integrity": "sha1-ULZ51WNc34Rme9yOWa9OW4HV9go=" }, + "serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, "serve-favicon": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/serve-favicon/-/serve-favicon-2.5.0.tgz", @@ -54357,34 +53235,66 @@ } } }, - "serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "dev": true, "requires": { - "encodeurl": "~1.0.2", + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.1" + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" }, "dependencies": { - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true } } }, + "serve-static": { + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz", + "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.2" + } + }, "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" }, - "set-immediate-shim": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", - "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=" - }, "set-value": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", @@ -54409,12 +53319,13 @@ "setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "dev": true }, "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, "sha.js": { "version": "2.4.11", @@ -54430,7 +53341,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dev": true, "requires": { "kind-of": "^6.0.2" } @@ -54472,30 +53382,6 @@ } } }, - "shelljs": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz", - "integrity": "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==", - "requires": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "dependencies": { - "interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" - } - } - }, - "shellwords": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", - "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", - "dev": true, - "optional": true - }, "showdown": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/showdown/-/showdown-1.9.1.tgz", @@ -54600,11 +53486,6 @@ "strip-ansi": "^5.0.0" } }, - "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" - }, "yargs": { "version": "14.2.3", "resolved": "https://registry.npmjs.org/yargs/-/yargs-14.2.3.tgz", @@ -54635,118 +53516,14 @@ } }, "side-channel": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.2.tgz", - "integrity": "sha512-7rL9YlPHg7Ancea1S96Pa8/QWb4BtXL/TZvS6B8XFetGBeuhAsfmUspK6DokBeZ64+Kj9TCNRD/30pVz1BvQNA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", "dev": true, "requires": { - "es-abstract": "^1.17.0-next.1", - "object-inspect": "^1.7.0" - }, - "dependencies": { - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "es-abstract": { - "version": "1.17.4", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.4.tgz", - "integrity": "sha512-Ae3um/gb8F0mui/jPL+QiqmglkUsaQf7FwBEHYIFkztkneosu9imhqHpBzQ3h1vit8t5iQ74t6PEVvphBZiuiQ==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.1.5", - "is-regex": "^1.0.5", - "object-inspect": "^1.7.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimleft": "^2.1.1", - "string.prototype.trimright": "^2.1.1" - }, - "dependencies": { - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - } - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - }, - "is-callable": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", - "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", - "dev": true - }, - "is-regex": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", - "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", - "dev": true, - "requires": { - "has-symbols": "^1.0.1" - } - }, - "object-inspect": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", - "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", - "dev": true - }, - "string.prototype.trimleft": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz", - "integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "function-bind": "^1.1.1" - } - }, - "string.prototype.trimright": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz", - "integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "function-bind": "^1.1.1" - } - } + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" } }, "signal-exit": { @@ -54755,20 +53532,20 @@ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" }, "simple-git": { - "version": "2.35.0", - "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-2.35.0.tgz", - "integrity": "sha512-VuXs2/HyZmZm43Z5IjvU+ahTmURh/Hmb/egmgNdFZuu8OEnW2emCalnL/4jRQkXeJvfzCTnev6wo5jtDmWw0Dw==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.5.0.tgz", + "integrity": "sha512-fZsaq5nzdxQRhMNs6ESGLpMUHoL5GRP+boWPhq9pMYMKwOGZV2jHOxi8AbFFA2Y/6u4kR99HoULizSbpzaODkA==", "dev": true, "requires": { "@kwsites/file-exists": "^1.1.1", "@kwsites/promise-deferred": "^1.1.1", - "debug": "^4.3.1" + "debug": "^4.3.3" }, "dependencies": { "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "requires": { "ms": "2.1.2" @@ -54788,13 +53565,13 @@ "integrity": "sha512-APW9iYbkJ5cijjX4Ljhf3VG8SwYPUJT5gZrwci/wieMabQxWFiV5VwsrP5c6GMRvXKEQMGkAB1d9dvW66dTqpg==" }, "simple-plist": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/simple-plist/-/simple-plist-1.1.1.tgz", - "integrity": "sha512-pKMCVKvZbZTsqYR6RKgLfBHkh2cV89GXcA/0CVPje3sOiNOnXA8+rp/ciAMZ7JRaUdLzlEM6JFfUn+fS6Nt3hg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/simple-plist/-/simple-plist-1.3.0.tgz", + "integrity": "sha512-uYWpeGFtZtVt2NhG4AHgpwx323zxD85x42heMJBan1qAiqqozIlaGrwrEt6kRjXWRWIXsuV1VLCvVmZan2B5dg==", "requires": { - "bplist-creator": "0.0.8", - "bplist-parser": "0.2.0", - "plist": "^3.0.1" + "bplist-creator": "0.1.0", + "bplist-parser": "0.3.0", + "plist": "^3.0.4" } }, "simple-swizzle": { @@ -54812,17 +53589,27 @@ } } }, + "sirv": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.12.tgz", + "integrity": "sha512-+jQoCxndz7L2tqQL4ZyzfDhky0W/4ZJip3XoOuxyQWnAwMxindLl3Xv1qT4x1YX/re0leShvTm8Uk0kQspGhBg==", + "dev": true, + "requires": { + "@polka/url": "^1.0.0-next.15", + "mime": "^2.3.1", + "totalist": "^1.0.0" + } + }, "sisteransi": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.4.tgz", - "integrity": "sha512-/ekMoM4NJ59ivGSfKapeG+FWtrmWvA1p6FBZwXrqojw90vJu8lBmrTxCMuBCydKtkaUe2zt4PlxeTKpjwMbyig==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", "dev": true }, "slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" }, "slice-ansi": { "version": "0.0.4", @@ -54980,6 +53767,12 @@ "@types/istanbul-lib-report": "*" } }, + "@types/prettier": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.3.2.tgz", + "integrity": "sha512-eI5Yrz3Qv4KPUa/nSIAi0h+qX0XyewOliug5F2QAtuRg6Kjg6jfmxe1GIwoIRhZspD1A0RP8ANrPwvEXXtRFog==", + "dev": true + }, "ansi-regex": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", @@ -54995,6 +53788,15 @@ "color-convert": "^2.0.1" } }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -55010,6 +53812,199 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "jest-matcher-utils": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz", + "integrity": "sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "jest-diff": "^26.6.2", + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.2" + } + }, + "jest-message-util": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz", + "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@jest/types": "^26.6.2", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "micromatch": "^4.0.2", + "pretty-format": "^26.6.2", + "slash": "^3.0.0", + "stack-utils": "^2.0.2" + } + }, + "jest-resolve": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.2.tgz", + "integrity": "sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^26.6.2", + "read-pkg-up": "^7.0.1", + "resolve": "^1.18.1", + "slash": "^3.0.0" + } + }, + "jest-snapshot": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-26.6.2.tgz", + "integrity": "sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0", + "@jest/types": "^26.6.2", + "@types/babel__traverse": "^7.0.4", + "@types/prettier": "^2.0.0", + "chalk": "^4.0.0", + "expect": "^26.6.2", + "graceful-fs": "^4.2.4", + "jest-diff": "^26.6.2", + "jest-get-type": "^26.3.0", + "jest-haste-map": "^26.6.2", + "jest-matcher-utils": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-resolve": "^26.6.2", + "natural-compare": "^1.4.0", + "pretty-format": "^26.6.2", + "semver": "^7.3.2" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + } + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "dev": true + }, "pretty-format": { "version": "26.6.2", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", @@ -55027,6 +54022,81 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.1.tgz", "integrity": "sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA==", "dev": true + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + } + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + } + } + }, + "sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dev": true, + "requires": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + }, + "dependencies": { + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true } } }, @@ -55081,14 +54151,32 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" }, + "source-map-js": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz", + "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==", + "dev": true + }, "source-map-loader": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-0.2.4.tgz", - "integrity": "sha512-OU6UJUty+i2JDpTItnizPrlpOIBLmQbWMuBg9q5bVtnHACqw1tn9nNwqJLbv0/00JjnJb/Ee5g5WS5vrRv7zIQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-3.0.0.tgz", + "integrity": "sha512-GKGWqWvYr04M7tn8dryIWvb0s8YM41z82iQv01yBtIylgxax0CwvSy6gc2Y02iuXwEfGWRlMicH0nvms9UZphw==", "dev": true, "requires": { - "async": "^2.5.0", - "loader-utils": "^1.1.0" + "abab": "^2.0.5", + "iconv-lite": "^0.6.2", + "source-map-js": "^0.6.2" + }, + "dependencies": { + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } } }, "source-map-resolve": { @@ -55137,21 +54225,20 @@ "dev": true }, "spawnd": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/spawnd/-/spawnd-4.4.0.tgz", - "integrity": "sha512-jLPOfB6QOEgMOQY15Z6+lwZEhH3F5ncXxIaZ7WHPIapwNNLyjrs61okj3VJ3K6tmP5TZ6cO0VAu9rEY4MD4YQg==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/spawnd/-/spawnd-6.0.2.tgz", + "integrity": "sha512-+YJtx0dvy2wt304MrHD//tASc84zinBUYU1jacPBzrjhZUd7RsDo25krxr4HUHAQzEQFuMAs4/p+yLYU5ciZ1w==", "dev": true, "requires": { "exit": "^0.1.2", - "signal-exit": "^3.0.2", - "tree-kill": "^1.2.2", - "wait-port": "^0.2.7" + "signal-exit": "^3.0.6", + "tree-kill": "^1.2.2" }, "dependencies": { - "tree-kill": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "signal-exit": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", + "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", "dev": true } } @@ -55160,7 +54247,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", - "dev": true, "requires": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" @@ -55169,14 +54255,12 @@ "spdx-exceptions": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", - "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==", - "dev": true + "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==" }, "spdx-expression-parse": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", - "dev": true, "requires": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" @@ -55185,8 +54269,79 @@ "spdx-license-ids": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz", - "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==", - "dev": true + "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==" + }, + "spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "dependencies": { + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + }, + "dependencies": { + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } }, "specificity": { "version": "0.4.1", @@ -55248,29 +54403,12 @@ } }, "ssri": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", - "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", + "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", "dev": true, "requires": { - "minipass": "^3.1.1" - }, - "dependencies": { - "minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } + "figgy-pudding": "^3.5.1" } }, "stable": { @@ -55279,6 +54417,23 @@ "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", "dev": true }, + "stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==", + "dev": true, + "requires": { + "escape-string-regexp": "^2.0.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true + } + } + }, "stackframe": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.2.0.tgz", @@ -55329,12 +54484,6 @@ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" }, - "stealthy-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", - "dev": true - }, "store2": { "version": "2.12.0", "resolved": "https://registry.npmjs.org/store2/-/store2-2.12.0.tgz", @@ -55390,16 +54539,15 @@ "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", "integrity": "sha1-ucczDHBChi9rFC3CdLvMWGbONUY=" }, - "string-argv": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", - "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", - "dev": true + "string-hash-64": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string-hash-64/-/string-hash-64-1.0.3.tgz", + "integrity": "sha512-D5OKWKvDhyVWWn2x5Y9b+37NUllks34q1dCDhk/vYcso9fmhs+Tl3KR/gE4v5UNj2UA35cnX4KdVVGkG1deKqw==" }, "string-length": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.1.tgz", - "integrity": "sha512-PKyXUd0LK0ePjSOnWn34V2uD6acUWev9uy0Ft05k0E8xRW+SKcA0F7eMr7h5xlzfn+4O3N+55rduYyet3Jk+jw==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", "dev": true, "requires": { "char-regex": "^1.0.2", @@ -55407,28 +54555,22 @@ }, "dependencies": { "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { - "ansi-regex": "^5.0.0" + "ansi-regex": "^5.0.1" } } } }, - "string-template": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/string-template/-/string-template-0.2.1.tgz", - "integrity": "sha1-QpMuWYo1LQH8IuwzZ9nYTuxsmt0=", - "dev": true - }, "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", @@ -55440,19 +54582,31 @@ } }, "string.prototype.matchall": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.2.tgz", - "integrity": "sha512-N/jp6O5fMf9os0JU3E72Qhf590RSRZU/ungsL/qJUYVTNv7hTG0P/dbPjxINVN9jpscu3nzYwKESU3P3RY5tOg==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.6.tgz", + "integrity": "sha512-6WgDX8HmQqvEd7J+G6VtAahhsQIssiZ8zl7zKh1VDMFyL3hRTJP4FTNA3RbIp2TOQ9AYNDcc7e3fH0Qbup+DBg==", "dev": true, "requires": { + "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.17.0", - "has-symbols": "^1.0.1", - "internal-slot": "^1.0.2", - "regexp.prototype.flags": "^1.3.0", - "side-channel": "^1.0.2" + "es-abstract": "^1.19.1", + "get-intrinsic": "^1.1.1", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.3.1", + "side-channel": "^1.0.4" }, "dependencies": { + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, "define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", @@ -55463,22 +54617,31 @@ } }, "es-abstract": { - "version": "1.17.4", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.4.tgz", - "integrity": "sha512-Ae3um/gb8F0mui/jPL+QiqmglkUsaQf7FwBEHYIFkztkneosu9imhqHpBzQ3h1vit8t5iQ74t6PEVvphBZiuiQ==", + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", + "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", "dev": true, "requires": { + "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.1.5", - "is-regex": "^1.0.5", - "object-inspect": "^1.7.0", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.1", + "is-string": "^1.0.7", + "is-weakref": "^1.0.1", + "object-inspect": "^1.11.0", "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimleft": "^2.1.1", - "string.prototype.trimright": "^2.1.1" + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" }, "dependencies": { "object-keys": { @@ -55500,73 +54663,124 @@ "is-symbol": "^1.0.2" } }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", "dev": true }, "is-callable": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", - "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", "dev": true }, "is-regex": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", - "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, "requires": { - "has": "^1.0.3" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" } }, "is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, "requires": { - "has-symbols": "^1.0.1" + "has-symbols": "^1.0.2" } }, "object-inspect": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", - "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.1.tgz", + "integrity": "sha512-If7BjFlpkzzBeV1cqgT3OSWT3azyoxDGajR+iGnFBfVV2EWyDyWaZZW2ERDjUaY2QM8i5jI3Sj7mhsM4DDAqWA==", "dev": true }, - "string.prototype.trimleft": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz", - "integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==", + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", "dev": true, "requires": { + "call-bind": "^1.0.0", "define-properties": "^1.1.3", - "function-bind": "^1.1.1" + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "dependencies": { + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + } } }, - "string.prototype.trimright": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz", - "integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==", + "regexp.prototype.flags": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", + "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", "dev": true, "requires": { - "define-properties": "^1.1.3", - "function-bind": "^1.1.1" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" } } } }, "string.prototype.padend": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.2.tgz", - "integrity": "sha512-/AQFLdYvePENU3W5rgurfWSMU6n+Ww8n/3cUt7E+vPBB/D7YDG8x+qjoFs4M/alR2bW7Qg6xMjVwWUOvuQ0XpQ==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.3.tgz", + "integrity": "sha512-jNIIeokznm8SD/TZISQsZKYu7RJyheFNt84DUPrh482GC8RVp2MKqm2O5oBRdGxbDQoXrhhWtPIWQOiy20svUg==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2" + "es-abstract": "^1.19.1" }, "dependencies": { "call-bind": { @@ -55589,22 +54803,26 @@ } }, "es-abstract": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", - "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", + "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", "dev": true, "requires": { "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", "has": "^1.0.3", "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.3", - "is-string": "^1.0.6", - "object-inspect": "^1.10.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.1", + "is-string": "^1.0.7", + "is-weakref": "^1.0.1", + "object-inspect": "^1.11.0", "object-keys": "^1.1.1", "object.assign": "^4.1.2", "string.prototype.trimend": "^1.0.4", @@ -55649,26 +54867,29 @@ "dev": true }, "is-callable": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", "dev": true }, "is-regex": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", - "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, "requires": { "call-bind": "^1.0.2", - "has-symbols": "^1.0.2" + "has-tostringtag": "^1.0.0" } }, "is-string": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", - "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", - "dev": true + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } }, "is-symbol": { "version": "1.0.4", @@ -55679,6 +54900,12 @@ "has-symbols": "^1.0.2" } }, + "object-inspect": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.1.tgz", + "integrity": "sha512-If7BjFlpkzzBeV1cqgT3OSWT3azyoxDGajR+iGnFBfVV2EWyDyWaZZW2ERDjUaY2QM8i5jI3Sj7mhsM4DDAqWA==", + "dev": true + }, "object.assign": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", @@ -55722,14 +54949,14 @@ } }, "string.prototype.padstart": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/string.prototype.padstart/-/string.prototype.padstart-3.1.2.tgz", - "integrity": "sha512-HDpngIP3pd0DeazrfqzuBrQZa+D2arKWquEHfGt5LzVjd+roLC3cjqVI0X8foaZz5rrrhcu8oJAQamW8on9dqw==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/string.prototype.padstart/-/string.prototype.padstart-3.1.3.tgz", + "integrity": "sha512-NZydyOMtYxpTjGqp0VN5PYUF/tsU15yDMZnUdj16qRUIUiMJkHHSDElYyQFrMu+/WloTpA7MQSiADhBicDfaoA==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2" + "es-abstract": "^1.19.1" }, "dependencies": { "call-bind": { @@ -55752,22 +54979,26 @@ } }, "es-abstract": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", - "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", + "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", "dev": true, "requires": { "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", "has": "^1.0.3", "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.3", - "is-string": "^1.0.6", - "object-inspect": "^1.10.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.1", + "is-string": "^1.0.7", + "is-weakref": "^1.0.1", + "object-inspect": "^1.11.0", "object-keys": "^1.1.1", "object.assign": "^4.1.2", "string.prototype.trimend": "^1.0.4", @@ -55812,26 +55043,29 @@ "dev": true }, "is-callable": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", "dev": true }, "is-regex": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", - "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, "requires": { "call-bind": "^1.0.2", - "has-symbols": "^1.0.2" + "has-tostringtag": "^1.0.0" } }, "is-string": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", - "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", - "dev": true + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } }, "is-symbol": { "version": "1.0.4", @@ -55842,6 +55076,12 @@ "has-symbols": "^1.0.2" } }, + "object-inspect": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.1.tgz", + "integrity": "sha512-If7BjFlpkzzBeV1cqgT3OSWT3azyoxDGajR+iGnFBfVV2EWyDyWaZZW2ERDjUaY2QM8i5jI3Sj7mhsM4DDAqWA==", + "dev": true + }, "object.assign": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", @@ -56234,89 +55474,10 @@ } }, "style-loader": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-2.0.0.tgz", - "integrity": "sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ==", - "dev": true, - "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "dependencies": { - "@types/json-schema": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz", - "integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==", - "dev": true - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true - }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "json5": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - }, - "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.6", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } - } + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.2.1.tgz", + "integrity": "sha512-1k9ZosJCRFaRbY6hH49JFlRB0fVSbmnyq1iTPjNxUmGVjBNEmwrrHPenhlp+Lgo51BojHSf6pl2FcqYaN3PfVg==", + "dev": true }, "style-search": { "version": "0.1.0", @@ -56334,183 +55495,94 @@ } }, "style-value-types": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/style-value-types/-/style-value-types-4.1.4.tgz", - "integrity": "sha512-LCJL6tB+vPSUoxgUBt9juXIlNJHtBMy8jkXzUJSBzeHWdBu6lhzHqCvLVkXFGsFIlNa2ln1sQHya/gzaFmB2Lg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/style-value-types/-/style-value-types-5.0.0.tgz", + "integrity": "sha512-08yq36Ikn4kx4YU6RD7jWEv27v4V+PUsOGa4n/as8Et3CuODMJQ00ENeAVXAeydX4Z2j1XHZF1K2sX4mGl18fA==", "requires": { "hey-listen": "^1.0.8", "tslib": "^2.1.0" } }, "stylehacks": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", - "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.0.1.tgz", + "integrity": "sha512-Es0rVnHIqbWzveU1b24kbw92HsebBepxfcqe5iix7t9j0PQqhs0IxXVXv0pY2Bxa08CgMkzD6OWql7kbGOuEdA==", "dev": true, "requires": { - "browserslist": "^4.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0" - }, - "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "postcss-selector-parser": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", - "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", - "dev": true, - "requires": { - "dot-prop": "^4.1.1", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "browserslist": "^4.16.0", + "postcss-selector-parser": "^6.0.4" } }, "stylelint": { - "version": "13.8.0", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-13.8.0.tgz", - "integrity": "sha512-iHH3dv3UI23SLDrH4zMQDjLT9/dDIz/IpoFeuNxZmEx86KtfpjDOscxLTFioQyv+2vQjPlRZnK0UoJtfxLICXQ==", + "version": "14.2.0", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-14.2.0.tgz", + "integrity": "sha512-i0DrmDXFNpDsWiwx6SPRs4/pyw4kvZgqpDGvsTslQMY7hpUl6r33aQvNSn6cnTg2wtZ9rreFElI7XAKpOWi1vQ==", "dev": true, "requires": { - "@stylelint/postcss-css-in-js": "^0.37.2", - "@stylelint/postcss-markdown": "^0.36.2", - "autoprefixer": "^9.8.6", - "balanced-match": "^1.0.0", - "chalk": "^4.1.0", - "cosmiconfig": "^7.0.0", - "debug": "^4.2.0", + "balanced-match": "^2.0.0", + "colord": "^2.9.2", + "cosmiconfig": "^7.0.1", + "debug": "^4.3.3", "execall": "^2.0.0", - "fast-glob": "^3.2.4", + "fast-glob": "^3.2.7", "fastest-levenshtein": "^1.0.12", - "file-entry-cache": "^6.0.0", + "file-entry-cache": "^6.0.1", "get-stdin": "^8.0.0", "global-modules": "^2.0.0", - "globby": "^11.0.1", + "globby": "^11.0.4", "globjoin": "^0.1.4", "html-tags": "^3.1.0", - "ignore": "^5.1.8", + "ignore": "^5.2.0", "import-lazy": "^4.0.0", "imurmurhash": "^0.1.4", - "known-css-properties": "^0.20.0", - "lodash": "^4.17.20", - "log-symbols": "^4.0.0", + "is-plain-object": "^5.0.0", + "known-css-properties": "^0.24.0", "mathml-tag-names": "^2.1.3", - "meow": "^8.0.0", - "micromatch": "^4.0.2", + "meow": "^9.0.0", + "micromatch": "^4.0.4", + "normalize-path": "^3.0.0", "normalize-selector": "^0.2.0", - "postcss": "^7.0.35", - "postcss-html": "^0.36.0", - "postcss-less": "^3.1.4", + "picocolors": "^1.0.0", + "postcss": "^8.3.11", "postcss-media-query-parser": "^0.2.3", "postcss-resolve-nested-selector": "^0.1.1", - "postcss-safe-parser": "^4.0.2", - "postcss-sass": "^0.4.4", - "postcss-scss": "^2.1.1", - "postcss-selector-parser": "^6.0.4", - "postcss-syntax": "^0.36.2", + "postcss-safe-parser": "^6.0.0", + "postcss-selector-parser": "^6.0.7", "postcss-value-parser": "^4.1.0", "resolve-from": "^5.0.0", - "slash": "^3.0.0", "specificity": "^0.4.1", - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", "style-search": "^0.1.0", - "sugarss": "^2.0.0", "svg-tags": "^1.0.0", - "table": "^6.0.3", - "v8-compile-cache": "^2.2.0", + "table": "^6.7.5", + "v8-compile-cache": "^2.3.0", "write-file-atomic": "^3.0.3" }, "dependencies": { "@nodelib/fs.stat": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz", - "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true }, "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, "array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true }, - "autoprefixer": { - "version": "9.8.6", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.6.tgz", - "integrity": "sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg==", - "dev": true, - "requires": { - "browserslist": "^4.12.0", - "caniuse-lite": "^1.0.30001109", - "colorette": "^1.2.1", - "normalize-range": "^0.1.2", - "num2fraction": "^1.2.2", - "postcss": "^7.0.32", - "postcss-value-parser": "^4.1.0" - } + "balanced-match": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", + "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", + "dev": true }, "braces": { "version": "3.0.2", @@ -56521,41 +55593,46 @@ "fill-range": "^7.0.1" } }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", "dev": true, "requires": { - "color-name": "~1.1.4" + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" } }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "colord": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.2.tgz", + "integrity": "sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ==", "dev": true }, - "colorette": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz", - "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==", - "dev": true + "cosmiconfig": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", + "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", + "dev": true, + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + } }, "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dev": true, "requires": { "ms": "2.1.2" @@ -56567,29 +55644,6 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, - "fast-glob": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz", - "integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.0", - "merge2": "^1.3.0", - "micromatch": "^4.0.2", - "picomatch": "^2.2.1" - } - }, - "file-entry-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.0.tgz", - "integrity": "sha512-fqoO76jZ3ZnYrXLDRxBR1YvOvc0k844kcOg40bgsPrE25LAb/PDqTY+ho64Xh2c8ZXgIKldchCFHczG2UVRcWA==", - "dev": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -56599,22 +55653,6 @@ "to-regex-range": "^5.0.1" } }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.0.tgz", - "integrity": "sha512-tW+UkmtNg/jv9CSofAKvgVcO7c2URjhTdW1ZTkcAritblu8tajiYy7YisnIflEwtKssCtOxpnBRoCB7iap0/TA==", - "dev": true - }, "get-stdin": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", @@ -56622,40 +55660,91 @@ "dev": true }, "glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "requires": { "is-glob": "^4.0.1" } }, "globby": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz", - "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, "requires": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", "slash": "^3.0.0" + }, + "dependencies": { + "fast-glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + } } }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true + "hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } }, "ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + } + } + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true }, + "is-core-module": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", + "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", @@ -56663,9 +55752,9 @@ "dev": true }, "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "requires": { "is-extglob": "^2.1.1" @@ -56677,19 +55766,45 @@ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, - "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", "dev": true }, - "log-symbols": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", - "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "requires": { - "chalk": "^4.0.0" + "yallist": "^4.0.0" + } + }, + "map-obj": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", + "dev": true + }, + "meow": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", + "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", + "dev": true, + "requires": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize": "^1.2.0", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" } }, "merge2": { @@ -56699,164 +55814,132 @@ "dev": true }, "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", "dev": true, "requires": { "braces": "^3.0.1", - "picomatch": "^2.0.5" + "picomatch": "^2.2.3" } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", - "dev": true - }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + }, + "minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", + "dev": true, + "requires": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "requires": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" } }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, "postcss-selector-parser": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz", - "integrity": "sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw==", + "version": "6.0.8", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.8.tgz", + "integrity": "sha512-D5PG53d209Z1Uhcc0qAZ5U3t5HagH3cxu+WLZ22jt3gLUpXM4eXXfiO14jiDWST3NNooX/E8wISfOhZ9eIjGTQ==", "dev": true, "requires": { "cssesc": "^3.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1", "util-deprecate": "^1.0.2" } }, "postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", "dev": true }, + "redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "requires": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + } + }, "resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" }, "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" + "strip-ansi": "^6.0.1" } }, "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { - "ansi-regex": "^5.0.0" + "ansi-regex": "^5.0.1" } }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", "dev": true, "requires": { - "has-flag": "^4.0.0" + "min-indent": "^1.0.0" } }, "to-regex-range": { @@ -56868,10 +55951,22 @@ "is-number": "^7.0.0" } }, + "trim-newlines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", + "dev": true + }, + "type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "dev": true + }, "v8-compile-cache": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz", - "integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", "dev": true }, "write-file-atomic": { @@ -56885,41 +55980,73 @@ "signal-exit": "^3.0.2", "typedarray-to-buffer": "^3.1.5" } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true } } }, "stylelint-config-recommended": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-3.0.0.tgz", - "integrity": "sha512-F6yTRuc06xr1h5Qw/ykb2LuFynJ2IxkKfCMf+1xqPffkxh0S09Zc902XCffcsw/XMFq/OzQ1w54fLIDtmRNHnQ==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-6.0.0.tgz", + "integrity": "sha512-ZorSSdyMcxWpROYUvLEMm0vSZud2uB7tX1hzBZwvVY9SV/uly4AvvJPPhCcymZL3fcQhEQG5AELmrxWqtmzacw==", "dev": true }, "stylelint-config-recommended-scss": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-4.2.0.tgz", - "integrity": "sha512-4bI5BYbabo/GCQ6LbRZx/ZlVkK65a1jivNNsD+ix/Lw0U3iAch+jQcvliGnnAX8SUPaZ0UqzNVNNAF3urswa7g==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-5.0.2.tgz", + "integrity": "sha512-b14BSZjcwW0hqbzm9b0S/ScN2+3CO3O4vcMNOw2KGf8lfVSwJ4p5TbNEXKwKl1+0FMtgRXZj6DqVUe/7nGnuBg==", "dev": true, "requires": { - "stylelint-config-recommended": "^3.0.0" + "postcss-scss": "^4.0.2", + "stylelint-config-recommended": "^6.0.0", + "stylelint-scss": "^4.0.0" + }, + "dependencies": { + "postcss-scss": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.3.tgz", + "integrity": "sha512-j4KxzWovfdHsyxwl1BxkUal/O4uirvHgdzMKS1aWJBAV0qh2qj5qAZqpeBfVUYGWv+4iK9Az7SPyZ4fyNju1uA==", + "dev": true + } } }, "stylelint-scss": { - "version": "3.17.2", - "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-3.17.2.tgz", - "integrity": "sha512-e0dmxqsofy/HZj4urcGSJw4S6yHDJxiQdT20/1ciCsd5lomisa7YM4+Qtt1EG4hsqEG1dbEeF855tec1UyqcSA==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-4.1.0.tgz", + "integrity": "sha512-BNYTo7MMamhFOlcaAWp2dMpjg6hPyM/FFqfDIYzmYVLMmQJqc8lWRIiTqP4UX5bresj9Vo0dKC6odSh43VP2NA==", "dev": true, "requires": { - "lodash": "^4.17.15", + "lodash": "^4.17.21", "postcss-media-query-parser": "^0.2.3", "postcss-resolve-nested-selector": "^0.1.1", - "postcss-selector-parser": "^6.0.2", + "postcss-selector-parser": "^6.0.6", "postcss-value-parser": "^4.1.0" }, "dependencies": { + "postcss-selector-parser": { + "version": "6.0.8", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.8.tgz", + "integrity": "sha512-D5PG53d209Z1Uhcc0qAZ5U3t5HagH3cxu+WLZ22jt3gLUpXM4eXXfiO14jiDWST3NNooX/E8wISfOhZ9eIjGTQ==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, "postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", "dev": true } } @@ -56934,65 +56061,6 @@ "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-9.2.1.tgz", "integrity": "sha512-Mu7R0g4ig9TUuGSxJavny5Rv0egCEtpZRNMrZaYS1vxkiIxGiGUwoezU3LazIQ+KE04hTrTfNPgxU5gzi7F5Pw==" }, - "sugarss": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/sugarss/-/sugarss-2.0.0.tgz", - "integrity": "sha512-WfxjozUk0UVA4jm+U1d736AUpzSrNsQcIbyOkoE364GrtWmIrFdk5lksEupgWMD4VaT/0kVx1dobpiDumSgmJQ==", - "dev": true, - "requires": { - "postcss": "^7.0.2" - }, - "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "supports-color": { "version": "5.4.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", @@ -57028,6 +56096,12 @@ } } }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, "svg-parser": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", @@ -57041,188 +56115,95 @@ "dev": true }, "svgo": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.2.1.tgz", - "integrity": "sha512-Y1+LyT4/y1ms4/0yxPMSlvx6dIbgklE9w8CIOnfeoFGB74MEkq8inSfEr6NhocTaFbyYp0a1dvNgRKGRmEBlzA==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.3.1.tgz", + "integrity": "sha512-riDDIQgXpEnn0BEl9Gvhh1LNLIyiusSpt64IR8upJu7MwxnzetmF/Y57pXQD2NMX2lVyMRzXt5f2M5rO4wG7Dw==", "dev": true, "requires": { - "chalk": "^2.4.1", - "coa": "^2.0.2", - "css-select": "^2.0.0", - "css-select-base-adapter": "^0.1.1", - "css-tree": "1.0.0-alpha.28", - "css-url-regex": "^1.1.0", - "csso": "^3.5.1", - "js-yaml": "^3.13.0", - "mkdirp": "~0.5.1", - "object.values": "^1.1.0", - "sax": "~1.2.4", - "stable": "^0.1.8", - "unquote": "~1.1.1", - "util.promisify": "~1.0.0" + "@trysound/sax": "0.1.1", + "chalk": "^4.1.0", + "commander": "^7.1.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.2", + "csso": "^4.2.0", + "stable": "^0.1.8" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true }, "css-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", - "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz", + "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==", "dev": true, "requires": { "boolbase": "^1.0.0", - "css-what": "^3.2.1", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" + "css-what": "^5.0.0", + "domhandler": "^4.2.0", + "domutils": "^2.6.0", + "nth-check": "^2.0.0" } }, "css-what": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.2.1.tgz", - "integrity": "sha512-WwOrosiQTvyms+Ti5ZC5vGEK0Vod3FTt1ca+payZqvKuGJF+dq7bG63DstxtN0dpm6FxY27a/zS3Wten+gEtGw==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.0.1.tgz", + "integrity": "sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg==", "dev": true }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", - "dev": true, - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "es-abstract": { - "version": "1.17.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.3.tgz", - "integrity": "sha512-AwiVPKf3sKGMoWtFw0J7Y4MTZ4Iek67k4COWOwHqS8B9TOZ71DCfcoBmdamy8Y6mj4MDz0+VNUpC2HKHFHA3pg==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.1.5", - "is-regex": "^1.0.5", - "object-inspect": "^1.7.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimleft": "^2.1.1", - "string.prototype.trimright": "^2.1.1" - }, - "dependencies": { - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - } - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dom-serializer": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", + "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", "dev": true, "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" } }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - }, - "is-callable": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", - "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", + "domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", "dev": true }, - "is-regex": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", - "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "domhandler": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", + "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", "dev": true, "requires": { - "has-symbols": "^1.0.1" + "domelementtype": "^2.2.0" } }, - "nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "domutils": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.7.0.tgz", + "integrity": "sha512-8eaHa17IwJUPAiB+SoTYBo5mCdeMgdcAoXJ59m6DT1vw+5iLS3gNoqYaRowaBKtGVrOF1Jz4yDTgYKLK2kvfJg==", "dev": true, "requires": { - "boolbase": "~1.0.0" + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" } }, - "object-inspect": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", - "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", "dev": true }, - "object.values": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", - "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1", - "function-bind": "^1.1.1", - "has": "^1.0.3" - } - }, - "string.prototype.trimleft": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz", - "integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "function-bind": "^1.1.1" - } - }, - "string.prototype.trimright": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz", - "integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==", + "nth-check": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.0.tgz", + "integrity": "sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q==", "dev": true, "requires": { - "define-properties": "^1.1.3", - "function-bind": "^1.1.1" + "boolbase": "^1.0.0" } } } @@ -57240,14 +56221,14 @@ "dev": true }, "symbol.prototype.description": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/symbol.prototype.description/-/symbol.prototype.description-1.0.4.tgz", - "integrity": "sha512-fZkHwJ8ZNRVRzF/+/2OtygyyH06CjC0YZAQRHu9jKKw8RXlJpbizEHvGRUu22Qkg182wJk1ugb5Aovcv3UPrww==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/symbol.prototype.description/-/symbol.prototype.description-1.0.5.tgz", + "integrity": "sha512-x738iXRYsrAt9WBhRCVG5BtIC3B7CUkFwbHW2zOvGtwM33s7JjrCDyq8V0zgMYVb5ymsL8+qkzzpANH63CPQaQ==", "dev": true, "requires": { "call-bind": "^1.0.2", - "es-abstract": "^1.18.0-next.2", - "has-symbols": "^1.0.1", + "get-symbol-description": "^1.0.0", + "has-symbols": "^1.0.2", "object.getownpropertydescriptors": "^2.1.2" }, "dependencies": { @@ -57271,22 +56252,26 @@ } }, "es-abstract": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", - "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", + "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", "dev": true, "requires": { "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", "has": "^1.0.3", "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.3", - "is-string": "^1.0.6", - "object-inspect": "^1.10.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.1", + "is-string": "^1.0.7", + "is-weakref": "^1.0.1", + "object-inspect": "^1.11.0", "object-keys": "^1.1.1", "object.assign": "^4.1.2", "string.prototype.trimend": "^1.0.4", @@ -57304,6 +56289,12 @@ "has": "^1.0.3", "has-symbols": "^1.0.1" } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true } } }, @@ -57325,26 +56316,29 @@ "dev": true }, "is-callable": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", "dev": true }, "is-regex": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", - "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, "requires": { "call-bind": "^1.0.2", - "has-symbols": "^1.0.2" + "has-tostringtag": "^1.0.0" } }, "is-string": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", - "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", - "dev": true + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } }, "is-symbol": { "version": "1.0.4", @@ -57355,10 +56349,10 @@ "has-symbols": "^1.0.2" } }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "object-inspect": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.1.tgz", + "integrity": "sha512-If7BjFlpkzzBeV1cqgT3OSWT3azyoxDGajR+iGnFBfVV2EWyDyWaZZW2ERDjUaY2QM8i5jI3Sj7mhsM4DDAqWA==", "dev": true }, "object.assign": { @@ -57371,17 +56365,25 @@ "define-properties": "^1.1.3", "has-symbols": "^1.0.1", "object-keys": "^1.1.1" + }, + "dependencies": { + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + } } }, "object.getownpropertydescriptors": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz", - "integrity": "sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz", + "integrity": "sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2" + "es-abstract": "^1.19.1" } }, "string.prototype.trimend": { @@ -57406,34 +56408,29 @@ } } }, + "synchronous-promise": { + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/synchronous-promise/-/synchronous-promise-2.0.15.tgz", + "integrity": "sha512-k8uzYIkIVwmT+TcglpdN50pS2y1BDcUnBPK9iJeGu0Pl1lOI8pD6wtzgw91Pjpe+RxtTncw32tLxs/R0yNL2Mg==", + "dev": true + }, "table": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/table/-/table-6.0.6.tgz", - "integrity": "sha512-OInCtPmDNieVBkVFi6C8RwU2S2H0h8mF3e3TQK4nreaUNCpooQUkI+A/KuEkm5FawfhWIfNqG+qfelVVR+V00g==", + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.0.tgz", + "integrity": "sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA==", "dev": true, "requires": { - "ajv": "^7.0.2", - "lodash": "^4.17.20", + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", "slice-ansi": "^4.0.0", - "string-width": "^4.2.0" + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" }, "dependencies": { - "ajv": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-7.0.3.tgz", - "integrity": "sha512-R50QRlXSxqXcQP5SvKUrw8VZeypvo12i2IX0EeR5PiZ7bEKeHWgzgo264LDadUsCU42lTJVhFikTqJwNeH34gQ==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, "ansi-styles": { @@ -57472,30 +56469,12 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", - "dev": true - }, "slice-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", @@ -57508,23 +56487,23 @@ } }, "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" + "strip-ansi": "^6.0.1" } }, "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { - "ansi-regex": "^5.0.0" + "ansi-regex": "^5.0.1" } } } @@ -57544,54 +56523,77 @@ "dev": true }, "tar": { - "version": "4.4.13", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz", - "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==", + "version": "6.1.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", + "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", "dev": true, "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.8.6", - "minizlib": "^1.2.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.3" + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" }, "dependencies": { "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", "dev": true }, + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, "minipass": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", - "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz", + "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", "dev": true, "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" + "yallist": "^4.0.0" + } + }, + "minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" } }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true } } }, "tar-fs": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.0.0.tgz", - "integrity": "sha512-vaY0obB6Om/fso8a8vakQBzwholQ7v5+uy+tF3Ozvxv1KNezmVQAiWtcNmMHFSFPqL3dJA8ha6gdtFbfX9mcxA==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", "dev": true, "requires": { "chownr": "^1.1.1", - "mkdirp": "^0.5.1", + "mkdirp-classic": "^0.5.2", "pump": "^3.0.0", - "tar-stream": "^2.0.0" + "tar-stream": "^2.1.4" }, "dependencies": { "pump": { @@ -57750,12 +56752,6 @@ } } }, - "term-size": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", - "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", - "dev": true - }, "terminal-link": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.0.0.tgz", @@ -57809,26 +56805,29 @@ } }, "terser-webpack-plugin": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-3.0.3.tgz", - "integrity": "sha512-bZFnotuIKq5Rqzrs+qIwFzGdKdffV9epG5vDSEbYzvKAhPeR5RbbrQysfPgbIIMhNAQtZD2hGwBfSKUXjXZZZw==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.4.tgz", + "integrity": "sha512-C2WkFwstHDhVEmsmlCxrXUtVklS+Ir1A7twrYzrDrQQOIMOaVAYykaoo/Aq1K0QRkMoY2hhvDQY1cm4jnIMFwA==", "dev": true, "requires": { - "cacache": "^15.0.4", - "find-cache-dir": "^3.3.1", - "jest-worker": "^26.0.0", - "p-limit": "^2.3.0", - "schema-utils": "^2.6.6", - "serialize-javascript": "^3.1.0", + "jest-worker": "^27.0.2", + "p-limit": "^3.1.0", + "schema-utils": "^3.0.0", + "serialize-javascript": "^6.0.0", "source-map": "^0.6.1", - "terser": "^4.6.13", - "webpack-sources": "^1.4.3" + "terser": "^5.7.0" }, "dependencies": { + "@types/json-schema": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.8.tgz", + "integrity": "sha512-YSBPTLTVm2e2OoQIDYx8HaeWJ5tTToLH67kXR7zYNGupXMEHa2++G8k+DczX2cFVgalypqtyZIcU19AFcmOpmg==", + "dev": true + }, "ajv": { - "version": "6.12.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz", - "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==", + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -57837,35 +56836,10 @@ "uri-js": "^4.2.2" } }, - "cacache": { - "version": "15.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.0.4.tgz", - "integrity": "sha512-YlnKQqTbD/6iyoJvEY3KJftjrdBYroCbxxYXzhOzsFLWlp6KX4BOlEf4mTx0cMUfVaTS3ENL2QtDWeRYoGLkkw==", - "dev": true, - "requires": { - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^5.1.1", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.0", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" - } - }, - "chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "dev": true }, "commander": { @@ -57880,50 +56854,6 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, - "find-cache-dir": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", - "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -57931,150 +56861,40 @@ "dev": true }, "jest-worker": { - "version": "26.0.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.0.0.tgz", - "integrity": "sha512-pPaYa2+JnwmiZjK9x7p9BoZht+47ecFCDFA/CJxspHzeDvQcfVBLWzCiWyo+EGrSiQMWZtCFo9iSvMZnAAo8vw==", + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.0.6.tgz", + "integrity": "sha512-qupxcj/dRuA3xHPMUd40gr2EaAurFbkwzOh7wfPaeE9id7hyjURRQoqNfHifHK3XjJU6YJJUQKILGUnwGPEOCA==", "dev": true, "requires": { + "@types/node": "*", "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" + "supports-color": "^8.0.0" } }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "requires": { - "yallist": "^3.0.2" - }, - "dependencies": { - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - } - } - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "minizlib": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.0.tgz", - "integrity": "sha512-EzTZN/fjSvifSX0SlqUERCN39o6T40AMarPbv0MrarSFtIITCBh7bi+dU8nxGFHuqs9jdIAeoYoKuQAAASsPPA==", - "dev": true, - "requires": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - } - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "requires": { - "find-up": "^4.0.0" + "yocto-queue": "^0.1.0" } }, "schema-utils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", - "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "dev": true, "requires": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" } }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, "serialize-javascript": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-3.1.0.tgz", - "integrity": "sha512-JIJT1DGiWmIKhzRsG91aS6Ze4sFUrYbltlkg2onR5OrnNM02Kl/hnY/T4FN2omvyeBbQmMJv+K4cPOpGzOTFBg==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", "dev": true, "requires": { "randombytes": "^2.1.0" @@ -58086,73 +56906,43 @@ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, - "ssri": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.0.tgz", - "integrity": "sha512-aq/pz989nxVYwn16Tsbj1TqFpD5LLrQxHf5zaHuieFV+R0Bbr4y8qUsOA45hXT/N4/9UNXTarBjnjVmjSOVaAA==", + "source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", "dev": true, "requires": { - "minipass": "^3.1.1" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "requires": { "has-flag": "^4.0.0" } }, - "tar": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.0.2.tgz", - "integrity": "sha512-Glo3jkRtPcvpDlAs/0+hozav78yoXKFr+c4wgw62NNMO3oo4AaJdCo21Uu7lcwr55h39W2XD1LMERc64wtbItg==", - "dev": true, - "requires": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.0", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - } - }, "terser": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.7.0.tgz", - "integrity": "sha512-Lfb0RiZcjRDXCC3OSHJpEkxJ9Qeqs6mp2v4jf2MHfy8vGERmVDuvjXdd/EnP5Deme5F2yBRBymKmKHCBg2echw==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.7.1.tgz", + "integrity": "sha512-b3e+d5JbHAe/JSjwsC3Zn55wsBIM7AsHLjKxT31kGCldgbpFePaFo+PiddtO6uwRZWRw7sPXmAN8dTW61xmnSg==", "dev": true, "requires": { "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - } - }, - "unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "dev": true, - "requires": { - "unique-slug": "^2.0.0" - } - }, - "webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "dev": true, - "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" + "source-map": "~0.7.2", + "source-map-support": "~0.5.19" + }, + "dependencies": { + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + } } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true } } }, @@ -58213,57 +57003,6 @@ "thenify": ">= 3.1.0 < 4" } }, - "thread-loader": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/thread-loader/-/thread-loader-3.0.1.tgz", - "integrity": "sha512-c8Mr7jooXEAochk72XoQ1vPauwFToz9GVwqevqQShAypCUW0nRzYIbkzZo3KErNhhYf/+ga5cUQWxVXQteJj/g==", - "dev": true, - "requires": { - "loader-runner": "^4.1.0", - "loader-utils": "^2.0.0", - "neo-async": "^2.6.2" - }, - "dependencies": { - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true - }, - "json5": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "loader-runner": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.1.0.tgz", - "integrity": "sha512-oR4lB4WvwFoC70ocraKhn5nkKSs23t57h9udUgw8o0iH8hMXeEoRuUgfcvgUwAJ1ZpRqBvcou4N2SMvM1DwMrA==", - "dev": true - }, - "loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - } - } - }, "throat": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", @@ -58290,10 +57029,16 @@ "xtend": "~4.0.1" } }, + "thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true + }, "timers-browserify": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz", - "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==", + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", + "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", "dev": true, "requires": { "setimmediate": "^1.0.4" @@ -58306,23 +57051,9 @@ "dev": true }, "tiny-emitter": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.0.2.tgz", - "integrity": "sha512-2NM0auVBGft5tee/OxP4PI3d8WItkDM+fPnaRAVo6xTDI2knbz9eC5ArWGqtGlYqiH3RU5yMpdyTTO7MguC4ow==" - }, - "tiny-lr": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/tiny-lr/-/tiny-lr-1.1.1.tgz", - "integrity": "sha512-44yhA3tsaRoMOjQQ+5v5mVdqef+kH6Qze9jTpqtVufgYjYt08zyZAwNwwVBj3i1rJMnR52IxOW0LK0vBzgAkuA==", - "dev": true, - "requires": { - "body": "^5.1.0", - "debug": "^3.1.0", - "faye-websocket": "~0.10.0", - "livereload-js": "^2.3.0", - "object-assign": "^4.1.0", - "qs": "^6.4.0" - } + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", + "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==" }, "tinycolor2": { "version": "1.4.2", @@ -58339,9 +57070,9 @@ } }, "tmpl": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", - "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=" + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==" }, "to-arraybuffer": { "version": "1.0.1", @@ -58407,7 +57138,14 @@ "toidentifier": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "dev": true + }, + "totalist": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz", + "integrity": "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==", + "dev": true }, "tough-cookie": { "version": "2.4.3", @@ -58442,9 +57180,9 @@ "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=" }, "tree-kill": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.0.tgz", - "integrity": "sha512-DlX6dR0lOIRDFxI0mjL9IYg6OTncLm/Zt+JiBhE5OlFcAR8yc9S7FFXU9so0oda47frdM/JFsk7UjNt9vscKcg==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", "dev": true }, "trim": { @@ -58460,9 +57198,9 @@ "dev": true }, "trim-off-newlines": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz", - "integrity": "sha1-n5up2e+odkw4dpi8v+sshI8RrbM=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/trim-off-newlines/-/trim-off-newlines-1.0.3.tgz", + "integrity": "sha512-kh6Tu6GbeSNMGfrrZh6Bb/4ZEHV1QlB4xNDBeog8Y9/QwFlKTRyWvY3Fs9tRDAMZliVUwieMgEdIeL/FtqjkJg==", "dev": true }, "trim-repeated": { @@ -58505,9 +57243,9 @@ "dev": true }, "tsconfig-paths": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz", - "integrity": "sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.11.0.tgz", + "integrity": "sha512-7ecdYDnIdmv639mmDwslG6KQg1Z9STTz1j7Gcz0xa+nshh/gKDAHcPxRbWOsA3SPp0tXP2leTcY9Kw+NAkfZzA==", "dev": true, "requires": { "@types/json5": "^0.0.29", @@ -58539,9 +57277,9 @@ "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==" }, "tsutils": { - "version": "3.17.1", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz", - "integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==", + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", "dev": true, "requires": { "tslib": "^1.8.1" @@ -58652,43 +57390,17 @@ } }, "typescript": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.1.3.tgz", - "integrity": "sha512-B3ZIOf1IKeH2ixgHhj6la6xdwR9QrLC5d1VKeCSY4tvkqhF2eqd9O7txNlS0PO3GrBAFIdr3L1ndNwteUbZLYg==", + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.2.tgz", + "integrity": "sha512-gzP+t5W4hdy4c+68bfcv0t400HVJMMd2+H9B7gae1nQlBzCqvrXX+6GL/b3GAgyTH966pzrZ70/fRjwAtZksSQ==", "dev": true }, - "ua-parser-js": { - "version": "0.7.28", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.28.tgz", - "integrity": "sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g==" - }, "uc.micro": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", "dev": true }, - "uglify-es": { - "version": "3.3.9", - "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz", - "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==", - "requires": { - "commander": "~2.13.0", - "source-map": "~0.6.1" - }, - "dependencies": { - "commander": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", - "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, "uglify-js": { "version": "3.13.7", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.13.7.tgz", @@ -58733,9 +57445,9 @@ } }, "unbzip2-stream": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.3.3.tgz", - "integrity": "sha512-fUlAF7U9Ah1Q6EieQ4x4zLNejrRvDWUYmxXUpN3uziFYCHapjWFaCAnreY9bGgxzaMCFAPPpYNng57CypwJVhg==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", + "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", "dev": true, "requires": { "buffer": "^5.2.1", @@ -58875,23 +57587,6 @@ "integrity": "sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==", "dev": true }, - "unist-util-find-all-after": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/unist-util-find-all-after/-/unist-util-find-all-after-3.0.2.tgz", - "integrity": "sha512-xaTC/AGZ0rIM2gM28YVRAFPIZpzbpDtU3dRmp7EXlNVA8ziQc4hY3H7BHXM1J49nEmiqc3svnqMReW+PGqbZKQ==", - "dev": true, - "requires": { - "unist-util-is": "^4.0.0" - }, - "dependencies": { - "unist-util-is": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", - "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", - "dev": true - } - } - }, "unist-util-generated": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz", @@ -58988,12 +57683,6 @@ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" }, - "unquote": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", - "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=", - "dev": true - }, "unset-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", @@ -59030,6 +57719,38 @@ } } }, + "unzipper": { + "version": "0.10.11", + "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.11.tgz", + "integrity": "sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw==", + "dev": true, + "requires": { + "big-integer": "^1.6.17", + "binary": "~0.3.0", + "bluebird": "~3.4.1", + "buffer-indexof-polyfill": "~1.0.0", + "duplexer2": "~0.1.4", + "fstream": "^1.0.12", + "graceful-fs": "^4.2.2", + "listenercount": "~1.0.1", + "readable-stream": "~2.3.6", + "setimmediate": "~1.0.4" + }, + "dependencies": { + "bluebird": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", + "integrity": "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM=", + "dev": true + }, + "graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", + "dev": true + } + } + }, "upath": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", @@ -59192,8 +57913,7 @@ "use-isomorphic-layout-effect": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.1.tgz", - "integrity": "sha512-L7Evj8FGcwo/wpbv/qvSfrkHFtOpCzvM5yl2KVyDJoylVuSvzphiiasmjgQPttIGBAy2WKiBNR98q8w7PiNgKQ==", - "dev": true + "integrity": "sha512-L7Evj8FGcwo/wpbv/qvSfrkHFtOpCzvM5yl2KVyDJoylVuSvzphiiasmjgQPttIGBAy2WKiBNR98q8w7PiNgKQ==" }, "use-latest": { "version": "1.2.0", @@ -59271,6 +57991,12 @@ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.0.tgz", "integrity": "sha512-fX6Z5o4m6XsXBdli9g7DtWgAx+osMsRRZFKma1mIUsLCz6vRvv+pz5VNbyu9UEDzpMWulZfvpgb/cmDXVulYFQ==" }, + "uuid-browser": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/uuid-browser/-/uuid-browser-3.1.0.tgz", + "integrity": "sha1-DwWkCu90+eWVHiDvv0SxGHHlZBA=", + "dev": true + }, "v8-compile-cache": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz", @@ -59278,9 +58004,9 @@ "dev": true }, "v8-to-istanbul": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-7.1.0.tgz", - "integrity": "sha512-uXUVqNUCLa0AH1vuVxzi+MI4RfxEOKt9pBgKwHbgH7st8Kv2P1m+jvWNnektzBh5QShF3ODgKmUFCf38LnVz1g==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.0.tgz", + "integrity": "sha512-/PRhfd8aTNp9Ggr62HPzXg2XasNFGy5PBt0Rp04du7/8GNNSgxFL6WBTkgMKSL9bFjH+8kKEG3f37FmxiTqUUA==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.1", @@ -59289,9 +58015,9 @@ }, "dependencies": { "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", "dev": true, "requires": { "safe-buffer": "~5.1.1" @@ -59309,7 +58035,6 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz", "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==", - "dev": true, "requires": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" @@ -59336,9 +58061,9 @@ "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" }, "vendors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.2.tgz", - "integrity": "sha512-w/hry/368nO21AN9QljsaIhb9ZiZtZARoVH5f3CsFbawdLdayCgKRPup7CggujvySMxx0I91NOyxdVENohprLQ==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", + "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==", "dev": true }, "verror": { @@ -59350,6 +58075,14 @@ "assert-plus": "^1.0.0", "core-util-is": "1.0.2", "extsprintf": "^1.2.0" + }, + "dependencies": { + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + } } }, "vfile": { @@ -59417,73 +58150,40 @@ } }, "wait-on": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-3.3.0.tgz", - "integrity": "sha512-97dEuUapx4+Y12aknWZn7D25kkjMk16PbWoYzpSdA8bYpVfS6hpl2a2pOWZ3c+Tyt3/i4/pglyZctG3J4V1hWQ==", - "dev": true, - "requires": { - "@hapi/joi": "^15.0.3", - "core-js": "^2.6.5", - "minimist": "^1.2.0", - "request": "^2.88.0", - "rx": "^4.1.0" - }, - "dependencies": { - "core-js": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz", - "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==", - "dev": true - }, - "rx": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz", - "integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I=", - "dev": true - } - } - }, - "wait-port": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/wait-port/-/wait-port-0.2.7.tgz", - "integrity": "sha512-pJ6cSBIa0w1sDg4y/wXN4bmvhM9OneOvwdFHo647L2NShBi/oXG4lRaLic5cO1HaYGbUhEvratPfl/WMlIC+tg==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-6.0.0.tgz", + "integrity": "sha512-tnUJr9p5r+bEYXPUdRseolmz5XqJTTj98JgOsfBn7Oz2dxfE2g3zw1jE+Mo8lopM3j3et/Mq1yW7kKX6qw7RVw==", "dev": true, "requires": { - "chalk": "^2.4.2", - "commander": "^3.0.2", - "debug": "^4.1.1" + "axios": "^0.21.1", + "joi": "^17.4.0", + "lodash": "^4.17.21", + "minimist": "^1.2.5", + "rxjs": "^7.1.0" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "follow-redirects": "^1.14.0" } }, - "commander": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", - "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==", - "dev": true - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "rxjs": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.4.0.tgz", + "integrity": "sha512-7SQDi7xeTMCJpqViXh8gL/lebcwlp3d831F05+9B44A4B0WfsEwUQHR64gsH1kvJ+Ep/J9K2+n1hVl1CsGN23w==", "dev": true, "requires": { - "ms": "^2.1.1" + "tslib": "~2.1.0" } }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "tslib": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", + "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==", "dev": true } } @@ -59496,6 +58196,11 @@ "makeerror": "1.0.x" } }, + "warn-once": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/warn-once/-/warn-once-0.1.0.tgz", + "integrity": "sha512-recZTSvuaH/On5ZU5ywq66y99lImWqzP93+AiUo9LUwG8gXHW+LJjhOd6REJHm7qb0niYqrEQJvbHSQfuJtTqA==" + }, "warning": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", @@ -59515,107 +58220,67 @@ "graceful-fs": "^4.1.2", "neo-async": "^2.5.0", "watchpack-chokidar2": "^2.0.1" + } + }, + "watchpack-chokidar2": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", + "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", + "dev": true, + "optional": true, + "requires": { + "chokidar": "^2.1.8" }, "dependencies": { - "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", - "dev": true, - "optional": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", "dev": true, "optional": true }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "optional": true, - "requires": { - "fill-range": "^7.0.1" - } - }, "chokidar": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", - "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", "dev": true, "optional": true, "requires": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "fsevents": "~2.3.1", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.5.0" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "optional": true, - "requires": { - "to-regex-range": "^5.0.1" + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" } }, "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", "dev": true, "optional": true, "requires": { - "is-glob": "^4.0.1" + "bindings": "^1.5.0", + "nan": "^2.12.1" } }, "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "optional": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", "dev": true, "optional": true, "requires": { - "is-extglob": "^2.1.1" + "binary-extensions": "^1.0.0" } }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "optional": true - }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -59624,44 +58289,26 @@ "optional": true }, "readdirp": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", - "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", - "dev": true, - "optional": true, - "requires": { - "picomatch": "^2.2.1" - }, - "dependencies": { - "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", - "dev": true, - "optional": true - } - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", "dev": true, "optional": true, "requires": { - "is-number": "^7.0.0" + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" } } } }, - "watchpack-chokidar2": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", - "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", + "wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", "dev": true, - "optional": true, "requires": { - "chokidar": "^2.1.8" + "minimalistic-assert": "^1.0.0" } }, "wcwidth": { @@ -59685,6 +58332,17 @@ "q": "^1.5.1", "request": "2.88.0", "vargs": "^0.1.0" + }, + "dependencies": { + "async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + } } }, "web-namespaces": { @@ -59700,789 +58358,915 @@ "dev": true }, "webpack": { - "version": "4.46.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz", - "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/wasm-edit": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "acorn": "^6.4.1", - "ajv": "^6.10.2", - "ajv-keywords": "^3.4.1", + "version": "5.65.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.65.0.tgz", + "integrity": "sha512-Q5or2o6EKs7+oKmJo7LaqZaMOlDWQse9Tm5l1WAfU/ujLGN5Pb0SqGeVkN/4bpPmEqEP5RnVhiqsOtWtUVwGRw==", + "dev": true, + "requires": { + "@types/eslint-scope": "^3.7.0", + "@types/estree": "^0.0.50", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.4.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^4.5.0", - "eslint-scope": "^4.0.3", + "enhanced-resolve": "^5.8.3", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.4", "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.4.0", - "loader-utils": "^1.2.3", - "memory-fs": "^0.4.1", - "micromatch": "^3.1.10", - "mkdirp": "^0.5.3", - "neo-async": "^2.6.1", - "node-libs-browser": "^2.2.1", - "schema-utils": "^1.0.0", - "tapable": "^1.1.3", - "terser-webpack-plugin": "^1.4.3", - "watchpack": "^1.7.4", - "webpack-sources": "^1.4.1" + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.3.1", + "webpack-sources": "^3.2.2" }, "dependencies": { - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true - }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - }, - "cacache": { - "version": "12.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", - "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", - "dev": true, - "requires": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" - } - }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "@types/json-schema": { + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", "dev": true }, - "find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "@webassemblyjs/ast": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", "dev": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" } }, - "graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", "dev": true }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } + "@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", + "dev": true }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", "dev": true, "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" } }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "@webassemblyjs/ieee754": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", "dev": true, "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "@xtuc/ieee754": "^1.2.0" } }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "@webassemblyjs/leb128": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", "dev": true, "requires": { - "yallist": "^3.0.2" + "@xtuc/long": "4.2.2" } }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "@webassemblyjs/utf8": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", "dev": true, "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" } }, - "mississippi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", - "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", + "@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", "dev": true, "requires": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^3.0.0", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" } }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", "dev": true, "requires": { - "minimist": "^1.2.5" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" } }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", "dev": true, "requires": { - "p-try": "^2.0.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" } }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "@webassemblyjs/wast-printer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", "dev": true, "requires": { - "p-limit": "^2.0.0" + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" } }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "acorn": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.6.0.tgz", + "integrity": "sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw==", "dev": true }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "requires": { - "find-up": "^3.0.0" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" } }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "enhanced-resolve": { + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.3.tgz", + "integrity": "sha512-EGAbGvH7j7Xt2nc0E7D99La1OiEs8LnyimkRgwExpUMScN6O+3x9tIWs7PLQZVNx4YD+00skHXPXi1yQHpAmZA==", "dev": true, "requires": { - "glob": "^7.1.3" + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" } }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "es-module-lexer": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", "dev": true }, - "serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, "requires": { - "randombytes": "^2.1.0" + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" } }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", "dev": true }, - "ssri": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", - "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", - "dev": true, - "requires": { - "figgy-pudding": "^3.5.1" - } + "graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", + "dev": true }, - "tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "loader-runner": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", + "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", "dev": true }, - "terser-webpack-plugin": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", - "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", - "dev": true, - "requires": { - "cacache": "^12.0.2", - "find-cache-dir": "^2.1.0", - "is-wsl": "^1.1.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^4.0.0", - "source-map": "^0.6.1", - "terser": "^4.1.2", - "webpack-sources": "^1.4.0", - "worker-farm": "^1.7.0" - } + "mime-db": { + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", + "dev": true }, - "unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "mime-types": { + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", "dev": true, "requires": { - "unique-slug": "^2.0.0" + "mime-db": "1.51.0" } }, - "webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "dev": true, "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" } }, - "y18n": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", - "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", + "tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "dev": true }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true + "watchpack": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.1.tgz", + "integrity": "sha512-x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA==", + "dev": true, + "requires": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + } } } }, "webpack-bundle-analyzer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.2.0.tgz", - "integrity": "sha512-gmjpdL/AJeGAftSzA+bjIPiChUffjBelcH2+3woCUiRpQfuwrTJuWRyZuqegiwBAroMJp7gIwcJaGeol039zbQ==", + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.4.2.tgz", + "integrity": "sha512-PIagMYhlEzFfhMYOzs5gFT55DkUdkyrJi/SxJp8EF3YMWhS+T9vvs2EoTetpk5qb6VsCq02eXTlRDOydRhDFAQ==", "dev": true, "requires": { "acorn": "^8.0.4", "acorn-walk": "^8.0.0", "chalk": "^4.1.0", "commander": "^6.2.0", - "express": "^4.17.1", - "filesize": "^6.1.0", "gzip-size": "^6.0.0", "lodash": "^4.17.20", "opener": "^1.5.2", + "sirv": "^1.0.7", "ws": "^7.3.1" }, "dependencies": { "acorn": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.0.4.tgz", - "integrity": "sha512-XNP0PqF1XD19ZlLKvB7cMmnZswW4C/03pRHgirB30uSJTaS3A3V1/P4sS3HPvFmjoriPCJQs+JDSbm4bL1TxGQ==", + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz", + "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==", "dev": true }, "acorn-walk": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.0.0.tgz", - "integrity": "sha512-oZRad/3SMOI/pxbbmqyurIx7jHw1wZDcR9G44L8pUVFEomX/0dH89SrM1KaDXuv1NpzAXz6Op/Xu/Qd5XXzdEA==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.1.1.tgz", + "integrity": "sha512-FbJdceMlPHEAWJOILDk1fXD8lnTlEIWFkqtfk+MvmL5q/qlHfN7GEHcsFZWt/Tea9jRNPWUZG4G976nqAAmU9w==", "dev": true }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "dev": true + }, + "duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true + }, + "gzip-size": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", + "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", "dev": true, "requires": { - "color-convert": "^2.0.1" + "duplexer": "^0.1.2" } + } + } + }, + "webpack-cli": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.9.1.tgz", + "integrity": "sha512-JYRFVuyFpzDxMDB+v/nanUdQYcZtqFPGzmlW4s+UkPMFhSpfRNmf1z4AwYcHJVdvEFAM7FFCQdNTpsBYhDLusQ==", + "dev": true, + "requires": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^1.1.0", + "@webpack-cli/info": "^1.4.0", + "@webpack-cli/serve": "^1.6.0", + "colorette": "^2.0.14", + "commander": "^7.0.0", + "execa": "^5.0.0", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^2.2.0", + "rechoir": "^0.7.0", + "webpack-merge": "^5.7.3" + }, + "dependencies": { + "colorette": { + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", + "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", + "dev": true }, - "chalk": { + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "find-up": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" } }, - "color-convert": { + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true + }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true + }, + "import-local": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.3.tgz", + "integrity": "sha512-bE9iaUY3CXH8Cwfan/abDKAxe1KGT9kyGsBPqf6DMK/z0a2OzAsrukeYNgIH6cH5Xr452jb1TUL8rSfCLjZ9uA==", + "dev": true, + "requires": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + } + }, + "is-stream": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "requires": { - "color-name": "~1.1.4" + "p-locate": "^4.1.0" } }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true }, - "commander": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, - "duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true }, - "gzip-size": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", - "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, "requires": { - "duplexer": "^0.1.2" + "find-up": "^4.0.0" } }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "rechoir": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", + "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", + "dev": true, + "requires": { + "resolve": "^1.9.0" + } + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "requires": { + "resolve-from": "^5.0.0" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true }, - "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "signal-exit": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz", + "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "requires": { - "has-flag": "^4.0.0" + "isexe": "^2.0.0" } } } }, - "webpack-cli": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.11.tgz", - "integrity": "sha512-dXlfuml7xvAFwYUPsrtQAA9e4DOe58gnzSxhgrO/ZM/gyXTBowrsYeubyN4mqGhYdpXMFNyQ6emjJS9M7OBd4g==", + "webpack-dev-middleware": { + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz", + "integrity": "sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==", "dev": true, "requires": { - "chalk": "2.4.2", - "cross-spawn": "6.0.5", - "enhanced-resolve": "4.1.0", - "findup-sync": "3.0.0", - "global-modules": "2.0.0", - "import-local": "2.0.0", - "interpret": "1.2.0", - "loader-utils": "1.2.3", - "supports-color": "6.1.0", - "v8-compile-cache": "2.0.3", - "yargs": "13.2.4" + "memory-fs": "^0.4.1", + "mime": "^2.4.4", + "mkdirp": "^0.5.1", + "range-parser": "^1.2.1", + "webpack-log": "^2.0.0" + } + }, + "webpack-dev-server": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.4.0.tgz", + "integrity": "sha512-+S0XRIbsopVjPFjCO8I07FXYBWYqkFmuP56ucGMTs2hA/gV4q2M9xTmNo5Tg4o8ffRR+Nm3AsXnQXxKRyYovrA==", + "dev": true, + "requires": { + "ansi-html-community": "^0.0.8", + "bonjour": "^3.5.0", + "chokidar": "^3.5.2", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^1.6.0", + "del": "^6.0.0", + "express": "^4.17.1", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.0", + "internal-ip": "^6.2.0", + "ipaddr.js": "^2.0.1", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "portfinder": "^1.0.28", + "schema-utils": "^3.1.0", + "selfsigned": "^1.10.11", + "serve-index": "^1.9.1", + "sockjs": "^0.3.21", + "spdy": "^4.0.2", + "strip-ansi": "^7.0.0", + "url": "^0.11.0", + "webpack-dev-middleware": "^5.2.1", + "ws": "^8.1.0" }, "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "@types/json-schema": { + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", "dev": true }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" } }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true + }, + "ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true + }, + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" + "fill-range": "^7.0.1" } }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "colorette": { + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", + "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", + "dev": true + }, + "del": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz", + "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==", "dev": true, "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "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" } }, - "enhanced-resolve": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz", - "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==", + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-glob": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.4.0", - "tapable": "^1.0.0" + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" } }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" + "to-regex-range": "^5.0.1" } }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "requires": { - "locate-path": "^3.0.0" + "is-glob": "^4.0.1" } }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "globby": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", + "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", "dev": true, "requires": { - "pump": "^3.0.0" + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" } }, - "interpret": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", - "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==", + "graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", "dev": true }, - "invert-kv": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", + "html-entities": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.2.tgz", + "integrity": "sha512-c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ==", "dev": true }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } + "ipaddr.js": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", + "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", + "dev": true }, - "lcid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", - "dev": true, - "requires": { - "invert-kv": "^2.0.0" - } + "is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true }, - "loader-utils": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", - "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "requires": { - "big.js": "^5.2.2", - "emojis-list": "^2.0.0", - "json5": "^1.0.1" + "is-extglob": "^2.1.1" } }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true }, - "mem": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", - "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", + "is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true + }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "dev": true, "requires": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^2.0.0", - "p-is-promise": "^2.0.0" + "is-docker": "^2.0.0" } }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true }, - "os-locale": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", - "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", "dev": true, "requires": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" + "braces": "^3.0.1", + "picomatch": "^2.2.3" } }, - "p-limit": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz", - "integrity": "sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==", + "mime-db": { + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", + "dev": true + }, + "mime-types": { + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", "dev": true, "requires": { - "p-try": "^2.0.0" + "mime-db": "1.51.0" } }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "open": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", "dev": true, "requires": { - "p-limit": "^2.0.0" + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" } }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", "dev": true, "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "aggregate-error": "^3.0.0" } }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", "dev": true }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "dev": true, "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" } }, "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", "dev": true, "requires": { - "ansi-regex": "^4.1.0" + "ansi-regex": "^6.0.1" } }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "is-number": "^7.0.0" } }, - "v8-compile-cache": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz", - "integrity": "sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w==", - "dev": true - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "webpack-dev-middleware": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.2.1.tgz", + "integrity": "sha512-Kx1X+36Rn9JaZcQMrJ7qN3PMAuKmEDD9ZISjUj3Cgq4A6PtwYsC4mpaKotSRYH3iOF6HsUa8viHKS59FlyVifQ==", "dev": true, "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" + "colorette": "^2.0.10", + "memfs": "^3.2.2", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^3.1.0" } }, - "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "ws": { + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", + "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", "dev": true - }, - "yargs": { - "version": "13.2.4", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.4.tgz", - "integrity": "sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg==", - "dev": true, - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "os-locale": "^3.1.0", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.0" - } } } }, - "webpack-dev-middleware": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz", - "integrity": "sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==", - "dev": true, - "requires": { - "memory-fs": "^0.4.1", - "mime": "^2.4.4", - "mkdirp": "^0.5.1", - "range-parser": "^1.2.1", - "webpack-log": "^2.0.0" - } - }, "webpack-filter-warnings-plugin": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/webpack-filter-warnings-plugin/-/webpack-filter-warnings-plugin-1.2.1.tgz", @@ -60490,60 +59274,31 @@ "dev": true }, "webpack-hot-middleware": { - "version": "2.25.0", - "resolved": "https://registry.npmjs.org/webpack-hot-middleware/-/webpack-hot-middleware-2.25.0.tgz", - "integrity": "sha512-xs5dPOrGPCzuRXNi8F6rwhawWvQQkeli5Ro48PRuQh8pYPCPmNnltP9itiUPT4xI8oW+y0m59lyyeQk54s5VgA==", + "version": "2.25.1", + "resolved": "https://registry.npmjs.org/webpack-hot-middleware/-/webpack-hot-middleware-2.25.1.tgz", + "integrity": "sha512-Koh0KyU/RPYwel/khxbsDz9ibDivmUbrRuKSSQvW42KSDdO4w23WI3SkHpSUKHE76LrFnnM/L7JCrpBwu8AXYw==", "dev": true, "requires": { - "ansi-html": "0.0.7", - "html-entities": "^1.2.0", + "ansi-html-community": "0.0.8", + "html-entities": "^2.1.0", "querystring": "^0.2.0", - "strip-ansi": "^3.0.0" + "strip-ansi": "^6.0.0" }, "dependencies": { "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, - "webpack-livereload-plugin": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/webpack-livereload-plugin/-/webpack-livereload-plugin-2.3.0.tgz", - "integrity": "sha512-vVBLQLlNpElt2sfsBG+XLDeVbQFS4RrniVU8Hi1/hX5ycSfx6mtW8MEEITr2g0Cvo36kuPWShFFDuy+DS7KFMA==", - "dev": true, - "requires": { - "anymatch": "^3.1.1", - "portfinder": "^1.0.17", - "tiny-lr": "^1.1.1" - }, - "dependencies": { - "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "ansi-regex": "^5.0.1" } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true } } }, @@ -60571,30 +59326,22 @@ } } }, - "webpack-sources": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.2.0.tgz", - "integrity": "sha512-bQsA24JLwcnWGArOKUxYKhX3Mz/nK1Xf6hxullKERyktjNMC4x8koOeaDNTA2fEJ09BdWLbM/iTW0ithREUP0w==", + "webpack-merge": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", + "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", "dev": true, "requires": { - "source-list-map": "^2.0.1", - "source-map": "^0.6.1" - }, - "dependencies": { - "source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" } }, + "webpack-sources": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.2.tgz", + "integrity": "sha512-cp5qdmHnu5T8wRg2G3vZZHoJPN14aqQ89SyQ11NpGH5zEMDCclt49rzo+MaRazk7/UeILhAI+/sEtcM+7Fr0nw==", + "dev": true + }, "webpack-virtual-modules": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.2.2.tgz", @@ -60605,19 +59352,20 @@ } }, "websocket-driver": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.0.tgz", - "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=", + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", "dev": true, "requires": { - "http-parser-js": ">=0.4.0", + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", "websocket-extensions": ">=0.1.1" } }, "websocket-extensions": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz", - "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", "dev": true }, "whatwg-encoding": { @@ -60748,9 +59496,9 @@ }, "dependencies": { "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, "emoji-regex": { @@ -60766,27 +59514,33 @@ "dev": true }, "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" + "strip-ansi": "^6.0.1" } }, "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { - "ansi-regex": "^5.0.0" + "ansi-regex": "^5.0.1" } } } }, + "wildcard": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", + "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", + "dev": true + }, "windows-release": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-3.2.0.tgz", @@ -60892,9 +59646,9 @@ }, "dependencies": { "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, "ansi-styles": { "version": "4.3.0", @@ -60928,21 +59682,21 @@ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" + "strip-ansi": "^6.0.1" } }, "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "requires": { - "ansi-regex": "^5.0.0" + "ansi-regex": "^5.0.1" } } } @@ -61083,11 +59837,6 @@ "sax": "^1.2.1" } }, - "xmldom": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.5.0.tgz", - "integrity": "sha512-Foaj5FXVzgn7xFzsKeNIde9g6aFBxTPi37iwsno8QvApmtg7KYrr+OPyRHcJF7dud2a5nGRBXK3n0dL62Gf7PA==" - }, "xtend": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", @@ -61113,152 +59862,117 @@ } }, "yargs": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-14.0.0.tgz", - "integrity": "sha512-ssa5JuRjMeZEUjg7bEL99AwpitxU/zWGAGpdj0di41pOEmJti8NR6kyUIJBkR78DTYNPZOU08luUo0GTHuB+ow==", + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "requires": { - "cliui": "^5.0.0", - "decamelize": "^1.2.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.1" + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" }, "dependencies": { "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "locate-path": "^3.0.0" + "color-convert": "^2.0.1" } }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" } }, - "p-limit": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", - "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { - "p-try": "^2.0.0" + "color-name": "~1.1.4" } }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true }, "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" } }, "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { - "ansi-regex": "^4.1.0" + "ansi-regex": "^5.0.1" } }, "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" } }, "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true } } }, "yargs-parser": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", - "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - } - } + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true }, "yauzl": { "version": "2.4.1", @@ -61269,6 +59983,15 @@ "fd-slicer": "~1.0.1" } }, + "yazl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", + "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==", + "dev": true, + "requires": { + "buffer-crc32": "~0.2.3" + } + }, "yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/package.json b/package.json old mode 100644 new mode 100755 index b0dd8233d3244..d361be7ec5f01 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "gutenberg", - "version": "11.2.0-rc.1", + "version": "13.3.0-rc.1", "private": true, "description": "A new WordPress editor experience.", "author": "The WordPress Contributors", @@ -19,11 +19,10 @@ "npm": ">=6.9.0 <7" }, "config": { - "GUTENBERG_PHASE": 2 + "IS_GUTENBERG_PLUGIN": true }, "dependencies": { "@wordpress/a11y": "file:packages/a11y", - "@wordpress/admin-manifest": "file:packages/admin-manifest", "@wordpress/annotations": "file:packages/annotations", "@wordpress/api-fetch": "file:packages/api-fetch", "@wordpress/autop": "file:packages/autop", @@ -65,6 +64,8 @@ "@wordpress/notices": "file:packages/notices", "@wordpress/nux": "file:packages/nux", "@wordpress/plugins": "file:packages/plugins", + "@wordpress/preferences": "file:packages/preferences", + "@wordpress/preferences-persistence": "file:packages/preferences-persistence", "@wordpress/primitives": "file:packages/primitives", "@wordpress/priority-queue": "file:packages/priority-queue", "@wordpress/react-i18n": "file:packages/react-i18n", @@ -76,6 +77,7 @@ "@wordpress/rich-text": "file:packages/rich-text", "@wordpress/server-side-render": "file:packages/server-side-render", "@wordpress/shortcode": "file:packages/shortcode", + "@wordpress/style-engine": "file:packages/style-engine", "@wordpress/token-list": "file:packages/token-list", "@wordpress/url": "file:packages/url", "@wordpress/viewport": "file:packages/viewport", @@ -84,42 +86,47 @@ "@wordpress/wordcount": "file:packages/wordcount" }, "devDependencies": { - "@actions/core": "1.4.0", + "@actions/core": "1.8.0", "@actions/github": "5.0.0", - "@babel/core": "7.13.10", - "@babel/plugin-syntax-jsx": "7.12.13", - "@babel/runtime-corejs3": "7.13.10", - "@babel/traverse": "7.13.0", + "@babel/core": "7.16.0", + "@babel/plugin-syntax-jsx": "7.16.0", + "@babel/runtime-corejs3": "7.16.0", + "@babel/traverse": "7.16.0", "@emotion/babel-plugin": "11.3.0", - "@emotion/jest": "11.3.0", - "@emotion/native": "^11.0.0", + "@emotion/jest": "11.7.1", + "@emotion/native": "11.0.0", "@octokit/rest": "16.26.0", - "@octokit/webhooks": "7.1.0", - "@storybook/addon-a11y": "6.3.2", - "@storybook/addon-docs": "6.3.2", + "@playwright/test": "1.20.0", + "@pmmmwh/react-refresh-webpack-plugin": "0.5.2", + "@storybook/addon-a11y": "6.4.9", + "@storybook/addon-actions": "6.4.19", + "@storybook/addon-controls": "6.4.9", + "@storybook/addon-docs": "6.4.9", "@storybook/addon-knobs": "6.2.9", - "@storybook/addon-storysource": "6.3.2", - "@storybook/addon-viewport": "6.3.2", - "@storybook/react": "6.3.2", - "@testing-library/jest-dom": "5.11.9", + "@storybook/addon-storysource": "6.4.9", + "@storybook/addon-toolbars": "6.4.9", + "@storybook/addon-viewport": "6.4.9", + "@storybook/builder-webpack5": "6.4.9", + "@storybook/manager-webpack5": "6.4.9", + "@storybook/react": "6.4.9", + "@testing-library/jest-dom": "5.16.1", "@testing-library/react": "11.2.2", - "@testing-library/react-native": "7.1.0", - "@types/classnames": "2.2.10", - "@types/clipboard": "2.0.1", - "@types/eslint": "6.8.0", - "@types/estree": "0.0.44", - "@types/highlight-words-core": "1.2.0", - "@types/lodash": "4.14.149", - "@types/npm-package-arg": "6.1.0", - "@types/prettier": "1.19.0", - "@types/qs": "6.9.1", - "@types/requestidlecallback": "0.3.1", - "@types/semver": "7.2.0", + "@testing-library/react-native": "9.0.0", + "@testing-library/user-event": "14.1.1", + "@types/classnames": "2.3.1", + "@types/eslint": "7.28.0", + "@types/estree": "0.0.50", + "@types/highlight-words-core": "1.2.1", + "@types/istanbul-lib-report": "3.0.0", + "@types/lodash": "4.14.172", + "@types/npm-package-arg": "6.1.1", + "@types/prettier": "2.4.4", + "@types/qs": "6.9.7", + "@types/react-dates": "21.8.3", + "@types/requestidlecallback": "0.3.4", + "@types/semver": "7.3.8", "@types/sprintf-js": "1.1.2", - "@types/tinycolor2": "1.4.2", - "@types/uuid": "8.3.0", - "@types/webpack": "4.41.16", - "@types/webpack-sources": "0.1.7", + "@types/uuid": "8.3.1", "@wordpress/babel-plugin-import-jsx-pragma": "file:packages/babel-plugin-import-jsx-pragma", "@wordpress/babel-plugin-makepot": "file:packages/babel-plugin-makepot", "@wordpress/babel-preset-default": "file:packages/babel-preset-default", @@ -127,10 +134,10 @@ "@wordpress/browserslist-config": "file:packages/browserslist-config", "@wordpress/create-block": "file:packages/create-block", "@wordpress/create-block-tutorial-template": "file:packages/create-block-tutorial-template", - "@wordpress/custom-templated-path-webpack-plugin": "file:packages/custom-templated-path-webpack-plugin", "@wordpress/dependency-extraction-webpack-plugin": "file:packages/dependency-extraction-webpack-plugin", "@wordpress/docgen": "file:packages/docgen", "@wordpress/e2e-test-utils": "file:packages/e2e-test-utils", + "@wordpress/e2e-test-utils-playwright": "file:packages/e2e-test-utils-playwright", "@wordpress/e2e-tests": "file:packages/e2e-tests", "@wordpress/env": "file:packages/env", "@wordpress/eslint-plugin": "file:packages/eslint-plugin", @@ -138,7 +145,6 @@ "@wordpress/jest-preset-default": "file:packages/jest-preset-default", "@wordpress/jest-puppeteer-axe": "file:packages/jest-puppeteer-axe", "@wordpress/lazy-import": "file:packages/lazy-import", - "@wordpress/library-export-default-webpack-plugin": "file:packages/library-export-default-webpack-plugin", "@wordpress/npm-package-json-lint-config": "file:packages/npm-package-json-lint-config", "@wordpress/postcss-plugins-preset": "file:packages/postcss-plugins-preset", "@wordpress/postcss-themes": "file:packages/postcss-themes", @@ -147,136 +153,146 @@ "@wordpress/readable-js-assets-webpack-plugin": "file:packages/readable-js-assets-webpack-plugin", "@wordpress/scripts": "file:packages/scripts", "@wordpress/stylelint-config": "file:packages/stylelint-config", - "appium": "1.20.2", - "babel-jest": "26.6.3", - "babel-loader": "8.2.2", + "ajv": "8.7.1", + "ajv-draft-04": "1.0.0", + "appium": "1.22.0", + "babel-jest": "27.4.5", + "babel-loader": "8.2.3", "babel-plugin-inline-json-import": "0.3.2", "babel-plugin-react-native-classname-to-style": "1.2.2", "babel-plugin-react-native-platform-specific-extensions": "1.1.1", "babel-plugin-transform-remove-console": "6.9.4", "benchmark": "2.1.4", - "browserslist": "4.16.6", + "browserslist": "4.17.6", "chalk": "4.1.1", - "commander": "4.1.0", + "commander": "9.2.0", "concurrently": "3.5.0", - "copy-webpack-plugin": "6.4.0", - "core-js-builder": "3.11.0", + "copy-webpack-plugin": "10.2.0", + "core-js-builder": "3.19.1", "cross-env": "3.2.4", - "css-loader": "5.1.3", - "cssnano": "4.1.10", + "css-loader": "6.2.0", + "cssnano": "5.0.7", "deep-freeze": "0.0.1", "enzyme": "3.11.0", "equivalent-key-map": "0.2.2", "eslint-import-resolver-node": "0.3.4", "eslint-plugin-eslint-comments": "3.1.2", - "eslint-plugin-import": "2.23.4", + "eslint-plugin-import": "2.25.2", + "eslint-plugin-playwright": "0.8.0", "execa": "4.0.2", - "fast-glob": "2.2.7", + "fast-glob": "3.2.7", + "filenamify": "4.2.0", "glob": "7.1.2", "husky": "7.0.0", "inquirer": "7.1.0", - "jest": "26.6.3", - "jest-junit": "11.0.0", - "jest-serializer-enzyme": "1.0.0", - "jest-watch-typeahead": "0.6.1", - "jsdom": "16.4.0", + "jest": "27.4.5", + "jest-junit": "13.0.0", + "jest-message-util": "27.4.2", + "jest-watch-typeahead": "1.0.0", + "jsdom": "16.7.0", "lerna": "3.22.1", - "lint-staged": "9.2.5", + "lint-staged": "10.0.1", "lodash": "4.17.21", "make-dir": "3.0.0", - "metro-react-native-babel-preset": "0.64.0", - "metro-react-native-babel-transformer": "0.64.0", + "metro-react-native-babel-preset": "0.66.2", + "metro-react-native-babel-transformer": "0.66.2", "mkdirp": "0.5.1", "nock": "12.0.3", "node-watch": "0.7.0", + "npm-run-all": "4.1.5", "patch-package": "6.2.2", - "postcss": "8.2.15", - "postcss-loader": "4.2.0", + "postcss": "8.4.5", + "postcss-loader": "6.2.1", "prettier": "npm:wp-prettier@2.2.1-beta-1", "progress": "2.0.3", - "react": "17.0.1", - "react-dom": "17.0.1", - "react-native": "0.64.0", - "react-test-renderer": "17.0.1", + "react": "17.0.2", + "react-dom": "17.0.2", + "react-native": "0.66.2", + "react-native-url-polyfill": "1.1.2", + "react-refresh": "0.10.0", + "react-test-renderer": "17.0.2", + "redux": "4.1.2", + "resize-observer-polyfill": "1.5.1", "rimraf": "3.0.2", "rtlcss": "2.6.2", "sass": "1.35.2", - "sass-loader": "10.1.1", - "semver": "7.3.2", - "simple-git": "^2.35.0", + "sass-loader": "12.1.0", + "semver": "7.3.5", + "simple-git": "3.5.0", "snapshot-diff": "0.8.1", - "source-map-loader": "0.2.4", + "source-map-loader": "3.0.0", "sprintf-js": "1.1.1", - "style-loader": "2.0.0", - "terser-webpack-plugin": "3.0.3", - "typescript": "4.1.3", + "style-loader": "3.2.1", + "terser-webpack-plugin": "5.1.4", + "typescript": "4.4.2", "uglify-js": "3.13.7", + "unzipper": "0.10.11", "uuid": "8.3.0", "wd": "1.12.1", - "webpack": "4.46.0", - "webpack-bundle-analyzer": "4.2.0", + "webpack": "5.65.0", + "webpack-bundle-analyzer": "4.4.2", "worker-farm": "1.7.0" }, "scripts": { "analyze-bundles": "npm run build -- --webpack-bundle-analyzer", + "api-docs:blocks": "node ./bin/api-docs/gen-block-lib-list.js", + "api-docs:ref": "node ./bin/api-docs/update-api-docs.js", + "api-docs:theme-ref": "node ./bin/api-docs/gen-theme-reference.js", "clean:packages": "rimraf \"./packages/*/@(build|build-module|build-style)\"", "clean:package-types": "tsc --build --clean", "prebuild:packages": "npm run clean:packages && lerna run build", "build:packages": "npm run build:package-types && node ./bin/packages/build.js", "build:package-types": "node ./bin/packages/validate-typescript-version.js && tsc --build", - "build:plugin-zip": "./bin/build-plugin-zip.sh", + "build:plugin-zip": "bash ./bin/build-plugin-zip.sh", "build": "npm run build:packages && wp-scripts build", - "changelog": "./bin/plugin/cli.js changelog", + "changelog": "node ./bin/plugin/cli.js changelog", "check-licenses": "concurrently \"wp-scripts check-licenses --prod --gpl2 --ignore=@react-native-community/cli,@react-native-community/cli-platform-ios\" \"wp-scripts check-licenses --dev\"", "precheck-local-changes": "npm run docs:build", "check-local-changes": "( git diff -U0 | xargs -0 node bin/process-git-diff ) || ( echo \"There are local uncommitted changes after one or both of 'npm install' or 'npm run docs:build'!\" && git diff --exit-code && exit 1 );", "dev": "npm run build:packages && concurrently \"wp-scripts start\" \"npm run dev:packages\"", - "dev:packages": "node ./bin/packages/watch.js", + "dev:packages": "concurrently \"node ./bin/packages/watch.js\" \"tsc --build --watch\"", "distclean": "rimraf node_modules packages/*/node_modules", - "docs:build": "node ./docs/tool/index.js && node ./bin/api-docs/update-api-docs.js", + "docs:gen": "node ./docs/tool/index.js", + "docs:build": "npm-run-all docs:gen api-docs:*", "fixtures:clean": "rimraf \"test/integration/fixtures/blocks/*.+(json|serialized.html)\"", "fixtures:generate": "cross-env GENERATE_MISSING_FIXTURES=y npm run test-unit test/integration/full-content/ && npm run format test/integration/fixtures/blocks/*.json", "fixtures:regenerate": "npm run fixtures:clean && npm run fixtures:generate", "format": "wp-scripts format", - "format-js": "wp-scripts format-js", "format-php": "wp-env run composer run-script format", "lint": "concurrently \"npm run lint-lockfile\" \"npm run lint-js\" \"npm run lint-pkg-json\" \"npm run lint-css\"", "lint-js": "wp-scripts lint-js", "lint-js:fix": "npm run lint-js -- --fix", - "prelint-php": "wp-env run composer 'install --no-interaction'", + "prelint-php": "wp-env run composer \"install --no-interaction\"", "lint-php": "wp-env run composer run-script lint", "lint-pkg-json": "wp-scripts lint-pkg-json . 'packages/*/package.json'", "lint-lockfile": "node ./bin/validate-package-lock.js", - "lint-css": "wp-scripts lint-style '**/*.scss'", + "lint-css": "wp-scripts lint-style \"**/*.scss\"", "lint-css:fix": "npm run lint-css -- --fix", - "lint:md-js": "wp-scripts lint-md-js", "lint:md-docs": "wp-scripts lint-md-docs", "native": "npm run --prefix packages/react-native-editor", - "pot-to-php": "./bin/pot-to-php.js", "postinstall": "patch-package && node ./patches/patch-xcode.js", "prepublishOnly": "npm run clean:package-types && npm run build:packages", "publish:check": "lerna updated", - "publish:patch": "lerna publish --dist-tag patch", - "publish:latest": "lerna publish", + "publish:patch": "lerna publish patch --no-private --dist-tag patch", + "publish:latest": "lerna publish --no-private", "test": "npm run lint && npm run test-unit", - "test:create-block": "./bin/test-create-block.sh", + "test:create-block": "bash ./bin/test-create-block.sh", "test-e2e": "wp-scripts test-e2e --config packages/e2e-tests/jest.config.js", + "test-e2e:playwright": "playwright test --config test/e2e/playwright.config.ts", "test-e2e:debug": "wp-scripts --inspect-brk test-e2e --config packages/e2e-tests/jest.config.js --puppeteer-devtools", "test-e2e:watch": "npm run test-e2e -- --watch", "test-performance": "wp-scripts test-e2e --config packages/e2e-tests/jest.performance.config.js", "test-php": "npm run lint-php && npm run test-unit-php", "test-php:watch": "wp-env run composer run-script test:watch", "test-unit": "wp-scripts test-unit-js --config test/unit/jest.config.js", - "test-unit:date": "./bin/unit-test-date.sh", + "test-unit:date": "bash ./bin/unit-test-date.sh", "test-unit:debug": "wp-scripts --inspect-brk test-unit-js --runInBand --no-cache --verbose --config test/unit/jest.config.js ", "test-unit:update": "npm run test-unit -- --updateSnapshot", "test-unit:watch": "npm run test-unit -- --watch", "pretest-unit-php": "wp-env start", - "test-unit-php": "wp-env run phpunit 'phpunit -c /var/www/html/wp-content/plugins/gutenberg/phpunit.xml.dist --verbose'", + "test-unit-php": "wp-env run phpunit \"phpunit -c /var/www/html/wp-content/plugins/gutenberg/phpunit.xml.dist --verbose\"", "pretest-unit-php-multisite": "wp-env start", - "test-unit-php-multisite": "wp-env run phpunit 'WP_MULTISITE=1 phpunit -c /var/www/html/wp-content/plugins/gutenberg/phpunit/multisite.xml --verbose'", - "test-unit:native": "cd test/native/ && cross-env NODE_ENV=test jest --config ./jest.config.js", - "test-unit:native:debug": "cd test/native/ && node --inspect ../../node_modules/.bin/jest --runInBand --config ./jest.config.js", + "test-unit-php-multisite": "wp-env run phpunit \"WP_MULTISITE=1 phpunit -c /var/www/html/wp-content/plugins/gutenberg/phpunit/multisite.xml --verbose\"", "prestorybook:build": "npm run build:packages", "storybook:build": "build-storybook -c ./storybook -o ./storybook/build", "prestorybook:dev": "npm run build:packages", @@ -286,6 +302,15 @@ "prepare": "husky install" }, "lint-staged": { + "*.{js,json,ts,tsx,yml,yaml}": [ + "wp-scripts format" + ], + "*.{js,ts,tsx}": [ + "wp-scripts lint-js" + ], + "*.scss": [ + "wp-scripts lint-style" + ], "package-lock.json": [ "npm run lint-lockfile", "node ./bin/check-latest-npm.js" @@ -293,18 +318,13 @@ "packages/*/package.json": [ "wp-scripts lint-pkg-json" ], - "*.scss": [ - "wp-scripts lint-style" - ], - "*.{js,ts,tsx,yml}": [ - "wp-scripts format", - "wp-scripts lint-js" - ], "{docs/{toc.json,tool/*.js},packages/{*/README.md,components/src/*/**/README.md}}": [ "node ./docs/tool/index.js" ], - "packages/**/*.{js,ts,tsx}": [ - "node ./bin/api-docs/update-api-docs.js", + "packages/**/*.{js,ts,tsx,json}": [ + "npm run api-docs:ref", + "npm run api-docs:blocks", + "npm run api-docs:theme-ref", "node ./bin/api-docs/are-api-docs-unstaged.js", "node ./bin/packages/lint-staged-typecheck.js" ] diff --git a/packages/README.md b/packages/README.md index a9e8e0dbf6d4e..22dad99b9b757 100644 --- a/packages/README.md +++ b/packages/README.md @@ -28,7 +28,7 @@ When creating a new package, you need to provide at least the following: "module": "build-module/index.js", "react-native": "src/index", "dependencies": { - "@babel/runtime": "^7.13.10" + "@babel/runtime": "^7.16.0" }, "publishConfig": { "access": "public" @@ -46,6 +46,7 @@ When creating a new package, you need to provide at least the following: - Installation details - Usage example - API documentation, if applicable ([more info](#maintaining-api-documentation)) + - A link to the contributing guidelines ([here's an example](https://github.com/WordPress/gutenberg/tree/HEAD/packages/a11y/README.md#contributing-to-this-package) from the a11y package) - `Code is Poetry` logo (`

Code is Poetry.

`) 4. `CHANGELOG.md` file containing at least: @@ -91,7 +92,7 @@ _Example:_ "check-node-version": "^4.1.0", "cross-spawn": "^5.1.0", "eslint": "^7.1.0", -- "jest": "^26.6.3", +- "jest": "^27.4.4", "minimist": "^1.2.0", "npm-package-json-lint": "^3.6.0", ``` diff --git a/packages/a11y/CHANGELOG.md b/packages/a11y/CHANGELOG.md index 66b1d4b606a86..c78f763ad1194 100644 --- a/packages/a11y/CHANGELOG.md +++ b/packages/a11y/CHANGELOG.md @@ -2,6 +2,20 @@ ## Unreleased +## 3.9.0 (2022-05-18) + +## 3.8.0 (2022-05-04) + +## 3.7.0 (2022-04-21) + +## 3.6.0 (2022-04-08) + +## 3.5.0 (2022-03-23) + +## 3.4.0 (2022-03-11) + +## 3.3.0 (2022-01-27) + ## 3.2.0 (2021-07-21) ## 3.1.0 (2021-05-20) diff --git a/packages/a11y/README.md b/packages/a11y/README.md index b0a51047c73dc..14c497c1abb53 100644 --- a/packages/a11y/README.md +++ b/packages/a11y/README.md @@ -10,7 +10,7 @@ Install the module npm install @wordpress/a11y --save ``` -_This package assumes that your code will run in an **ES2015+** environment. If you're using an environment that has limited or no support for ES2015+ such as IE browsers then using [core-js](https://github.com/zloirock/core-js) will add polyfills for these methods._ +_This package assumes that your code will run in an **ES2015+** environment. If you're using an environment that has limited or no support for such language features and APIs, you should include [the polyfill shipped in `@wordpress/babel-preset-default`](https://github.com/WordPress/gutenberg/tree/HEAD/packages/babel-preset-default#polyfill) in your code._ ## API @@ -70,4 +70,10 @@ For context I’ll quote [this article on WordPress.org](https://make.wordpress. See +## Contributing to this package + +This is an individual package that's part of the Gutenberg project. The project is organized as a monorepo. It's made up of multiple self-contained software packages, each with a specific purpose. The packages in this monorepo are published to [npm](https://www.npmjs.com/) and used by [WordPress](https://make.wordpress.org/core/) as well as other software projects. + +To find out more about contributing to this package or Gutenberg as a whole, please read the project's main [contributor guide](https://github.com/WordPress/gutenberg/tree/HEAD/CONTRIBUTING.md). +

Code is Poetry.

diff --git a/packages/a11y/package.json b/packages/a11y/package.json index f8efa23b939e9..6fd15b64cad3e 100644 --- a/packages/a11y/package.json +++ b/packages/a11y/package.json @@ -1,6 +1,6 @@ { "name": "@wordpress/a11y", - "version": "3.2.1", + "version": "3.9.0", "description": "Accessibility (a11y) utilities for WordPress.", "author": "The WordPress Contributors", "license": "GPL-2.0-or-later", @@ -28,7 +28,7 @@ "react-native": "src/index", "types": "build-types", "dependencies": { - "@babel/runtime": "^7.13.10", + "@babel/runtime": "^7.16.0", "@wordpress/dom-ready": "file:../dom-ready", "@wordpress/i18n": "file:../i18n" }, diff --git a/packages/a11y/src/index.native.js b/packages/a11y/src/index.native.js index 419633351a751..f6f53b6343adb 100644 --- a/packages/a11y/src/index.native.js +++ b/packages/a11y/src/index.native.js @@ -11,7 +11,7 @@ import filterMessage from './filter-message'; */ export function speak( message, ariaLive ) { message = filterMessage( message ); - //TODO: Use native module to speak message + // TODO: Use native module to speak message. if ( ariaLive === 'assertive' ) { } else { } diff --git a/packages/admin-manifest/README.md b/packages/admin-manifest/README.md deleted file mode 100644 index 6b6ac3021fe30..0000000000000 --- a/packages/admin-manifest/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Admin Manifest - -Dynamically creates a Web App [manifest](https://w3c.github.io/manifest/) and registers the service worker for the admin. diff --git a/packages/admin-manifest/package.json b/packages/admin-manifest/package.json deleted file mode 100644 index 140b1651915f9..0000000000000 --- a/packages/admin-manifest/package.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "name": "@wordpress/admin-manifest", - "version": "1.0.0", - "description": "Dynamically creates a Web App manifest and registers the service worker for the admin.", - "private": true, - "author": "The WordPress Contributors", - "license": "GPL-2.0-or-later", - "keywords": [ - "wordpress", - "gutenberg", - "manifest" - ], - "homepage": "https://github.com/WordPress/gutenberg/tree/HEAD/packages/admin-manifest/README.md", - "repository": { - "type": "git", - "url": "https://github.com/WordPress/gutenberg.git", - "directory": "packages/admin-manifest" - }, - "bugs": { - "url": "https://github.com/WordPress/gutenberg/issues" - }, - "engines": { - "node": ">=12" - }, - "main": "build/index.js", - "module": "build-module/index.js", - "react-native": "src/index", - "dependencies": { - "@babel/runtime": "^7.13.10" - }, - "publishConfig": { - "access": "public" - } -} diff --git a/packages/admin-manifest/src/index.js b/packages/admin-manifest/src/index.js deleted file mode 100644 index 38fa248c6d9f1..0000000000000 --- a/packages/admin-manifest/src/index.js +++ /dev/null @@ -1,170 +0,0 @@ -function addManifest( manifest ) { - const link = document.createElement( 'link' ); - link.rel = 'manifest'; - link.href = `data:application/manifest+json,${ encodeURIComponent( - JSON.stringify( manifest ) - ) }`; - document.head.appendChild( link ); -} - -function addAppleTouchIcon( size, base64data ) { - const iconLink = document.createElement( 'link' ); - iconLink.rel = 'apple-touch-icon'; - iconLink.href = base64data; - iconLink.sizes = '180x180'; - document.head.insertBefore( iconLink, document.head.firstElementChild ); -} - -function createSvgElement( html ) { - const doc = document.implementation.createHTMLDocument( '' ); - doc.body.innerHTML = html; - const { firstElementChild: svgElement } = doc.body; - svgElement.setAttribute( 'viewBox', '0 0 80 80' ); - return svgElement; -} - -function createIcon( { svgElement, size, color, backgroundColor, circle } ) { - return new Promise( ( resolve ) => { - const canvas = document.createElement( 'canvas' ); - const context = canvas.getContext( '2d' ); - - // Leave 1/8th padding around the logo. - const padding = size / 8; - // Which leaves 3/4ths of space for the icon. - const logoSize = padding * 6; - - // Resize the SVG logo. - svgElement.setAttribute( 'width', logoSize ); - svgElement.setAttribute( 'height', logoSize ); - - // Color in the background. - svgElement.querySelectorAll( 'path' ).forEach( ( path ) => { - path.setAttribute( 'fill', backgroundColor ); - } ); - - // Resize the canvas. - canvas.width = size; - canvas.height = size; - - // If we're not drawing a circle, set the background color. - if ( ! circle ) { - context.fillStyle = backgroundColor; - context.fillRect( 0, 0, canvas.width, canvas.height ); - } - - // Fill in the letter (W) and circle around it. - context.fillStyle = color; - context.beginPath(); - context.arc( size / 2, size / 2, logoSize / 2 - 1, 0, 2 * Math.PI ); - context.closePath(); - context.fill(); - - // Create a URL for the SVG to load in an image element. - const svgBlob = new window.Blob( [ svgElement.outerHTML ], { - type: 'image/svg+xml', - } ); - const url = URL.createObjectURL( svgBlob ); - const image = document.createElement( 'img' ); - - image.src = url; - image.width = logoSize; - image.height = logoSize; - image.onload = () => { - // Once the image is loaded, draw it onto the canvas. - context.drawImage( image, padding, padding ); - // Export it to a blob. - canvas.toBlob( ( imageBlob ) => { - // We no longer need the SVG blob url. - URL.revokeObjectURL( url ); - // Unfortunately blob URLs don't seem to work, so we have to use - // base64 encoded data URLs. - const reader = new window.FileReader(); - reader.readAsDataURL( imageBlob ); - reader.onloadend = () => { - resolve( reader.result ); - }; - } ); - }; - } ); -} - -function getAdminBarColors() { - const adminBarDummy = document.createElement( 'div' ); - adminBarDummy.id = 'wpadminbar'; - document.body.appendChild( adminBarDummy ); - const { color, backgroundColor } = window.getComputedStyle( adminBarDummy ); - document.body.removeChild( adminBarDummy ); - // Fall back to black and white if no admin/color stylesheet was loaded. - return { - color: color || 'white', - backgroundColor: backgroundColor || 'black', - }; -} - -// eslint-disable-next-line @wordpress/no-global-event-listener -window.addEventListener( 'load', () => { - if ( ! ( 'serviceWorker' in window.navigator ) ) { - return; - } - - const { logo, siteTitle, adminUrl } = window.wpAdminManifestL10n; - const manifest = { - name: siteTitle, - display: 'standalone', - orientation: 'portrait', - start_url: adminUrl, - // Open front-end, login page, and any external URLs in a browser - // modal. - scope: adminUrl, - icons: [], - }; - - const { color, backgroundColor } = getAdminBarColors(); - const svgElement = createSvgElement( logo ); - - Promise.all( [ - // The maskable icon should have its background filled. This is used - // for iOS. To do: check which sizes are really needed. - ...[ 180, 192, 512 ].map( ( size ) => - createIcon( { - svgElement, - size, - color, - backgroundColor, - } ).then( ( base64data ) => { - manifest.icons.push( { - src: base64data, - sizes: size + 'x' + size, - type: 'image/png', - purpose: 'maskable', - } ); - - // iOS doesn't seem to look at the manifest. - if ( size === 180 ) { - addAppleTouchIcon( size, base64data ); - } - } ) - ), - // The "normal" icon should be round. This is used for Chrome - // Desktop PWAs. To do: check which sizes are really needed. - ...[ 180, 192, 512 ].map( ( size ) => - createIcon( { - svgElement, - size, - color, - backgroundColor, - circle: true, - } ).then( ( base64data ) => { - manifest.icons.push( { - src: base64data, - sizes: size + 'x' + size, - type: 'image/png', - purpose: 'any', - } ); - } ) - ), - ] ).then( () => { - addManifest( manifest ); - window.navigator.serviceWorker.register( adminUrl + '?service-worker' ); - } ); -} ); diff --git a/packages/annotations/CHANGELOG.md b/packages/annotations/CHANGELOG.md index 1b23947c17d8a..484611eb523ec 100644 --- a/packages/annotations/CHANGELOG.md +++ b/packages/annotations/CHANGELOG.md @@ -2,6 +2,20 @@ ## Unreleased +## 2.9.0 (2022-05-18) + +## 2.8.0 (2022-05-04) + +## 2.7.0 (2022-04-21) + +## 2.6.0 (2022-04-08) + +## 2.5.0 (2022-03-23) + +## 2.4.0 (2022-03-11) + +## 2.3.0 (2022-01-27) + ## 2.2.0 (2021-07-21) ## 2.1.0 (2021-05-20) diff --git a/packages/annotations/README.md b/packages/annotations/README.md index 5c3f3b59d6d7c..2cdb0913daf2b 100644 --- a/packages/annotations/README.md +++ b/packages/annotations/README.md @@ -10,7 +10,7 @@ Install the module npm install @wordpress/annotations --save ``` -_This package assumes that your code will run in an **ES2015+** environment. If you're using an environment that has limited or no support for ES2015+ such as IE browsers then using [core-js](https://github.com/zloirock/core-js) will add polyfills for these methods._ +_This package assumes that your code will run in an **ES2015+** environment. If you're using an environment that has limited or no support for such language features and APIs, you should include [the polyfill shipped in `@wordpress/babel-preset-default`](https://github.com/WordPress/gutenberg/tree/HEAD/packages/babel-preset-default#polyfill) in your code._ ## Getting Started @@ -19,3 +19,11 @@ You need to include `wp-annotations` as a dependency of the JavaScript file in w ## Usage [See this page for more detailed usage instructions](https://developer.wordpress.org/block-editor/developers/block-api/block-annotations). + +## Contributing to this package + +This is an individual package that's part of the Gutenberg project. The project is organized as a monorepo. It's made up of multiple self-contained software packages, each with a specific purpose. The packages in this monorepo are published to [npm](https://www.npmjs.com/) and used by [WordPress](https://make.wordpress.org/core/) as well as other software projects. + +To find out more about contributing to this package or Gutenberg as a whole, please read the project's main [contributor guide](https://github.com/WordPress/gutenberg/tree/HEAD/CONTRIBUTING.md). + +

Code is Poetry.

diff --git a/packages/annotations/package.json b/packages/annotations/package.json index 95244ac008b6a..08b455b3746d8 100644 --- a/packages/annotations/package.json +++ b/packages/annotations/package.json @@ -1,6 +1,6 @@ { "name": "@wordpress/annotations", - "version": "2.2.1", + "version": "2.9.0", "description": "Annotate content in the Gutenberg editor.", "author": "The WordPress Contributors", "license": "GPL-2.0-or-later", @@ -25,7 +25,7 @@ "module": "build-module/index.js", "react-native": "src/index", "dependencies": { - "@babel/runtime": "^7.13.10", + "@babel/runtime": "^7.16.0", "@wordpress/data": "file:../data", "@wordpress/hooks": "file:../hooks", "@wordpress/i18n": "file:../i18n", @@ -34,6 +34,9 @@ "rememo": "^3.0.0", "uuid": "^8.3.0" }, + "peerDependencies": { + "react": "^17.0.0" + }, "publishConfig": { "access": "public" } diff --git a/packages/api-fetch/CHANGELOG.md b/packages/api-fetch/CHANGELOG.md index 92be444b5299b..7c892413313bb 100644 --- a/packages/api-fetch/CHANGELOG.md +++ b/packages/api-fetch/CHANGELOG.md @@ -2,6 +2,30 @@ ## Unreleased +## 6.6.0 (2022-05-18) + +## 6.5.0 (2022-05-04) + +## 6.4.0 (2022-04-21) + +## 6.3.0 (2022-04-08) + +## 6.2.0 (2022-03-23) + +## 6.1.0 (2022-03-11) + +## 6.0.0 (2022-01-27) + +### Breaking changes + + `OPTIONS` requests handled by the preloading middleware are now resolved as `window.Response` objects if you explicitly set `parse: false` (for consistency with how GET requests are resolved). They used to be resolved as `Plain Old JavaScript Objects`. + +## 5.2.5 (2021-11-07) + +### Internal + +- Removed `getStablePath` function. Please use `normalizePath` from `@wordpress/url` package instead ([#35992](https://github.com/WordPress/gutenberg/pull/35992)).`` + ## 5.2.0 (2021-07-21) ### New feature diff --git a/packages/api-fetch/README.md b/packages/api-fetch/README.md index 077226667109a..ae7b1a500aa4f 100644 --- a/packages/api-fetch/README.md +++ b/packages/api-fetch/README.md @@ -10,7 +10,7 @@ Install the module npm install @wordpress/api-fetch --save ``` -_This package assumes that your code will run in an **ES2015+** environment. If you're using an environment that has limited or no support for ES2015+ such as IE browsers then using [core-js](https://github.com/zloirock/core-js) will add polyfills for these methods._ +_This package assumes that your code will run in an **ES2015+** environment. If you're using an environment that has limited or no support for such language features and APIs, you should include [the polyfill shipped in `@wordpress/babel-preset-default`](https://github.com/WordPress/gutenberg/tree/HEAD/packages/babel-preset-default#polyfill) in your code._ ## Usage @@ -56,28 +56,28 @@ Shorthand to be used in place of `body`, accepts an object value to be stringifi ### Aborting a request -Aborting a request can be achieved through the use of [`AbortController`](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) in the same way as you would when using the native `fetch` API. +Aborting a request can be achieved through the use of [`AbortController`](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) in the same way as you would when using the native `fetch` API. For legacy browsers that don't support `AbortController`, you can either: -* Provide your own polyfill of `AbortController` if you still want it to be abortable. -* Ignore it as shown in the example below. +- Provide your own polyfill of `AbortController` if you still want it to be abortable. +- Ignore it as shown in the example below. **Example** ```js -const controller = typeof AbortController === 'undefined' - ? undefined - : new AbortController(); +const controller = + typeof AbortController === 'undefined' ? undefined : new AbortController(); -apiFetch( { path: '/wp/v2/posts', signal: controller?.signal } ) - .catch( ( error ) => { +apiFetch( { path: '/wp/v2/posts', signal: controller?.signal } ).catch( + ( error ) => { // If the browser doesn't support AbortController then the code below will never log. // However, in most cases this should be fine as it can be considered to be a progressive enhancement. if ( error.name === 'AbortError' ) { console.log( 'Request has been aborted' ); } - } ); + } +); controller?.abort(); ``` @@ -148,4 +148,10 @@ apiFetch.setFetchHandler( ( options ) => { } ); ``` -

Code is Poetry.

+## Contributing to this package + +This is an individual package that's part of the Gutenberg project. The project is organized as a monorepo. It's made up of multiple self-contained software packages, each with a specific purpose. The packages in this monorepo are published to [npm](https://www.npmjs.com/) and used by [WordPress](https://make.wordpress.org/core/) as well as other software projects. + +To find out more about contributing to this package or Gutenberg as a whole, please read the project's main [contributor guide](https://github.com/WordPress/gutenberg/tree/HEAD/CONTRIBUTING.md). + +

Code is Poetry.

diff --git a/packages/api-fetch/package.json b/packages/api-fetch/package.json index d4fa406a09b33..b05dfe808abe7 100644 --- a/packages/api-fetch/package.json +++ b/packages/api-fetch/package.json @@ -1,6 +1,6 @@ { "name": "@wordpress/api-fetch", - "version": "5.2.1", + "version": "6.6.0", "description": "Utility to make WordPress REST API requests.", "author": "The WordPress Contributors", "license": "GPL-2.0-or-later", @@ -27,7 +27,7 @@ "react-native": "src/index", "types": "build-types", "dependencies": { - "@babel/runtime": "^7.13.10", + "@babel/runtime": "^7.16.0", "@wordpress/i18n": "file:../i18n", "@wordpress/url": "file:../url" }, diff --git a/packages/api-fetch/src/index.js b/packages/api-fetch/src/index.js index 7e6db749771e1..40d8edbf5e935 100644 --- a/packages/api-fetch/src/index.js +++ b/packages/api-fetch/src/index.js @@ -99,7 +99,7 @@ const defaultFetchHandler = ( nextOptions ) => { } const responsePromise = window.fetch( - // fall back to explicitly passing `window.location` which is the behavior if `undefined` is passed + // Fall back to explicitly passing `window.location` which is the behavior if `undefined` is passed. url || path || window.location.href, { ...DEFAULT_OPTIONS, diff --git a/packages/api-fetch/src/middlewares/media-upload.js b/packages/api-fetch/src/middlewares/media-upload.js index 2ba4f2953dabf..417abf775db63 100644 --- a/packages/api-fetch/src/middlewares/media-upload.js +++ b/packages/api-fetch/src/middlewares/media-upload.js @@ -11,19 +11,29 @@ import { parseResponseAndNormalizeError, } from '../utils/response'; +/** + * @param {import('../types').APIFetchOptions} options + * @return {boolean} True if the request is for media upload. + */ +function isMediaUploadRequest( options ) { + const isCreateMethod = !! options.method && options.method === 'POST'; + const isMediaEndpoint = + ( !! options.path && options.path.indexOf( '/wp/v2/media' ) !== -1 ) || + ( !! options.url && options.url.indexOf( '/wp/v2/media' ) !== -1 ); + + return isMediaEndpoint && isCreateMethod; +} + /** * Middleware handling media upload failures and retries. * * @type {import('../types').APIFetchMiddleware} */ const mediaUploadMiddleware = ( options, next ) => { - const isMediaUploadRequest = - ( options.path && options.path.indexOf( '/wp/v2/media' ) !== -1 ) || - ( options.url && options.url.indexOf( '/wp/v2/media' ) !== -1 ); - - if ( ! isMediaUploadRequest ) { + if ( ! isMediaUploadRequest( options ) ) { return next( options ); } + let retries = 0; const maxRetries = 5; diff --git a/packages/api-fetch/src/middlewares/preloading.js b/packages/api-fetch/src/middlewares/preloading.js index a4658baefc842..ac293738513bd 100644 --- a/packages/api-fetch/src/middlewares/preloading.js +++ b/packages/api-fetch/src/middlewares/preloading.js @@ -1,87 +1,82 @@ /** - * Given a path, returns a normalized path where equal query parameter values - * will be treated as identical, regardless of order they appear in the original - * text. - * - * @param {string} path Original path. - * - * @return {string} Normalized path. + * WordPress dependencies */ -export function getStablePath( path ) { - const splitted = path.split( '?' ); - const query = splitted[ 1 ]; - const base = splitted[ 0 ]; - if ( ! query ) { - return base; - } - - // 'b=1&c=2&a=5' - return ( - base + - '?' + - query - // [ 'b=1', 'c=2', 'a=5' ] - .split( '&' ) - // [ [ 'b, '1' ], [ 'c', '2' ], [ 'a', '5' ] ] - .map( ( entry ) => entry.split( '=' ) ) - // [ [ 'a', '5' ], [ 'b, '1' ], [ 'c', '2' ] ] - .sort( ( a, b ) => a[ 0 ].localeCompare( b[ 0 ] ) ) - // [ 'a=5', 'b=1', 'c=2' ] - .map( ( pair ) => pair.join( '=' ) ) - // 'a=5&b=1&c=2' - .join( '&' ) - ); -} +import { addQueryArgs, getQueryArgs, normalizePath } from '@wordpress/url'; /** * @param {Record} preloadedData * @return {import('../types').APIFetchMiddleware} Preloading middleware. */ function createPreloadingMiddleware( preloadedData ) { - const cache = Object.keys( preloadedData ).reduce( ( result, path ) => { - result[ getStablePath( path ) ] = preloadedData[ path ]; - return result; - }, /** @type {Record} */ ( {} ) ); + const cache = Object.fromEntries( + Object.entries( preloadedData ).map( ( [ path, data ] ) => [ + normalizePath( path ), + data, + ] ) + ); return ( options, next ) => { const { parse = true } = options; - if ( typeof options.path === 'string' ) { - const method = options.method || 'GET'; - const path = getStablePath( options.path ); + /** @type {string | void} */ + let rawPath = options.path; + if ( ! rawPath && options.url ) { + const { rest_route: pathFromQuery, ...queryArgs } = getQueryArgs( + options.url + ); - if ( 'GET' === method && cache[ path ] ) { - const cacheData = cache[ path ]; + if ( typeof pathFromQuery === 'string' ) { + rawPath = addQueryArgs( pathFromQuery, queryArgs ); + } + } - // Unsetting the cache key ensures that the data is only preloaded a single time - delete cache[ path ]; + if ( typeof rawPath !== 'string' ) { + return next( options ); + } - return Promise.resolve( - parse - ? cacheData.body - : new window.Response( - JSON.stringify( cacheData.body ), - { - status: 200, - statusText: 'OK', - headers: cacheData.headers, - } - ) - ); - } else if ( - 'OPTIONS' === method && - cache[ method ] && - cache[ method ][ path ] - ) { - return Promise.resolve( - parse - ? cache[ method ][ path ].body - : cache[ method ][ path ] - ); - } + const method = options.method || 'GET'; + const path = normalizePath( rawPath ); + + if ( 'GET' === method && cache[ path ] ) { + const cacheData = cache[ path ]; + + // Unsetting the cache key ensures that the data is only used a single time. + delete cache[ path ]; + + return prepareResponse( cacheData, !! parse ); + } else if ( + 'OPTIONS' === method && + cache[ method ] && + cache[ method ][ path ] + ) { + const cacheData = cache[ method ][ path ]; + + // Unsetting the cache key ensures that the data is only used a single time. + delete cache[ method ][ path ]; + + return prepareResponse( cacheData, !! parse ); } return next( options ); }; } +/** + * This is a helper function that sends a success response. + * + * @param {Record} responseData + * @param {boolean} parse + * @return {Promise} Promise with the response. + */ +function prepareResponse( responseData, parse ) { + return Promise.resolve( + parse + ? responseData.body + : new window.Response( JSON.stringify( responseData.body ), { + status: 200, + statusText: 'OK', + headers: responseData.headers, + } ) + ); +} + export default createPreloadingMiddleware; diff --git a/packages/api-fetch/src/middlewares/test/media-upload.js b/packages/api-fetch/src/middlewares/test/media-upload.js new file mode 100644 index 0000000000000..c0c5b721f67bb --- /dev/null +++ b/packages/api-fetch/src/middlewares/test/media-upload.js @@ -0,0 +1,35 @@ +/** + * Internal dependencies + */ +import mediaUploadMiddleware from '../media-upload'; + +describe( 'Media Upload Middleware', () => { + it( 'should defer to the next middleware with the same options', () => { + expect.hasAssertions(); + + const originalOptions = { path: '/wp/v2/media' }; + const next = ( options ) => { + expect( options ).toBe( originalOptions ); + }; + + mediaUploadMiddleware( originalOptions, next ); + } ); + + it( 'should change options not to parse', () => { + expect.hasAssertions(); + + const requestOptions = { method: 'POST', path: '/wp/v2/media' }; + const next = ( options ) => { + expect( options.parse ).toBe( false ); + + return Promise.resolve( { + status: 200, + json() { + return Promise.resolve( [ 'item' ] ); + }, + } ); + }; + + mediaUploadMiddleware( requestOptions, next ); + } ); +} ); diff --git a/packages/api-fetch/src/middlewares/test/preloading.js b/packages/api-fetch/src/middlewares/test/preloading.js index 3f470e9a8a6e6..9896e8543accb 100644 --- a/packages/api-fetch/src/middlewares/test/preloading.js +++ b/packages/api-fetch/src/middlewares/test/preloading.js @@ -1,32 +1,9 @@ /** * Internal dependencies */ -import createPreloadingMiddleware, { getStablePath } from '../preloading'; +import createPreloadingMiddleware from '../preloading'; describe( 'Preloading Middleware', () => { - describe( 'getStablePath', () => { - it( 'returns same value if no query parameters', () => { - const path = '/foo/bar'; - - expect( getStablePath( path ) ).toBe( path ); - } ); - - it( 'returns a stable path', () => { - const abc = getStablePath( '/foo/bar?a=5&b=1&c=2' ); - const bca = getStablePath( '/foo/bar?b=1&c=2&a=5' ); - const bac = getStablePath( '/foo/bar?b=1&a=5&c=2' ); - const acb = getStablePath( '/foo/bar?a=5&c=2&b=1' ); - const cba = getStablePath( '/foo/bar?c=2&b=1&a=5' ); - const cab = getStablePath( '/foo/bar?c=2&a=5&b=1' ); - - expect( abc ).toBe( bca ); - expect( bca ).toBe( bac ); - expect( bac ).toBe( acb ); - expect( acb ).toBe( cba ); - expect( cba ).toBe( cab ); - } ); - } ); - describe( 'given preloaded data', () => { describe( 'when data is requested from a preloaded endpoint', () => { describe( 'and it is requested for the first time', () => { @@ -82,6 +59,17 @@ describe( 'Preloading Middleware', () => { describe( 'and the OPTIONS request has a parse flag', () => { it( 'should return the full response if parse: false', () => { + const noResponseMock = + 'undefined' === typeof window.Response; + if ( noResponseMock ) { + window.Response = class { + constructor( body, options ) { + this.body = JSON.parse( body ); + this.headers = options.headers; + } + }; + } + const data = { body: { status: 'this is the preloaded response', @@ -108,6 +96,9 @@ describe( 'Preloading Middleware', () => { }; const response = preloadingMiddleware( requestOptions ); + if ( noResponseMock ) { + delete window.Response; + } return response.then( ( value ) => { expect( value ).toEqual( data ); } ); @@ -199,6 +190,88 @@ describe( 'Preloading Middleware', () => { expect( value ).toEqual( body ); } ); + it( 'should recognize an urlencoded query param', async () => { + const body = { foo: 'foo', bar: 'bar' }; + + const preloadingMiddleware = createPreloadingMiddleware( { + '/?_fields=foo,bar': { body }, + } ); + + const response = await preloadingMiddleware( + { + method: 'GET', + path: '/?_fields=foo%2Cbar', + }, + () => {} + ); + + expect( response ).toEqual( body ); + } ); + + it( 'should recognize rest_route query param as path', async () => { + const body = { foo: 'foo' }; + + const preloadingMiddleware = createPreloadingMiddleware( { + '/': { body }, + } ); + + const response = await preloadingMiddleware( + { + method: 'GET', + url: '/index.php?rest_route=%2F', + }, + () => {} + ); + + expect( response ).toEqual( body ); + } ); + + it( 'should recognize additional query params after rest_route', async () => { + const body = { foo: 'foo', bar: 'bar' }; + + const preloadingMiddleware = createPreloadingMiddleware( { + '/?_fields=foo,bar': { body }, + } ); + + const response = await preloadingMiddleware( + { + method: 'GET', + url: '/index.php?rest_route=%2F&_fields=foo%2Cbar', + }, + () => {} + ); + + expect( response ).toEqual( body ); + } ); + + it( 'should remove OPTIONS type requests from the cache after the first hit', async () => { + const body = { content: 'example' }; + const preloadedData = { + OPTIONS: { + 'wp/v2/demo': { body }, + }, + }; + + const preloadingMiddleware = createPreloadingMiddleware( + preloadedData + ); + + const requestOptions = { + method: 'OPTIONS', + path: 'wp/v2/demo', + }; + + const firstMiddleware = jest.fn(); + preloadingMiddleware( requestOptions, firstMiddleware ); + expect( firstMiddleware ).not.toHaveBeenCalled(); + + await preloadingMiddleware( requestOptions, firstMiddleware ); + + const secondMiddleware = jest.fn(); + await preloadingMiddleware( requestOptions, secondMiddleware ); + expect( secondMiddleware ).toHaveBeenCalledTimes( 1 ); + } ); + describe.each( [ [ 'GET' ], [ 'OPTIONS' ] ] )( '%s', ( method ) => { describe.each( [ [ 'all empty', {} ], diff --git a/packages/api-fetch/src/test/index.js b/packages/api-fetch/src/test/index.js index 289b686341137..be66ecbf6815d 100644 --- a/packages/api-fetch/src/test/index.js +++ b/packages/api-fetch/src/test/index.js @@ -127,6 +127,7 @@ describe( 'apiFetch', () => { ); return apiFetch( { path: '/random' } ).catch( ( body ) => { + // eslint-disable-next-line jest/no-conditional-expect expect( body ).toEqual( { code: 'bad_request', message: 'Bad Request', @@ -142,6 +143,7 @@ describe( 'apiFetch', () => { ); return apiFetch( { path: '/random' } ).catch( ( body ) => { + // eslint-disable-next-line jest/no-conditional-expect expect( body ).toEqual( { code: 'invalid_json', message: 'The response is not a valid JSON response.', @@ -160,6 +162,7 @@ describe( 'apiFetch', () => { ); return apiFetch( { path: '/random' } ).catch( ( body ) => { + // eslint-disable-next-line jest/no-conditional-expect expect( body ).toEqual( { code: 'invalid_json', message: 'The response is not a valid JSON response.', @@ -171,6 +174,7 @@ describe( 'apiFetch', () => { window.fetch.mockReturnValue( Promise.reject() ); return apiFetch( { path: '/random' } ).catch( ( body ) => { + // eslint-disable-next-line jest/no-conditional-expect expect( body ).toEqual( { code: 'fetch_error', message: 'You are probably offline.', @@ -213,6 +217,7 @@ describe( 'apiFetch', () => { ); return apiFetch( { path: '/random' } ).catch( ( body ) => { + // eslint-disable-next-line jest/no-conditional-expect expect( body ).toEqual( null ); } ); } ); @@ -242,6 +247,7 @@ describe( 'apiFetch', () => { return apiFetch( { path: '/random', parse: false } ).catch( ( response ) => { + // eslint-disable-next-line jest/no-conditional-expect expect( response ).toEqual( { status: 400, } ); diff --git a/packages/autop/CHANGELOG.md b/packages/autop/CHANGELOG.md index 244c2af3ae74f..fdbbc5c223257 100644 --- a/packages/autop/CHANGELOG.md +++ b/packages/autop/CHANGELOG.md @@ -2,6 +2,20 @@ ## Unreleased +## 3.9.0 (2022-05-18) + +## 3.8.0 (2022-05-04) + +## 3.7.0 (2022-04-21) + +## 3.6.0 (2022-04-08) + +## 3.5.0 (2022-03-23) + +## 3.4.0 (2022-03-11) + +## 3.3.0 (2022-01-27) + ## 3.2.0 (2021-07-21) ## 3.1.0 (2021-05-20) diff --git a/packages/autop/README.md b/packages/autop/README.md index 1bc8b5495db6c..76a7515db69f3 100644 --- a/packages/autop/README.md +++ b/packages/autop/README.md @@ -10,7 +10,7 @@ Install the module npm install @wordpress/autop --save ``` -_This package assumes that your code will run in an **ES2015+** environment. If you're using an environment that has limited or no support for ES2015+ such as IE browsers then using [core-js](https://github.com/zloirock/core-js) will add polyfills for these methods._ +_This package assumes that your code will run in an **ES2015+** environment. If you're using an environment that has limited or no support for such language features and APIs, you should include [the polyfill shipped in `@wordpress/babel-preset-default`](https://github.com/WordPress/gutenberg/tree/HEAD/packages/babel-preset-default#polyfill) in your code._ ### API @@ -64,4 +64,10 @@ _Returns_ -

Code is Poetry.

+## Contributing to this package + +This is an individual package that's part of the Gutenberg project. The project is organized as a monorepo. It's made up of multiple self-contained software packages, each with a specific purpose. The packages in this monorepo are published to [npm](https://www.npmjs.com/) and used by [WordPress](https://make.wordpress.org/core/) as well as other software projects. + +To find out more about contributing to this package or Gutenberg as a whole, please read the project's main [contributor guide](https://github.com/WordPress/gutenberg/tree/HEAD/CONTRIBUTING.md). + +

Code is Poetry.

diff --git a/packages/autop/package.json b/packages/autop/package.json index 54568b86e9916..fdd0d90e13793 100644 --- a/packages/autop/package.json +++ b/packages/autop/package.json @@ -1,6 +1,6 @@ { "name": "@wordpress/autop", - "version": "3.2.1", + "version": "3.9.0", "description": "WordPress's automatic paragraph functions `autop` and `removep`.", "author": "The WordPress Contributors", "license": "GPL-2.0-or-later", @@ -27,7 +27,7 @@ "types": "build-types", "sideEffects": false, "dependencies": { - "@babel/runtime": "^7.13.10" + "@babel/runtime": "^7.16.0" }, "publishConfig": { "access": "public" diff --git a/packages/autop/src/test/index.test.js b/packages/autop/src/test/index.test.js index 0c5d86d6d0a2b..734a20ff37be2 100644 --- a/packages/autop/src/test/index.test.js +++ b/packages/autop/src/test/index.test.js @@ -66,18 +66,18 @@ test( 'skip pre elements', () => { done = 0; });`; - // Not wrapped in

tags + // Not wrapped in

tags. let str = `

${ code }
`; expect( autop( str ).trim() ).toBe( str ); - // Text before/after is wrapped in

tags + // Text before/after is wrapped in

tags. str = `Look at this code\n\n

${ code }
\n\nIsn't that cool?`; - // Expected text after autop + // Expected text after autop. let expected = `

Look at this code

\n
${ code }
\n

Isn't that cool?

`; expect( autop( str ).trim() ).toBe( expected ); - // Make sure HTML breaks are maintained if manually inserted + // Make sure HTML breaks are maintained if manually inserted. str = 'Look at this code\n\n
Line1
Line2
Line3
Line4\nActual Line 2\nActual Line 3
\n\nCool, huh?'; expected = @@ -134,7 +134,7 @@ Paragraph two.`; Paragraph two.`; const expected = - '

Paragraph one.

\n' + // line breaks only after

+ '

Paragraph one.

\n' + // Line breaks only after

'

Paragraph one.

\n' + // line breaks only after

+ '

Paragraph one.

\n' + // Line breaks only after

'

[video width="720" height="480" mp4="http://domain.tld/wp-content/uploads/2013/12/xyz.mp4"]' + '' + '' + @@ -196,7 +196,7 @@ test( 'param embed elements', () => { Paragraph two.`; const expected1 = - '

Paragraph one.

\n' + // line breaks only after

+ '

Paragraph one.

\n' + // Line breaks only after

'

' + '' + '' + @@ -232,7 +232,7 @@ Paragraph two.`; Paragraph two.`; const expected2 = - '

Paragraph one.

\n' + // line breaks only after block tags + '

Paragraph one.

\n' + // Line breaks only after block tags. '
\n' + '' + '' + @@ -318,11 +318,11 @@ test( 'that_autop_treats_block_level_elements_as_blocks', () => { } ); let expected = content.join( '\n' ); - let input = content.join( '\n\n' ); // WS difference + let input = content.join( '\n\n' ); // WS difference. expect( autop( input ).trim() ).toBe( expected ); - input = content.join( '' ); // WS difference + input = content.join( '' ); // WS difference. expect( autop( input ).trim() ).toBe( expected ); diff --git a/packages/babel-plugin-import-jsx-pragma/README.md b/packages/babel-plugin-import-jsx-pragma/README.md index eb88d86ec1131..fae0f49d6596c 100644 --- a/packages/babel-plugin-import-jsx-pragma/README.md +++ b/packages/babel-plugin-import-jsx-pragma/README.md @@ -90,4 +90,10 @@ _Type:_ Boolean Whether the scopeVariable is the default import of the source module. Note that this has no impact on `scopeVariableFrag`. -

Code is Poetry.

+## Contributing to this package + +This is an individual package that's part of the Gutenberg project. The project is organized as a monorepo. It's made up of multiple self-contained software packages, each with a specific purpose. The packages in this monorepo are published to [npm](https://www.npmjs.com/) and used by [WordPress](https://make.wordpress.org/core/) as well as other software projects. + +To find out more about contributing to this package or Gutenberg as a whole, please read the project's main [contributor guide](https://github.com/WordPress/gutenberg/tree/HEAD/CONTRIBUTING.md). + +

Code is Poetry.

diff --git a/packages/babel-plugin-import-jsx-pragma/package.json b/packages/babel-plugin-import-jsx-pragma/package.json index 00149881085b8..2306d83c68363 100644 --- a/packages/babel-plugin-import-jsx-pragma/package.json +++ b/packages/babel-plugin-import-jsx-pragma/package.json @@ -1,6 +1,6 @@ { "name": "@wordpress/babel-plugin-import-jsx-pragma", - "version": "3.1.0", + "version": "3.1.2", "description": "Babel transform plugin for automatically injecting an import to be used as the pragma for the React JSX Transform plugin.", "author": "The WordPress Contributors", "license": "GPL-2.0-or-later", diff --git a/packages/babel-plugin-makepot/README.md b/packages/babel-plugin-makepot/README.md index 7e0f903476940..c7e14cbb1c2ad 100644 --- a/packages/babel-plugin-makepot/README.md +++ b/packages/babel-plugin-makepot/README.md @@ -23,4 +23,10 @@ npm install @wordpress/babel-plugin-makepot --save-dev **Note**: This package requires Node.js 12.0.0 or later. It is not compatible with older versions. -

Code is Poetry.

+## Contributing to this package + +This is an individual package that's part of the Gutenberg project. The project is organized as a monorepo. It's made up of multiple self-contained software packages, each with a specific purpose. The packages in this monorepo are published to [npm](https://www.npmjs.com/) and used by [WordPress](https://make.wordpress.org/core/) as well as other software projects. + +To find out more about contributing to this package or Gutenberg as a whole, please read the project's main [contributor guide](https://github.com/WordPress/gutenberg/tree/HEAD/CONTRIBUTING.md). + +

Code is Poetry.

diff --git a/packages/babel-plugin-makepot/index.js b/packages/babel-plugin-makepot/index.js index 80fcccf623a56..bf14873627dcf 100644 --- a/packages/babel-plugin-makepot/index.js +++ b/packages/babel-plugin-makepot/index.js @@ -125,7 +125,7 @@ function getExtractedComment( path, _originalNodeLine ) { const { node, parent, parentPath } = path; // Assign original node line so we can keep track in recursion whether a - // matched comment or parent occurs on the same or previous line + // matched comment or parent occurs on the same or previous line. if ( ! _originalNodeLine ) { _originalNodeLine = node.loc.start.line; } @@ -143,13 +143,13 @@ function getExtractedComment( path, _originalNodeLine ) { const match = commentNode.value.match( REGEXP_TRANSLATOR_COMMENT ); if ( match ) { - // Extract text from matched translator prefix + // Extract text from matched translator prefix. comment = match[ 1 ] .split( '\n' ) .map( ( text ) => text.trim() ) .join( ' ' ); - // False return indicates to Lodash to break iteration + // False return indicates to Lodash to break iteration. return false; } } ); @@ -162,7 +162,7 @@ function getExtractedComment( path, _originalNodeLine ) { return; } - // Only recurse as long as parent node is on the same or previous line + // Only recurse as long as parent node is on the same or previous line. const { line } = parent.loc.start; if ( line >= _originalNodeLine - 1 && line <= _originalNodeLine ) { return getExtractedComment( parentPath, _originalNodeLine ); @@ -207,7 +207,7 @@ module.exports = () => { CallExpression( path, state ) { const { callee } = path.node; - // Determine function name by direct invocation or property name + // Determine function name by direct invocation or property name. let name; if ( 'MemberExpression' === callee.type ) { name = callee.property.name; @@ -215,14 +215,14 @@ module.exports = () => { name = callee.name; } - // Skip unhandled functions + // Skip unhandled functions. const functionKeys = ( state.opts.functions || DEFAULT_FUNCTIONS )[ name ]; if ( ! functionKeys ) { return; } - // Assign translation keys by argument position + // Assign translation keys by argument position. const translation = path.node.arguments.reduce( ( memo, arg, i ) => { const key = functionKeys[ i ]; @@ -241,7 +241,7 @@ module.exports = () => { } // At this point we assume we'll save data, so initialize if - // we haven't already + // we haven't already. if ( ! baseData ) { baseData = { charset: 'utf-8', @@ -262,7 +262,7 @@ module.exports = () => { ); } - // Attempt to exract nplurals from header + // Attempt to exract nplurals from header. const pluralsMatch = ( baseData.headers[ 'plural-forms' ] || '' ).match( /nplurals\s*=\s*(\d+);/ ); @@ -271,7 +271,7 @@ module.exports = () => { } } - // Create empty msgstr or array of empty msgstr by nplurals + // Create empty msgstr or array of empty msgstr by nplurals. if ( translation.msgid_plural ) { translation.msgstr = Array.from( Array( nplurals ) ).map( () => '' @@ -281,7 +281,7 @@ module.exports = () => { } // Assign file reference comment, ensuring consistent pathname - // reference between Win32 and POSIX + // reference between Win32 and POSIX. const { filename } = this.file.opts; const pathname = relative( '.', filename ) .split( sep ) @@ -290,13 +290,13 @@ module.exports = () => { reference: pathname + ':' + path.node.loc.start.line, }; - // If exists, also assign translator comment + // If exists, also assign translator comment. const translator = getExtractedComment( path ); if ( translator ) { translation.comments.extracted = translator; } - // Create context grouping for translation if not yet exists + // Create context grouping for translation if not yet exists. const { msgctxt = '', msgid } = translation; if ( ! strings[ filename ].hasOwnProperty( msgctxt ) ) { strings[ filename ][ msgctxt ] = {}; @@ -315,15 +315,15 @@ module.exports = () => { return; } - // Sort translations by filename for deterministic output + // Sort translations by filename for deterministic output. const files = Object.keys( strings ).sort(); - // Combine translations from each file grouped by context + // Combine translations from each file grouped by context. const translations = reduce( files, ( memo, file ) => { for ( const context in strings[ file ] ) { - // Within the same file, sort translations by line + // Within the same file, sort translations by line. const sortedTranslations = sortBy( strings[ file ][ context ], 'comments.reference' @@ -342,7 +342,7 @@ module.exports = () => { memo[ msgctxt ] = {}; } - // Merge references if translation already exists + // Merge references if translation already exists. if ( isSameTranslation( translation, diff --git a/packages/babel-plugin-makepot/package.json b/packages/babel-plugin-makepot/package.json index bd57de80c03b4..c4d0694912d8d 100644 --- a/packages/babel-plugin-makepot/package.json +++ b/packages/babel-plugin-makepot/package.json @@ -1,6 +1,6 @@ { "name": "@wordpress/babel-plugin-makepot", - "version": "4.2.0", + "version": "4.3.1", "description": "WordPress Babel internationalization (i18n) plugin.", "author": "The WordPress Contributors", "license": "GPL-2.0-or-later", diff --git a/packages/babel-preset-default/CHANGELOG.md b/packages/babel-preset-default/CHANGELOG.md index 55ceca2540d31..d807a5136534b 100644 --- a/packages/babel-preset-default/CHANGELOG.md +++ b/packages/babel-preset-default/CHANGELOG.md @@ -2,6 +2,19 @@ ## Unreleased +## 6.4.0 (2021-11-15) + +### Enhancements + +- The bundled `@babel/core` dependency has been updated from requiring `^7.13.19` to requiring `^7.16.0` ([#36244](https://github.com/WordPress/gutenberg/pull/36244)). +- The bundled `@babel/plugin-transform-react-jsx` dependency has been updated from requiring `^7.12.7` to requiring `^7.16.0` ([#36244](https://github.com/WordPress/gutenberg/pull/36244)). +- The bundled `@babel/plugin-transform-runtime` dependency has been updated from requiring `^7.13.10` to requiring `^7.16.0` ([#36244](https://github.com/WordPress/gutenberg/pull/36244)). +- The bundled `@babel/preset-env` dependency has been updated from requiring `^7.13.10` to requiring `^7.16.0` ([#36244](https://github.com/WordPress/gutenberg/pull/36244)). +- The bundled `@babel/preset-typescript` dependency has been updated from requiring `^7.13.10` to requiring `^7.16.0` ([#36244](https://github.com/WordPress/gutenberg/pull/36244)). +- The bundled `@babel/runtime` dependency has been updated from requiring `^7.13.10` to requiring `^7.16.0` ([#36244](https://github.com/WordPress/gutenberg/pull/36244)). +- The bundled `browserslist` dependency has been updated from requiring `^4.16.6` to requiring `^4.17.6` ([#36244](https://github.com/WordPress/gutenberg/pull/36244)). +- The bundled `core-js` dependency has been updated from requiring `^3.12.1` to requiring `^3.19.1` ([#36244](https://github.com/WordPress/gutenberg/pull/36244)). + ## 6.2.0 (2021-05-31) ### New Feature diff --git a/packages/babel-preset-default/README.md b/packages/babel-preset-default/README.md index 0f6355b334f62..3bff3e2df8d81 100644 --- a/packages/babel-preset-default/README.md +++ b/packages/babel-preset-default/README.md @@ -49,4 +49,10 @@ This needs to be included before all your compiled Babel code. You can either pr If you need to use a proposal that is not Stage 4, this polyfill will not automatically import those for you. You will have to import those from another polyfill like [`core-js`](https://github.com/zloirock/core-js) individually. -

Code is Poetry.

+## Contributing to this package + +This is an individual package that's part of the Gutenberg project. The project is organized as a monorepo. It's made up of multiple self-contained software packages, each with a specific purpose. The packages in this monorepo are published to [npm](https://www.npmjs.com/) and used by [WordPress](https://make.wordpress.org/core/) as well as other software projects. + +To find out more about contributing to this package or Gutenberg as a whole, please read the project's main [contributor guide](https://github.com/WordPress/gutenberg/tree/HEAD/CONTRIBUTING.md). + +

Code is Poetry.

diff --git a/packages/babel-preset-default/index.js b/packages/babel-preset-default/index.js index 876074d245501..dec587d4f3122 100644 --- a/packages/babel-preset-default/index.js +++ b/packages/babel-preset-default/index.js @@ -22,7 +22,10 @@ module.exports = ( api ) => { const getPresetEnv = () => { const opts = { - include: [ 'proposal-nullish-coalescing-operator' ], + include: [ + 'proposal-nullish-coalescing-operator', + 'proposal-logical-assignment-operators', + ], }; if ( isTestEnv ) { diff --git a/packages/babel-preset-default/package.json b/packages/babel-preset-default/package.json index f9d1497e4279a..577eedd015836 100644 --- a/packages/babel-preset-default/package.json +++ b/packages/babel-preset-default/package.json @@ -1,6 +1,6 @@ { "name": "@wordpress/babel-preset-default", - "version": "6.3.1", + "version": "6.11.0", "description": "Default Babel preset for WordPress development.", "author": "The WordPress Contributors", "license": "GPL-2.0-or-later", @@ -29,18 +29,18 @@ ], "main": "index.js", "dependencies": { - "@babel/core": "^7.13.10", - "@babel/plugin-transform-react-jsx": "^7.12.7", - "@babel/plugin-transform-runtime": "^7.13.10", - "@babel/preset-env": "^7.13.10", - "@babel/preset-typescript": "^7.13.0", - "@babel/runtime": "^7.13.10", + "@babel/core": "^7.16.0", + "@babel/plugin-transform-react-jsx": "^7.16.0", + "@babel/plugin-transform-runtime": "^7.16.0", + "@babel/preset-env": "^7.16.0", + "@babel/preset-typescript": "^7.16.0", + "@babel/runtime": "^7.16.0", "@wordpress/babel-plugin-import-jsx-pragma": "file:../babel-plugin-import-jsx-pragma", "@wordpress/browserslist-config": "file:../browserslist-config", "@wordpress/element": "file:../element", "@wordpress/warning": "file:../warning", - "browserslist": "^4.16.6", - "core-js": "^3.12.1" + "browserslist": "^4.17.6", + "core-js": "^3.19.1" }, "publishConfig": { "access": "public" diff --git a/packages/base-styles/CHANGELOG.md b/packages/base-styles/CHANGELOG.md index 7faa28d3063d5..b9df42c4788cc 100644 --- a/packages/base-styles/CHANGELOG.md +++ b/packages/base-styles/CHANGELOG.md @@ -2,6 +2,12 @@ ## Unreleased +## 4.0.0 (2021-09-09) + +### Breaking Change + +- Remove the background-colors, foreground-colors, and gradient-colors mixins. + ## 2.0.0 (2020-07-07) ### Breaking Changes diff --git a/packages/base-styles/README.md b/packages/base-styles/README.md index 836196bb5ec45..9c57d91ac5a98 100644 --- a/packages/base-styles/README.md +++ b/packages/base-styles/README.md @@ -40,4 +40,10 @@ To make that work with [`sass`](https://www.npmjs.com/package/sass) or [`node-sa } ``` -

Code is Poetry.

+## Contributing to this package + +This is an individual package that's part of the Gutenberg project. The project is organized as a monorepo. It's made up of multiple self-contained software packages, each with a specific purpose. The packages in this monorepo are published to [npm](https://www.npmjs.com/) and used by [WordPress](https://make.wordpress.org/core/) as well as other software projects. + +To find out more about contributing to this package or Gutenberg as a whole, please read the project's main [contributor guide](https://github.com/WordPress/gutenberg/tree/HEAD/CONTRIBUTING.md). + +

Code is Poetry.

diff --git a/packages/base-styles/_colors.native.scss b/packages/base-styles/_colors.native.scss index a34e5012eecf9..c21de46e6a459 100644 --- a/packages/base-styles/_colors.native.scss +++ b/packages/base-styles/_colors.native.scss @@ -53,6 +53,7 @@ $gray-text-min: darken($gray, 18%); //#537994 $gray-lighten-10: lighten($gray, 10%); // #a8bece $gray-lighten-20: lighten($gray, 20%); // #c8d7e1 $gray-lighten-30: lighten($gray, 30%); // #e9eff3 +$gray-darken-10: darken($gray, 10%); $gray-darken-20: darken($gray, 20%); // #4f748e $gray-darken-30: darken($gray, 30%); // #3d596d @@ -79,6 +80,9 @@ $gray-80: #2c3338; $gray-90: #1d2327; $gray-100: #101517; +$yellow-30: #deb100; +$yellow-50: #9d6e00; + // neutral (light) - black is a base color in light mode $light-primary: #000d; //rgba(0, 0, 0, 0.87); $light-secondary: #0009; //rgba(0, 0, 0, 0.6); @@ -102,6 +106,8 @@ $app-background-dark-alt: $background-dark-elevated; $modal-background: $white; $modal-background-dark: $background-dark-elevated; +$sub-heading: $gray-text-min; +$sub-heading-dark: $white; /** * Deprecated colors. * Please avoid using these. diff --git a/packages/base-styles/_mixins.scss b/packages/base-styles/_mixins.scss index fed727e4e4a6e..069f1b2f97428 100644 --- a/packages/base-styles/_mixins.scss +++ b/packages/base-styles/_mixins.scss @@ -214,16 +214,12 @@ transition-duration: 0s; transition-delay: 0s; } - } - - @else if $property == "animation" { + } @else if $property == "animation" { @media (prefers-reduced-motion: reduce) { animation-duration: 1ms; animation-delay: 0s; } - } - - @else { + } @else { @media (prefers-reduced-motion: reduce) { transition-duration: 0s; transition-delay: 0s; @@ -479,186 +475,48 @@ } } -@mixin background-colors() { - .has-pale-pink-background-color { - background-color: #f78da7; - } - - .has-vivid-red-background-color { - background-color: #cf2e2e; - } - - .has-luminous-vivid-orange-background-color { - background-color: #ff6900; - } - - .has-luminous-vivid-amber-background-color { - background-color: #fcb900; - } - - .has-light-green-cyan-background-color { - background-color: #7bdcb5; - } - - .has-vivid-green-cyan-background-color { - background-color: #00d084; - } - - .has-pale-cyan-blue-background-color { - background-color: #8ed1fc; - } - - .has-vivid-cyan-blue-background-color { - background-color: #0693e3; - } - - .has-vivid-purple-background-color { - background-color: #9b51e0; - } - - .has-white-background-color { - background-color: #fff; - } - - // Deprecated from UI, kept for back-compat. +// Deprecated from UI, kept for back-compat. +@mixin background-colors-deprecated() { .has-very-light-gray-background-color { background-color: #eee; } - .has-cyan-bluish-gray-background-color { - background-color: #abb8c3; - } - - // Deprecated from UI, kept for back-compat. .has-very-dark-gray-background-color { background-color: #313131; } - - .has-black-background-color { - background-color: #000; - } } -@mixin foreground-colors() { - .has-pale-pink-color { - color: #f78da7; - } - - .has-vivid-red-color { - color: #cf2e2e; - } - - .has-luminous-vivid-orange-color { - color: #ff6900; - } - - .has-luminous-vivid-amber-color { - color: #fcb900; - } - - .has-light-green-cyan-color { - color: #7bdcb5; - } - - .has-vivid-green-cyan-color { - color: #00d084; - } - - .has-pale-cyan-blue-color { - color: #8ed1fc; - } - - .has-vivid-cyan-blue-color { - color: #0693e3; - } - - .has-vivid-purple-color { - color: #9b51e0; - } - - .has-white-color { - color: #fff; - } - - // Deprecated from UI, kept for back-compat. +// Deprecated from UI, kept for back-compat. +@mixin foreground-colors-deprecated() { .has-very-light-gray-color { color: #eee; } - .has-cyan-bluish-gray-color { - color: #abb8c3; - } - - // Deprecated from UI, kept for back-compat. .has-very-dark-gray-color { color: #313131; } - - .has-black-color { - color: #000; - } } -@mixin gradient-colors() { - // Our classes uses the same values we set for gradient value attributes, and we can not use spacing because of WP multi site kses rule. +// Deprecated from UI, kept for back-compat. +@mixin gradient-colors-deprecated() { + /* + * Our classes uses the same values we set for gradient value attributes, + * and we can not use spacing because of WP multi site kses rule. + */ /* stylelint-disable function-comma-space-after */ - .has-vivid-cyan-blue-to-vivid-purple-gradient-background { - background: linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%); - } - .has-vivid-green-cyan-to-vivid-cyan-blue-gradient-background { background: linear-gradient(135deg,rgba(0,208,132,1) 0%,rgba(6,147,227,1) 100%); } - .has-light-green-cyan-to-vivid-green-cyan-gradient-background { - background: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%); - } - - .has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background { - background: linear-gradient(135deg,rgba(252,185,0,1) 0%,rgba(255,105,0,1) 100%); - } - - .has-luminous-vivid-orange-to-vivid-red-gradient-background { - background: linear-gradient(135deg,rgba(255,105,0,1) 0%,rgb(207,46,46) 100%); - } - - .has-very-light-gray-to-cyan-bluish-gray-gradient-background { - background: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%); - } - - .has-cool-to-warm-spectrum-gradient-background { - background: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%); - } - - .has-blush-light-purple-gradient-background { - background: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%); - } - - .has-blush-bordeaux-gradient-background { - background: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%); - } - .has-purple-crush-gradient-background { background: linear-gradient(135deg,rgb(52,226,228) 0%,rgb(71,33,251) 50%,rgb(171,29,254) 100%); } - .has-luminous-dusk-gradient-background { - background: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%); - } - .has-hazy-dawn-gradient-background { background: linear-gradient(135deg,rgb(250,172,168) 0%,rgb(218,208,236) 100%); } - .has-pale-ocean-gradient-background { - background: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%); - } - - .has-electric-grass-gradient-background { - background: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%); - } - .has-subdued-olive-gradient-background { background: linear-gradient(135deg,rgb(250,250,225) 0%,rgb(103,166,113) 100%); } diff --git a/packages/base-styles/_variables.scss b/packages/base-styles/_variables.scss index dda9168fc25f6..cc922ba5a035a 100644 --- a/packages/base-styles/_variables.scss +++ b/packages/base-styles/_variables.scss @@ -37,7 +37,8 @@ $grid-unit-30: 3 * $grid-unit; // 24px $grid-unit-40: 4 * $grid-unit; // 32px $grid-unit-50: 5 * $grid-unit; // 40px $grid-unit-60: 6 * $grid-unit; // 48px - +$grid-unit-70: 7 * $grid-unit; // 56px +$grid-unit-80: 8 * $grid-unit; // 64px /** * Dimensions. @@ -55,7 +56,7 @@ $admin-sidebar-width: 160px; $admin-sidebar-width-big: 190px; $admin-sidebar-width-collapsed: 36px; $modal-min-width: 360px; -$spinner-size: 18px; +$spinner-size: 16px; /** @@ -83,7 +84,7 @@ $widget-area-width: 700px; $block-toolbar-height: $grid-unit-60; $border-width: 1px; $border-width-focus: 2px; // This exists as a fallback, and is ideally overridden by var(--wp-admin-border-width-focus) unless in some SASS math cases. -$border-width-tab: 4px; +$border-width-tab: 1.5px; $helptext-font-size: 12px; $radius-round: 50%; $radius-block-ui: 2px; @@ -110,6 +111,7 @@ $block-bg-padding--h: 2.375em; // Dimensions. $mobile-header-toolbar-height: 44px; +$mobile-header-toolbar-expanded-height: 52px; $mobile-floating-toolbar-height: 44px; $mobile-floating-toolbar-margin: 8px; $mobile-color-swatch: 48px; diff --git a/packages/base-styles/_z-index.scss b/packages/base-styles/_z-index.scss index de9ec9d6917e5..e425d111e49f1 100644 --- a/packages/base-styles/_z-index.scss +++ b/packages/base-styles/_z-index.scss @@ -11,6 +11,7 @@ $z-layers: ( ".block-editor-block-list__block-selection-button": 22, ".components-form-toggle__input": 1, ".edit-post-text-editor__toolbar": 1, + ".edit-site-code-editor__toolbar": 1, ".edit-post-sidebar__panel-tab.is-active": 1, // These next three share a stacking context @@ -37,14 +38,19 @@ $z-layers: ( ".edit-widgets-header": 30, ".block-library-button__inline-link .block-editor-url-input__suggestions": 6, // URL suggestions for button block above sibling inserter ".wp-block-cover__inner-container": 1, // InnerBlocks area inside cover image block + ".wp-block-cover.is-placeholder .components-placeholder.is-large": 1, // Cover block resizer component inside a large placeholder. ".wp-block-cover.has-background-dim::before": 1, // Overlay area inside block cover need to be higher than the video background. + ".block-library-cover__padding-visualizer": 2, // BoxControl visualizer needs to be +1 higher than .wp-block-cover.has-background-dim::before ".wp-block-cover__image-background": 0, // Image background inside cover block. ".wp-block-cover__video-background": 0, // Video background inside cover block. ".wp-block-template-part__placeholder-preview-filter-input": 1, + // Fixed position appender: + ".block-editor-block-list__block .block-list-appender": 2, + // Navigation menu dropdown. - ".has-child .wp-block-navigation-link__container": 28, - ".has-child:hover .wp-block-navigation-link__container": 29, + ".has-child .wp-block-navigation__submenu-container": 28, + ".has-child:hover .wp-block-navigation__submenu-container": 29, // Active pill button ".components-button {:focus or .is-primary}": 1, @@ -77,10 +83,6 @@ $z-layers: ( // Ensures content overlay appears higher than resize containers used for image/video/etc. ".block-editor-block-content-overlay__overlay": 10, - // The block mover, particularly in nested contexts, - // should overlap most block content. - ".block-editor-block-list__block.is-{selected,hovered} .block-editor-block-mover": 61, - // Query block setup state. ".block-editor-block-pattern-setup .pattern-slide": 100, ".block-editor-block-pattern-setup .{next,previous}-slide": 101, @@ -114,15 +116,14 @@ $z-layers: ( // Show the navigation toggle above the skeleton header ".edit-site-navigation-toggle": 31, + // Show the navigation link above the skeleton header + ".edit-site-navigation-link": 31, // Show the FSE template previews above the editor and any open block toolbars ".edit-site-navigation-panel__preview": 32, // Above the block list and the header. - ".block-editor-block-list__block-popover": 31, - - // Under the block popover (block toolbar). - ".block-editor-block-list__insertion-point-popover": 28, + ".block-editor-block-popover": 31, // Show snackbars above everything (similar to popovers) ".components-snackbar-list": 100000, @@ -136,18 +137,19 @@ $z-layers: ( // Should be above the popover (dropdown) ".reusable-blocks-menu-items__convert-modal": 1000001, - ".edit-site-template-part-converter__modal": 1000001, + ".edit-site-create-template-part-modal": 1000001, + ".block-editor-block-lock-modal": 1000001, + + // Note: The ConfirmDialog component's z-index is being set to 1000001 in packages/components/src/confirm-dialog/styles.ts + // because it uses emotion and not sass. We need it to render on top its parent popover. // ...Except for popovers immediately beneath wp-admin menu on large breakpoints ".components-popover.block-editor-inserter__popover": 99999, ".components-popover.table-of-contents__popover": 99998, - ".components-popover.customize-widgets-more-menu__content": 99998, - ".components-popover.edit-post-more-menu__content": 99998, - ".components-popover.edit-site-more-menu__content": 99998, - ".components-popover.edit-widgets-more-menu__content": 99998, + ".components-popover.interface-more-menu__content": 99998, ".components-popover.block-editor-rich-text__inline-format-toolbar": 99998, ".components-popover.block-editor-warning__dropdown": 99998, - ".components-popover.edit-navigation-header__menu-switcher-dropdown": 99998, + ".components-popover.edit-navigation-menu-actions__switcher-dropdown": 99998, ".components-autocomplete__results": 1000000, diff --git a/packages/base-styles/index.js b/packages/base-styles/index.js new file mode 100644 index 0000000000000..cc5b9f492020c --- /dev/null +++ b/packages/base-styles/index.js @@ -0,0 +1,4 @@ +/** + * This file is intentionally left blank and acts as + * a resolvable JavaScript entry point for this package. + */ diff --git a/packages/base-styles/package.json b/packages/base-styles/package.json index 53835f4af3ab3..6dca57c4adc93 100644 --- a/packages/base-styles/package.json +++ b/packages/base-styles/package.json @@ -1,6 +1,6 @@ { "name": "@wordpress/base-styles", - "version": "3.6.0", + "version": "4.5.0", "description": "Base SCSS utilities and variables for WordPress.", "author": "The WordPress Contributors", "license": "GPL-2.0-or-later", diff --git a/packages/blob/CHANGELOG.md b/packages/blob/CHANGELOG.md index aae89dfcced33..91d5d6bf1a476 100644 --- a/packages/blob/CHANGELOG.md +++ b/packages/blob/CHANGELOG.md @@ -2,6 +2,20 @@ ## Unreleased +## 3.9.0 (2022-05-18) + +## 3.8.0 (2022-05-04) + +## 3.7.0 (2022-04-21) + +## 3.6.0 (2022-04-08) + +## 3.5.0 (2022-03-23) + +## 3.4.0 (2022-03-11) + +## 3.3.0 (2022-01-27) + ## 3.2.0 (2021-07-21) ## 3.1.0 (2021-05-20) diff --git a/packages/blob/README.md b/packages/blob/README.md index 2ae25831b3846..cfa7b745a595c 100644 --- a/packages/blob/README.md +++ b/packages/blob/README.md @@ -76,4 +76,10 @@ _Parameters_ -

Code is Poetry.

+## Contributing to this package + +This is an individual package that's part of the Gutenberg project. The project is organized as a monorepo. It's made up of multiple self-contained software packages, each with a specific purpose. The packages in this monorepo are published to [npm](https://www.npmjs.com/) and used by [WordPress](https://make.wordpress.org/core/) as well as other software projects. + +To find out more about contributing to this package or Gutenberg as a whole, please read the project's main [contributor guide](https://github.com/WordPress/gutenberg/tree/HEAD/CONTRIBUTING.md). + +

Code is Poetry.

diff --git a/packages/blob/package.json b/packages/blob/package.json index 9bef5233fbf24..0e79077cb5ccb 100644 --- a/packages/blob/package.json +++ b/packages/blob/package.json @@ -1,6 +1,6 @@ { "name": "@wordpress/blob", - "version": "3.2.1", + "version": "3.9.0", "description": "Blob utilities for WordPress.", "author": "The WordPress Contributors", "license": "GPL-2.0-or-later", @@ -27,7 +27,7 @@ "types": "build-types", "sideEffects": false, "dependencies": { - "@babel/runtime": "^7.13.10" + "@babel/runtime": "^7.16.0" }, "publishConfig": { "access": "public" diff --git a/packages/block-directory/CHANGELOG.md b/packages/block-directory/CHANGELOG.md index 60a78516dab67..f8559336f425c 100644 --- a/packages/block-directory/CHANGELOG.md +++ b/packages/block-directory/CHANGELOG.md @@ -2,6 +2,26 @@ ## Unreleased +## 3.7.0 (2022-05-18) + +## 3.6.0 (2022-05-04) + +## 3.5.0 (2022-04-21) + +## 3.4.0 (2022-04-08) + +## 3.3.0 (2022-03-23) + +## 3.2.0 (2022-03-11) + +## 3.1.1 (2022-02-10) + +### Bug Fix + +- Removed unused `@wordpress/url` dependency ([#38388](https://github.com/WordPress/gutenberg/pull/38388)). + +## 3.1.0 (2022-01-27) + ## 3.0.0 (2021-07-29) ### Breaking Change diff --git a/packages/block-directory/README.md b/packages/block-directory/README.md index 35d58dd5b5e2a..7cb81993d837f 100644 --- a/packages/block-directory/README.md +++ b/packages/block-directory/README.md @@ -12,7 +12,7 @@ Install the module npm install @wordpress/block-directory --save ``` -_This package assumes that your code will run in an **ES2015+** environment. If you're using an environment that has limited or no support for ES2015+ such as IE browsers then using [core-js](https://github.com/zloirock/core-js) will add polyfills for these methods._ +_This package assumes that your code will run in an **ES2015+** environment. If you're using an environment that has limited or no support for such language features and APIs, you should include [the polyfill shipped in `@wordpress/babel-preset-default`](https://github.com/WordPress/gutenberg/tree/HEAD/packages/babel-preset-default#polyfill) in your code._ ## Usage @@ -253,4 +253,10 @@ _Returns_ -

Code is Poetry.

+## Contributing to this package + +This is an individual package that's part of the Gutenberg project. The project is organized as a monorepo. It's made up of multiple self-contained software packages, each with a specific purpose. The packages in this monorepo are published to [npm](https://www.npmjs.com/) and used by [WordPress](https://make.wordpress.org/core/) as well as other software projects. + +To find out more about contributing to this package or Gutenberg as a whole, please read the project's main [contributor guide](https://github.com/WordPress/gutenberg/tree/HEAD/CONTRIBUTING.md). + +

Code is Poetry.

diff --git a/packages/block-directory/package.json b/packages/block-directory/package.json index f33aa6099bfa9..421886c2be639 100644 --- a/packages/block-directory/package.json +++ b/packages/block-directory/package.json @@ -1,6 +1,6 @@ { "name": "@wordpress/block-directory", - "version": "3.0.0", + "version": "3.7.0", "description": "Extend editor with block directory features to search, download and install blocks.", "author": "The WordPress Contributors", "license": "GPL-2.0-or-later", @@ -25,7 +25,7 @@ "module": "build-module/index.js", "react-native": "src/index", "dependencies": { - "@babel/runtime": "^7.13.10", + "@babel/runtime": "^7.16.0", "@wordpress/a11y": "file:../a11y", "@wordpress/api-fetch": "file:../api-fetch", "@wordpress/block-editor": "file:../block-editor", @@ -34,7 +34,6 @@ "@wordpress/compose": "file:../compose", "@wordpress/core-data": "file:../core-data", "@wordpress/data": "file:../data", - "@wordpress/data-controls": "file:../data-controls", "@wordpress/edit-post": "file:../edit-post", "@wordpress/editor": "file:../editor", "@wordpress/element": "file:../element", @@ -47,6 +46,10 @@ "@wordpress/url": "file:../url", "lodash": "^4.17.21" }, + "peerDependencies": { + "react": "^17.0.0", + "react-dom": "^17.0.0" + }, "publishConfig": { "access": "public" } diff --git a/packages/block-directory/src/components/downloadable-block-list-item/index.js b/packages/block-directory/src/components/downloadable-block-list-item/index.js index 0d63cc3bcbc2d..b434da9ad1c8a 100644 --- a/packages/block-directory/src/components/downloadable-block-list-item/index.js +++ b/packages/block-directory/src/components/downloadable-block-list-item/index.js @@ -93,6 +93,7 @@ function DownloadableBlockListItem( { composite, item, onClick } ) { return ( { - // This allows us to tweak the returned value on each test + // This allows us to tweak the returned value on each test. const mock = jest.fn(); return mock; } ); @@ -59,7 +59,8 @@ describe( 'DownloadableBlockListItem', () => { ); const button = getByRole( 'option' ); - expect( button.disabled ).toBe( true ); + // Keeping it false to avoid focus loss and disable it using aria-disabled. + expect( button.disabled ).toBe( false ); expect( button.getAttribute( 'aria-disabled' ) ).toBe( 'true' ); } ); diff --git a/packages/block-directory/src/components/downloadable-blocks-list/test/index.js b/packages/block-directory/src/components/downloadable-blocks-list/test/index.js index 1926a700a8d12..97116c110a618 100644 --- a/packages/block-directory/src/components/downloadable-blocks-list/test/index.js +++ b/packages/block-directory/src/components/downloadable-blocks-list/test/index.js @@ -15,7 +15,7 @@ import DownloadableBlocksList from '../'; import { items } from '../../test/fixtures'; jest.mock( '@wordpress/data/src/components/use-select', () => { - // This allows us to tweak the returned value on each test + // This allows us to tweak the returned value on each test. const mock = jest.fn(); return mock; } ); diff --git a/packages/block-directory/src/plugins/get-install-missing/install-button.js b/packages/block-directory/src/plugins/get-install-missing/install-button.js index e092ba58c2664..2dc01184bdeb4 100644 --- a/packages/block-directory/src/plugins/get-install-missing/install-button.js +++ b/packages/block-directory/src/plugins/get-install-missing/install-button.js @@ -13,8 +13,9 @@ import { store as blockEditorStore } from '@wordpress/block-editor'; import { store as blockDirectoryStore } from '../../store'; export default function InstallButton( { attributes, block, clientId } ) { - const isInstallingBlock = useSelect( ( select ) => - select( blockDirectoryStore ).isInstalling( block.id ) + const isInstallingBlock = useSelect( + ( select ) => select( blockDirectoryStore ).isInstalling( block.id ), + [ block.id ] ); const { installBlockType } = useDispatch( blockDirectoryStore ); const { replaceBlock } = useDispatch( blockEditorStore ); @@ -28,7 +29,7 @@ export default function InstallButton( { attributes, block, clientId } ) { const [ originalBlock ] = parse( attributes.originalContent ); - if ( originalBlock ) { + if ( originalBlock && blockType ) { replaceBlock( clientId, createBlock( diff --git a/packages/block-directory/src/store/actions.js b/packages/block-directory/src/store/actions.js index d2ca508c0c012..c1eea3e899b81 100644 --- a/packages/block-directory/src/store/actions.js +++ b/packages/block-directory/src/store/actions.js @@ -1,16 +1,24 @@ +/** + * External dependencies + */ +import { pick } from 'lodash'; + /** * WordPress dependencies */ -import { store as blocksStore } from '@wordpress/blocks'; +import { + store as blocksStore, + unstable__bootstrapServerSideBlockDefinitions, // eslint-disable-line camelcase +} from '@wordpress/blocks'; import { __, sprintf } from '@wordpress/i18n'; -import { controls } from '@wordpress/data'; -import { apiFetch } from '@wordpress/data-controls'; +import apiFetch from '@wordpress/api-fetch'; import { store as noticesStore } from '@wordpress/notices'; +import { addQueryArgs } from '@wordpress/url'; /** * Internal dependencies */ -import { loadAssets } from './controls'; +import { loadAssets } from './load-assets'; import getPluginUrl from './utils/get-plugin-url'; /** @@ -49,56 +57,82 @@ export function receiveDownloadableBlocks( downloadableBlocks, filterValue ) { * * @return {boolean} Whether the block was successfully installed & loaded. */ -export function* installBlockType( block ) { - const { id, assets } = block; +export const installBlockType = ( block ) => async ( { + registry, + dispatch, +} ) => { + const { id, name } = block; let success = false; - yield clearErrorNotice( id ); + dispatch.clearErrorNotice( id ); try { - yield setIsInstalling( block.id, true ); + dispatch.setIsInstalling( id, true ); // If we have a wp:plugin link, the plugin is installed but inactive. const url = getPluginUrl( block ); let links = {}; if ( url ) { - yield apiFetch( { - url, - data: { - status: 'active', - }, + await apiFetch( { method: 'PUT', + url, + data: { status: 'active' }, } ); } else { - const response = yield apiFetch( { - path: 'wp/v2/plugins', - data: { - slug: block.id, - status: 'active', - }, + const response = await apiFetch( { method: 'POST', + path: 'wp/v2/plugins', + data: { slug: id, status: 'active' }, } ); // Add the `self` link for newly-installed blocks. links = response._links; } - yield addInstalledBlockType( { + dispatch.addInstalledBlockType( { ...block, links: { ...block.links, ...links }, } ); - yield loadAssets( assets ); - const registeredBlocks = yield controls.select( - blocksStore.name, - 'getBlockTypes' - ); - if ( ! registeredBlocks.some( ( i ) => i.name === block.name ) ) { + // Ensures that the block metadata is propagated to the editor when registered on the server. + const metadataFields = [ + 'api_version', + 'title', + 'category', + 'parent', + 'icon', + 'description', + 'keywords', + 'attributes', + 'provides_context', + 'uses_context', + 'supports', + 'styles', + 'example', + 'variations', + ]; + await apiFetch( { + path: addQueryArgs( `/wp/v2/block-types/${ name }`, { + _fields: metadataFields, + } ), + } ) + // Ignore when the block is not registered on the server. + .catch( () => {} ) + .then( ( response ) => { + if ( ! response ) { + return; + } + unstable__bootstrapServerSideBlockDefinitions( { + [ name ]: pick( response, metadataFields ), + } ); + } ); + + await loadAssets(); + const registeredBlocks = registry.select( blocksStore ).getBlockTypes(); + if ( ! registeredBlocks.some( ( i ) => i.name === name ) ) { throw new Error( __( 'Error registering block. Try reloading the page.' ) ); } - yield controls.dispatch( - noticesStore, - 'createInfoNotice', + registry.dispatch( noticesStore ).createInfoNotice( sprintf( // translators: %s is the block title. __( 'Block %s installed and added.' ), @@ -113,10 +147,10 @@ export function* installBlockType( block ) { } catch ( error ) { let message = error.message || __( 'An error occurred.' ); - // Errors we throw are fatal + // Errors we throw are fatal. let isFatal = error instanceof Error; - // Specific API errors that are fatal + // Specific API errors that are fatal. const fatalAPIErrors = { folder_exists: __( 'This block is already installed. Try reloading the page.' @@ -131,43 +165,43 @@ export function* installBlockType( block ) { message = fatalAPIErrors[ error.code ]; } - yield setErrorNotice( id, message, isFatal ); - yield controls.dispatch( noticesStore, 'createErrorNotice', message, { + dispatch.setErrorNotice( id, message, isFatal ); + registry.dispatch( noticesStore ).createErrorNotice( message, { speak: true, isDismissible: true, } ); } - yield setIsInstalling( block.id, false ); + dispatch.setIsInstalling( id, false ); return success; -} +}; /** * Action triggered to uninstall a block plugin. * * @param {Object} block The blockType object. */ -export function* uninstallBlockType( block ) { +export const uninstallBlockType = ( block ) => async ( { + registry, + dispatch, +} ) => { try { - yield apiFetch( { - url: getPluginUrl( block ), - data: { - status: 'inactive', - }, + const url = getPluginUrl( block ); + await apiFetch( { method: 'PUT', + url, + data: { status: 'inactive' }, } ); - yield apiFetch( { - url: getPluginUrl( block ), + await apiFetch( { method: 'DELETE', + url, } ); - yield removeInstalledBlockType( block ); + dispatch.removeInstalledBlockType( block ); } catch ( error ) { - yield controls.dispatch( - noticesStore, - 'createErrorNotice', - error.message || __( 'An error occurred.' ) - ); + registry + .dispatch( noticesStore ) + .createErrorNotice( error.message || __( 'An error occurred.' ) ); } -} +}; /** * Returns an action object used to add a block type to the "newly installed" diff --git a/packages/block-directory/src/store/controls.js b/packages/block-directory/src/store/controls.js deleted file mode 100644 index 19222b7b39aa3..0000000000000 --- a/packages/block-directory/src/store/controls.js +++ /dev/null @@ -1,98 +0,0 @@ -/** - * WordPress dependencies - */ -import apiFetch from '@wordpress/api-fetch'; - -/** - * Load an asset for a block. - * - * This function returns a Promise that will resolve once the asset is loaded, - * or in the case of Stylesheets and Inline JavaScript, will resolve immediately. - * - * @param {HTMLElement} el A HTML Element asset to inject. - * - * @return {Promise} Promise which will resolve when the asset is loaded. - */ -export const loadAsset = ( el ) => { - return new Promise( ( resolve, reject ) => { - /* - * Reconstruct the passed element, this is required as inserting the Node directly - * won't always fire the required onload events, even if the asset wasn't already loaded. - */ - const newNode = document.createElement( el.nodeName ); - - [ 'id', 'rel', 'src', 'href', 'type' ].forEach( ( attr ) => { - if ( el[ attr ] ) { - newNode[ attr ] = el[ attr ]; - } - } ); - - // Append inline .`; + const output = 'Here is some text that contains HTML markup.'; + expect( stripHTML( input ) ).toBe( output ); + } ); + + it( 'should strip invalid HTML, scripts and on attributes', () => { + const input = `Here is some text

that contains HTML markup

.`; + const output = 'Here is some text that contains HTML markup.'; + expect( stripHTML( input ) ).toBe( output ); + } ); + + describe( 'whitespace preservation', () => { + it( 'should preserve leading spaces', () => { + const input = + ' Here is some text with leading spaces.'; + const output = ' Here is some text with leading spaces.'; + expect( stripHTML( input ) ).toBe( output ); + } ); + + it( 'should preserve leading spaces with HTML', () => { + const input = + ' Here is some text with leading spaces.'; + const output = ' Here is some text with leading spaces.'; + expect( stripHTML( input ) ).toBe( output ); + } ); + + it( 'should preserve trailing spaces with HTML', () => { + const input = + 'Here is some text with trailing spaces. '; + const output = 'Here is some text with trailing spaces. '; + expect( stripHTML( input ) ).toBe( output ); + } ); + + it( 'should preserve consecutive spaces within string', () => { + const input = + 'Here is some text with a lot of spaces inside.'; + const output = + 'Here is some text with a lot of spaces inside.'; + expect( stripHTML( input ) ).toBe( output ); + } ); + + it( 'should preserve new lines in multi-line HTML string', () => { + const input = `
+ Here is some + text + with new lines +
`; + + const output = ` + Here is some + text + with new lines + `; + expect( stripHTML( input ) ).toBe( output ); + } ); + } ); +} ); diff --git a/packages/dom/src/focusable.js b/packages/dom/src/focusable.js index 80e9dcb496831..75e4f72f0c1f7 100644 --- a/packages/dom/src/focusable.js +++ b/packages/dom/src/focusable.js @@ -17,19 +17,32 @@ * - https://w3c.github.io/html/editing.html#data-model */ -const SELECTOR = [ - '[tabindex]', - 'a[href]', - 'button:not([disabled])', - 'input:not([type="hidden"]):not([disabled])', - 'select:not([disabled])', - 'textarea:not([disabled])', - 'iframe', - 'object', - 'embed', - 'area[href]', - '[contenteditable]:not([contenteditable=false])', -].join( ',' ); +/** + * Returns a CSS selector used to query for focusable elements. + * + * @param {boolean} sequential If set, only query elements that are sequentially + * focusable. Non-interactive elements with a + * negative `tabindex` are focusable but not + * sequentially focusable. + * https://html.spec.whatwg.org/multipage/interaction.html#the-tabindex-attribute + * + * @return {string} CSS selector. + */ +function buildSelector( sequential ) { + return [ + sequential ? '[tabindex]:not([tabindex^="-"])' : '[tabindex]', + 'a[href]', + 'button:not([disabled])', + 'input:not([type="hidden"]):not([disabled])', + 'select:not([disabled])', + 'textarea:not([disabled])', + 'iframe:not([tabindex^="-"])', + 'object', + 'embed', + 'area[href]', + '[contenteditable]:not([contenteditable=false])', + ].join( ',' ); +} /** * Returns true if the specified element is visible (i.e. neither display: none @@ -47,21 +60,6 @@ function isVisible( element ) { ); } -/** - * Returns true if the specified element should be skipped from focusable elements. - * For now it rather specific for `iframes` and if tabindex attribute is set to -1. - * - * @param {Element} element DOM element to test. - * - * @return {boolean} Whether element should be skipped from focusable elements. - */ -function skipFocus( element ) { - return ( - element.nodeName.toLowerCase() === 'iframe' && - element.getAttribute( 'tabindex' ) === '-1' - ); -} - /** * Returns true if the specified area element is a valid focusable element, or * false otherwise. Area is only focusable if within a map where a named map @@ -88,18 +86,25 @@ function isValidFocusableArea( element ) { /** * Returns all focusable elements within a given context. * - * @param {Element} context Element in which to search. + * @param {Element} context Element in which to search. + * @param {Object} [options] + * @param {boolean} [options.sequential] If set, only return elements that are + * sequentially focusable. + * Non-interactive elements with a + * negative `tabindex` are focusable but + * not sequentially focusable. + * https://html.spec.whatwg.org/multipage/interaction.html#the-tabindex-attribute * * @return {Element[]} Focusable elements. */ -export function find( context ) { +export function find( context, { sequential = false } = {} ) { /* eslint-disable jsdoc/no-undefined-types */ /** @type {NodeListOf} */ /* eslint-enable jsdoc/no-undefined-types */ - const elements = context.querySelectorAll( SELECTOR ); + const elements = context.querySelectorAll( buildSelector( sequential ) ); return Array.from( elements ).filter( ( element ) => { - if ( ! isVisible( element ) || skipFocus( element ) ) { + if ( ! isVisible( element ) ) { return false; } diff --git a/packages/dom/src/phrasing-content.js b/packages/dom/src/phrasing-content.js index d233ef2eec8b4..494b7026f2b3c 100644 --- a/packages/dom/src/phrasing-content.js +++ b/packages/dom/src/phrasing-content.js @@ -32,7 +32,7 @@ const textContentSchema = { s: {}, del: {}, ins: {}, - a: { attributes: [ 'href', 'target', 'rel' ] }, + a: { attributes: [ 'href', 'target', 'rel', 'id' ] }, code: {}, abbr: { attributes: [ 'title' ] }, sub: {}, diff --git a/packages/dom/src/tabbable.js b/packages/dom/src/tabbable.js index 80a7838b88a6b..00a6103a70215 100644 --- a/packages/dom/src/tabbable.js +++ b/packages/dom/src/tabbable.js @@ -160,11 +160,17 @@ export function find( context ) { * * @param {Element} element The focusable element before which to look. Defaults * to the active element. + * + * @return {Element|undefined} Preceding tabbable element. */ export function findPrevious( element ) { const focusables = findFocusable( element.ownerDocument.body ); const index = focusables.indexOf( element ); + if ( index === -1 ) { + return undefined; + } + // Remove all focusables after and including `element`. focusables.length = index; @@ -181,10 +187,8 @@ export function findNext( element ) { const focusables = findFocusable( element.ownerDocument.body ); const index = focusables.indexOf( element ); - // Remove all focusables before and inside `element`. - const remaining = focusables - .slice( index + 1 ) - .filter( ( node ) => ! element.contains( node ) ); + // Remove all focusables before and including `element`. + const remaining = focusables.slice( index + 1 ); return first( filterTabbable( remaining ) ); } diff --git a/packages/dom/src/test/dom.js b/packages/dom/src/test/dom.js index 612642e9f589b..242d64ba7c13a 100644 --- a/packages/dom/src/test/dom.js +++ b/packages/dom/src/test/dom.js @@ -5,8 +5,6 @@ import { isHorizontalEdge, placeCaretAtHorizontalEdge, isTextField, - __unstableStripHTML as stripHTML, - isNumberInput, removeInvalidHTML, isEmpty, } from '../dom'; @@ -84,6 +82,14 @@ describe( 'DOM', () => { expect( isHorizontalEdge( div, true ) ).toBe( true ); expect( isHorizontalEdge( div, false ) ).toBe( true ); } ); + + it( 'should return true for input types that do not have selection ranges', () => { + const input = document.createElement( 'input' ); + input.setAttribute( 'type', 'checkbox' ); + parent.appendChild( input ); + expect( isHorizontalEdge( input, true ) ).toBe( true ); + expect( isHorizontalEdge( input, false ) ).toBe( true ); + } ); } ); describe( 'placeCaretAtHorizontalEdge', () => { @@ -118,6 +124,8 @@ describe( 'DOM', () => { 'range', 'reset', 'submit', + 'email', + 'time', ]; /** @@ -125,13 +133,7 @@ describe( 'DOM', () => { * * @type {string[]} */ - const TEXT_INPUT_TYPES = [ - 'text', - 'password', - 'search', - 'url', - 'email', - ]; + const TEXT_INPUT_TYPES = [ 'text', 'password', 'search', 'url' ]; it( 'should return false for non-text input elements', () => { NON_TEXT_INPUT_TYPES.forEach( ( type ) => { @@ -157,21 +159,6 @@ describe( 'DOM', () => { ); } ); - it( 'should return false for empty input element of type number', () => { - const input = document.createElement( 'input' ); - input.type = 'number'; - - expect( isNumberInput( input ) ).toBe( false ); - } ); - - it( 'should return true for an input element of type number', () => { - const input = document.createElement( 'input' ); - input.type = 'number'; - input.valueAsNumber = 23; - - expect( isNumberInput( input ) ).toBe( true ); - } ); - it( 'should return true for a contenteditable element', () => { const div = document.createElement( 'div' ); @@ -186,20 +173,6 @@ describe( 'DOM', () => { ); } ); } ); - - describe( 'stripHTML', () => { - it( 'removes any HTML from a text string', () => { - expect( stripHTML( 'This is emphasized' ) ).toBe( - 'This is emphasized' - ); - } ); - - it( 'removes script tags, but does not execute them', () => { - const html = 'This will not '; - expect( stripHTML( html ) ).toBe( 'This will not throw "Error"' ); - expect( () => stripHTML( html ) ).not.toThrow(); - } ); - } ); } ); describe( 'removeInvalidHTML', () => { diff --git a/packages/dom/tsconfig.json b/packages/dom/tsconfig.json index 6fa7b10e3f5be..671d4a5eba440 100644 --- a/packages/dom/tsconfig.json +++ b/packages/dom/tsconfig.json @@ -5,7 +5,5 @@ "declarationDir": "build-types", "types": [ "gutenberg-env" ] }, - "include": [ - "src/**/*" - ] + "include": [ "src/**/*" ] } diff --git a/packages/admin-manifest/.npmrc b/packages/e2e-test-utils-playwright/.npmrc similarity index 100% rename from packages/admin-manifest/.npmrc rename to packages/e2e-test-utils-playwright/.npmrc diff --git a/packages/e2e-test-utils-playwright/CHANGELOG.md b/packages/e2e-test-utils-playwright/CHANGELOG.md new file mode 100644 index 0000000000000..34c83ae9061ba --- /dev/null +++ b/packages/e2e-test-utils-playwright/CHANGELOG.md @@ -0,0 +1,5 @@ + + +## Unreleased + +-- Initial version of the package. diff --git a/packages/e2e-test-utils-playwright/README.md b/packages/e2e-test-utils-playwright/README.md new file mode 100644 index 0000000000000..aa627e6cc1c31 --- /dev/null +++ b/packages/e2e-test-utils-playwright/README.md @@ -0,0 +1,83 @@ +# E2E Test Utils + +Experimental End-To-End (E2E) Playwright test utils for WordPress. + +**This package is still experimental and breaking changes could be introduced in future minor versions (`v0.x`). Use it at your own risks.** + +_It works properly with the minimum version of Gutenberg `9.2.0` or the minimum version of WordPress `5.6.0`._ + +## Installation + +Install the module + +```bash +npm install @wordpress/e2e-test-utils-playwright --save-dev +``` + +**Note**: This package requires Node.js 12.0.0 or later. It is not compatible with older versions. + +## API + +### test + +The extended Playwright's [test](https://playwright.dev/docs/api/class-test) module with the `admin`, `pageUtils` and the `requestUtils` fixtures. + +### expect + +The Playwright/Jest's [expect](https://jestjs.io/docs/expect) function. + +### Admin + +End to end test utilities for WordPress admin's user interface. + +```js +const admin = new Admin( { page, pageUtils } ); +await admin.visitAdminPage( 'options-general.php' ); +``` + +### Editor + +End to end test utilities for the WordPress Block Editor. + +To use these utilities, instantiate them within each test file: +```js +test.use( { + editor: async ( { page }, use ) => { + await use( new Editor( { page, hasIframe: true } ) ); + }, +} ); +``` + +The `hasIframe` property denotes whether the editor canvas uses an Iframe, as the site editor currently does. Omit this for non-iframe editors. + +Within a test or test utility, use the `canvas` property to select elements within the iframe canvas: + +```js +await editor.canvas.locator( 'role=document[name="Paragraph block"i]' ) +``` + +### PageUtils + +Generic Playwright utilities for interacting with web pages. + +```js +const pageUtils = new PageUtils( { page } ); +await pageUtils.pressKeyWithModifier( 'primary', 'a' ); +``` + +### RequestUtils + +Playwright utilities for interacting with the WordPress REST API. + +Create a request utils instance. + +```js +const requestUtils = await RequestUtils.setup( { + user: { + username: 'admin', + password: 'password', + }, +} ); +``` + +

Code is Poetry.

diff --git a/packages/e2e-test-utils-playwright/package.json b/packages/e2e-test-utils-playwright/package.json new file mode 100644 index 0000000000000..8979cdbbb0267 --- /dev/null +++ b/packages/e2e-test-utils-playwright/package.json @@ -0,0 +1,47 @@ +{ + "name": "@wordpress/e2e-test-utils-playwright", + "version": "0.0.0", + "private": true, + "description": "End-To-End (E2E) test utils for WordPress.", + "author": "The WordPress Contributors", + "license": "GPL-2.0-or-later", + "keywords": [ + "wordpress", + "gutenberg", + "e2e", + "utils", + "playwright" + ], + "homepage": "https://github.com/WordPress/gutenberg/tree/HEAD/packages/e2e-test-utils-playwright/README.md", + "repository": { + "type": "git", + "url": "https://github.com/WordPress/gutenberg.git", + "directory": "packages/e2e-test-utils-playwright" + }, + "bugs": { + "url": "https://github.com/WordPress/gutenberg/issues" + }, + "engines": { + "node": ">=12" + }, + "files": [ + "build", + "build-types" + ], + "main": "./build/index.js", + "types": "./build-types", + "dependencies": { + "@wordpress/api-fetch": "file:../api-fetch", + "@wordpress/keycodes": "file:../keycodes", + "@wordpress/url": "file:../url", + "form-data": "^4.0.0", + "lodash": "^4.17.21", + "role-selector": "0.5.0" + }, + "peerDependencies": { + "@playwright/test": ">=1" + }, + "publishConfig": { + "access": "public" + } +} diff --git a/packages/e2e-test-utils-playwright/src/admin/create-new-post.js b/packages/e2e-test-utils-playwright/src/admin/create-new-post.js new file mode 100644 index 0000000000000..fe74892956111 --- /dev/null +++ b/packages/e2e-test-utils-playwright/src/admin/create-new-post.js @@ -0,0 +1,66 @@ +/** + * WordPress dependencies + */ +import { addQueryArgs } from '@wordpress/url'; + +/** + * Creates new post. + * + * @this {import('.').Editor} + * @param {Object} object Object to create new post, along with tips enabling option. + * @param {string} [object.postType] Post type of the new post. + * @param {string} [object.title] Title of the new post. + * @param {string} [object.content] Content of the new post. + * @param {string} [object.excerpt] Excerpt of the new post. + * @param {boolean} [object.showWelcomeGuide] Whether to show the welcome guide. + */ +export async function createNewPost( { + postType, + title, + content, + excerpt, + showWelcomeGuide = false, +} = {} ) { + const query = addQueryArgs( '', { + post_type: postType, + post_title: title, + content, + excerpt, + } ).slice( 1 ); + + await this.visitAdminPage( 'post-new.php', query ); + + await this.page.waitForSelector( '.edit-post-layout' ); + + const isWelcomeGuideActive = await this.page.evaluate( () => + window.wp.data + .select( 'core/edit-post' ) + .isFeatureActive( 'welcomeGuide' ) + ); + const isFullscreenMode = await this.page.evaluate( () => + window.wp.data + .select( 'core/edit-post' ) + .isFeatureActive( 'fullscreenMode' ) + ); + + if ( showWelcomeGuide !== isWelcomeGuideActive ) { + await this.page.evaluate( () => + window.wp.data + .dispatch( 'core/edit-post' ) + .toggleFeature( 'welcomeGuide' ) + ); + + await this.page.reload(); + await this.page.waitForSelector( '.edit-post-layout' ); + } + + if ( isFullscreenMode ) { + await this.page.evaluate( () => + window.wp.data + .dispatch( 'core/edit-post' ) + .toggleFeature( 'fullscreenMode' ) + ); + + await this.page.waitForSelector( 'body:not(.is-fullscreen-mode)' ); + } +} diff --git a/packages/e2e-test-utils-playwright/src/admin/get-page-error.ts b/packages/e2e-test-utils-playwright/src/admin/get-page-error.ts new file mode 100644 index 0000000000000..fcf6a4ebea55d --- /dev/null +++ b/packages/e2e-test-utils-playwright/src/admin/get-page-error.ts @@ -0,0 +1,32 @@ +/** + * Internal dependencies + */ +import type { Admin } from './'; + +/** + * Regular expression matching a displayed PHP error within a markup string. + * + * @see https://github.com/php/php-src/blob/598175e/main/main.c#L1257-L1297 + * + * @type {RegExp} + */ +const REGEXP_PHP_ERROR = /()?(Fatal error|Recoverable fatal error|Warning|Parse error|Notice|Strict Standards|Deprecated|Unknown error)(<\/b>)?: (.*?) in (.*?) on line ()?\d+(<\/b>)?/; + +/** + * Returns a promise resolving to one of either a string or null. A string will + * be resolved if an error message is present in the contents of the page. If no + * error is present, a null value will be resolved instead. This requires the + * environment be configured to display errors. + * + * @see http://php.net/manual/en/function.error-reporting.php + * + * @param {Admin} this + * + * @return {Promise} Promise resolving to a string or null, depending + * whether a page error is present. + */ +export async function getPageError( this: Admin ) { + const content = await this.page.content(); + const match = content.match( REGEXP_PHP_ERROR ); + return match ? match[ 0 ] : null; +} diff --git a/packages/e2e-test-utils-playwright/src/admin/index.ts b/packages/e2e-test-utils-playwright/src/admin/index.ts new file mode 100644 index 0000000000000..41289f6a0bbbb --- /dev/null +++ b/packages/e2e-test-utils-playwright/src/admin/index.ts @@ -0,0 +1,40 @@ +/** + * External dependencies + */ +import type { Browser, Page, BrowserContext } from '@playwright/test'; + +/** + * Internal dependencies + */ +/** + * Internal dependencies + */ +import { createNewPost } from './create-new-post'; +import { getPageError } from './get-page-error'; +import { visitAdminPage } from './visit-admin-page'; +import { visitSiteEditor } from './visit-site-editor'; +import type { PageUtils } from '../page-utils'; + +type AdminConstructorProps = { + page: Page; + pageUtils: PageUtils; +}; + +export class Admin { + browser: Browser; + page: Page; + pageUtils: PageUtils; + context: BrowserContext; + + constructor( { page, pageUtils }: AdminConstructorProps ) { + this.page = page; + this.context = page.context(); + this.browser = this.context.browser()!; + this.pageUtils = pageUtils; + } + + createNewPost = createNewPost; + getPageError = getPageError; + visitAdminPage = visitAdminPage; + visitSiteEditor = visitSiteEditor; +} diff --git a/packages/e2e-test-utils-playwright/src/admin/visit-admin-page.ts b/packages/e2e-test-utils-playwright/src/admin/visit-admin-page.ts new file mode 100644 index 0000000000000..348ce7e075bf6 --- /dev/null +++ b/packages/e2e-test-utils-playwright/src/admin/visit-admin-page.ts @@ -0,0 +1,43 @@ +/** + * External dependencies + */ +import { join } from 'path'; + +/** + * Internal dependencies + */ +import type { Admin } from './'; + +/** + * Visits admin page and handle errors. + * + * @param {Admin} this + * @param {string} adminPath String to be serialized as pathname. + * @param {string} query String to be serialized as query portion of URL. + */ +export async function visitAdminPage( + this: Admin, + adminPath: string, + query: string +) { + await this.page.goto( + join( 'wp-admin', adminPath ) + ( query ? `?${ query }` : '' ) + ); + + // Handle upgrade required screen + if ( this.pageUtils.isCurrentURL( 'wp-admin/upgrade.php' ) ) { + // Click update + await this.page.click( '.button.button-large.button-primary' ); + // Click continue + await this.page.click( '.button.button-large' ); + } + + if ( this.pageUtils.isCurrentURL( 'wp-login.php' ) ) { + throw new Error( 'Not logged in' ); + } + + const error = await this.getPageError(); + if ( error ) { + throw new Error( 'Unexpected error in page content: ' + error ); + } +} diff --git a/packages/e2e-test-utils-playwright/src/admin/visit-site-editor.ts b/packages/e2e-test-utils-playwright/src/admin/visit-site-editor.ts new file mode 100644 index 0000000000000..0c374f2fe404b --- /dev/null +++ b/packages/e2e-test-utils-playwright/src/admin/visit-site-editor.ts @@ -0,0 +1,54 @@ +/** + * WordPress dependencies + */ +import { addQueryArgs } from '@wordpress/url'; + +/** + * Internal dependencies + */ +import type { Admin } from './'; + +interface SiteEditorQueryParams { + postId: string | number; + postType: string; +} + +const CANVAS_SELECTOR = 'iframe[title="Editor canvas"i]'; + +/** + * Visits the Site Editor main page + * + * By default, it also skips the welcome guide. The option can be disabled if need be. + * + * @param {Admin} this + * @param {SiteEditorQueryParams} query Query params to be serialized as query portion of URL. + * @param {boolean} skipWelcomeGuide Whether to skip the welcome guide as part of the navigation. + */ +export async function visitSiteEditor( + this: Admin, + query: SiteEditorQueryParams, + skipWelcomeGuide = true +) { + const path = addQueryArgs( '', { + page: 'gutenberg-edit-site', + ...query, + } ).slice( 1 ); + + await this.visitAdminPage( 'themes.php', path ); + await this.page.waitForSelector( CANVAS_SELECTOR ); + + if ( skipWelcomeGuide ) { + await this.page.evaluate( () => { + // TODO, type `window.wp`. + // @ts-ignore + window.wp.data + .dispatch( 'core/preferences' ) + .set( 'core/edit-site', 'welcomeGuide', false ); + + // @ts-ignore + window.wp.data + .dispatch( 'core/preferences' ) + .toggle( 'core/edit-site', 'welcomeGuideStyles', false ); + } ); + } +} diff --git a/packages/e2e-test-utils-playwright/src/config.ts b/packages/e2e-test-utils-playwright/src/config.ts new file mode 100644 index 0000000000000..87c905d43f545 --- /dev/null +++ b/packages/e2e-test-utils-playwright/src/config.ts @@ -0,0 +1,12 @@ +const WP_ADMIN_USER = { + username: 'admin', + password: 'password', +} as const; + +const { + WP_USERNAME = WP_ADMIN_USER.username, + WP_PASSWORD = WP_ADMIN_USER.password, + WP_BASE_URL = 'http://localhost:8889', +} = process.env; + +export { WP_ADMIN_USER, WP_USERNAME, WP_PASSWORD, WP_BASE_URL }; diff --git a/packages/e2e-test-utils-playwright/src/editor/click-block-options-menu-item.ts b/packages/e2e-test-utils-playwright/src/editor/click-block-options-menu-item.ts new file mode 100644 index 0000000000000..ca1cf82a8c8cc --- /dev/null +++ b/packages/e2e-test-utils-playwright/src/editor/click-block-options-menu-item.ts @@ -0,0 +1,19 @@ +/** + * Internal dependencies + */ +import type { Editor } from './index'; + +/** + * Clicks a block toolbar button. + * + * @param {Editor} this + * @param {string} label The text string of the button label. + */ +export async function clickBlockOptionsMenuItem( this: Editor, label: string ) { + await this.clickBlockToolbarButton( 'Options' ); + await this.page + .locator( + `role=menu[name="Options"i] >> role=menuitem[name="${ label }"i]` + ) + .click(); +} diff --git a/packages/e2e-test-utils-playwright/src/editor/click-block-toolbar-button.ts b/packages/e2e-test-utils-playwright/src/editor/click-block-toolbar-button.ts new file mode 100644 index 0000000000000..60eec9bfcaf06 --- /dev/null +++ b/packages/e2e-test-utils-playwright/src/editor/click-block-toolbar-button.ts @@ -0,0 +1,21 @@ +/** + * Internal dependencies + */ +import type { Editor } from './index'; + +/** + * Clicks a block toolbar button. + * + * @param {Editor} this + * @param {string} label The text string of the button label. + */ +export async function clickBlockToolbarButton( this: Editor, label: string ) { + await this.showBlockToolbar(); + + const blockToolbar = this.page.locator( + 'role=toolbar[name="Block tools"i]' + ); + const button = blockToolbar.locator( `role=button[name="${ label }"]` ); + + await button.click(); +} diff --git a/packages/e2e-test-utils-playwright/src/editor/get-edited-post-content.ts b/packages/e2e-test-utils-playwright/src/editor/get-edited-post-content.ts new file mode 100644 index 0000000000000..db32b4df01b6e --- /dev/null +++ b/packages/e2e-test-utils-playwright/src/editor/get-edited-post-content.ts @@ -0,0 +1,18 @@ +/** + * Internal dependencies + */ +import type { Editor } from './index'; + +/** + * Returns a promise which resolves with the edited post content (HTML string). + * + * @param {Editor} this + * + * @return {Promise} Promise resolving with post content markup. + */ +export async function getEditedPostContent( this: Editor ) { + return await this.page.evaluate( () => + // @ts-ignore (Reason: wp isn't typed) + window.wp.data.select( 'core/editor' ).getEditedPostContent() + ); +} diff --git a/packages/e2e-test-utils-playwright/src/editor/index.ts b/packages/e2e-test-utils-playwright/src/editor/index.ts new file mode 100644 index 0000000000000..074cdd358266c --- /dev/null +++ b/packages/e2e-test-utils-playwright/src/editor/index.ts @@ -0,0 +1,64 @@ +/** + * External dependencies + */ +import type { Browser, Page, BrowserContext, Frame } from '@playwright/test'; + +/** + * Internal dependencies + */ +import { clickBlockOptionsMenuItem } from './click-block-options-menu-item'; +import { clickBlockToolbarButton } from './click-block-toolbar-button'; +import { getEditedPostContent } from './get-edited-post-content'; +import { insertBlock } from './insert-block'; +import { openDocumentSettingsSidebar } from './open-document-settings-sidebar'; +import { openPreviewPage } from './preview'; +import { selectBlocks } from './select-blocks'; +import { showBlockToolbar } from './show-block-toolbar'; +import { saveSiteEditorEntities } from './site-editor'; + +type EditorConstructorProps = { + page: Page; + hasIframe?: boolean; +}; + +export class Editor { + browser: Browser; + page: Page; + context: BrowserContext; + #hasIframe: boolean; + + constructor( { page, hasIframe = false }: EditorConstructorProps ) { + this.page = page; + this.context = page.context(); + this.browser = this.context.browser()!; + this.#hasIframe = hasIframe; + } + + get canvas(): Frame | Page { + let frame; + + if ( this.#hasIframe ) { + frame = this.page.frame( 'editor-canvas' ); + } else { + frame = this.page; + } + + if ( ! frame ) { + throw new Error( + 'EditorUtils: unable to find editor canvas iframe or page' + ); + } + + return frame; + } + + clickBlockOptionsMenuItem = clickBlockOptionsMenuItem; + clickBlockToolbarButton = clickBlockToolbarButton; + getEditedPostContent = getEditedPostContent; + insertBlock = insertBlock; + openDocumentSettingsSidebar = openDocumentSettingsSidebar; + openPreviewPage = openPreviewPage; + saveSiteEditorEntities = saveSiteEditorEntities; + selectBlocks = selectBlocks; + showBlockToolbar = showBlockToolbar; +} diff --git a/packages/e2e-test-utils-playwright/src/editor/insert-block.ts b/packages/e2e-test-utils-playwright/src/editor/insert-block.ts new file mode 100644 index 0000000000000..10f9db27025ed --- /dev/null +++ b/packages/e2e-test-utils-playwright/src/editor/insert-block.ts @@ -0,0 +1,44 @@ +/** + * Internal dependencies + */ +import type { Editor } from './index'; + +interface BlockRepresentation { + name: string; + attributes: Object; + innerBlocks: BlockRepresentation[]; +} + +/** + * Insert a block. + * + * @param {Editor} this + * @param {BlockRepresentation} blockRepresentation Inserted block representation. + */ +async function insertBlock( + this: Editor, + blockRepresentation: BlockRepresentation +) { + await this.page.evaluate( ( _blockRepresentation ) => { + function recursiveCreateBlock( { + name, + attributes = {}, + innerBlocks = [], + }: BlockRepresentation ): Object { + // @ts-ignore (Reason: wp isn't typed). + return window.wp.blocks.createBlock( + name, + attributes, + innerBlocks.map( ( innerBlock ) => + recursiveCreateBlock( innerBlock ) + ) + ); + } + const block = recursiveCreateBlock( _blockRepresentation ); + + // @ts-ignore (Reason: wp isn't typed). + window.wp.data.dispatch( 'core/block-editor' ).insertBlock( block ); + }, blockRepresentation ); +} + +export { insertBlock }; diff --git a/packages/e2e-test-utils-playwright/src/editor/open-document-settings-sidebar.ts b/packages/e2e-test-utils-playwright/src/editor/open-document-settings-sidebar.ts new file mode 100644 index 0000000000000..11bf6774a6da1 --- /dev/null +++ b/packages/e2e-test-utils-playwright/src/editor/open-document-settings-sidebar.ts @@ -0,0 +1,24 @@ +/** + * Internal dependencies + */ +import type { Editor } from './index'; +const { expect } = require( '../test' ); + +/** + * Clicks on the button in the header which opens Document Settings sidebar when it is closed. + * + * @param {Editor} this + */ +export async function openDocumentSettingsSidebar( this: Editor ) { + const editorSettings = this.page.locator( + 'role=region[name="Editor settings"i]' + ); + + if ( ! ( await editorSettings.isVisible() ) ) { + await this.page.click( + 'role=region[name="Editor top bar"i] >> role=button[name="Settings"i]' + ); + + await expect( editorSettings ).toBeVisible(); + } +} diff --git a/packages/e2e-test-utils-playwright/src/editor/preview.ts b/packages/e2e-test-utils-playwright/src/editor/preview.ts new file mode 100644 index 0000000000000..a7655b3877930 --- /dev/null +++ b/packages/e2e-test-utils-playwright/src/editor/preview.ts @@ -0,0 +1,33 @@ +/** + * External dependencies + */ +import type { Page } from '@playwright/test'; + +/** + * Internal dependencies + */ +import type { Editor } from './index'; + +/** + * Opens the preview page of an edited post. + * + * @param {Editor} this + * + * @return {Promise} preview page. + */ +export async function openPreviewPage( this: Editor ): Promise< Page > { + const editorTopBar = this.page.locator( + 'role=region[name="Editor top bar"i]' + ); + const previewButton = editorTopBar.locator( + 'role=button[name="Preview"i]' + ); + await previewButton.click(); + + const [ previewPage ] = await Promise.all( [ + this.context.waitForEvent( 'page' ), + this.page.click( 'role=menuitem[name="Preview in new tab"i]' ), + ] ); + + return previewPage; +} diff --git a/packages/e2e-test-utils-playwright/src/editor/select-blocks.ts b/packages/e2e-test-utils-playwright/src/editor/select-blocks.ts new file mode 100644 index 0000000000000..8fba639e06858 --- /dev/null +++ b/packages/e2e-test-utils-playwright/src/editor/select-blocks.ts @@ -0,0 +1,48 @@ +/** + * External dependencies + */ +import type { Locator } from '@playwright/test'; + +/** + * Internal dependencies + */ +import type { Editor } from './index'; + +export async function selectBlocks( + this: Editor, + startSelectorOrLocator: string | Locator, + endSelectorOrLocator?: string | Locator +) { + const startBlock = + typeof startSelectorOrLocator === 'string' + ? this.canvas.locator( startSelectorOrLocator ) + : startSelectorOrLocator; + + const endBlock = + typeof endSelectorOrLocator === 'string' + ? this.canvas.locator( endSelectorOrLocator ) + : endSelectorOrLocator; + + const startClientId = await startBlock.getAttribute( 'data-block' ); + const endClientId = await endBlock?.getAttribute( 'data-block' ); + + if ( endClientId ) { + await this.page.evaluate( + ( [ startId, endId ] ) => { + // @ts-ignore + wp.data + .dispatch( 'core/block-editor' ) + .multiSelect( startId, endId ); + }, + [ startClientId, endClientId ] + ); + } else { + await this.page.evaluate( + ( [ clientId ] ) => { + // @ts-ignore + wp.data.dispatch( 'core/block-editor' ).selectBlock( clientId ); + }, + [ startClientId ] + ); + } +} diff --git a/packages/e2e-test-utils-playwright/src/editor/show-block-toolbar.ts b/packages/e2e-test-utils-playwright/src/editor/show-block-toolbar.ts new file mode 100644 index 0000000000000..c6b6d4073174f --- /dev/null +++ b/packages/e2e-test-utils-playwright/src/editor/show-block-toolbar.ts @@ -0,0 +1,20 @@ +/** + * Internal dependencies + */ +import type { Editor } from './index'; + +/** + * The block toolbar is not always visible while typing. + * Call this function to reveal it. + * + * @param {Editor} this + */ +export async function showBlockToolbar( this: Editor ) { + // Move the mouse to disable the isTyping mode. We need at least three + // mousemove events for it to work across windows (iframe). With three + // moves, it's a guarantee that at least two will be in the same window. + // Two events are required for the flag to be unset. + await this.page.mouse.move( 50, 50 ); + await this.page.mouse.move( 75, 75 ); + await this.page.mouse.move( 100, 100 ); +} diff --git a/packages/e2e-test-utils-playwright/src/editor/site-editor.ts b/packages/e2e-test-utils-playwright/src/editor/site-editor.ts new file mode 100644 index 0000000000000..1b218bd7b3af3 --- /dev/null +++ b/packages/e2e-test-utils-playwright/src/editor/site-editor.ts @@ -0,0 +1,28 @@ +/** + * Internal dependencies + */ +import type { Editor } from './index'; + +/** + * Save entities in the site editor. Assumes the editor is in a dirty state. + * + * @param {Editor} this + */ +export async function saveSiteEditorEntities( this: Editor ) { + await this.page + .locator( 'role=region[name="Header"i] >> role=button[name="Save"i]' ) + .click(); + + // The sidebar entities panel opens with another save button. Click this too. + await this.page + .locator( 'role=region[name="Publish"i] >> role=button[name="Save"i]' ) + .click(); + + // The panel will close revealing the main editor save button again. + // It will have the classname `.is-busy` while saving. Wait for it to + // not have that classname. + // TODO - find a way to improve this selector to use role/name. + await this.page.waitForSelector( + '.edit-site-save-button__button:not(.is-busy)' + ); +} diff --git a/packages/e2e-test-utils-playwright/src/index.ts b/packages/e2e-test-utils-playwright/src/index.ts new file mode 100644 index 0000000000000..8cbbf4b31a4ed --- /dev/null +++ b/packages/e2e-test-utils-playwright/src/index.ts @@ -0,0 +1,15 @@ +/** + * External dependencies + */ +import { selectors } from '@playwright/test'; +import { selectorScript } from 'role-selector/playwright-test'; + +// Register role selector. +// Replace this with the native role engine when it's ready. +selectors.register( 'role', selectorScript, { contentScript: true } ); + +export { Admin } from './admin'; +export { Editor } from './editor'; +export { PageUtils } from './page-utils'; +export { RequestUtils } from './request-utils'; +export { test, expect } from './test'; diff --git a/packages/e2e-test-utils-playwright/src/page-utils/index.ts b/packages/e2e-test-utils-playwright/src/page-utils/index.ts new file mode 100644 index 0000000000000..c3c2f62eb0620 --- /dev/null +++ b/packages/e2e-test-utils-playwright/src/page-utils/index.ts @@ -0,0 +1,39 @@ +/** + * External dependencies + */ +import type { Browser, Page, BrowserContext } from '@playwright/test'; + +/** + * Internal dependencies + */ +import { isCurrentURL } from './is-current-url'; +import { + setClipboardData, + pressKeyWithModifier, +} from './press-key-with-modifier'; +import { pressKeyTimes } from './press-key-times'; +import { setBrowserViewport } from './set-browser-viewport'; + +type PageUtilConstructorParams = { + page: Page; +}; + +class PageUtils { + browser: Browser; + page: Page; + context: BrowserContext; + + constructor( { page }: PageUtilConstructorParams ) { + this.page = page; + this.context = page.context(); + this.browser = this.context.browser()!; + } + + isCurrentURL = isCurrentURL; + pressKeyTimes = pressKeyTimes; + pressKeyWithModifier = pressKeyWithModifier; + setBrowserViewport = setBrowserViewport; + setClipboardData = setClipboardData; +} + +export { PageUtils }; diff --git a/packages/e2e-test-utils-playwright/src/page-utils/is-current-url.ts b/packages/e2e-test-utils-playwright/src/page-utils/is-current-url.ts new file mode 100644 index 0000000000000..0a43fcfb422c9 --- /dev/null +++ b/packages/e2e-test-utils-playwright/src/page-utils/is-current-url.ts @@ -0,0 +1,20 @@ +/** + * Internal dependencies + */ +import { WP_BASE_URL } from '../config'; +import type { PageUtils } from './'; + +/** + * Checks if current path of the URL matches the provided path. + * + * @param {PageUtils} this + * @param {string} path String to be serialized as pathname. + * + * @return {boolean} Boolean represents whether current URL is or not a WordPress path. + */ +export function isCurrentURL( this: PageUtils, path: string ) { + const currentURL = new URL( this.page.url() ); + const expectedURL = new URL( path, WP_BASE_URL ); + + return expectedURL.pathname === currentURL.pathname; +} diff --git a/packages/e2e-test-utils-playwright/src/page-utils/press-key-times.js b/packages/e2e-test-utils-playwright/src/page-utils/press-key-times.js new file mode 100644 index 0000000000000..5e8f3ea65b99c --- /dev/null +++ b/packages/e2e-test-utils-playwright/src/page-utils/press-key-times.js @@ -0,0 +1,11 @@ +/** + * Presses the given keyboard key a number of times in sequence. + * + * @param {string} key Key to press. + * @param {number} count Number of times to press. + */ +export async function pressKeyTimes( key, count ) { + while ( count-- ) { + await this.page.keyboard.press( key ); + } +} diff --git a/packages/e2e-test-utils-playwright/src/page-utils/press-key-with-modifier.ts b/packages/e2e-test-utils-playwright/src/page-utils/press-key-with-modifier.ts new file mode 100644 index 0000000000000..d4a7a368a7321 --- /dev/null +++ b/packages/e2e-test-utils-playwright/src/page-utils/press-key-with-modifier.ts @@ -0,0 +1,134 @@ +/** + * External dependencies + */ +import { capitalize } from 'lodash'; +import type { Page } from '@playwright/test'; + +/** + * WordPress dependencies + */ +import { modifiers, SHIFT, ALT, CTRL } from '@wordpress/keycodes'; +import type { WPKeycodeModifier } from '@wordpress/keycodes'; + +/** + * Internal dependencies + */ +import type { PageUtils } from './index'; + +let clipboardDataHolder: { + plainText: string; + html: string; +} = { + plainText: '', + html: '', +}; + +/** + * Sets the clipboard data that can be pasted with + * `pressKeyWithModifier( 'primary', 'v' )`. + * + * @param this + * @param clipboardData + * @param clipboardData.plainText + * @param clipboardData.html + */ +export function setClipboardData( + this: PageUtils, + { plainText = '', html = '' }: typeof clipboardDataHolder +) { + clipboardDataHolder = { + plainText, + html, + }; +} + +async function emulateClipboard( page: Page, type: 'copy' | 'cut' | 'paste' ) { + clipboardDataHolder = await page.evaluate( + ( [ _type, _clipboardData ] ) => { + const clipboardDataTransfer = new DataTransfer(); + + if ( _type === 'paste' ) { + clipboardDataTransfer.setData( + 'text/plain', + _clipboardData.plainText + ); + clipboardDataTransfer.setData( + 'text/html', + _clipboardData.html + ); + } else { + const selection = window.getSelection()!; + const plainText = selection.toString(); + let html = plainText; + if ( selection.rangeCount ) { + const range = selection.getRangeAt( 0 ); + const fragment = range.cloneContents(); + html = Array.from( fragment.childNodes ) + .map( + ( node ) => + ( node as Element ).outerHTML ?? node.nodeValue + ) + .join( '' ); + } + clipboardDataTransfer.setData( 'text/plain', plainText ); + clipboardDataTransfer.setData( 'text/html', html ); + } + + document.activeElement?.dispatchEvent( + new ClipboardEvent( _type, { + bubbles: true, + cancelable: true, + clipboardData: clipboardDataTransfer, + } ) + ); + + return { + plainText: clipboardDataTransfer.getData( 'text/plain' ), + html: clipboardDataTransfer.getData( 'text/html' ), + }; + }, + [ type, clipboardDataHolder ] as const + ); +} + +/** + * Performs a key press with modifier (Shift, Control, Meta, Alt), where each modifier + * is normalized to platform-specific modifier. + * + * @param this + * @param modifier + * @param key + */ +export async function pressKeyWithModifier( + this: PageUtils, + modifier: WPKeycodeModifier, + key: string +) { + if ( modifier.toLowerCase() === 'primary' && key.toLowerCase() === 'c' ) { + return await emulateClipboard( this.page, 'copy' ); + } + + if ( modifier.toLowerCase() === 'primary' && key.toLowerCase() === 'x' ) { + return await emulateClipboard( this.page, 'cut' ); + } + + if ( modifier.toLowerCase() === 'primary' && key.toLowerCase() === 'v' ) { + return await emulateClipboard( this.page, 'paste' ); + } + + const isAppleOS = () => process.platform === 'darwin'; + const overWrittenModifiers = { + ...modifiers, + shiftAlt: ( _isApple: () => boolean ) => + _isApple() ? [ SHIFT, ALT ] : [ SHIFT, CTRL ], + }; + const mappedModifiers = overWrittenModifiers[ modifier ]( + isAppleOS + ).map( ( keycode ) => + keycode === CTRL ? 'Control' : capitalize( keycode ) + ); + + await this.page.keyboard.press( + `${ mappedModifiers.join( '+' ) }+${ key }` + ); +} diff --git a/packages/e2e-test-utils-playwright/src/page-utils/set-browser-viewport.js b/packages/e2e-test-utils-playwright/src/page-utils/set-browser-viewport.js new file mode 100644 index 0000000000000..16e9304b6c096 --- /dev/null +++ b/packages/e2e-test-utils-playwright/src/page-utils/set-browser-viewport.js @@ -0,0 +1,48 @@ +/** + * Named viewport options. + * + * @typedef {"large"|"medium"|"small"} WPDimensionsName + */ + +/** + * Viewport dimensions object. + * + * @typedef {Object} WPViewportDimensions + * + * @property {number} width Width, in pixels. + * @property {number} height Height, in pixels. + */ + +/** + * Predefined viewport dimensions to reference by name. + * + * @enum {WPViewportDimensions} + * + * @type {Record} + */ +const PREDEFINED_DIMENSIONS = { + large: { width: 960, height: 700 }, + medium: { width: 768, height: 700 }, + small: { width: 600, height: 700 }, +}; + +/** + * Valid argument argument type from which to derive viewport dimensions. + * + * @typedef {WPDimensionsName|WPViewportDimensions} WPViewport + */ + +/** + * Sets browser viewport to specified type. + * + * @this {import('./').PageUtils} + * @param {WPViewport} viewport Viewport name or dimensions object to assign. + */ +export async function setBrowserViewport( viewport ) { + const dimensions = + typeof viewport === 'string' + ? PREDEFINED_DIMENSIONS[ viewport ] + : viewport; + + await this.page.setViewportSize( dimensions ); +} diff --git a/packages/e2e-test-utils-playwright/src/request-utils/blocks.js b/packages/e2e-test-utils-playwright/src/request-utils/blocks.js new file mode 100644 index 0000000000000..82f011c3f750e --- /dev/null +++ b/packages/e2e-test-utils-playwright/src/request-utils/blocks.js @@ -0,0 +1,28 @@ +/** + * Delete all blocks using REST API. + * + * @see https://developer.wordpress.org/rest-api/reference/blocks/#list-editor-blocks + * @this {import('./index').RequestUtils} + */ +export async function deleteAllBlocks() { + // List all blocks. + // https://developer.wordpress.org/rest-api/reference/blocks/#list-editor-blocks + const blocks = await this.rest( { + path: '/wp/v2/blocks', + params: { + per_page: 100, + // All possible statuses. + status: 'publish,future,draft,pending,private,trash', + }, + } ); + + // Delete blocks. + // https://developer.wordpress.org/rest-api/reference/blocks/#delete-a-editor-block + // "/wp/v2/posts" not yet supports batch requests. + await this.batchRest( + blocks.map( ( block ) => ( { + method: 'DELETE', + path: `/wp/v2/blocks/${ block.id }?force=true`, + } ) ) + ); +} diff --git a/packages/e2e-test-utils-playwright/src/request-utils/index.ts b/packages/e2e-test-utils-playwright/src/request-utils/index.ts new file mode 100644 index 0000000000000..8f35d0be38de6 --- /dev/null +++ b/packages/e2e-test-utils-playwright/src/request-utils/index.ts @@ -0,0 +1,133 @@ +/** + * External dependencies + */ +import * as fs from 'fs/promises'; +import * as path from 'path'; +import { request } from '@playwright/test'; +import type { APIRequestContext, Cookie } from '@playwright/test'; + +/** + * Internal dependencies + */ +import { WP_ADMIN_USER, WP_BASE_URL } from '../config'; +import type { User } from './login'; +import { login } from './login'; +import { listMedia, uploadMedia, deleteMedia, deleteAllMedia } from './media'; +import { setupRest, rest, getMaxBatchSize, batchRest } from './rest'; +import { getPluginsMap, activatePlugin, deactivatePlugin } from './plugins'; +import { deleteAllTemplates } from './templates'; +import { activateTheme } from './themes'; +import { deleteAllBlocks } from './blocks'; +import { deleteAllPosts } from './posts'; +import { resetPreferences } from './preferences'; +import { deleteAllWidgets, addWidgetBlock } from './widgets'; + +interface StorageState { + cookies: Cookie[]; + nonce: string; + rootURL: string; +} + +class RequestUtils { + request: APIRequestContext; + user: User; + maxBatchSize?: number; + storageState?: StorageState; + storageStatePath?: string; + baseURL?: string; + + pluginsMap: Record< string, string > | null = null; + + static async setup( { + user, + storageStatePath, + baseURL = WP_BASE_URL, + }: { + user?: User; + storageStatePath?: string; + baseURL?: string; + } ) { + let storageState: StorageState | undefined; + if ( storageStatePath ) { + await fs.mkdir( path.dirname( storageStatePath ), { + recursive: true, + } ); + + try { + storageState = JSON.parse( + await fs.readFile( storageStatePath, 'utf-8' ) + ); + } catch ( error ) { + if ( + error instanceof Error && + ( error as NodeJS.ErrnoException ).code === 'ENOENT' + ) { + // Ignore errors if the state is not found. + } else { + throw error; + } + } + } + + const requestContext = await request.newContext( { + baseURL, + storageState: storageState && { + cookies: storageState.cookies, + origins: [], + }, + } ); + + const requestUtils = new RequestUtils( requestContext, { + user, + storageState, + storageStatePath, + baseURL, + } ); + + return requestUtils; + } + + constructor( + requestContext: APIRequestContext, + { + user = WP_ADMIN_USER, + storageState, + storageStatePath, + baseURL = WP_BASE_URL, + }: { + user?: User; + storageState?: StorageState; + storageStatePath?: string; + baseURL?: string; + } = {} + ) { + this.user = user; + this.request = requestContext; + this.storageStatePath = storageStatePath; + this.storageState = storageState; + this.baseURL = baseURL; + } + + login = login; + setupRest = setupRest; + rest = rest; + getMaxBatchSize = getMaxBatchSize; + batchRest = batchRest; + getPluginsMap = getPluginsMap; + activatePlugin = activatePlugin; + deactivatePlugin = deactivatePlugin; + activateTheme = activateTheme; + deleteAllBlocks = deleteAllBlocks; + deleteAllPosts = deleteAllPosts; + deleteAllWidgets = deleteAllWidgets; + addWidgetBlock = addWidgetBlock; + deleteAllTemplates = deleteAllTemplates; + resetPreferences = resetPreferences; + listMedia = listMedia; + uploadMedia = uploadMedia; + deleteMedia = deleteMedia; + deleteAllMedia = deleteAllMedia; +} + +export type { StorageState }; +export { RequestUtils }; diff --git a/packages/e2e-test-utils-playwright/src/request-utils/login.ts b/packages/e2e-test-utils-playwright/src/request-utils/login.ts new file mode 100644 index 0000000000000..de8727385161c --- /dev/null +++ b/packages/e2e-test-utils-playwright/src/request-utils/login.ts @@ -0,0 +1,34 @@ +/** + * Internal dependencies + */ +import type { RequestUtils } from './index'; + +export interface User { + username: string; + password: string; +} + +async function login( this: RequestUtils, user: User = this.user ) { + // Login to admin using request context. + let response = await this.request.post( '/wp-login.php', { + failOnStatusCode: true, + form: { + log: user.username, + pwd: user.password, + }, + } ); + await response.dispose(); + + // Get the nonce. + response = await this.request.get( + '/wp-admin/admin-ajax.php?action=rest-nonce', + { + failOnStatusCode: true, + } + ); + const nonce = await response.text(); + + return nonce; +} + +export { login }; diff --git a/packages/e2e-test-utils-playwright/src/request-utils/media.ts b/packages/e2e-test-utils-playwright/src/request-utils/media.ts new file mode 100644 index 0000000000000..a93f4afd09503 --- /dev/null +++ b/packages/e2e-test-utils-playwright/src/request-utils/media.ts @@ -0,0 +1,102 @@ +/** + * External dependencies + */ +import * as fs from 'fs'; + +/** + * Internal dependencies + */ +import type { RequestUtils } from './index'; + +interface Media { + id: number; + title: { + raw: string; + rendered: string; + }; + source_url: string; + slug: string; + alt_text: string; + caption: { rendered: string }; + link: string; +} + +/** + * List all media files. + * + * @see https://developer.wordpress.org/rest-api/reference/media/#list-media + * @param this + */ +async function listMedia( this: RequestUtils ) { + const response = await this.rest< Media[] >( { + method: 'GET', + path: '/wp/v2/media', + params: { + per_page: 100, + }, + } ); + + return response; +} + +/** + * Upload a media file. + * + * @see https://developer.wordpress.org/rest-api/reference/media/#create-a-media-item + * @param this + * @param filePathOrData The path or data of the file being uploaded. + */ +async function uploadMedia( + this: RequestUtils, + filePathOrData: string | fs.ReadStream +) { + const file = + typeof filePathOrData === 'string' + ? fs.createReadStream( filePathOrData ) + : filePathOrData; + + const response = await this.rest< Media >( { + method: 'POST', + path: '/wp/v2/media', + multipart: { + file, + }, + } ); + + return response; +} + +/** + * delete a media file. + * + * @see https://developer.wordpress.org/rest-api/reference/media/#delete-a-media-item + * @param this + * @param mediaId The ID of the media file. + */ +async function deleteMedia( this: RequestUtils, mediaId: number ) { + const response = await this.rest( { + method: 'DELETE', + path: `/wp/v2/media/${ mediaId }`, + params: { force: true }, + } ); + + return response; +} + +/** + * delete all media files. + * + * @param this + */ +async function deleteAllMedia( this: RequestUtils ) { + const files = await this.listMedia(); + + // The media endpoint doesn't support batch request yet. + const responses = await Promise.all( + files.map( ( media ) => this.deleteMedia( media.id ) ) + ); + + return responses; +} + +export { listMedia, uploadMedia, deleteMedia, deleteAllMedia }; diff --git a/packages/e2e-test-utils-playwright/src/request-utils/plugins.ts b/packages/e2e-test-utils-playwright/src/request-utils/plugins.ts new file mode 100644 index 0000000000000..6f986858dde42 --- /dev/null +++ b/packages/e2e-test-utils-playwright/src/request-utils/plugins.ts @@ -0,0 +1,77 @@ +/** + * External dependencies + */ +import { kebabCase } from 'lodash'; + +/** + * Internal dependencies + */ +import type { RequestUtils } from './index'; + +/** + * Fetch the plugins from API and cache them in memory, + * since they are unlikely to change during testing. + * + * @param {} this RequestUtils. + * @param {} [forceRefetch] Force refetch the installed plugins to update the cache. + */ +async function getPluginsMap( this: RequestUtils, forceRefetch = false ) { + if ( ! forceRefetch && this.pluginsMap ) { + return this.pluginsMap; + } + + const plugins = await this.rest( { + path: '/wp/v2/plugins', + } ); + this.pluginsMap = {}; + for ( const plugin of plugins ) { + // Ideally, we should be using sanitize_title() in PHP rather than kebabCase(), + // but we don't have the exact port of it in JS. + this.pluginsMap[ kebabCase( plugin.name ) ] = plugin.plugin; + } + return this.pluginsMap; +} + +/** + * Activates an installed plugin. + * + * @param {this} this RequestUtils. + * @param {string} slug Plugin slug. + */ +async function activatePlugin( this: RequestUtils, slug: string ) { + const pluginsMap = await this.getPluginsMap(); + const plugin = pluginsMap[ slug ]; + + if ( ! plugin ) { + throw new Error( `The plugin "${ slug }" isn't installed` ); + } + + await this.rest( { + method: 'PUT', + path: `/wp/v2/plugins/${ plugin }`, + data: { status: 'active' }, + } ); +} + +/** + * Deactivates an active plugin. + * + * @param {this} this RequestUtils. + * @param {string} slug Plugin slug. + */ +async function deactivatePlugin( this: RequestUtils, slug: string ) { + const pluginsMap = await this.getPluginsMap(); + const plugin = pluginsMap[ slug ]; + + if ( ! plugin ) { + throw new Error( `The plugin "${ slug }" isn't installed` ); + } + + await this.rest( { + method: 'PUT', + path: `/wp/v2/plugins/${ plugin }`, + data: { status: 'inactive' }, + } ); +} + +export { getPluginsMap, activatePlugin, deactivatePlugin }; diff --git a/packages/e2e-test-utils-playwright/src/request-utils/posts.js b/packages/e2e-test-utils-playwright/src/request-utils/posts.js new file mode 100644 index 0000000000000..4b3d7bbc44400 --- /dev/null +++ b/packages/e2e-test-utils-playwright/src/request-utils/posts.js @@ -0,0 +1,32 @@ +/** + * Delete all posts using REST API. + * + * @this {import('./index').RequestUtils} + */ +export async function deleteAllPosts() { + // List all posts. + // https://developer.wordpress.org/rest-api/reference/posts/#list-posts + const posts = await this.rest( { + path: '/wp/v2/posts', + params: { + per_page: 100, + // All possible statuses. + status: 'publish,future,draft,pending,private,trash', + }, + } ); + + // Delete all posts one by one. + // https://developer.wordpress.org/rest-api/reference/posts/#delete-a-post + // "/wp/v2/posts" not yet supports batch requests. + await Promise.all( + posts.map( ( post ) => + this.rest( { + method: 'DELETE', + path: `/wp/v2/posts/${ post.id }`, + params: { + force: true, + }, + } ) + ) + ); +} diff --git a/packages/e2e-test-utils-playwright/src/request-utils/preferences.ts b/packages/e2e-test-utils-playwright/src/request-utils/preferences.ts new file mode 100644 index 0000000000000..9696803a6beab --- /dev/null +++ b/packages/e2e-test-utils-playwright/src/request-utils/preferences.ts @@ -0,0 +1,21 @@ +/** + * Internal dependencies + */ +import type { RequestUtils } from './index'; + +/** + * Reset user preferences + * + * @param {this} this Request utils. + */ +export async function resetPreferences( this: RequestUtils ) { + await this.rest( { + path: '/wp/v2/users/me', + method: 'PUT', + data: { + meta: { + persisted_preferences: {}, + }, + }, + } ); +} diff --git a/packages/e2e-test-utils-playwright/src/request-utils/rest.ts b/packages/e2e-test-utils-playwright/src/request-utils/rest.ts new file mode 100644 index 0000000000000..3cd5814f513f3 --- /dev/null +++ b/packages/e2e-test-utils-playwright/src/request-utils/rest.ts @@ -0,0 +1,190 @@ +/** + * External dependencies + */ +import * as fs from 'fs/promises'; +import { dirname } from 'path'; +import type { APIRequestContext } from '@playwright/test'; +import { chunk } from 'lodash'; + +/** + * Internal dependencies + */ +import { WP_BASE_URL } from '../config'; +import type { RequestUtils, StorageState } from './index'; + +async function getAPIRootURL( request: APIRequestContext ) { + // Discover the API root url using link header. + // See https://developer.wordpress.org/rest-api/using-the-rest-api/discovery/#link-header + const response = await request.head( WP_BASE_URL ); + const links = response.headers().link; + const restLink = links?.match( /<([^>]+)>; rel="https:\/\/api\.w\.org\/"/ ); + + if ( ! restLink ) { + throw new Error( `Failed to discover REST API endpoint. + Link header: ${ links }` ); + } + + const [ , rootURL ] = restLink; + + return rootURL; +} + +async function setupRest( this: RequestUtils ): Promise< StorageState > { + const [ nonce, rootURL ] = await Promise.all( [ + this.login(), + getAPIRootURL( this.request ), + ] ); + + const { cookies } = await this.request.storageState(); + + const storageState: StorageState = { + cookies, + nonce, + rootURL, + }; + + if ( this.storageStatePath ) { + await fs.mkdir( dirname( this.storageStatePath ), { recursive: true } ); + await fs.writeFile( + this.storageStatePath, + JSON.stringify( storageState ), + 'utf-8' + ); + } + + this.storageState = storageState; + + return storageState; +} + +type RequestFetchOptions = Exclude< + Parameters< APIRequestContext[ 'fetch' ] >[ 1 ], + undefined +>; +interface RestOptions extends RequestFetchOptions { + path: string; +} + +async function rest< RestResponse = any >( + this: RequestUtils, + options: RestOptions +): Promise< RestResponse > { + const { path, ...fetchOptions } = options; + + if ( ! path ) { + throw new Error( '"path" is required to make a REST call' ); + } + + if ( ! this.storageState?.nonce || ! this.storageState?.rootURL ) { + await this.setupRest(); + } + + const relativePath = path.startsWith( '/' ) ? path.slice( 1 ) : path; + + const url = this.storageState!.rootURL + relativePath; + + try { + const response = await this.request.fetch( url, { + ...fetchOptions, + failOnStatusCode: false, + headers: { + 'X-WP-Nonce': this.storageState!.nonce, + ...( fetchOptions.headers || {} ), + }, + } ); + const json: RestResponse = await response.json(); + + if ( ! response.ok() ) { + throw json; + } + + return json; + } catch ( error ) { + // Nonce in invalid, retry again with a renewed nonce. + if ( + typeof error === 'object' && + error !== null && + Object.prototype.hasOwnProperty.call( error, 'code' ) && + ( error as { code: string } ).code === 'rest_cookie_invalid_nonce' + ) { + await this.setupRest(); + + return this.rest( options ); + } + + throw error; + } +} + +/** + * Get the maximum batch size for the REST API. + * + * @param {} this RequestUtils. + * @param {} forceRefetch Force revalidate the cached max batch size. + */ +async function getMaxBatchSize( this: RequestUtils, forceRefetch = false ) { + if ( ! forceRefetch && this.maxBatchSize ) { + return this.maxBatchSize; + } + + const response = await this.rest< { + endpoints: { + args: { + requests: { + maxItems: number; + }; + }; + }[]; + } >( { + method: 'OPTIONS', + path: '/batch/v1', + } ); + this.maxBatchSize = response.endpoints[ 0 ].args.requests.maxItems; + return this.maxBatchSize; +} + +interface BatchRequest { + method?: string; + path: string; + headers?: Record< string, string | string[] >; + body?: any; +} + +async function batchRest< BatchResponse >( + this: RequestUtils, + requests: BatchRequest[] +): Promise< BatchResponse[] > { + const maxBatchSize = await this.getMaxBatchSize(); + + if ( requests.length > maxBatchSize ) { + const chunks = chunk( requests, maxBatchSize ); + + const chunkResponses = await Promise.all( + chunks.map( ( chunkRequests ) => + this.batchRest< BatchResponse >( chunkRequests ) + ) + ); + + return chunkResponses.flat(); + } + + const batchResponses = await this.rest< { + failed?: string; + responses: BatchResponse[]; + } >( { + method: 'POST', + path: '/batch/v1', + data: { + requests, + validation: 'require-all-validate', + }, + } ); + + if ( batchResponses.failed ) { + throw batchResponses; + } + + return batchResponses.responses; +} + +export { setupRest, rest, getMaxBatchSize, batchRest }; diff --git a/packages/e2e-test-utils-playwright/src/request-utils/templates.ts b/packages/e2e-test-utils-playwright/src/request-utils/templates.ts new file mode 100644 index 0000000000000..1d9fdd9383300 --- /dev/null +++ b/packages/e2e-test-utils-playwright/src/request-utils/templates.ts @@ -0,0 +1,66 @@ +/** + * Internal dependencies + */ +import type { RequestUtils } from './index'; + +type TemplateType = 'wp_template' | 'wp_template_part'; + +interface Template { + wp_id: number; + id: string; +} + +const PATH_MAPPING = { + wp_template: '/wp/v2/templates', + wp_template_part: '/wp/v2/template-parts', +}; + +/** + * Delete all the templates of given type. + * + * @param this + * @param type - Template type to delete. + */ +async function deleteAllTemplates( this: RequestUtils, type: TemplateType ) { + const path = PATH_MAPPING[ type ]; + + if ( ! path ) { + throw new Error( `Unsupported template type: ${ type }.` ); + } + + const templates = await this.rest< Template[] >( { path } ); + + for ( const template of templates ) { + if ( ! template?.id || ! template?.wp_id ) { + continue; + } + + let response; + + try { + response = await this.rest( { + method: 'DELETE', + path: `${ path }/${ template.id }`, + params: { force: true }, + } ); + } catch ( responseError ) { + // Disable reason - the error provides valuable feedback about issues with tests. + // eslint-disable-next-line no-console + console.warn( + `deleteAllTemplates failed to delete template (id: ${ template.wp_id }) with the following error`, + responseError + ); + } + + if ( ! response.deleted ) { + // Disable reason - the error provides valuable feedback about issues with tests. + // eslint-disable-next-line no-console + console.warn( + `deleteAllTemplates failed to delete template (id: ${ template.wp_id }) with the following response`, + response + ); + } + } +} + +export { deleteAllTemplates }; diff --git a/packages/e2e-test-utils-playwright/src/request-utils/themes.ts b/packages/e2e-test-utils-playwright/src/request-utils/themes.ts new file mode 100644 index 0000000000000..1bbb7fb410b49 --- /dev/null +++ b/packages/e2e-test-utils-playwright/src/request-utils/themes.ts @@ -0,0 +1,39 @@ +/** + * Internal dependencies + */ +import type { RequestUtils } from './index'; +import { WP_BASE_URL } from '../config'; + +const THEMES_URL = new URL( '/wp-admin/themes.php', WP_BASE_URL ).href; + +async function activateTheme( + this: RequestUtils, + themeSlug: string +): Promise< void > { + let response = await this.request.get( THEMES_URL ); + const html = await response.text(); + const matchGroup = html.match( + new RegExp( + `action=activate&stylesheet=${ themeSlug }&_wpnonce=[a-z0-9]+` + ) + ); + + if ( ! matchGroup ) { + if ( html.includes( `data-slug="${ themeSlug }"` ) ) { + // The theme is already activated. + return; + } + + throw new Error( `The theme "${ themeSlug }" is not installed` ); + } + + const [ activateQuery ] = matchGroup; + const activateLink = + THEMES_URL + `?${ activateQuery }`.replace( /&/g, '&' ); + + response = await this.request.get( activateLink ); + + await response.dispose(); +} + +export { activateTheme }; diff --git a/packages/e2e-test-utils-playwright/src/request-utils/widgets.js b/packages/e2e-test-utils-playwright/src/request-utils/widgets.js new file mode 100644 index 0000000000000..fe62bcabda9b4 --- /dev/null +++ b/packages/e2e-test-utils-playwright/src/request-utils/widgets.js @@ -0,0 +1,68 @@ +/** + * Delete all the widgets in the widgets screen. + * + * @this {import('./index').RequestUtils} + */ +export async function deleteAllWidgets() { + const [ widgets, sidebars ] = await Promise.all( [ + this.rest( { path: '/wp/v2/widgets' } ), + this.rest( { path: '/wp/v2/sidebars' } ), + ] ); + + await this.batchRest( + widgets.map( ( widget ) => ( { + method: 'DELETE', + path: `/wp/v2/widgets/${ widget.id }?force=true`, + } ) ) + ); + + // The endpoint doesn't support batch requests yet. + await Promise.all( + sidebars.map( ( sidebar ) => + this.rest( { + method: 'POST', + path: `/wp/v2/sidebars/${ sidebar.id }`, + data: { id: sidebar.id, widgets: [] }, + } ) + ) + ); +} + +/** + * Add a widget block to the widget area. + * + * @this {import('./index').RequestUtils} + * @param {string} serializedBlock The serialized content of the inserted block HTML. + * @param {string} widgetAreaId The ID of the widget area. + */ +export async function addWidgetBlock( serializedBlock, widgetAreaId ) { + const { id: blockId } = await this.rest( { + method: 'POST', + path: '/wp/v2/widgets', + data: { + id_base: 'block', + sidebar: widgetAreaId, + instance: { + raw: { content: serializedBlock }, + }, + }, + } ); + + const { widgets } = await this.rest( { + path: `/wp/v2/sidebars/${ widgetAreaId }`, + } ); + + const updatedWidgets = new Set( widgets ); + // Remove duplicate. + updatedWidgets.delete( blockId ); + // Add to last block. + updatedWidgets.add( blockId ); + + await this.rest( { + method: 'PUT', + path: `/wp/v2/sidebars/${ widgetAreaId }`, + data: { + widgets: [ ...updatedWidgets ], + }, + } ); +} diff --git a/packages/e2e-test-utils-playwright/src/test.ts b/packages/e2e-test-utils-playwright/src/test.ts new file mode 100644 index 0000000000000..22ccf83ff41fc --- /dev/null +++ b/packages/e2e-test-utils-playwright/src/test.ts @@ -0,0 +1,169 @@ +/** + * External dependencies + */ +import * as path from 'path'; +import { test as base, expect } from '@playwright/test'; +import type { ConsoleMessage } from '@playwright/test'; + +/** + * Internal dependencies + */ +import { Admin, Editor, PageUtils, RequestUtils } from './index'; + +const STORAGE_STATE_PATH = + process.env.STORAGE_STATE_PATH || + path.join( process.cwd(), 'artifacts/storage-states/admin.json' ); + +/** + * Set of console logging types observed to protect against unexpected yet + * handled (i.e. not catastrophic) errors or warnings. Each key corresponds + * to the Playwright ConsoleMessage type, its value the corresponding function + * on the console global object. + */ +const OBSERVED_CONSOLE_MESSAGE_TYPES = [ 'warn', 'error' ] as const; + +/** + * Adds a page event handler to emit uncaught exception to process if one of + * the observed console logging types is encountered. + * + * @param message The console message. + */ +function observeConsoleLogging( message: ConsoleMessage ) { + const type = message.type(); + if ( + ! OBSERVED_CONSOLE_MESSAGE_TYPES.includes( + type as typeof OBSERVED_CONSOLE_MESSAGE_TYPES[ number ] + ) + ) { + return; + } + + const text = message.text(); + + // An exception is made for _blanket_ deprecation warnings: Those + // which log regardless of whether a deprecated feature is in use. + if ( text.includes( 'This is a global warning' ) ) { + return; + } + + // A chrome advisory warning about SameSite cookies is informational + // about future changes, tracked separately for improvement in core. + // + // See: https://core.trac.wordpress.org/ticket/37000 + // See: https://www.chromestatus.com/feature/5088147346030592 + // See: https://www.chromestatus.com/feature/5633521622188032 + if ( text.includes( 'A cookie associated with a cross-site resource' ) ) { + return; + } + + // Viewing posts on the front end can result in this error, which + // has nothing to do with Gutenberg. + if ( text.includes( 'net::ERR_UNKNOWN_URL_SCHEME' ) ) { + return; + } + + // TODO: Not implemented yet. + // Network errors are ignored only if we are intentionally testing + // offline mode. + // if ( + // text.includes( 'net::ERR_INTERNET_DISCONNECTED' ) && + // isOfflineMode() + // ) { + // return; + // } + + // As of WordPress 5.3.2 in Chrome 79, navigating to the block editor + // (Posts > Add New) will display a console warning about + // non - unique IDs. + // See: https://core.trac.wordpress.org/ticket/23165 + if ( text.includes( 'elements with non-unique id #_wpnonce' ) ) { + return; + } + + // Ignore all JQMIGRATE (jQuery migrate) deprecation warnings. + if ( text.includes( 'JQMIGRATE' ) ) { + return; + } + + const logFunction = type as typeof OBSERVED_CONSOLE_MESSAGE_TYPES[ number ]; + + // Disable reason: We intentionally bubble up the console message + // which, unless the test explicitly anticipates the logging via + // @wordpress/jest-console matchers, will cause the intended test + // failure. + + // eslint-disable-next-line no-console + console[ logFunction ]( text ); +} + +const test = base.extend< + { + admin: Admin; + editor: Editor; + pageUtils: PageUtils; + snapshotConfig: void; + }, + { + requestUtils: RequestUtils; + } +>( { + admin: async ( { page, pageUtils }, use ) => { + await use( new Admin( { page, pageUtils } ) ); + }, + editor: async ( { page }, use ) => { + await use( new Editor( { page } ) ); + }, + page: async ( { page }, use ) => { + page.on( 'console', observeConsoleLogging ); + + await use( page ); + + // Clear local storage after each test. + await page.evaluate( () => { + window.localStorage.clear(); + } ); + + await page.close(); + }, + pageUtils: async ( { page }, use ) => { + await use( new PageUtils( { page } ) ); + }, + requestUtils: [ + async ( {}, use, workerInfo ) => { + const requestUtils = await RequestUtils.setup( { + baseURL: workerInfo.project.use.baseURL, + storageStatePath: STORAGE_STATE_PATH, + } ); + + await Promise.all( [ + requestUtils.activateTheme( 'twentytwentyone' ), + requestUtils.deleteAllPosts(), + requestUtils.deleteAllBlocks(), + requestUtils.resetPreferences(), + ] ); + + await use( requestUtils ); + }, + { scope: 'worker' }, + ], + // An automatic fixture to configure snapshot settings globally. + snapshotConfig: [ + async ( {}, use, testInfo ) => { + // A work-around to remove the default snapshot suffix. + // See https://github.com/microsoft/playwright/issues/11134 + testInfo.snapshotSuffix = ''; + // Normalize snapshots into the same `__snapshots__` folder to minimize + // the file name length on Windows. + // See https://github.com/WordPress/gutenberg/issues/40291 + testInfo.snapshotDir = path.join( + path.dirname( testInfo.file ), + '__snapshots__' + ); + + await use(); + }, + { auto: true }, + ], +} ); + +export { test, expect }; diff --git a/packages/e2e-test-utils-playwright/tsconfig.json b/packages/e2e-test-utils-playwright/tsconfig.json new file mode 100644 index 0000000000000..015df344af7e7 --- /dev/null +++ b/packages/e2e-test-utils-playwright/tsconfig.json @@ -0,0 +1,19 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "incremental": false, + "composite": false, + "module": "CommonJS", + "rootDir": "src", + "noEmit": false, + "outDir": "build", + "sourceMap": true, + "declaration": true, + "declarationMap": true, + "declarationDir": "build-types", + "emitDeclarationOnly": false, + "allowJs": true, + "checkJs": false + }, + "include": [ "src/**/*" ] +} diff --git a/packages/e2e-test-utils/CHANGELOG.md b/packages/e2e-test-utils/CHANGELOG.md index 892806746ed16..3d6bab9d935f0 100644 --- a/packages/e2e-test-utils/CHANGELOG.md +++ b/packages/e2e-test-utils/CHANGELOG.md @@ -2,6 +2,42 @@ ## Unreleased +## 7.2.0 (2022-04-08) + +### Enhancement + +- Changed `setOption` to use `options.php`, to allow setting any option (and to be more consistent with `getOption`). [#39502](https://github.com/WordPress/gutenberg/pull/39502) +- Changed `setOption` to return the changed setting's previous value (to make restoring it easier). [#39502](https://github.com/WordPress/gutenberg/pull/39502) +- Added a new `trashAllComments` function. + +## 7.0.0 (2022-03-11) + +### Breaking Changes + +- Updated `clickMenuItem` method to use exact label matching instead of partial [#39274](https://github.com/WordPress/gutenberg/pull/39274). + +### Enhancement + +- The `toggleMoreMenu` and `clickMoreMenuItem` utilities no longer require a second 'context' parameter. + +## 6.0.0 (2022-01-27) + +### Breaking Changes + +- The peer `jest` dependency has been updated from requiring `>=26` to requiring `>=27` (see [Breaking Changes](https://jestjs.io/blog/2021/05/25/jest-27), [#33287](https://github.com/WordPress/gutenberg/pull/33287)). +- The peer `puppeteer` dependency has been replaced with `puppeteer-core` requiring version `>=11` (see [Breaking Changes](https://github.com/puppeteer/puppeteer/releases/tag/v11.0.0), [#36040](https://github.com/WordPress/gutenberg/pull/36040)). + +### New Features + +- Added `createReusableBlock` function to make it easier to create a simple reusable block ([#37333](https://github.com/WordPress/gutenberg/pull/37333)). +- Added `getOption` and `setOption` functions to make it easier to set and reset options such as the site title and site tagline ([#37139](https://github.com/WordPress/gutenberg/pull/37139)). + +## 5.4.6 (2021-11-07) + +### New Features + +- Added `disablePageDialogAccept` - Disable auto-accepting dialogs enabled by `enablePageDialogAccept` [#35828](https://github.com/WordPress/gutenberg/pull/35828). + ## 5.4.0 (2021-07-21) ### New Features diff --git a/packages/e2e-test-utils/README.md b/packages/e2e-test-utils/README.md index 7efb106cca124..47a914b2d816f 100644 --- a/packages/e2e-test-utils/README.md +++ b/packages/e2e-test-utils/README.md @@ -4,6 +4,8 @@ End-To-End (E2E) test utils for WordPress. _It works properly with the minimum version of Gutenberg `9.2.0` or the minimum version of WordPress `5.6.0`._ +**Note that there's currently an ongoing [project](https://github.com/WordPress/gutenberg/issues/38851) to migrate E2E tests to Playwright instead. This package is deprecated and will only accept bug fixes until fully migrated.** + ## Installation Install the module @@ -107,10 +109,26 @@ _Parameters_ - _buttonLabel_ `string`: The label to search the button for. +### clickSiteEditorMenuItem + +Searches for an item in the navigation panel with the label provided and clicks it. + +_Parameters_ + +- _label_ `string`: The label to search the menu item for. + ### closeGlobalBlockInserter Undocumented declaration. +### closeListView + +Closes list view + +### closeSiteEditorNavigationPanel + +Closes the site editor navigation panel if open + ### createEmbeddingMatcher Creates a function to determine if a request is embedding a certain URL. @@ -135,6 +153,15 @@ _Returns_ - `Promise`: Promise that responds to a request with the mock JSON response. +### createMenu + +Create menus and all linked resources for the menu using the REST API. + +_Parameters_ + +- _menu_ `Object`: Rest payload for the menu +- _menuItems_ `?Array`: Data for any menu items to be created. + ### createNewPost Creates new post. @@ -148,6 +175,15 @@ _Parameters_ - _object.excerpt_ `[string]`: Excerpt of the new post. - _object.showWelcomeGuide_ `[boolean]`: Whether to show the welcome guide. +### createReusableBlock + +Creates a simple reusable block with a paragraph block. + +_Parameters_ + +- _content_ `string`: Paragraph block's content +- _title_ `title`: Reusable block's name. + ### createURL Creates new URL by parsing base URL, WPPath and query string. @@ -197,6 +233,18 @@ _Parameters_ - _slug_ `string`: Plugin slug. +### deleteAllMenus + +Delete all menus using the REST API + +### deleteAllTemplates + +Delete all the templates of given type. + +_Parameters_ + +- _type_ `('wp_template'|'wp_template_part')`: - Template type to delete. + ### deleteAllWidgets Delete all the widgets in the widgets screen. @@ -224,10 +272,18 @@ _Parameters_ Removes the focus loss listener that `enableFocusLossObservation()` adds. +### disablePageDialogAccept + +Disable auto-accepting any dialogs. + ### disablePrePublishChecks Disables Pre-publish checks. +### disableSiteEditorWelcomeGuide + +Skips the welcome guide popping up to first time users of the site editor + ### dragAndResize Clicks an element, drags a particular distance and releases the mouse button. @@ -250,8 +306,7 @@ loss of focus. ### enablePageDialogAccept -Enables even listener which accepts a page dialog which -may appear when navigating away from Gutenberg. +Enables event listener which auto-accepts all dialogs on the page. ### enablePrePublishChecks @@ -335,6 +390,14 @@ _Returns_ - `Promise`: Promise resolving with current post content markup. +### getCurrentSiteEditorContent + +Returns a promise which resolves with the edited post content (HTML string). + +_Returns_ + +- `Promise`: Promise resolving with post content markup. + ### getEditedPostContent Returns a promise which resolves with the edited post content (HTML string). @@ -343,6 +406,30 @@ _Returns_ - `Promise`: Promise resolving with post content markup. +### getListViewBlocks + +Gets all block anchor nodes in the list view that match a given block name label. + +_Parameters_ + +- _blockLabel_ `string`: the label of the block as displayed in the ListView. + +_Returns_ + +- `Promise`: all the blocks anchor nodes matching the lable in the ListView. + +### getOption + +Returns a site option, from the options admin page. + +_Parameters_ + +- _setting_ `string`: The option, used to get the option by id. + +_Returns_ + +- `string`: The value of the option. + ### getPageError Returns a promise resolving to one of either a string or null. A string will @@ -358,6 +445,18 @@ _Returns_ - `Promise`: Promise resolving to a string or null, depending whether a page error is present. +### getSiteEditorMenuItem + +Searches for an item in the site editor navigation menu with the provided label. + +_Parameters_ + +- _label_ `string`: The label to search the menu item for. + +_Returns_ + +- `Promise`: The menu item handle or `null` + ### hasBlockSwitcher Returns a boolean indicating if the current selected block has a block switcher or not. @@ -448,6 +547,17 @@ _Returns_ Undocumented declaration. +### isSiteEditorRoot + +Returns `true` if in the site editor navigation root + +Checks whether the “Back to dashboard” button is visible. If +not in the root, a “Back” button would be visible instead. + +_Returns_ + +- `Promise`: Whether it currently is the navigation root or not + ### isThemeInstalled Checks whether a theme exists on the site. @@ -484,6 +594,14 @@ _Returns_ - `Promise`: Promise that uses `mockCheck` to see if a request should be mocked with `mock`, and optionally transforms the response with `responseObjectTransform`. +### navigateSiteEditorBack + +Navigates the site editor back + +### navigateSiteEditorBackToRoot + +Goes back until it gets to the root + ### openDocumentSettingsSidebar Clicks on the button in the header which opens Document Settings sidebar when it is closed. @@ -492,6 +610,18 @@ Clicks on the button in the header which opens Document Settings sidebar when it Opens the global block inserter. +### openGlobalStylesPanel + +Opens a global styles panel. + +_Parameters_ + +- _panelName_ `string`: Name of the panel that is going to be opened. + +### openListView + +Opens list view + ### openPreviewPage Opens the preview page of an edited post. @@ -504,10 +634,22 @@ _Returns_ - `Page`: preview page. +### openPreviousGlobalStylesPanel + +Opens the previous global styles panel. + ### openPublishPanel Opens the publish panel. +### openSiteEditorNavigationPanel + +Opens the site editor navigation panel if closed + +### openTypographyToolsPanelMenu + +Opens the Typography tools panel menu provided via block supports. + ### pressKeyTimes Presses the given keyboard key a number of times in sequence. @@ -545,6 +687,10 @@ _Returns_ - `Promise`: Promise resolving when publish is complete. +### resetPreferences + +Clears all user meta preferences. + ### saveDraft Saves the post as a draft, resolving once the request is complete (once the @@ -605,6 +751,19 @@ _Parameters_ - _$1.plainText_ `string`: Plain text to set. - _$1.html_ `string`: HTML to set. +### setOption + +Sets a site option, from the options-general admin page. + +_Parameters_ + +- _setting_ `string`: The option, used to get the option by id. +- _value_ `string`: The value to set the option to. + +_Returns_ + +- `string`: The previous value of the option. + ### setPostContent Sets code editor content @@ -653,6 +812,14 @@ _Parameters_ The block toolbar is not always visible while typing. Call this function to reveal it. +### siteEditorNavigateSequence + +Navigates through a sequence of links in the site editor navigation panel + +_Parameters_ + +- _labels_ `string[] | string`: Labels to navigate through + ### switchEditorModeTo Switches editor mode. @@ -675,10 +842,18 @@ running the tests as (if we're not already that user). Toggles the global inserter. +### toggleGlobalStyles + +Toggles the global styles sidebar (opens it if closed and closes it if open). + ### toggleMoreMenu Toggles the More Menu. +_Parameters_ + +- _waitFor_ `['open' | 'close']`: Whether it should wait for the menu to open or close. If `undefined` it won't wait for anything. + ### toggleOfflineMode Undocumented declaration. @@ -701,6 +876,14 @@ _Parameters_ - _name_ `string`: Block name. +### trashAllComments + +Navigates to the comments listing screen and bulk-trashes any comments which exist. + +_Returns_ + +- `Promise`: Promise resolving once comments have been trashed. + ### trashAllPosts Navigates to the post listing screen and bulk-trashes any posts which exist. @@ -731,6 +914,21 @@ _Parameters_ - _adminPath_ `string`: String to be serialized as pathname. - _query_ `string`: String to be serialized as query portion of URL. +### visitSiteEditor + +Visits the Site Editor main page + +By default, it also skips the welcome guide. The option can be disabled if need be. + +_Related_ + +- disableSiteEditorWelcomeGuide + +_Parameters_ + +- _query_ `string`: String to be serialized as query portion of URL. +- _skipWelcomeGuide_ `[boolean]`: Whether to skip the welcome guide as part of the navigation. + ### waitForWindowDimensions Function that waits until the page viewport has the required dimensions. @@ -772,4 +970,10 @@ _Returns_ -

Code is Poetry.

+## Contributing to this package + +This is an individual package that's part of the Gutenberg project. The project is organized as a monorepo. It's made up of multiple self-contained software packages, each with a specific purpose. The packages in this monorepo are published to [npm](https://www.npmjs.com/) and used by [WordPress](https://make.wordpress.org/core/) as well as other software projects. + +To find out more about contributing to this package or Gutenberg as a whole, please read the project's main [contributor guide](https://github.com/WordPress/gutenberg/tree/HEAD/CONTRIBUTING.md). + +

Code is Poetry.

diff --git a/packages/e2e-test-utils/package.json b/packages/e2e-test-utils/package.json index 84389ab9c0a4b..b113a39a7796b 100644 --- a/packages/e2e-test-utils/package.json +++ b/packages/e2e-test-utils/package.json @@ -1,6 +1,6 @@ { "name": "@wordpress/e2e-test-utils", - "version": "5.4.1", + "version": "7.5.0", "description": "End-To-End (E2E) test utils for WordPress.", "author": "The WordPress Contributors", "license": "GPL-2.0-or-later", @@ -29,15 +29,17 @@ "main": "build/index.js", "module": "build-module/index.js", "dependencies": { - "@babel/runtime": "^7.13.10", + "@babel/runtime": "^7.16.0", + "@wordpress/api-fetch": "file:../api-fetch", "@wordpress/keycodes": "file:../keycodes", "@wordpress/url": "file:../url", + "form-data": "^4.0.0", "lodash": "^4.17.21", "node-fetch": "^2.6.0" }, "peerDependencies": { - "jest": ">=26", - "puppeteer": ">=1.19.0" + "jest": ">=27", + "puppeteer-core": ">=11" }, "publishConfig": { "access": "public" diff --git a/packages/e2e-test-utils/src/activate-theme.js b/packages/e2e-test-utils/src/activate-theme.js index 5c3c20226297f..038f6ebe31071 100644 --- a/packages/e2e-test-utils/src/activate-theme.js +++ b/packages/e2e-test-utils/src/activate-theme.js @@ -18,7 +18,7 @@ export async function activateTheme( slug ) { `div[data-slug="${ slug }"] .button.activate` ); if ( ! activateButton ) { - switchUserToTest(); + await switchUserToTest(); return; } diff --git a/packages/e2e-test-utils/src/auto-accept-page-dialogs.js b/packages/e2e-test-utils/src/auto-accept-page-dialogs.js new file mode 100644 index 0000000000000..2f6a890239337 --- /dev/null +++ b/packages/e2e-test-utils/src/auto-accept-page-dialogs.js @@ -0,0 +1,22 @@ +/** @typedef {import('puppeteer-core').Dialog} Dialog */ + +/** + * Callback which automatically accepts dialog. + * + * @param {Dialog} dialog Dialog object dispatched by page via the 'dialog' event. + */ +async function acceptPageDialog( dialog ) { + await dialog.accept(); +} +/** + * Enables event listener which auto-accepts all dialogs on the page. + */ +export function enablePageDialogAccept() { + page.on( 'dialog', acceptPageDialog ); +} +/** + * Disable auto-accepting any dialogs. + */ +export function disablePageDialogAccept() { + page.off( 'dialog', acceptPageDialog ); +} diff --git a/packages/e2e-test-utils/src/click-block-appender.js b/packages/e2e-test-utils/src/click-block-appender.js index 26e8b9162dcb4..caae3dbf11dc7 100644 --- a/packages/e2e-test-utils/src/click-block-appender.js +++ b/packages/e2e-test-utils/src/click-block-appender.js @@ -2,8 +2,13 @@ * Clicks the default block appender. */ export async function clickBlockAppender() { + // The block appender is only visible when there's no selection. + await page.evaluate( () => + window.wp.data.dispatch( 'core/block-editor' ).clearSelectedBlock() + ); const appender = await page.waitForSelector( '.block-editor-default-block-appender__content' ); await appender.click(); + await page.evaluate( () => new Promise( window.requestIdleCallback ) ); } diff --git a/packages/e2e-test-utils/src/click-menu-item.js b/packages/e2e-test-utils/src/click-menu-item.js index e4a29eacf39e6..1bf34fda50c51 100644 --- a/packages/e2e-test-utils/src/click-menu-item.js +++ b/packages/e2e-test-utils/src/click-menu-item.js @@ -10,9 +10,7 @@ import { first } from 'lodash'; */ export async function clickMenuItem( label ) { const elementToClick = first( - await page.$x( - `//div[@role="menu"]//span[contains(concat(" ", @class, " "), " components-menu-item__item ")][contains(text(), "${ label }")]` - ) + await page.$x( `//*[@role="menu"]//*[text()="${ label }"]` ) ); await elementToClick.click(); } diff --git a/packages/e2e-test-utils/src/click-on-more-menu-item.js b/packages/e2e-test-utils/src/click-on-more-menu-item.js index 04d3709ac0e19..840cd385bb85b 100644 --- a/packages/e2e-test-utils/src/click-on-more-menu-item.js +++ b/packages/e2e-test-utils/src/click-on-more-menu-item.js @@ -14,9 +14,10 @@ import { toggleMoreMenu } from './toggle-more-menu'; * @param {string} buttonLabel The label to search the button for. */ export async function clickOnMoreMenuItem( buttonLabel ) { - await toggleMoreMenu(); + await toggleMoreMenu( 'open' ); const moreMenuContainerSelector = - '//*[contains(concat(" ", @class, " "), " edit-post-more-menu__content ")]'; + '//*[contains(concat(" ", @class, " "), " interface-more-menu-dropdown__content ")]'; + const elementToClick = first( await page.$x( `${ moreMenuContainerSelector }//span[contains(concat(" ", @class, " "), " components-menu-item__item ")][contains(text(), "${ buttonLabel }")]` diff --git a/packages/e2e-test-utils/src/create-reusable-block.js b/packages/e2e-test-utils/src/create-reusable-block.js new file mode 100644 index 0000000000000..74276d2be6431 --- /dev/null +++ b/packages/e2e-test-utils/src/create-reusable-block.js @@ -0,0 +1,40 @@ +/** + * Internal dependencies + */ +import { insertBlock } from './inserter'; +import { clickMenuItem } from './click-menu-item'; +import { clickBlockToolbarButton } from './click-block-toolbar-button'; + +/** + * Creates a simple reusable block with a paragraph block. + * + * @param {string} content Paragraph block's content + * @param {title} title Reusable block's name. + */ +export const createReusableBlock = async ( content, title ) => { + const reusableBlockNameInputSelector = + '.reusable-blocks-menu-items__convert-modal .components-text-control__input'; + // Insert a paragraph block + await insertBlock( 'Paragraph' ); + await page.keyboard.type( content ); + + await clickBlockToolbarButton( 'Options' ); + await clickMenuItem( 'Add to Reusable blocks' ); + const nameInput = await page.waitForSelector( + reusableBlockNameInputSelector + ); + await nameInput.click(); + await page.keyboard.type( title ); + await page.keyboard.press( 'Enter' ); + + // Wait for creation to finish + await page.waitForXPath( + '//*[contains(@class, "components-snackbar")]/*[text()="Reusable block created."]' + ); + + // Check that we have a reusable block on the page + const block = await page.waitForSelector( + '.block-editor-block-list__block[data-type="core/block"]' + ); + expect( block ).not.toBeNull(); +}; diff --git a/packages/e2e-test-utils/src/create-user.js b/packages/e2e-test-utils/src/create-user.js index 63fdcee42ca57..e26ebbc8dc92a 100644 --- a/packages/e2e-test-utils/src/create-user.js +++ b/packages/e2e-test-utils/src/create-user.js @@ -27,14 +27,30 @@ export async function createUser( ) { await switchUserToAdmin(); await visitAdminPage( 'user-new.php' ); - - await page.type( '#user_login', username ); - await page.type( '#email', snakeCase( username ) + '@example.com' ); + await page.waitForSelector( '#user_login', { visible: true } ); + await page.$eval( + '#user_login', + ( el, value ) => ( el.value = value ), + username + ); + await page.$eval( + '#email', + ( el, value ) => ( el.value = value ), + snakeCase( username ) + '@example.com' + ); if ( firstName ) { - await page.type( '#first_name', firstName ); + await page.$eval( + '#first_name', + ( el, value ) => ( el.value = value ), + firstName + ); } if ( lastName ) { - await page.type( '#last_name', lastName ); + await page.$eval( + '#last_name', + ( el, value ) => ( el.value = value ), + lastName + ); } if ( role ) { await page.select( '#role', role ); diff --git a/packages/e2e-test-utils/src/delete-user.js b/packages/e2e-test-utils/src/delete-user.js index 5bea271bbfc7a..260cba467bfa9 100644 --- a/packages/e2e-test-utils/src/delete-user.js +++ b/packages/e2e-test-utils/src/delete-user.js @@ -23,7 +23,7 @@ export async function deleteUser( username ) { return; } - // Focus to unveil actions + // Focus to unveil actions. await userLink.focus(); // Tab twice to focus 'Delete' @@ -43,7 +43,7 @@ export async function deleteUser( username ) { await deleteContentRadioButton.click(); } - // Confirm + // Confirm. await Promise.all( [ page.click( 'input#submit' ), page.waitForNavigation( { waitUntil: 'networkidle0' } ), diff --git a/packages/e2e-test-utils/src/disable-pre-publish-checks.js b/packages/e2e-test-utils/src/disable-pre-publish-checks.js index 5ced16d0f6a91..2c12a0aaaa99e 100644 --- a/packages/e2e-test-utils/src/disable-pre-publish-checks.js +++ b/packages/e2e-test-utils/src/disable-pre-publish-checks.js @@ -13,5 +13,5 @@ export async function disablePrePublishChecks() { 'Include pre-publish checklist', false ); - await toggleMoreMenu(); + await toggleMoreMenu( 'close' ); } diff --git a/packages/e2e-test-utils/src/enable-page-dialog-accept.js b/packages/e2e-test-utils/src/enable-page-dialog-accept.js deleted file mode 100644 index d09fc7f5e046d..0000000000000 --- a/packages/e2e-test-utils/src/enable-page-dialog-accept.js +++ /dev/null @@ -1,17 +0,0 @@ -/** @typedef {import('puppeteer').Dialog} Dialog */ - -/** - * Callback which automatically accepts dialog. - * - * @param {Dialog} dialog Dialog object dispatched by page via the 'dialog' event. - */ -async function acceptPageDialog( dialog ) { - await dialog.accept(); -} -/** - * Enables even listener which accepts a page dialog which - * may appear when navigating away from Gutenberg. - */ -export function enablePageDialogAccept() { - page.on( 'dialog', acceptPageDialog ); -} diff --git a/packages/e2e-test-utils/src/enable-pre-publish-checks.js b/packages/e2e-test-utils/src/enable-pre-publish-checks.js index 3dd1b7b13246c..a9c8b572302b1 100644 --- a/packages/e2e-test-utils/src/enable-pre-publish-checks.js +++ b/packages/e2e-test-utils/src/enable-pre-publish-checks.js @@ -13,5 +13,5 @@ export async function enablePrePublishChecks() { 'Include pre-publish checklist', true ); - await toggleMoreMenu(); + await toggleMoreMenu( 'close' ); } diff --git a/packages/e2e-test-utils/src/ensure-sidebar-opened.js b/packages/e2e-test-utils/src/ensure-sidebar-opened.js index 124a5e28b7ae9..79ab75bac4f54 100644 --- a/packages/e2e-test-utils/src/ensure-sidebar-opened.js +++ b/packages/e2e-test-utils/src/ensure-sidebar-opened.js @@ -4,14 +4,11 @@ * @return {Promise} Promise resolving once the edit post sidebar is opened. */ export async function ensureSidebarOpened() { - // This try/catch flow relies on the fact that `page.$eval` throws an error - // if the element matching the given selector does not exist. Thus, if an - // error is thrown, it can be inferred that the sidebar is not opened. - try { - return page.$eval( '.edit-post-sidebar', () => {} ); - } catch ( error ) { - return page.click( - '.edit-post-header__settings [aria-label="Settings"]' - ); + const toggleSidebarButton = await page.$( + '.edit-post-header__settings [aria-label="Settings"][aria-expanded="false"]' + ); + + if ( toggleSidebarButton ) { + await toggleSidebarButton.click(); } } diff --git a/packages/e2e-test-utils/src/find-sidebar-panel-toggle-button-with-title.js b/packages/e2e-test-utils/src/find-sidebar-panel-toggle-button-with-title.js index cf9c2e57b9a83..49228f2aede31 100644 --- a/packages/e2e-test-utils/src/find-sidebar-panel-toggle-button-with-title.js +++ b/packages/e2e-test-utils/src/find-sidebar-panel-toggle-button-with-title.js @@ -3,7 +3,7 @@ */ import { first } from 'lodash'; -/** @typedef {import('puppeteer').ElementHandle} ElementHandle */ +/** @typedef {import('puppeteer-core').ElementHandle} ElementHandle */ /** * Finds a sidebar panel with the provided title. diff --git a/packages/e2e-test-utils/src/find-sidebar-panel-with-title.js b/packages/e2e-test-utils/src/find-sidebar-panel-with-title.js index 2b30ccdcb8dc5..9c29081260a00 100644 --- a/packages/e2e-test-utils/src/find-sidebar-panel-with-title.js +++ b/packages/e2e-test-utils/src/find-sidebar-panel-with-title.js @@ -1,4 +1,4 @@ -/** @typedef {import('puppeteer').ElementHandle} ElementHandle */ +/** @typedef {import('puppeteer-core').ElementHandle} ElementHandle */ /** * Finds the button responsible for toggling the sidebar panel with the provided title. diff --git a/packages/e2e-test-utils/src/get-all-block-inserter-item-titles.js b/packages/e2e-test-utils/src/get-all-block-inserter-item-titles.js index 28e31beaec9e1..2f865b7f8822a 100644 --- a/packages/e2e-test-utils/src/get-all-block-inserter-item-titles.js +++ b/packages/e2e-test-utils/src/get-all-block-inserter-item-titles.js @@ -14,7 +14,7 @@ export async function getAllBlockInserterItemTitles() { // Ideally, we shouldn't use a timeout and instead check the browser is idle for // a specific duration, but didn't manage to find a simple way to do that. // eslint-disable-next-line no-restricted-syntax - await page.waitFor( 500 ); + await page.waitForTimeout( 500 ); const inserterItemTitles = await page.evaluate( () => { return Array.from( diff --git a/packages/e2e-test-utils/src/get-list-view-blocks.js b/packages/e2e-test-utils/src/get-list-view-blocks.js new file mode 100644 index 0000000000000..af1d46ad5273f --- /dev/null +++ b/packages/e2e-test-utils/src/get-list-view-blocks.js @@ -0,0 +1,11 @@ +/** + * Gets all block anchor nodes in the list view that match a given block name label. + * + * @param {string} blockLabel the label of the block as displayed in the ListView. + * @return {Promise} all the blocks anchor nodes matching the lable in the ListView. + */ +export async function getListViewBlocks( blockLabel ) { + return page.$x( + `//table[contains(@aria-label,'Block navigation structure')]//a[span[text()='${ blockLabel }']]` + ); +} diff --git a/packages/e2e-test-utils/src/get-option.js b/packages/e2e-test-utils/src/get-option.js new file mode 100644 index 0000000000000..f8a1f3ff98daf --- /dev/null +++ b/packages/e2e-test-utils/src/get-option.js @@ -0,0 +1,24 @@ +/** + * Internal dependencies + */ +import { switchUserToAdmin } from './switch-user-to-admin'; +import { visitAdminPage } from './visit-admin-page'; +import { switchUserToTest } from './switch-user-to-test'; + +/** + * Returns a site option, from the options admin page. + * + * @param {string} setting The option, used to get the option by id. + * @return {string} The value of the option. + */ +export async function getOption( setting ) { + await switchUserToAdmin(); + await visitAdminPage( 'options.php' ); + + const value = await page.$eval( + `#${ setting }`, + ( element ) => element.value + ); + await switchUserToTest(); + return value; +} diff --git a/packages/e2e-test-utils/src/index.js b/packages/e2e-test-utils/src/index.js index c1e7f7e8b0b27..3543fd3dfebb5 100644 --- a/packages/e2e-test-utils/src/index.js +++ b/packages/e2e-test-utils/src/index.js @@ -1,3 +1,7 @@ +export { + activatePlugin as __experimentalActivatePlugin, + deactivatePlugin as __experimentalDeactivatePlugin, +} from './plugins'; export { activatePlugin } from './activate-plugin'; export { activateTheme } from './activate-theme'; export { arePrePublishChecksEnabled } from './are-pre-publish-checks-enabled'; @@ -11,6 +15,7 @@ export { clickMenuItem } from './click-menu-item'; export { clickOnCloseModalButton } from './click-on-close-modal-button'; export { clickOnMoreMenuItem } from './click-on-more-menu-item'; export { createNewPost } from './create-new-post'; +export { createReusableBlock } from './create-reusable-block'; export { createUser } from './create-user'; export { createURL } from './create-url'; export { deactivatePlugin } from './deactivate-plugin'; @@ -18,7 +23,10 @@ export { deleteTheme } from './delete-theme'; export { deleteUser } from './delete-user'; export { disablePrePublishChecks } from './disable-pre-publish-checks'; export { dragAndResize } from './drag-and-resize'; -export { enablePageDialogAccept } from './enable-page-dialog-accept'; +export { + enablePageDialogAccept, + disablePageDialogAccept, +} from './auto-accept-page-dialogs'; export { enablePrePublishChecks } from './enable-pre-publish-checks'; export { ensureSidebarOpened } from './ensure-sidebar-opened'; export { findSidebarPanelToggleButtonWithTitle } from './find-sidebar-panel-toggle-button-with-title'; @@ -29,8 +37,10 @@ export { getAvailableBlockTransforms } from './get-available-block-transforms'; export { getBlockSetting } from './get-block-setting'; export { getEditedPostContent } from './get-edited-post-content'; export { getCurrentPostContent } from './get-current-post-content'; +export { getListViewBlocks } from './get-list-view-blocks'; export { hasBlockSwitcher } from './has-block-switcher'; export { getPageError } from './get-page-error'; +export { getOption } from './get-option'; export { insertBlock, insertPattern, @@ -48,13 +58,16 @@ export { installTheme } from './install-theme'; export { isCurrentURL } from './is-current-url'; export { isInDefaultBlock } from './is-in-default-block'; export { loginUser } from './login-user'; +export { createMenu, deleteAllMenus } from './menus'; export { enableFocusLossObservation, disableFocusLossObservation, } from './observe-focus-loss'; export { openDocumentSettingsSidebar } from './open-document-settings-sidebar'; export { openPublishPanel } from './open-publish-panel'; +export { openTypographyToolsPanelMenu } from './open-typography-tools-panel-menu'; export { trashAllPosts } from './posts'; +export { resetPreferences } from './preferences'; export { pressKeyTimes } from './press-key-times'; export { pressKeyWithModifier, @@ -65,6 +78,7 @@ export { publishPostWithPrePublishChecksDisabled } from './publish-post-with-pre export { saveDraft } from './save-draft'; export { selectBlockByClientId } from './select-block-by-client-id'; export { setBrowserViewport } from './set-browser-viewport'; +export { setOption } from './set-option'; export { setPostContent } from './set-post-content'; export { switchEditorModeTo } from './switch-editor-mode-to'; export { switchUserToAdmin } from './switch-user-to-admin'; @@ -74,6 +88,7 @@ export { toggleMoreMenu } from './toggle-more-menu'; export { toggleOfflineMode, isOfflineMode } from './offline-mode'; export { togglePreferencesOption } from './toggle-preferences-option'; export { transformBlockTo } from './transform-block-to'; +export { trashAllComments } from './trash-all-comments'; export { uninstallPlugin } from './uninstall-plugin'; export { visitAdminPage } from './visit-admin-page'; export { waitForWindowDimensions } from './wait-for-window-dimensions'; @@ -81,5 +96,27 @@ export { showBlockToolbar } from './show-block-toolbar'; export { openPreviewPage } from './preview'; export { wpDataSelect } from './wp-data-select'; export { deleteAllWidgets } from './widgets'; +export { deleteAllTemplates } from './templates'; +export { + rest as __experimentalRest, + batch as __experimentalBatch, +} from './rest-api'; +export { openListView, closeListView } from './list-view'; +export { + clickSiteEditorMenuItem, + closeSiteEditorNavigationPanel, + disableSiteEditorWelcomeGuide, + getCurrentSiteEditorContent, + getSiteEditorMenuItem, + isSiteEditorRoot, + navigateSiteEditorBack, + navigateSiteEditorBackToRoot, + openSiteEditorNavigationPanel, + siteEditorNavigateSequence, + visitSiteEditor, + toggleGlobalStyles, + openGlobalStylesPanel, + openPreviousGlobalStylesPanel, +} from './site-editor'; export * from './mocks'; diff --git a/packages/e2e-test-utils/src/inserter.js b/packages/e2e-test-utils/src/inserter.js index 1bcce329f07df..491543035adb9 100644 --- a/packages/e2e-test-utils/src/inserter.js +++ b/packages/e2e-test-utils/src/inserter.js @@ -27,7 +27,7 @@ export async function openGlobalBlockInserter() { await toggleGlobalBlockInserter(); // Waiting here is necessary because sometimes the inserter takes more time to - // render than Puppeteer takes to complete the 'click' action + // render than Puppeteer takes to complete the 'click' action. await page.waitForSelector( '.block-editor-inserter__menu' ); } } @@ -43,7 +43,12 @@ async function isGlobalInserterOpen() { // "Add block" selector is required to make sure performance comparison // doesn't fail on older branches where we still had "Add block" as label. return !! document.querySelector( - '.edit-post-header [aria-label="Add block"].is-pressed, .edit-site-header [aria-label="Add block"].is-pressed, .edit-post-header [aria-label="Toggle block inserter"].is-pressed, .edit-site-header [aria-label="Toggle block inserter"].is-pressed' + '.edit-post-header [aria-label="Add block"].is-pressed,' + + '.edit-site-header [aria-label="Add block"].is-pressed,' + + '.edit-post-header [aria-label="Toggle block inserter"].is-pressed,' + + '.edit-site-header [aria-label="Toggle block inserter"].is-pressed,' + + '.edit-widgets-header [aria-label="Toggle block inserter"].is-pressed,' + + '.edit-widgets-header [aria-label="Add block"].is-pressed' ); } ); } @@ -54,7 +59,12 @@ export async function toggleGlobalBlockInserter() { // "Add block" selector is required to make sure performance comparison // doesn't fail on older branches where we still had "Add block" as label. await page.click( - '.edit-post-header [aria-label="Add block"], .edit-site-header [aria-label="Add block"], .edit-post-header [aria-label="Toggle block inserter"], .edit-site-header [aria-label="Toggle block inserter"]' + '.edit-post-header [aria-label="Add block"],' + + '.edit-site-header [aria-label="Add block"],' + + '.edit-post-header [aria-label="Toggle block inserter"],' + + '.edit-site-header [aria-label="Toggle block inserter"],' + + '.edit-widgets-header [aria-label="Add block"],' + + '.edit-widgets-header [aria-label="Toggle block inserter"]' ); } @@ -107,7 +117,7 @@ export async function searchForBlock( searchTerm ) { */ export async function searchForPattern( searchTerm ) { await openGlobalBlockInserter(); - // Select the patterns tab + // Select the patterns tab. const tab = await page.waitForXPath( '//div[contains(@class, "block-editor-inserter__tabs")]//button[.="Patterns"]' ); @@ -194,7 +204,7 @@ export async function insertReusableBlock( searchTerm ) { await focusSelectedBlock(); // We should wait until the inserter closes and the focus moves to the content. await waitForInserterCloseAndContentFocus(); - // We should wait until the block is loaded + // We should wait until the block is loaded. await page.waitForXPath( '//*[contains(@class,"block-library-block__reusable-block-container")]' ); @@ -210,7 +220,7 @@ export async function insertReusableBlock( searchTerm ) { export async function insertBlockDirectoryBlock( searchTerm ) { await searchForBlock( searchTerm ); - // Grab the first block in the list + // Grab the first block in the list. const insertButton = await page.waitForSelector( '.block-directory-downloadable-blocks-list button:first-child' ); diff --git a/packages/e2e-test-utils/src/is-in-default-block.js b/packages/e2e-test-utils/src/is-in-default-block.js index 21d9a19bf22dd..f6b60c4cbcb43 100644 --- a/packages/e2e-test-utils/src/is-in-default-block.js +++ b/packages/e2e-test-utils/src/is-in-default-block.js @@ -6,7 +6,7 @@ export function isInDefaultBlock() { return page.evaluate( () => { const activeElement = document.activeElement; - // activeElement may be null in that case we should return false + // activeElement may be null in that case we should return false. if ( ! activeElement ) { return false; } diff --git a/packages/e2e-test-utils/src/list-view.js b/packages/e2e-test-utils/src/list-view.js new file mode 100644 index 0000000000000..4098145dfb440 --- /dev/null +++ b/packages/e2e-test-utils/src/list-view.js @@ -0,0 +1,33 @@ +async function toggleListView() { + await page.click( + '.edit-post-header-toolbar__list-view-toggle, .edit-site-header-toolbar__list-view-toggle, .edit-widgets-header-toolbar__list-view-toggle' + ); +} + +async function isListViewOpen() { + return await page.evaluate( () => { + return !! document.querySelector( + '.edit-post-header-toolbar__list-view-toggle.is-pressed, .edit-site-header-toolbar__list-view-toggle.is-pressed, .edit-widgets-header-toolbar__list-view-toggle.is-pressed' + ); + } ); +} + +/** + * Opens list view + */ +export async function openListView() { + const isOpen = await isListViewOpen(); + if ( ! isOpen ) { + await toggleListView(); + } +} + +/** + * Closes list view + */ +export async function closeListView() { + const isOpen = await isListViewOpen(); + if ( isOpen ) { + await toggleListView(); + } +} diff --git a/packages/e2e-test-utils/src/menus.js b/packages/e2e-test-utils/src/menus.js new file mode 100644 index 0000000000000..02ea398927f91 --- /dev/null +++ b/packages/e2e-test-utils/src/menus.js @@ -0,0 +1,136 @@ +/** + * Internal dependencies + */ +import { rest, batch } from './rest-api'; + +const menusEndpoint = '/wp/v2/menus'; +const menuItemsEndpoint = '/wp/v2/menu-items'; + +const menuItemObjectRequests = { + post: ( menuItem ) => ( { + path: '/wp/v2/posts', + method: 'POST', + data: { + title: menuItem.title, + status: 'publish', + }, + } ), + page: ( menuItem ) => ( { + path: '/wp/v2/pages', + method: 'POST', + data: { + title: menuItem.title, + status: 'publish', + }, + } ), +}; + +const menuItemObjectMatchers = { + post: ( menuItem, post ) => menuItem.title === post.title.raw, + page: ( menuItem, page ) => menuItem.title === page.title.raw, +}; + +/** + * Delete all menus using the REST API + */ +export async function deleteAllMenus() { + const menus = await rest( { path: menusEndpoint } ); + + await batch( + menus.map( ( menu ) => ( { + method: 'DELETE', + path: `${ menusEndpoint }/${ menu.id }?force=true`, + } ) ) + ); +} + +/** + * Create menus and all linked resources for the menu using the REST API. + * + * @param {Object} menu Rest payload for the menu + * @param {?Array} menuItems Data for any menu items to be created. + */ +export async function createMenu( menu, menuItems ) { + // Step 1. Create the menu. + const menuResponse = await rest( { + method: 'POST', + path: menusEndpoint, + data: menu, + } ); + + if ( ! menuItems?.length ) { + return; + } + + // Step 2. Create all the pages/posts/categories etc. that menu items + // are linked to. These items don't support rest batching so create them + // using individual requests. + const objectRequests = menuItems + .map( ( menuItem ) => { + const getRequest = menuItemObjectRequests[ menuItem.object ]; + return getRequest ? getRequest( menuItem ) : undefined; + } ) + .filter( ( request ) => !! request ); + const objectResponses = []; + for ( const objectRequest of objectRequests ) { + const objectResponse = await rest( objectRequest ); + objectResponses.push( objectResponse ); + } + + // Step 3. Create the initial menu items without assigned parents. We need + // the ids of all the menu items first before being able to assign the + // correct id of the parent. + const menuItemsResponse = await batch( + menuItems.map( ( menuItem ) => { + // If the menu item is linked to an 'object', get the id for that + // object. + const objectMatcher = menuItemObjectMatchers[ menuItem.object ]; + let object; + if ( objectMatcher ) { + object = objectResponses.find( ( objectResponse ) => + objectMatcher( menuItem, objectResponse ) + ); + } + + return { + method: 'POST', + path: menuItemsEndpoint, + body: { + menus: menuResponse.id, + object_id: object?.id, + url: object?.link, + ...menuItem, + parent: undefined, + }, + }; + } ) + ); + + // Step 4. Make another menu item request to assign parents. + await batch( + menuItems + .map( ( menuItem, index ) => { + // In the fixture data, the parent corresponds to the + // index in the array, dereference that to find the actual + // menu item id. + const fixtureParentIndex = menuItem?.parent !== undefined; + + // Skip any menu items that are top level. + if ( ! fixtureParentIndex ) { + return undefined; + } + + const parent = + menuItemsResponse.responses[ menuItem.parent ].body.id; + const menuItemResponse = menuItemsResponse.responses[ index ]; + const menuItemId = menuItemResponse.body.id; + + return { + method: 'PUT', + path: `${ menuItemsEndpoint }/${ menuItemId }`, + body: { ...menuItemResponse.body, parent }, + }; + } ) + .filter( ( request ) => !! request ) + ); +} diff --git a/packages/e2e-test-utils/src/open-publish-panel.js b/packages/e2e-test-utils/src/open-publish-panel.js index 8480b0e2a9668..5410024626e0f 100644 --- a/packages/e2e-test-utils/src/open-publish-panel.js +++ b/packages/e2e-test-utils/src/open-publish-panel.js @@ -2,9 +2,20 @@ * Opens the publish panel. */ export async function openPublishPanel() { - await page.waitForSelector( + const publishPanelToggle = await page.waitForSelector( '.editor-post-publish-panel__toggle:not([aria-disabled="true"])' ); + const isEntityPublishToggle = await publishPanelToggle.evaluate( + ( element ) => element.classList.contains( 'has-changes-dot' ) + ); await page.click( '.editor-post-publish-panel__toggle' ); - await page.waitForSelector( '.editor-post-publish-button' ); + + // Wait for either the entity save button or the post publish button. + if ( isEntityPublishToggle ) { + await page.waitForSelector( + '.editor-entities-saved-states__save-button' + ); + } else { + await page.waitForSelector( '.editor-post-publish-button' ); + } } diff --git a/packages/e2e-test-utils/src/open-typography-tools-panel-menu.js b/packages/e2e-test-utils/src/open-typography-tools-panel-menu.js new file mode 100644 index 0000000000000..7bb5cc03b7708 --- /dev/null +++ b/packages/e2e-test-utils/src/open-typography-tools-panel-menu.js @@ -0,0 +1,9 @@ +/** + * Opens the Typography tools panel menu provided via block supports. + */ +export async function openTypographyToolsPanelMenu() { + const toggleSelector = + "//div[contains(@class, 'typography-block-support-panel')]//button[contains(@class, 'components-dropdown-menu__toggle')]"; + const toggle = await page.waitForXPath( toggleSelector ); + return toggle.click(); +} diff --git a/packages/e2e-test-utils/src/plugins.js b/packages/e2e-test-utils/src/plugins.js new file mode 100644 index 0000000000000..9111b14ad4faf --- /dev/null +++ b/packages/e2e-test-utils/src/plugins.js @@ -0,0 +1,54 @@ +/** + * External dependencies + */ +import { kebabCase } from 'lodash'; + +/** + * Internal dependencies + */ +import { rest } from './rest-api'; + +const pluginsMapPromise = ( async function getPluginsMap() { + const plugins = await rest( { path: '/wp/v2/plugins' } ); + const map = {}; + for ( const plugin of plugins ) { + // Ideally, we should be using sanitize_title() in PHP rather than kebabCase(), + // but we don't have the exact port of it in JS. + map[ kebabCase( plugin.name ) ] = plugin.plugin; + } + return map; +} )(); + +/** + * Activates an installed plugin. + * + * @param {string} slug Plugin slug. + */ +async function activatePlugin( slug ) { + const pluginsMap = await pluginsMapPromise; + const plugin = pluginsMap[ slug ]; + + await rest( { + method: 'PUT', + path: `/wp/v2/plugins/${ plugin }`, + data: { status: 'active' }, + } ); +} + +/** + * Deactivates an active plugin. + * + * @param {string} slug Plugin slug. + */ +async function deactivatePlugin( slug ) { + const pluginsMap = await pluginsMapPromise; + const plugin = pluginsMap[ slug ]; + + await rest( { + method: 'PUT', + path: `/wp/v2/plugins/${ plugin }`, + data: { status: 'inactive' }, + } ); +} + +export { activatePlugin, deactivatePlugin }; diff --git a/packages/e2e-test-utils/src/preferences.js b/packages/e2e-test-utils/src/preferences.js new file mode 100644 index 0000000000000..ce43b35834a63 --- /dev/null +++ b/packages/e2e-test-utils/src/preferences.js @@ -0,0 +1,19 @@ +/** + * Internal dependencies + */ +import { rest } from './rest-api'; + +/** + * Clears all user meta preferences. + */ +export async function resetPreferences() { + await rest( { + path: '/wp/v2/users/me', + method: 'PUT', + data: { + meta: { + persisted_preferences: {}, + }, + }, + } ); +} diff --git a/packages/e2e-test-utils/src/press-key-with-modifier.js b/packages/e2e-test-utils/src/press-key-with-modifier.js index a26a648aab9a0..24eb4c3c86e48 100644 --- a/packages/e2e-test-utils/src/press-key-with-modifier.js +++ b/packages/e2e-test-utils/src/press-key-with-modifier.js @@ -126,6 +126,7 @@ async function emulateClipboard( type ) { document.activeElement.dispatchEvent( new ClipboardEvent( _type, { bubbles: true, + cancelable: true, clipboardData: window._clipboardData, } ) ); diff --git a/packages/e2e-test-utils/src/preview.js b/packages/e2e-test-utils/src/preview.js index 789ca761b6ca2..7f119f7def11b 100644 --- a/packages/e2e-test-utils/src/preview.js +++ b/packages/e2e-test-utils/src/preview.js @@ -3,7 +3,7 @@ */ import { last } from 'lodash'; -/** @typedef {import('puppeteer').Page} Page */ +/** @typedef {import('puppeteer-core').Page} Page */ /** * Opens the preview page of an edited post. diff --git a/packages/e2e-test-utils/src/publish-post.js b/packages/e2e-test-utils/src/publish-post.js index 694f40ec09517..a8bf1f8cf4599 100644 --- a/packages/e2e-test-utils/src/publish-post.js +++ b/packages/e2e-test-utils/src/publish-post.js @@ -10,11 +10,35 @@ import { openPublishPanel } from './open-publish-panel'; * @return {Promise} Promise resolving when publish is complete. */ export async function publishPost() { + const publishPanelToggle = await page.$( + '.editor-post-publish-panel__toggle' + ); + const isPublishingPost = await publishPanelToggle.evaluate( + ( element ) => element.textContent === 'Publish' + ); + const isEntityPublishToggle = await publishPanelToggle.evaluate( + ( element ) => element.classList.contains( 'has-changes-dot' ) + ); + await openPublishPanel(); - // Publish the post - await page.click( '.editor-post-publish-button' ); + // Save any entities. + if ( isEntityPublishToggle ) { + // Handle saving entities. + await page.click( '.editor-entities-saved-states__save-button' ); + } + + // If this is just an update then the entity save will be all that's needed. + // If it's a publish then publish the post in addition to saving the entities. + if ( isPublishingPost ) { + // components-button editor-post-publish-button editor-post-publish-button__button is-primary + // Handle saving just the post. + const publishButton = await page.waitForSelector( + '.editor-post-publish-button:not([aria-disabled="true"])' + ); + await publishButton.click(); - // A success notice should show up - return page.waitForSelector( '.components-snackbar' ); + // A success notice should show up. + return page.waitForSelector( '.components-snackbar' ); + } } diff --git a/packages/e2e-test-utils/src/rest-api.js b/packages/e2e-test-utils/src/rest-api.js new file mode 100644 index 0000000000000..60dae7745051d --- /dev/null +++ b/packages/e2e-test-utils/src/rest-api.js @@ -0,0 +1,139 @@ +/** + * External dependencies + */ +import fetch from 'node-fetch'; +import FormData from 'form-data'; + +/** + * WordPress dependencies + */ +import apiFetch from '@wordpress/api-fetch'; + +/** + * Internal dependencies + */ +import { WP_BASE_URL } from './shared/config'; +import { createURL } from './create-url'; + +// `apiFetch` expects `window.fetch` to be available in its default handler. +global.window = global.window || {}; +global.window.fetch = fetch; + +const setAPIRootURL = ( async () => { + // Discover the API root url using link header. + // See https://developer.wordpress.org/rest-api/using-the-rest-api/discovery/#link-header + const res = await fetch( WP_BASE_URL, { method: 'HEAD' } ); + const links = res.headers.get( 'link' ); + const restLink = links.match( /<([^>]+)>; rel="https:\/\/api\.w\.org\/"/ ); + + if ( ! restLink ) { + throw new Error( `Failed to discover REST API endpoint. +Link header: ${ links }` ); + } + + const [ , rootURL ] = restLink; + apiFetch.use( apiFetch.createRootURLMiddleware( rootURL ) ); +} )(); + +async function login( retries = 3 ) { + const formData = new FormData(); + formData.append( 'log', 'admin' ); + formData.append( 'pwd', 'password' ); + + // Login to admin using fetch. + const loginResponse = await fetch( createURL( 'wp-login.php' ), { + method: 'POST', + headers: formData.getHeaders(), + body: formData, + redirect: 'manual', + } ); + + // Retrieve the cookies. + const cookies = loginResponse.headers.get( 'set-cookie' ); + const cookie = cookies + .split( ',' ) + .map( ( setCookie ) => setCookie.split( ';' )[ 0 ] ) + .join( ';' ); + + apiFetch.nonceEndpoint = createURL( + 'wp-admin/admin-ajax.php', + 'action=rest-nonce' + ); + + // Get the initial nonce. + const response = await fetch( apiFetch.nonceEndpoint, { + headers: { cookie }, + } ); + + if ( response.status === 200 ) { + return { + response, + cookie, + }; + } + + // Sometimes the nonce call will fail if a test has forced a new login + // and invalidated the cookie, so retry the login in these instances. + if ( retries > 0 ) { + return login( retries - 1 ); + } + + throw new Error( + `Fetch api call failed for ${ apiFetch.nonceEndpoint }: ${ response.status }` + ); +} + +const setNonce = ( async () => { + // Get the initial nonce. + const loginRequest = await login(); + + const nonce = await loginRequest.response.text(); + + // Register the nonce middleware. + apiFetch.use( apiFetch.createNonceMiddleware( nonce ) ); + + // For the nonce to work we have to also pass the cookies. + apiFetch.use( function setCookieMiddleware( request, next ) { + return next( { + ...request, + headers: { + ...request.headers, + cookie: loginRequest.cookie, + }, + } ); + } ); +} )(); + +/** + * Call REST API using `apiFetch` to build and clear test states. + * + * @param {Object} options `apiFetch` options. + * @return {Promise} The response value. + */ +async function rest( options = {} ) { + // Only need to set them once but before any requests. + await Promise.all( [ setAPIRootURL, setNonce ] ); + + return await apiFetch( options ); +} + +/** + * Call a set of REST APIs in batch. + * See https://make.wordpress.org/core/2020/11/20/rest-api-batch-framework-in-wordpress-5-6/ + * Note that calling GET requests in batch is not supported. + * + * @param {Array} requests The request objects. + * @return {Promise} The response value. + */ +async function batch( requests ) { + return await rest( { + method: 'POST', + path: '/batch/v1', + data: { + requests, + validation: 'require-all-validate', + }, + } ); +} + +export { rest, batch }; diff --git a/packages/e2e-test-utils/src/set-option.js b/packages/e2e-test-utils/src/set-option.js new file mode 100644 index 0000000000000..0f1abbc9fd6c5 --- /dev/null +++ b/packages/e2e-test-utils/src/set-option.js @@ -0,0 +1,37 @@ +/** + * Internal dependencies + */ +import { switchUserToAdmin } from './switch-user-to-admin'; +import { visitAdminPage } from './visit-admin-page'; +import { switchUserToTest } from './switch-user-to-test'; +import { pressKeyWithModifier } from './press-key-with-modifier'; + +/** + * Sets a site option, from the options-general admin page. + * + * @param {string} setting The option, used to get the option by id. + * @param {string} value The value to set the option to. + * + * @return {string} The previous value of the option. + * + */ +export async function setOption( setting, value ) { + await switchUserToAdmin(); + await visitAdminPage( 'options.php' ); + await page.waitForSelector( `#${ setting }` ); + const previousValue = await page.$eval( + `#${ setting }`, + ( element ) => element.value + ); + + await page.focus( `#${ setting }` ); + await pressKeyWithModifier( 'primary', 'a' ); + await page.type( `#${ setting }`, value ); + + await Promise.all( [ + page.click( '#Update' ), + page.waitForNavigation( { waitUntil: 'networkidle0' } ), + ] ); + await switchUserToTest(); + return previousValue; +} diff --git a/packages/e2e-test-utils/src/shared/types.d.ts b/packages/e2e-test-utils/src/shared/types.d.ts new file mode 100644 index 0000000000000..48b94dec8bbb8 --- /dev/null +++ b/packages/e2e-test-utils/src/shared/types.d.ts @@ -0,0 +1,6 @@ +/** + * Possible Gutenberg context + * + * Often useful to determine different selectors. + */ +export type GutenbergContext = 'post-editor' | 'site-editor'; diff --git a/packages/e2e-test-utils/src/site-editor.js b/packages/e2e-test-utils/src/site-editor.js new file mode 100644 index 0000000000000..e32ad01cc396e --- /dev/null +++ b/packages/e2e-test-utils/src/site-editor.js @@ -0,0 +1,289 @@ +/** + * WordPress dependencies + */ +import { visitAdminPage } from '@wordpress/e2e-test-utils'; +import { addQueryArgs } from '@wordpress/url'; + +/** + * @typedef {import('puppeteer-core').ElementHandle} ElementHandle + */ + +const SELECTORS = { + navigationPanel: { + backToDashboard: + '.edit-site-navigation-panel .edit-site-navigation-panel__back-to-dashboard', + goBack: '.components-navigation__back-button', + isOpenState: '.edit-site-navigation-toggle.is-open', + menuItem: ( label ) => + `//div[contains(@class, "edit-site-navigation-panel")]//button[.//*[text()="${ label }"]]`, + open: '.edit-site-navigation-toggle__button', + panelContainer: '.edit-site-navigation-panel', + }, + visualEditor: '.edit-site-visual-editor iframe', +}; + +/** + * Searches for an item in the navigation panel with the label provided and clicks it. + * + * @param {string} label The label to search the menu item for. + */ +export async function clickSiteEditorMenuItem( label ) { + const item = await getSiteEditorMenuItem( label ); + + if ( item ) { + await item.click(); + } else { + throw new Error( + `Navigation item with label ${ label } was not found.` + ); + } +} + +/** + * Closes the site editor navigation panel if open + */ +export async function closeSiteEditorNavigationPanel() { + const { navigationPanel } = SELECTORS; + + const isOpen = !! ( await page.$( navigationPanel.isOpenState ) ); + + if ( isOpen ) { + await page.click( navigationPanel.open ); + await page.waitForSelector( navigationPanel.panelContainer, { + hidden: true, + } ); + } +} + +/** + * Skips the welcome guide popping up to first time users of the site editor + */ +export async function disableSiteEditorWelcomeGuide() { + // This code prioritizes using the preferences store. However, performance + // tests run on older versions of the codebase where the preferences store + // doesn't exist. Some backwards compatibility has been built-in so that + // those tests continue to work there. This can be removed once WordPress + // 6.0 is released, as the older version used by the performance tests will + // then include the preferences store. + // See https://github.com/WordPress/gutenberg/pull/39300. + const isWelcomeGuideActive = await page.evaluate( () => { + // TODO - remove if statement after WordPress 6.0 is released. + if ( ! wp.data.select( 'core/preferences' ) ) { + return wp.data + .select( 'core/edit-site' ) + .isFeatureActive( 'welcomeGuide' ); + } + + return !! wp.data + .select( 'core/preferences' ) + ?.get( 'core/edit-site', 'welcomeGuide' ); + } ); + const isWelcomeGuideStyesActive = await page.evaluate( () => { + // TODO - remove if statement after WordPress 6.0 is released. + if ( ! wp.data.select( 'core/preferences' ) ) { + return wp.data + .select( 'core/edit-site' ) + .isFeatureActive( 'welcomeGuideStyles' ); + } + + return !! wp.data + .select( 'core/preferences' ) + ?.get( 'core/edit-site', 'welcomeGuideStyles' ); + } ); + + if ( isWelcomeGuideActive ) { + await page.evaluate( () => { + // TODO - remove if statement after WordPress 6.0 is released. + if ( ! wp.data.dispatch( 'core/preferences' ) ) { + wp.data + .dispatch( 'core/edit-site' ) + .toggleFeature( 'welcomeGuide' ); + return; + } + + wp.data + .dispatch( 'core/preferences' ) + .toggle( 'core/edit-site', 'welcomeGuide' ); + } ); + } + + if ( isWelcomeGuideStyesActive ) { + await page.evaluate( () => { + // TODO - remove if statement after WordPress 6.0 is released. + if ( ! wp.data.dispatch( 'core/preferences' ) ) { + wp.data + .dispatch( 'core/edit-site' ) + .toggleFeature( 'welcomeGuideStyles' ); + return; + } + wp.data + .dispatch( 'core/preferences' ) + .toggle( 'core/edit-site', 'welcomeGuideStyles' ); + } ); + } +} + +/** + * Returns a promise which resolves with the edited post content (HTML string). + * + * @return {Promise} Promise resolving with post content markup. + */ +export function getCurrentSiteEditorContent() { + return page.evaluate( () => { + const postId = window.wp.data + .select( 'core/edit-site' ) + .getEditedPostId(); + const postType = window.wp.data + .select( 'core/edit-site' ) + .getEditedPostType(); + const record = window.wp.data + .select( 'core' ) + .getEditedEntityRecord( 'postType', postType, postId ); + if ( record ) { + if ( typeof record.content === 'function' ) { + return record.content( record ); + } else if ( record.blocks ) { + return window.wp.blocks.__unstableSerializeAndClean( + record.blocks + ); + } else if ( record.content ) { + return record.content; + } + } + return ''; + } ); +} + +/** + * Searches for an item in the site editor navigation menu with the provided label. + * + * @param {string} label The label to search the menu item for. + * + * @return {Promise} The menu item handle or `null` + */ +export async function getSiteEditorMenuItem( label ) { + const { navigationPanel } = SELECTORS; + + const item = await page.waitForXPath( navigationPanel.menuItem( label ), { + visible: true, + } ); + + return item; +} + +/** + * Returns `true` if in the site editor navigation root + * + * Checks whether the “Back to dashboard” button is visible. If + * not in the root, a “Back” button would be visible instead. + * + * @return {Promise} Whether it currently is the navigation root or not + */ +export async function isSiteEditorRoot() { + const { navigationPanel } = SELECTORS; + + const isBackToDashboardButtonVisible = !! ( await page.$( + navigationPanel.backToDashboard + ) ); + + return isBackToDashboardButtonVisible; +} + +/** + * Navigates the site editor back + */ +export async function navigateSiteEditorBack() { + const { navigationPanel } = SELECTORS; + + await page.click( navigationPanel.goBack ); +} + +/** + * Goes back until it gets to the root + */ +export async function navigateSiteEditorBackToRoot() { + while ( ! ( await isSiteEditorRoot() ) ) { + await navigateSiteEditorBack(); + } +} + +/** + * Opens the site editor navigation panel if closed + */ +export async function openSiteEditorNavigationPanel() { + const { navigationPanel } = SELECTORS; + + const isOpen = !! ( await page.$( navigationPanel.isOpenState ) ); + + if ( ! isOpen ) { + await page.click( navigationPanel.open ); + await page.waitForSelector( navigationPanel.panelContainer ); + } +} + +/** + * Navigates through a sequence of links in the site editor navigation panel + * + * @param {string[] | string} labels Labels to navigate through + */ +export async function siteEditorNavigateSequence( labels ) { + if ( ! Array.isArray( labels ) ) { + labels = [ labels ]; + } + + for ( const label of labels ) { + await clickSiteEditorMenuItem( label ); + } +} + +/** + * Visits the Site Editor main page + * + * By default, it also skips the welcome guide. The option can be disabled if need be. + * + * @see disableSiteEditorWelcomeGuide + * + * @param {string} query String to be serialized as query portion of URL. + * @param {boolean} [skipWelcomeGuide=true] Whether to skip the welcome guide as part of the navigation. + */ +export async function visitSiteEditor( query, skipWelcomeGuide = true ) { + query = addQueryArgs( '', { + page: 'gutenberg-edit-site', + ...query, + } ).slice( 1 ); + + await visitAdminPage( 'themes.php', query ); + await page.waitForSelector( SELECTORS.visualEditor ); + + if ( skipWelcomeGuide ) { + await disableSiteEditorWelcomeGuide(); + } +} + +/** + * Toggles the global styles sidebar (opens it if closed and closes it if open). + */ +export async function toggleGlobalStyles() { + await page.click( + '.edit-site-header__actions button[aria-label="Styles"]' + ); +} + +/** + * Opens a global styles panel. + * + * @param {string} panelName Name of the panel that is going to be opened. + */ +export async function openGlobalStylesPanel( panelName ) { + const selector = `//div[@aria-label="Settings"]//button[.//*[text()="${ panelName }"]]`; + await ( await page.waitForXPath( selector ) ).click(); +} + +/** + * Opens the previous global styles panel. + */ +export async function openPreviousGlobalStylesPanel() { + await page.click( + 'div[aria-label="Settings"] button[aria-label="Navigate to the previous view"]' + ); +} diff --git a/packages/e2e-test-utils/src/switch-editor-mode-to.js b/packages/e2e-test-utils/src/switch-editor-mode-to.js index 8de147323a26e..95699a3b5d109 100644 --- a/packages/e2e-test-utils/src/switch-editor-mode-to.js +++ b/packages/e2e-test-utils/src/switch-editor-mode-to.js @@ -9,12 +9,12 @@ import { toggleMoreMenu } from './toggle-more-menu'; * @param {string} mode String editor mode. */ export async function switchEditorModeTo( mode ) { - await toggleMoreMenu(); + await toggleMoreMenu( 'open' ); const [ button ] = await page.$x( `//button/span[contains(text(), '${ mode } editor')]` ); await button.click( 'button' ); - await toggleMoreMenu(); + await toggleMoreMenu( 'close' ); if ( mode === 'Code' ) { await page.waitForSelector( '.editor-post-text-editor' ); } diff --git a/packages/e2e-test-utils/src/templates.js b/packages/e2e-test-utils/src/templates.js new file mode 100644 index 0000000000000..96debfd809492 --- /dev/null +++ b/packages/e2e-test-utils/src/templates.js @@ -0,0 +1,59 @@ +/** + * Internal dependencies + */ +import { rest } from './rest-api'; + +const PATH_MAPPING = { + wp_template: '/wp/v2/templates', + wp_template_part: '/wp/v2/template-parts', +}; + +/** + * Delete all the templates of given type. + * + * @param {('wp_template'|'wp_template_part')} type - Template type to delete. + */ +export async function deleteAllTemplates( type ) { + const path = PATH_MAPPING[ type ]; + + if ( ! path ) { + throw new Error( `Unsupported template type: ${ type }.` ); + } + + const templates = await rest( { path } ); + + if ( ! templates?.length ) { + return; + } + + for ( const template of templates ) { + if ( ! template?.wp_id ) { + continue; + } + + let response; + + try { + response = await rest( { + path: `${ path }/${ template.id }?force=true`, + method: 'DELETE', + } ); + } catch ( responseError ) { + // Disable reason - the error provides valuable feedback about issues with tests. + // eslint-disable-next-line no-console + console.warn( + `deleteAllTemplates failed to delete template (id: ${ template.wp_id }) with the following error`, + responseError + ); + } + + if ( ! response.deleted ) { + // Disable reason - the error provides valuable feedback about issues with tests. + // eslint-disable-next-line no-console + console.warn( + `deleteAllTemplates failed to delete template (id: ${ template.wp_id }) with the following response`, + response + ); + } + } +} diff --git a/packages/e2e-test-utils/src/toggle-more-menu.js b/packages/e2e-test-utils/src/toggle-more-menu.js index 1b9b98d9d6370..fb7849c7990c9 100644 --- a/packages/e2e-test-utils/src/toggle-more-menu.js +++ b/packages/e2e-test-utils/src/toggle-more-menu.js @@ -1,8 +1,16 @@ /** * Toggles the More Menu. + * + * @param {'open' | 'close'} [waitFor] Whether it should wait for the menu to open or close. If `undefined` it won't wait for anything. */ -export async function toggleMoreMenu() { - await expect( page ).toClick( - '.edit-post-more-menu [aria-label="Options"]' - ); +export async function toggleMoreMenu( waitFor ) { + const menuSelector = '.interface-more-menu-dropdown [aria-label="Options"]'; + + await page.click( menuSelector ); + + if ( waitFor ) { + const opts = waitFor === 'close' ? { hidden: true } : {}; + const menuContentSelector = '.interface-more-menu-dropdown__content'; + await page.waitForSelector( menuContentSelector, opts ); + } } diff --git a/packages/e2e-test-utils/src/trash-all-comments.js b/packages/e2e-test-utils/src/trash-all-comments.js new file mode 100644 index 0000000000000..97169e994d3ed --- /dev/null +++ b/packages/e2e-test-utils/src/trash-all-comments.js @@ -0,0 +1,35 @@ +/** + * Internal dependencies + */ +import { switchUserToAdmin } from './switch-user-to-admin'; +import { switchUserToTest } from './switch-user-to-test'; +import { visitAdminPage } from './visit-admin-page'; + +/** + * Navigates to the comments listing screen and bulk-trashes any comments which exist. + * + * @return {Promise} Promise resolving once comments have been trashed. + */ +export async function trashAllComments() { + await switchUserToAdmin(); + // Visit `/wp-admin/edit-comments.php` so we can see a list of comments and delete them. + await visitAdminPage( 'edit-comments.php' ); + + // If this selector doesn't exist there are no comments for us to delete. + const bulkSelector = await page.$( '#bulk-action-selector-top' ); + if ( ! bulkSelector ) { + return; + } + + // Select all comments. + await page.waitForSelector( '[id^=cb-select-all-]' ); + await page.click( '[id^=cb-select-all-]' ); + // Select the "bulk actions" > "trash" option. + await page.select( '#bulk-action-selector-top', 'trash' ); + // Submit the form to send all mine/pendings/approved/spam comments to the trash. + await page.click( '#doaction' ); + await page.waitForXPath( + '//*[contains(@class, "updated notice")]/p[contains(text(), "moved to the Trash.")]' + ); + await switchUserToTest(); +} diff --git a/packages/e2e-test-utils/src/visit-admin-page.js b/packages/e2e-test-utils/src/visit-admin-page.js index 4382f14a3134b..5923e6cfa2cb9 100644 --- a/packages/e2e-test-utils/src/visit-admin-page.js +++ b/packages/e2e-test-utils/src/visit-admin-page.js @@ -20,11 +20,11 @@ import { getPageError } from './get-page-error'; export async function visitAdminPage( adminPath, query ) { await page.goto( createURL( join( 'wp-admin', adminPath ), query ) ); - // Handle upgrade required screen + // Handle upgrade required screen. if ( isCurrentURL( 'wp-admin/upgrade.php' ) ) { - // Click update + // Click update. await page.click( '.button.button-large.button-primary' ); - // Click continue + // Click continue. await page.click( '.button.button-large' ); } diff --git a/packages/e2e-test-utils/src/widgets.js b/packages/e2e-test-utils/src/widgets.js index 175a372789a4d..254d9d55e36f9 100644 --- a/packages/e2e-test-utils/src/widgets.js +++ b/packages/e2e-test-utils/src/widgets.js @@ -1,32 +1,29 @@ /** * Internal dependencies */ -import { activatePlugin } from './activate-plugin'; -import { deactivatePlugin } from './deactivate-plugin'; -import { visitAdminPage } from './visit-admin-page'; +import { rest, batch } from './rest-api'; /** * Delete all the widgets in the widgets screen. */ export async function deleteAllWidgets() { - // TODO: Deleting widgets in the new widgets screen is cumbersome and slow. - // To workaround this for now, we visit the old widgets screen to delete them. - await activatePlugin( 'gutenberg-test-classic-widgets' ); + const [ widgets, sidebars ] = await Promise.all( [ + rest( { path: '/wp/v2/widgets' } ), + rest( { path: '/wp/v2/sidebars' } ), + ] ); - await visitAdminPage( 'widgets.php' ); + await batch( + widgets.map( ( widget ) => ( { + method: 'DELETE', + path: `/wp/v2/widgets/${ widget.id }?force=true`, + } ) ) + ); - let widget = await page.$( '.widgets-sortables .widget' ); - - // We have to do this one-by-one since there might be race condition when deleting multiple widgets at once. - while ( widget ) { - const deleteButton = await widget.$( 'button.widget-control-remove' ); - const id = await widget.evaluate( ( node ) => node.id ); - await deleteButton.evaluate( ( node ) => node.click() ); - // Wait for the widget to be removed from DOM. - await page.waitForSelector( `#${ id }`, { hidden: true } ); - - widget = await page.$( '.widgets-sortables .widget' ); - } - - await deactivatePlugin( 'gutenberg-test-classic-widgets' ); + await batch( + sidebars.map( ( sidebar ) => ( { + method: 'POST', + path: `/wp/v2/sidebars/${ sidebar.id }`, + body: { id: sidebar.id, widgets: [] }, + } ) ) + ); } diff --git a/packages/e2e-tests/CHANGELOG.md b/packages/e2e-tests/CHANGELOG.md index 80075cb1ad6c5..d14068f5d678a 100644 --- a/packages/e2e-tests/CHANGELOG.md +++ b/packages/e2e-tests/CHANGELOG.md @@ -2,6 +2,25 @@ ## Unreleased +## 4.0.0 (2022-04-08) + +### Breaking Changes + +- There's currently an ongoing [project](https://github.com/WordPress/gutenberg/issues/38851) to migrate E2E tests to Playwright instead. This package is deprecated and will only accept bug fixes until fully migrated. + +## 3.0.0 (2022-01-27) + +### Breaking Changes + +- The peer `puppeteer` dependency has been replaced with `puppeteer-core` requiring version `>=11` (see [Breaking Changes](https://github.com/puppeteer/puppeteer/releases/tag/v11.0.0), [#36040](https://github.com/WordPress/gutenberg/pull/36040)). +- The peer `jest` dependency has been updated from requiring `>=26` to requiring `>=27` (see [Breaking Changes](https://jestjs.io/blog/2021/05/25/jest-27), [#33287](https://github.com/WordPress/gutenberg/pull/33287)). + +## 2.5.0 (2021-09-09) + +### New Features + +- Emulate `prefers-reduced-motion: reduce` [#34132](https://github.com/WordPress/gutenberg/pull/34132). + ## 2.4.0 (2021-07-29) ### New Features diff --git a/packages/e2e-tests/README.md b/packages/e2e-tests/README.md index a322b2e40cc48..de87194690db8 100644 --- a/packages/e2e-tests/README.md +++ b/packages/e2e-tests/README.md @@ -2,6 +2,8 @@ End-To-End (E2E) tests for WordPress. +**Note that there's currently an ongoing [project](https://github.com/WordPress/gutenberg/issues/38851) to migrate E2E tests to Playwright instead. This package is deprecated and will only accept bug fixes until fully migrated.** + ## Installation Install the module @@ -10,6 +12,80 @@ Install the module npm install @wordpress/e2e-tests --save-dev ``` +## Running tests + +The following commands are available on the Gutenberg repo: + +```json +{ + "test-e2e": "wp-scripts test-e2e --config packages/e2e-tests/jest.config.js", + "test-e2e:debug": "wp-scripts --inspect-brk test-e2e --config packages/e2e-tests/jest.config.js --puppeteer-devtools", + "test-e2e:watch": "npm run test-e2e -- --watch" +} +``` + +### Run all available tests + +```bash +npm run test-e2e +``` + +### Run all available tests and listen for changes. + +```bash +npm run test-e2e:watch +``` + +### Run a specific test file + +```bash +npm run test-e2e -- packages/e2e-test/ +# Or, in order to watch for changes: +npm run test-e2e:watch -- packages/e2e-test/ +``` + +### Debugging + +Makes e2e tests available to debug in a Chrome Browser. + +```bash +npm run test-e2e:debug +``` + +After running the command, tests will be available for debugging in Chrome by going to chrome://inspect/#devices and clicking `inspect` under the path to `/test-e2e.js`. + +#### Debugging in `vscode` + +Debugging in a Chrome browser can be replaced with `vscode`'s debugger by adding the following configuration to `.vscode/launch.json`: + +```json +{ + "type": "node", + "request": "launch", + "name": "Debug current e2e test", + "program": "${workspaceFolder}/node_modules/@wordpress/scripts/bin/wp-scripts.js", + "args": [ + "test-e2e", + "--config=${workspaceFolder}/packages/e2e-tests/jest.config.js", + "--verbose=true", + "--runInBand", + "--watch", + "${file}" + ], + "console": "integratedTerminal", + "internalConsoleOptions": "neverOpen", + "trace": "all" +} +``` + +This will run jest, targetting the spec file currently open in the editor. `vscode`'s debugger can now be used to add breakpoints and inspect tests as you would in Chrome DevTools. + **Note**: This package requires Node.js 12.0.0 or later. It is not compatible with older versions. -

Code is Poetry.

+## Contributing to this package + +This is an individual package that's part of the Gutenberg project. The project is organized as a monorepo. It's made up of multiple self-contained software packages, each with a specific purpose. The packages in this monorepo are published to [npm](https://www.npmjs.com/) and used by [WordPress](https://make.wordpress.org/core/) as well as other software projects. + +To find out more about contributing to this package or Gutenberg as a whole, please read the project's main [contributor guide](https://github.com/WordPress/gutenberg/tree/HEAD/CONTRIBUTING.md). + +

Code is Poetry.

diff --git a/packages/e2e-tests/config/flaky-tests-reporter.js b/packages/e2e-tests/config/flaky-tests-reporter.js new file mode 100644 index 0000000000000..23b5aed5d9a8b --- /dev/null +++ b/packages/e2e-tests/config/flaky-tests-reporter.js @@ -0,0 +1,96 @@ +/** + * A **flaky** test is defined as a test which passed after auto-retrying. + * - By default, all tests run once if they pass. + * - If a test fails, it will automatically re-run at most 2 times. + * - If it pass after retrying (below 2 times), then it's marked as **flaky** + * but displayed as **passed** in the original test suite. + * - If it fail all 3 times, then it's a **failed** test. + */ +/** + * External dependencies + */ +const fs = require( 'fs' ).promises; +const path = require( 'path' ); +const { formatResultsErrors } = require( 'jest-message-util' ); +const filenamify = require( 'filenamify' ); + +class FlakyTestsReporter { + constructor( globalConfig, options ) { + this._globalConfig = globalConfig; + this._options = options; + + this.failingTestCaseResults = new Map(); + } + + async onRunStart() { + try { + fs.mkdir( 'flaky-tests' ); + } catch ( err ) { + // Ignore the error if the directory already exists. + if ( err.code !== 'EEXIST' ) { + throw err; + } + } + } + + async onTestCaseResult( test, testCaseResult ) { + const testPath = path.relative( this._globalConfig.rootDir, test.path ); + const testTitle = testCaseResult.title; + + switch ( testCaseResult.status ) { + case 'failed': { + if ( ! this.failingTestCaseResults.has( testTitle ) ) { + this.failingTestCaseResults.set( testTitle, [] ); + } + this.failingTestCaseResults + .get( testTitle ) + .push( testCaseResult ); + break; + } + case 'passed': { + if ( this.failingTestCaseResults.has( testTitle ) ) { + const failingResults = this.failingTestCaseResults.get( + testTitle + ); + + await fs.writeFile( + `flaky-tests/${ filenamify( testTitle ) }.json`, + JSON.stringify( { + runner: 'jest-circus', + title: testTitle, + path: testPath, + results: failingResults, + } ), + 'utf-8' + ); + + // Don't silence flaky error messages for debugging reason. + // eslint-disable-next-line no-console + console.error( + `Test passed after ${ failingResults.length } failed ${ + failingResults.length === 1 ? 'attempt' : 'attempts' + }:` + ); + // eslint-disable-next-line no-console + console.error( + formatResultsErrors( + failingResults, + this._globalConfig, + {}, + test.path + ) + ); + } + break; + } + default: + break; + } + } + + onRunComplete() { + this.failingTestCaseResults.clear(); + } +} + +module.exports = FlakyTestsReporter; diff --git a/packages/e2e-tests/config/gutenberg-phase.js b/packages/e2e-tests/config/gutenberg-phase.js deleted file mode 100644 index 2e119cd3e89f0..0000000000000 --- a/packages/e2e-tests/config/gutenberg-phase.js +++ /dev/null @@ -1,9 +0,0 @@ -global.process.env = { - ...global.process.env, - // Inject the `GUTENBERG_PHASE` global, used for feature flagging. - // eslint-disable-next-line @wordpress/gutenberg-phase - GUTENBERG_PHASE: parseInt( - process.env.npm_package_config_GUTENBERG_PHASE, - 10 - ), -}; diff --git a/packages/e2e-tests/config/is-gutenberg-plugin.js b/packages/e2e-tests/config/is-gutenberg-plugin.js new file mode 100644 index 0000000000000..d03b70b3ec11a --- /dev/null +++ b/packages/e2e-tests/config/is-gutenberg-plugin.js @@ -0,0 +1,6 @@ +global.process.env = { + ...global.process.env, + // Inject the `IS_GUTENBERG_PLUGIN` global, used for feature flagging. + // eslint-disable-next-line @wordpress/is-gutenberg-plugin + IS_GUTENBERG_PLUGIN: process.env.npm_package_config_IS_GUTENBERG_PLUGIN, +}; diff --git a/packages/e2e-tests/config/performance-reporter.js b/packages/e2e-tests/config/performance-reporter.js index d73d348ae4b97..549855bf29713 100644 --- a/packages/e2e-tests/config/performance-reporter.js +++ b/packages/e2e-tests/config/performance-reporter.js @@ -28,15 +28,41 @@ class PerformanceReporter { } const results = readFileSync( filepath, 'utf8' ); - const { load, type, focus, inserterOpen, inserterHover } = JSON.parse( - results - ); + const { + serverResponse, + firstPaint, + domContentLoaded, + loaded, + firstContentfulPaint, + firstBlock, + type, + focus, + listViewOpen, + inserterOpen, + inserterHover, + inserterSearch, + } = JSON.parse( results ); - if ( load && load.length ) { + if ( serverResponse && serverResponse.length ) { // eslint-disable-next-line no-console console.log( ` ${ title( 'Loading Time:' ) } -Average time to load: ${ success( round( average( load ) ) + 'ms' ) }` ); +Average time to server response (subtracted from client side metrics): ${ success( + round( average( serverResponse ) ) + 'ms' + ) } +Average time to first paint: ${ success( + round( average( firstPaint ) ) + 'ms' + ) } +Average time to DOM content load: ${ success( + round( average( domContentLoaded ) ) + 'ms' + ) } +Average time to load: ${ success( round( average( loaded ) ) + 'ms' ) } +Average time to first contentful paint: ${ success( + round( average( firstContentfulPaint ) ) + 'ms' + ) } +Average time to first block: ${ success( + round( average( firstBlock ) ) + 'ms' + ) }` ); } if ( type && type.length ) { @@ -65,6 +91,21 @@ Fastest time to select a block: ${ success( ) }` ); } + if ( listViewOpen && listViewOpen.length ) { + // eslint-disable-next-line no-console + console.log( ` +${ title( 'Opening List View Performance:' ) } +Average time to open list view: ${ success( + round( average( listViewOpen ) ) + 'ms' + ) } +Slowest time to open list view: ${ success( + round( Math.max( ...listViewOpen ) ) + 'ms' + ) } +Fastest time to open list view: ${ success( + round( Math.min( ...listViewOpen ) ) + 'ms' + ) }` ); + } + if ( inserterOpen && inserterOpen.length ) { // eslint-disable-next-line no-console console.log( ` @@ -80,6 +121,21 @@ Fastest time to open global inserter: ${ success( ) }` ); } + if ( inserterSearch && inserterSearch.length ) { + // eslint-disable-next-line no-console + console.log( ` +${ title( 'Inserter Search Performance:' ) } +Average time to type the inserter search input: ${ success( + round( average( inserterSearch ) ) + 'ms' + ) } +Slowest time to type the inserter search input: ${ success( + round( Math.max( ...inserterSearch ) ) + 'ms' + ) } +Fastest time to type the inserter search input: ${ success( + round( Math.min( ...inserterSearch ) ) + 'ms' + ) }` ); + } + if ( inserterHover && inserterHover.length ) { // eslint-disable-next-line no-console console.log( ` diff --git a/packages/e2e-tests/config/setup-performance-test.js b/packages/e2e-tests/config/setup-performance-test.js index c26516b0eeadf..ae2b347b99d18 100644 --- a/packages/e2e-tests/config/setup-performance-test.js +++ b/packages/e2e-tests/config/setup-performance-test.js @@ -16,7 +16,7 @@ import { */ const PUPPETEER_TIMEOUT = process.env.PUPPETEER_TIMEOUT; -// The Jest timeout is increased because these tests are a bit slow +// The Jest timeout is increased because these tests are a bit slow. jest.setTimeout( PUPPETEER_TIMEOUT || 100000 ); async function setupBrowser() { diff --git a/packages/e2e-tests/config/setup-test-framework.js b/packages/e2e-tests/config/setup-test-framework.js index 33388eb989ab6..ed1d92f67bf19 100644 --- a/packages/e2e-tests/config/setup-test-framework.js +++ b/packages/e2e-tests/config/setup-test-framework.js @@ -13,6 +13,7 @@ import { clearLocalStorage, enablePageDialogAccept, isOfflineMode, + resetPreferences, setBrowserViewport, trashAllPosts, } from '@wordpress/e2e-test-utils'; @@ -65,9 +66,16 @@ const OBSERVED_CONSOLE_MESSAGE_TYPES = { */ const pageEvents = []; -// The Jest timeout is increased because these tests are a bit slow +// The Jest timeout is increased because these tests are a bit slow. jest.setTimeout( PUPPETEER_TIMEOUT || 100000 ); +// Retry failed tests at most 2 times in CI. +// This enables `flaky-tests-reporter` and `report-flaky-tests` GitHub action +// to mark test as flaky and automatically create a tracking issue about it. +if ( process.env.CI ) { + jest.retryTimes( 2 ); +} + async function setupBrowser() { await clearLocalStorage(); await setBrowserViewport( 'large' ); @@ -235,14 +243,19 @@ beforeAll( async () => { enablePageDialogAccept(); observeConsoleLogging(); await simulateAdverseConditions(); + await resetPreferences(); await activateTheme( 'twentytwentyone' ); await trashAllPosts(); await trashAllPosts( 'wp_block' ); await setupBrowser(); await activatePlugin( 'gutenberg-test-plugin-disables-the-css-animations' ); + await page.emulateMediaFeatures( [ + { name: 'prefers-reduced-motion', value: 'reduce' }, + ] ); } ); afterEach( async () => { + await resetPreferences(); await setupBrowser(); } ); diff --git a/packages/e2e-tests/experimental-features.js b/packages/e2e-tests/experimental-features.js deleted file mode 100644 index bcc6c3da8c843..0000000000000 --- a/packages/e2e-tests/experimental-features.js +++ /dev/null @@ -1,159 +0,0 @@ -/** - * WordPress dependencies - */ -import { addQueryArgs } from '@wordpress/url'; -import { visitAdminPage } from '@wordpress/e2e-test-utils'; - -async function setExperimentalFeaturesState( features, enable ) { - const query = addQueryArgs( '', { - page: 'gutenberg-experiments', - } ); - await visitAdminPage( '/admin.php', query ); - - await Promise.all( - features.map( async ( feature ) => { - await page.waitForSelector( feature ); - const checkedSelector = `${ feature }[checked=checked]`; - const isChecked = !! ( await page.$( checkedSelector ) ); - if ( ( ! isChecked && enable ) || ( isChecked && ! enable ) ) { - await page.click( feature ); - } - } ) - ); - await Promise.all( [ - page.waitForNavigation( { waitUntil: 'networkidle0' } ), - page.click( '#submit' ), - ] ); -} - -/** - * Establishes test lifecycle to enable experimental feature for the duration of - * the grouped test block. - * - * @param {Array} features Array of {string} selectors of settings to enable. - * Assumes they can be enabled with one click. - */ -export function useExperimentalFeatures( features ) { - beforeAll( () => setExperimentalFeaturesState( features, true ) ); - afterAll( () => setExperimentalFeaturesState( features, false ) ); -} - -export const navigationPanel = { - async open() { - const isOpen = !! ( await page.$( - '.edit-site-navigation-toggle.is-open' - ) ); - - if ( ! isOpen ) { - await page.click( '.edit-site-navigation-toggle__button' ); - await page.waitForSelector( '.edit-site-navigation-panel' ); - } - }, - - async close() { - const isOpen = !! ( await page.$( - '.edit-site-navigation-toggle.is-open' - ) ); - - if ( isOpen ) { - await page.click( '.edit-site-navigation-toggle__button' ); - } - }, - - async isRoot() { - const isBackToDashboardButtonVisible = !! ( await page.$( - '.edit-site-navigation-panel .edit-site-navigation-panel__back-to-dashboard' - ) ); - - return isBackToDashboardButtonVisible; - }, - - async back() { - await page.click( '.components-navigation__back-button' ); - }, - - async navigate( menus ) { - if ( ! Array.isArray( menus ) ) { - menus = [ menus ]; - } - - for ( const menu of menus ) { - ( await this.getItemByText( menu ) ).click(); - } - }, - - async backToRoot() { - while ( ! ( await this.isRoot() ) ) { - await this.back(); - } - }, - - async getItemByText( text ) { - const selector = `//div[contains(@class, "edit-site-navigation-panel")]//button[contains(., "${ text }")]`; - await page.waitForXPath( selector ); - const [ item ] = await page.$x( selector ); - return item; - }, - - async clickItemByText( text ) { - const item = await this.getItemByText( text ); - await item.click(); - }, -}; - -export const siteEditor = { - async visit( query ) { - query = addQueryArgs( '', { - page: 'gutenberg-edit-site', - ...query, - } ).slice( 1 ); - await visitAdminPage( 'admin.php', query ); - await page.waitForSelector( '.edit-site-visual-editor iframe' ); - }, - - async toggleMoreMenu() { - // eslint-disable-next-line jest/no-standalone-expect - await expect( page ).toClick( - '.edit-site-more-menu [aria-label="More tools & options"]' - ); - }, - - async clickOnMoreMenuItem( buttonLabel ) { - await this.toggleMoreMenu(); - const moreMenuContainerSelector = - '//*[contains(concat(" ", @class, " "), " edit-site-more-menu__content ")]'; - const elementToClick = ( - await page.$x( - `${ moreMenuContainerSelector }//span[contains(concat(" ", @class, " "), " components-menu-item__item ")][contains(text(), "${ buttonLabel }")]` - ) - )[ 0 ]; - - await elementToClick.click(); - }, - - async getEditedPostContent() { - return page.evaluate( async () => { - const postId = window.wp.data - .select( 'core/edit-site' ) - .getEditedPostId(); - const postType = window.wp.data - .select( 'core/edit-site' ) - .getEditedPostType(); - const record = window.wp.data - .select( 'core' ) - .getEditedEntityRecord( 'postType', postType, postId ); - if ( record ) { - if ( typeof record.content === 'function' ) { - return record.content( record ); - } else if ( record.blocks ) { - return window.wp.blocks.__unstableSerializeAndClean( - record.blocks - ); - } else if ( record.content ) { - return record.content; - } - } - return ''; - } ); - }, -}; diff --git a/packages/e2e-tests/jest.config.js b/packages/e2e-tests/jest.config.js index 9311a0d621337..5f9d5b75b24ef 100644 --- a/packages/e2e-tests/jest.config.js +++ b/packages/e2e-tests/jest.config.js @@ -1,6 +1,12 @@ +/** + * WordPress dependencies + */ +const baseConfig = require( '@wordpress/scripts/config/jest-e2e.config' ); + module.exports = { - ...require( '@wordpress/scripts/config/jest-e2e.config' ), - setupFiles: [ '/config/gutenberg-phase.js' ], + ...baseConfig, + testMatch: [ '/specs/**/*.test.js' ], + setupFiles: [ '/config/is-gutenberg-plugin.js' ], setupFilesAfterEnv: [ '/config/setup-test-framework.js', '@wordpress/jest-console', @@ -12,4 +18,9 @@ module.exports = { '/node_modules/', 'e2e-tests/specs/performance/', ], + reporters: [ + ...baseConfig.reporters, + // Report flaky tests results into artifacts for used in `report-flaky-tests` action. + process.env.CI && '/config/flaky-tests-reporter.js', + ].filter( Boolean ), }; diff --git a/packages/e2e-tests/jest.performance.config.js b/packages/e2e-tests/jest.performance.config.js index a13d06b943c95..743836ee2e82f 100644 --- a/packages/e2e-tests/jest.performance.config.js +++ b/packages/e2e-tests/jest.performance.config.js @@ -1,7 +1,7 @@ module.exports = { ...require( '@wordpress/scripts/config/jest-e2e.config' ), testMatch: [ '**/performance/*.test.js' ], - setupFiles: [ '/config/gutenberg-phase.js' ], + setupFiles: [ '/config/is-gutenberg-plugin.js' ], setupFilesAfterEnv: [ '/config/setup-performance-test.js', '@wordpress/jest-console', diff --git a/packages/e2e-tests/mu-plugins/enable-templates-ui.php b/packages/e2e-tests/mu-plugins/enable-templates-ui.php new file mode 100644 index 0000000000000..0fe1056d4624b --- /dev/null +++ b/packages/e2e-tests/mu-plugins/enable-templates-ui.php @@ -0,0 +1,24 @@ +=26", - "jest-snapshot": ">=26", - "puppeteer": ">=1.19.0" + "jest": ">=27", + "puppeteer-core": ">=11", + "react": "^17.0.0", + "react-dom": "^17.0.0" }, "publishConfig": { "access": "public" diff --git a/packages/e2e-tests/plugins/block-api.php b/packages/e2e-tests/plugins/block-api.php new file mode 100644 index 0000000000000..e0609f7adc0ff --- /dev/null +++ b/packages/e2e-tests/plugins/block-api.php @@ -0,0 +1,26 @@ + { + if ( name === 'e2e-tests/hello-world' ) { + return { + ...blockType, + title: 'Filtered Hello World', + }; + } + + return blockType; + } + ); +} )(); diff --git a/packages/e2e-tests/plugins/class-test-widget.php b/packages/e2e-tests/plugins/class-test-widget.php index a3ae60658c0d1..11ce978257fe4 100644 --- a/packages/e2e-tests/plugins/class-test-widget.php +++ b/packages/e2e-tests/plugins/class-test-widget.php @@ -48,7 +48,7 @@ public function form( $instance ) { ?>

- +

{ + const { createElement: el } = element; + const { registerBlockType } = blocks; + const { useBlockProps } = blockEditor; + const { useRefEffect } = compose; + + registerBlockType( 'test/iframed-block', { + edit: function Edit() { + const ref = useRefEffect( ( node ) => { + $( node ).test(); + }, [] ); + return el( 'p', useBlockProps( { ref } ), 'Iframed Block (edit)' ); + }, + save: function Save() { + return el( 'p', useBlockProps.save(), 'Iframed Block (saved)' ); + }, + } ); +} )( window ); diff --git a/packages/e2e-tests/plugins/iframed-block/jquery.test.js b/packages/e2e-tests/plugins/iframed-block/jquery.test.js new file mode 100644 index 0000000000000..901a6f1281927 --- /dev/null +++ b/packages/e2e-tests/plugins/iframed-block/jquery.test.js @@ -0,0 +1,7 @@ +( ( $ ) => { + $.fn.test = function() { + return this.each( function() { + $( this ).text( 'Iframed Block (set with jQuery)' ); + } ); + }; +} )( window.jQuery ); diff --git a/packages/e2e-tests/plugins/iframed-block/script.js b/packages/e2e-tests/plugins/iframed-block/script.js new file mode 100644 index 0000000000000..f8872070f682b --- /dev/null +++ b/packages/e2e-tests/plugins/iframed-block/script.js @@ -0,0 +1,7 @@ +( ( win ) => { + const { jQuery: $ } = win; + win.addEventListener( 'DOMContentLoaded', () => { + $( '.wp-block-test-iframed-block' ).test(); + } ); +} )( window ); + diff --git a/packages/e2e-tests/plugins/iframed-block/style.css b/packages/e2e-tests/plugins/iframed-block/style.css new file mode 100644 index 0000000000000..42708ad70cbad --- /dev/null +++ b/packages/e2e-tests/plugins/iframed-block/style.css @@ -0,0 +1,9 @@ +/** + * The following styles get applied both on the front of your site + * and in the editor. + */ +.wp-block-test-iframed-block { + background-color: #21759b; + color: #fff; + padding: 2px; +} diff --git a/packages/e2e-tests/plugins/iframed-multiple-stylesheets.php b/packages/e2e-tests/plugins/iframed-multiple-stylesheets.php new file mode 100644 index 0000000000000..40d7d5040083c --- /dev/null +++ b/packages/e2e-tests/plugins/iframed-multiple-stylesheets.php @@ -0,0 +1,44 @@ + { + const { createElement: el } = element; + const { registerBlockType } = blocks; + const { useBlockProps } = blockEditor; + + registerBlockType( 'test/iframed-multiple-stylesheets', { + apiVersion: 2, + edit: function Edit() { + return el( 'div', useBlockProps(), 'Edit' ); + }, + save: function Save() { + return el( 'div', useBlockProps.save(), 'Save' ); + }, + } ); +} )( window ); diff --git a/packages/e2e-tests/plugins/iframed-multiple-stylesheets/style.css b/packages/e2e-tests/plugins/iframed-multiple-stylesheets/style.css new file mode 100644 index 0000000000000..351cdb9ca6b28 --- /dev/null +++ b/packages/e2e-tests/plugins/iframed-multiple-stylesheets/style.css @@ -0,0 +1,7 @@ +/** + * The following styles get applied both on the front of your site and in the + * editor. + */ +.wp-block-test-iframed-multiple-stylesheets { + border-style: dashed; +} diff --git a/packages/e2e-tests/plugins/iframed-multiple-stylesheets/style2.css b/packages/e2e-tests/plugins/iframed-multiple-stylesheets/style2.css new file mode 100644 index 0000000000000..f49bf1d2c963b --- /dev/null +++ b/packages/e2e-tests/plugins/iframed-multiple-stylesheets/style2.css @@ -0,0 +1,7 @@ +/** + * The following styles get applied both on the front of your site and in the + * editor. + */ +.wp-block-test-iframed-multiple-stylesheets { + border-color: #f00 !important; +} diff --git a/packages/e2e-tests/plugins/iframed-multiple-stylesheets/style3.css b/packages/e2e-tests/plugins/iframed-multiple-stylesheets/style3.css new file mode 100644 index 0000000000000..56c10870e153f --- /dev/null +++ b/packages/e2e-tests/plugins/iframed-multiple-stylesheets/style3.css @@ -0,0 +1,7 @@ +/** + * The following styles get applied both on the front of your site and in the + * editor. + */ + .wp-block-test-iframed-multiple-stylesheets { + background-color: #000 !important; +} diff --git a/packages/e2e-tests/plugins/plugins-api/error-boundary.js b/packages/e2e-tests/plugins/plugins-api/error-boundary.js new file mode 100644 index 0000000000000..aca34d5c786ca --- /dev/null +++ b/packages/e2e-tests/plugins/plugins-api/error-boundary.js @@ -0,0 +1,11 @@ +( function () { + const registerPlugin = wp.plugins.registerPlugin; + + function MyErrorPlugin() { + throw new Error('Whoops!'); + } + + registerPlugin( 'my-error-plugin', { + render: MyErrorPlugin, + } ); +} )(); diff --git a/packages/e2e-tests/plugins/plugins-error-boundary.php b/packages/e2e-tests/plugins/plugins-error-boundary.php new file mode 100644 index 0000000000000..174ec3578f3ba --- /dev/null +++ b/packages/e2e-tests/plugins/plugins-error-boundary.php @@ -0,0 +1,27 @@ + __( 'Query Test 1', 'gutenberg' ), 'blockTypes' => array( 'core/query' ), - 'content' => ' + 'content' => ' @@ -28,7 +28,7 @@ array( 'title' => __( 'Query Test 2', 'gutenberg' ), 'blockTypes' => array( 'core/query' ), - 'content' => ' + 'content' => ' diff --git a/packages/e2e-tests/specs/editor/blocks/__snapshots__/buttons.test.js.snap b/packages/e2e-tests/specs/editor/blocks/__snapshots__/buttons.test.js.snap index 66f803ddcf139..58feb9236d7dd 100644 --- a/packages/e2e-tests/specs/editor/blocks/__snapshots__/buttons.test.js.snap +++ b/packages/e2e-tests/specs/editor/blocks/__snapshots__/buttons.test.js.snap @@ -3,7 +3,7 @@ exports[`Buttons can jump to the link editor using the keyboard shortcut 1`] = ` " " `; @@ -11,7 +11,15 @@ exports[`Buttons can jump to the link editor using the keyboard shortcut 1`] = ` exports[`Buttons dismisses link editor when escape is pressed 1`] = ` " +" +`; + +exports[`Buttons has focus on button content (slash inserter) 1`] = ` +" + " `; @@ -19,7 +27,7 @@ exports[`Buttons dismisses link editor when escape is pressed 1`] = ` exports[`Buttons has focus on button content 1`] = ` " " `; diff --git a/packages/e2e-tests/specs/editor/blocks/__snapshots__/code.test.js.snap b/packages/e2e-tests/specs/editor/blocks/__snapshots__/code.test.js.snap deleted file mode 100644 index 3b30c08206ba0..0000000000000 --- a/packages/e2e-tests/specs/editor/blocks/__snapshots__/code.test.js.snap +++ /dev/null @@ -1,14 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`Code can be created by three backticks and enter 1`] = ` -" -
<?php
-" -`; - -exports[`Code should paste plain text 1`] = ` -" -
<img />
-	<br>
-" -`; diff --git a/packages/e2e-tests/specs/editor/blocks/__snapshots__/heading.test.js.snap b/packages/e2e-tests/specs/editor/blocks/__snapshots__/heading.test.js.snap index c340a475f354a..b175d82c81d1f 100644 --- a/packages/e2e-tests/specs/editor/blocks/__snapshots__/heading.test.js.snap +++ b/packages/e2e-tests/specs/editor/blocks/__snapshots__/heading.test.js.snap @@ -12,12 +12,6 @@ exports[`Heading can be created by prefixing number sign and a space 1`] = ` " `; -exports[`Heading should correctly apply custom colors 1`] = ` -" -

Heading

-" -`; - exports[`Heading should correctly apply named colors 1`] = ` "

Heading

diff --git a/packages/e2e-tests/specs/editor/blocks/__snapshots__/html.test.js.snap b/packages/e2e-tests/specs/editor/blocks/__snapshots__/html.test.js.snap deleted file mode 100644 index b72664d021276..0000000000000 --- a/packages/e2e-tests/specs/editor/blocks/__snapshots__/html.test.js.snap +++ /dev/null @@ -1,8 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`HTML block can be created by typing "/html" 1`] = ` -" -

Pythagorean theorem: -a2 + b2 = c2

-" -`; diff --git a/packages/e2e-tests/specs/editor/blocks/__snapshots__/image.test.js.snap b/packages/e2e-tests/specs/editor/blocks/__snapshots__/image.test.js.snap deleted file mode 100644 index a161f1231c6e4..0000000000000 --- a/packages/e2e-tests/specs/editor/blocks/__snapshots__/image.test.js.snap +++ /dev/null @@ -1,25 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`Image allows changing aspect ratio using the crop tools 1`] = `"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/4gIoSUNDX1BST0ZJTEUAAQEAAAIYAAAAAAIQAABtbnRyUkdCIFhZWiAAAAAAAAAAAAAAAABhY3NwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA9tYAAQAAAADTLQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlkZXNjAAAA8AAAAHRyWFlaAAABZAAAABRnWFlaAAABeAAAABRiWFlaAAABjAAAABRyVFJDAAABoAAAAChnVFJDAAABoAAAAChiVFJDAAABoAAAACh3dHB0AAAByAAAABRjcHJ0AAAB3AAAADxtbHVjAAAAAAAAAAEAAAAMZW5VUwAAAFgAAAAcAHMAUgBHAEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFhZWiAAAAAAAABvogAAOPUAAAOQWFlaIAAAAAAAAGKZAAC3hQAAGNpYWVogAAAAAAAAJKAAAA+EAAC2z3BhcmEAAAAAAAQAAAACZmYAAPKnAAANWQAAE9AAAApbAAAAAAAAAABYWVogAAAAAAAA9tYAAQAAAADTLW1sdWMAAAAAAAAAAQAAAAxlblVTAAAAIAAAABwARwBvAG8AZwBsAGUAIABJAG4AYwAuACAAMgAwADEANv/bAEMAAwICAgICAwICAgMDAwMEBgQEBAQECAYGBQYJCAoKCQgJCQoMDwwKCw4LCQkNEQ0ODxAQERAKDBITEhATDxAQEP/bAEMBAwMDBAMECAQECBALCQsQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEP/AABEIAAoACgMBIgACEQEDEQH/xAAVAAEBAAAAAAAAAAAAAAAAAAAJB//EACAQAAADCQEAAAAAAAAAAAAAAAAEBQEDBgk1OHR3srX/xAAUAQEAAAAAAAAAAAAAAAAAAAAA/8QAFBEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEQMRAD8AlMlS6eKdfnvRTgrytVTuQ86aChkqXTxTr896KcFeVqqdyHnTQH//2Q=="`; - -exports[`Image allows changing aspect ratio using the crop tools 2`] = `"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/4gIoSUNDX1BST0ZJTEUAAQEAAAIYAAAAAAIQAABtbnRyUkdCIFhZWiAAAAAAAAAAAAAAAABhY3NwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA9tYAAQAAAADTLQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlkZXNjAAAA8AAAAHRyWFlaAAABZAAAABRnWFlaAAABeAAAABRiWFlaAAABjAAAABRyVFJDAAABoAAAAChnVFJDAAABoAAAAChiVFJDAAABoAAAACh3dHB0AAAByAAAABRjcHJ0AAAB3AAAADxtbHVjAAAAAAAAAAEAAAAMZW5VUwAAAFgAAAAcAHMAUgBHAEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFhZWiAAAAAAAABvogAAOPUAAAOQWFlaIAAAAAAAAGKZAAC3hQAAGNpYWVogAAAAAAAAJKAAAA+EAAC2z3BhcmEAAAAAAAQAAAACZmYAAPKnAAANWQAAE9AAAApbAAAAAAAAAABYWVogAAAAAAAA9tYAAQAAAADTLW1sdWMAAAAAAAAAAQAAAAxlblVTAAAAIAAAABwARwBvAG8AZwBsAGUAIABJAG4AYwAuACAAMgAwADEANv/bAEMAAwICAgICAwICAgMDAwMEBgQEBAQECAYGBQYJCAoKCQgJCQoMDwwKCw4LCQkNEQ0ODxAQERAKDBITEhATDxAQEP/bAEMBAwMDBAMECAQECBALCQsQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEP/AABEIAAYACgMBIgACEQEDEQH/xAAWAAEBAQAAAAAAAAAAAAAAAAAABwn/xAAgEAABAgUFAAAAAAAAAAAAAAAABAUBAwYJNTh0d7K1/8QAFAEBAAAAAAAAAAAAAAAAAAAAAP/EABQRAQAAAAAAAAAAAAAAAAAAAAD/2gAMAwEAAhEDEQA/AJTZU1T1Tx+u9FuNXnbKrdxM7RAA/9k="`; - -exports[`Image allows rotating using the crop tools 1`] = `"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/4gIoSUNDX1BST0ZJTEUAAQEAAAIYAAAAAAIQAABtbnRyUkdCIFhZWiAAAAAAAAAAAAAAAABhY3NwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA9tYAAQAAAADTLQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlkZXNjAAAA8AAAAHRyWFlaAAABZAAAABRnWFlaAAABeAAAABRiWFlaAAABjAAAABRyVFJDAAABoAAAAChnVFJDAAABoAAAAChiVFJDAAABoAAAACh3dHB0AAAByAAAABRjcHJ0AAAB3AAAADxtbHVjAAAAAAAAAAEAAAAMZW5VUwAAAFgAAAAcAHMAUgBHAEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFhZWiAAAAAAAABvogAAOPUAAAOQWFlaIAAAAAAAAGKZAAC3hQAAGNpYWVogAAAAAAAAJKAAAA+EAAC2z3BhcmEAAAAAAAQAAAACZmYAAPKnAAANWQAAE9AAAApbAAAAAAAAAABYWVogAAAAAAAA9tYAAQAAAADTLW1sdWMAAAAAAAAAAQAAAAxlblVTAAAAIAAAABwARwBvAG8AZwBsAGUAIABJAG4AYwAuACAAMgAwADEANv/bAEMAAwICAgICAwICAgMDAwMEBgQEBAQECAYGBQYJCAoKCQgJCQoMDwwKCw4LCQkNEQ0ODxAQERAKDBITEhATDxAQEP/bAEMBAwMDBAMECAQECBALCQsQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEP/AABEIAAoACgMBIgACEQEDEQH/xAAVAAEBAAAAAAAAAAAAAAAAAAAJB//EACAQAAADCQEAAAAAAAAAAAAAAAAEBQEDBgk1OHR3srX/xAAUAQEAAAAAAAAAAAAAAAAAAAAA/8QAFBEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEQMRAD8AlMlS6eKdfnvRTgrytVTuQ86aChkqXTxTr896KcFeVqqdyHnTQH//2Q=="`; - -exports[`Image allows rotating using the crop tools 2`] = `"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/4gIoSUNDX1BST0ZJTEUAAQEAAAIYAAAAAAIQAABtbnRyUkdCIFhZWiAAAAAAAAAAAAAAAABhY3NwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA9tYAAQAAAADTLQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlkZXNjAAAA8AAAAHRyWFlaAAABZAAAABRnWFlaAAABeAAAABRiWFlaAAABjAAAABRyVFJDAAABoAAAAChnVFJDAAABoAAAAChiVFJDAAABoAAAACh3dHB0AAAByAAAABRjcHJ0AAAB3AAAADxtbHVjAAAAAAAAAAEAAAAMZW5VUwAAAFgAAAAcAHMAUgBHAEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFhZWiAAAAAAAABvogAAOPUAAAOQWFlaIAAAAAAAAGKZAAC3hQAAGNpYWVogAAAAAAAAJKAAAA+EAAC2z3BhcmEAAAAAAAQAAAACZmYAAPKnAAANWQAAE9AAAApbAAAAAAAAAABYWVogAAAAAAAA9tYAAQAAAADTLW1sdWMAAAAAAAAAAQAAAAxlblVTAAAAIAAAABwARwBvAG8AZwBsAGUAIABJAG4AYwAuACAAMgAwADEANv/bAEMAAwICAgICAwICAgMDAwMEBgQEBAQECAYGBQYJCAoKCQgJCQoMDwwKCw4LCQkNEQ0ODxAQERAKDBITEhATDxAQEP/bAEMBAwMDBAMECAQECBALCQsQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEP/AABEIAAoACgMBIgACEQEDEQH/xAAWAAEBAQAAAAAAAAAAAAAAAAAABwn/xAAhEAAAAgsBAAAAAAAAAAAAAAAABQIEBwgVGVVWk5XR1P/EABQBAQAAAAAAAAAAAAAAAAAAAAD/xAAUEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwCUyVHp7+ZVtTHwhJUenv5lW1MfCNXosa1NbzJdCLGtTW8yXQH/2Q=="`; - -exports[`Image allows zooming using the crop tools 1`] = `"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/4gIoSUNDX1BST0ZJTEUAAQEAAAIYAAAAAAIQAABtbnRyUkdCIFhZWiAAAAAAAAAAAAAAAABhY3NwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA9tYAAQAAAADTLQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlkZXNjAAAA8AAAAHRyWFlaAAABZAAAABRnWFlaAAABeAAAABRiWFlaAAABjAAAABRyVFJDAAABoAAAAChnVFJDAAABoAAAAChiVFJDAAABoAAAACh3dHB0AAAByAAAABRjcHJ0AAAB3AAAADxtbHVjAAAAAAAAAAEAAAAMZW5VUwAAAFgAAAAcAHMAUgBHAEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFhZWiAAAAAAAABvogAAOPUAAAOQWFlaIAAAAAAAAGKZAAC3hQAAGNpYWVogAAAAAAAAJKAAAA+EAAC2z3BhcmEAAAAAAAQAAAACZmYAAPKnAAANWQAAE9AAAApbAAAAAAAAAABYWVogAAAAAAAA9tYAAQAAAADTLW1sdWMAAAAAAAAAAQAAAAxlblVTAAAAIAAAABwARwBvAG8AZwBsAGUAIABJAG4AYwAuACAAMgAwADEANv/bAEMAAwICAgICAwICAgMDAwMEBgQEBAQECAYGBQYJCAoKCQgJCQoMDwwKCw4LCQkNEQ0ODxAQERAKDBITEhATDxAQEP/bAEMBAwMDBAMECAQECBALCQsQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEP/AABEIAAoACgMBIgACEQEDEQH/xAAVAAEBAAAAAAAAAAAAAAAAAAAJB//EACAQAAADCQEAAAAAAAAAAAAAAAAEBQEDBgk1OHR3srX/xAAUAQEAAAAAAAAAAAAAAAAAAAAA/8QAFBEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEQMRAD8AlMlS6eKdfnvRTgrytVTuQ86aChkqXTxTr896KcFeVqqdyHnTQH//2Q=="`; - -exports[`Image allows zooming using the crop tools 2`] = `"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/4gIoSUNDX1BST0ZJTEUAAQEAAAIYAAAAAAIQAABtbnRyUkdCIFhZWiAAAAAAAAAAAAAAAABhY3NwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA9tYAAQAAAADTLQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlkZXNjAAAA8AAAAHRyWFlaAAABZAAAABRnWFlaAAABeAAAABRiWFlaAAABjAAAABRyVFJDAAABoAAAAChnVFJDAAABoAAAAChiVFJDAAABoAAAACh3dHB0AAAByAAAABRjcHJ0AAAB3AAAADxtbHVjAAAAAAAAAAEAAAAMZW5VUwAAAFgAAAAcAHMAUgBHAEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFhZWiAAAAAAAABvogAAOPUAAAOQWFlaIAAAAAAAAGKZAAC3hQAAGNpYWVogAAAAAAAAJKAAAA+EAAC2z3BhcmEAAAAAAAQAAAACZmYAAPKnAAANWQAAE9AAAApbAAAAAAAAAABYWVogAAAAAAAA9tYAAQAAAADTLW1sdWMAAAAAAAAAAQAAAAxlblVTAAAAIAAAABwARwBvAG8AZwBsAGUAIABJAG4AYwAuACAAMgAwADEANv/bAEMAAwICAgICAwICAgMDAwMEBgQEBAQECAYGBQYJCAoKCQgJCQoMDwwKCw4LCQkNEQ0ODxAQERAKDBITEhATDxAQEP/bAEMBAwMDBAMECAQECBALCQsQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEP/AABEIAAUABQMBIgACEQEDEQH/xAAVAAEBAAAAAAAAAAAAAAAAAAAACP/EABoQAQABBQAAAAAAAAAAAAAAAAAEBwk4hbX/xAAUAQEAAAAAAAAAAAAAAAAAAAAA/8QAFBEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEQMRAD8Aqm1xgnTLddiaAD//2Q=="`; - -exports[`Image should drag and drop files into media placeholder 1`] = ` -" -
\\"\\"/
-" -`; - -exports[`Image should undo without broken temporary state 1`] = ` -" -
\\"\\"/
-" -`; diff --git a/packages/e2e-tests/specs/editor/blocks/__snapshots__/navigation.test.js.snap b/packages/e2e-tests/specs/editor/blocks/__snapshots__/navigation.test.js.snap new file mode 100644 index 0000000000000..dc059131ca7b5 --- /dev/null +++ b/packages/e2e-tests/specs/editor/blocks/__snapshots__/navigation.test.js.snap @@ -0,0 +1,47 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Navigation Creating and restarting converts uncontrolled inner blocks to an entity when modifications are made to the blocks 1`] = `""`; + +exports[`Navigation Placeholder placeholder actions allows a navigation block to be created from existing menus 1`] = ` +" + + + + + + + + + + + + + + + + + + + + + + + +" +`; + +exports[`Navigation Placeholder placeholder actions creates an empty navigation block when the selected existing menu is also empty 1`] = `""`; + +exports[`Navigation allows an empty navigation block to be created and manually populated using a mixture of internal and external links 1`] = ` +" + +" +`; + +exports[`Navigation allows pages to be created from the navigation block and their links added to menu 1`] = `""`; + +exports[`Navigation encodes URL when create block if needed 1`] = ` +" + +" +`; diff --git a/packages/e2e-tests/specs/editor/blocks/__snapshots__/preformatted.test.js.snap b/packages/e2e-tests/specs/editor/blocks/__snapshots__/preformatted.test.js.snap deleted file mode 100644 index 37881193bbaca..0000000000000 --- a/packages/e2e-tests/specs/editor/blocks/__snapshots__/preformatted.test.js.snap +++ /dev/null @@ -1,24 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`Preformatted should preserve character newlines 1`] = ` -" -
1
-2
-" -`; - -exports[`Preformatted should preserve character newlines 2`] = ` -" -
0
-1
-2
-" -`; - -exports[`Preformatted should preserve white space when merging 1`] = ` -" -
1
-2
-3
-" -`; diff --git a/packages/e2e-tests/specs/editor/blocks/__snapshots__/separator.test.js.snap b/packages/e2e-tests/specs/editor/blocks/__snapshots__/separator.test.js.snap index 41466bc4de250..9afc30c0e3271 100644 --- a/packages/e2e-tests/specs/editor/blocks/__snapshots__/separator.test.js.snap +++ b/packages/e2e-tests/specs/editor/blocks/__snapshots__/separator.test.js.snap @@ -2,6 +2,6 @@ exports[`Separator can be created by three dashes and enter 1`] = ` " -
+
" `; diff --git a/packages/e2e-tests/specs/editor/blocks/__snapshots__/spacer.test.js.snap b/packages/e2e-tests/specs/editor/blocks/__snapshots__/spacer.test.js.snap index cfd7c9149d512..d63bd30a0e061 100644 --- a/packages/e2e-tests/specs/editor/blocks/__snapshots__/spacer.test.js.snap +++ b/packages/e2e-tests/specs/editor/blocks/__snapshots__/spacer.test.js.snap @@ -7,7 +7,7 @@ exports[`Spacer can be created by typing "/spacer" 1`] = ` `; exports[`Spacer can be resized using the drag handle and remains selected after being dragged 1`] = ` -" +"
" `; diff --git a/packages/e2e-tests/specs/editor/blocks/buttons.test.js b/packages/e2e-tests/specs/editor/blocks/buttons.test.js index 9253d29b1cbd4..5d1e630be0951 100644 --- a/packages/e2e-tests/specs/editor/blocks/buttons.test.js +++ b/packages/e2e-tests/specs/editor/blocks/buttons.test.js @@ -6,6 +6,7 @@ import { getEditedPostContent, createNewPost, pressKeyWithModifier, + clickBlockAppender, } from '@wordpress/e2e-test-utils'; describe( 'Buttons', () => { @@ -20,6 +21,15 @@ describe( 'Buttons', () => { expect( await getEditedPostContent() ).toMatchSnapshot(); } ); + it( 'has focus on button content (slash inserter)', async () => { + await clickBlockAppender(); + await page.keyboard.type( '/buttons' ); + await page.keyboard.press( 'Enter' ); + await page.keyboard.type( 'Content' ); + + expect( await getEditedPostContent() ).toMatchSnapshot(); + } ); + it( 'dismisses link editor when escape is pressed', async () => { // Regression: https://github.com/WordPress/gutenberg/pull/19885 await insertBlock( 'Buttons' ); @@ -38,6 +48,36 @@ describe( 'Buttons', () => { expect( await getEditedPostContent() ).toMatchSnapshot(); } ); + it( 'moves focus from the link editor back to the button when escape is pressed after the URL has been submitted', async () => { + // Regression: https://github.com/WordPress/gutenberg/issues/34307 + await insertBlock( 'Buttons' ); + await pressKeyWithModifier( 'primary', 'k' ); + await page.waitForFunction( + () => !! document.activeElement.closest( '.block-editor-url-input' ) + ); + await page.keyboard.type( 'https://example.com' ); + await page.keyboard.press( 'Enter' ); + await page.waitForFunction( + () => + document.activeElement === + document.querySelector( + '.block-editor-link-control a[href="https://example.com"]' + ) + ); + await page.keyboard.press( 'Escape' ); + + // Focus should move from the link control to the button block's text. + await page.waitForFunction( + () => + document.activeElement === + document.querySelector( '[aria-label="Button text"]' ) + ); + + // The link control should still be visible when a URL is set. + const linkControl = await page.$( '.block-editor-link-control' ); + expect( linkControl ).toBeTruthy(); + } ); + it( 'can jump to the link editor using the keyboard shortcut', async () => { await insertBlock( 'Buttons' ); await page.keyboard.type( 'WordPress' ); diff --git a/packages/e2e-tests/specs/editor/blocks/classic.test.js b/packages/e2e-tests/specs/editor/blocks/classic.test.js index d48cd0b826784..1ac9544ceddbb 100644 --- a/packages/e2e-tests/specs/editor/blocks/classic.test.js +++ b/packages/e2e-tests/specs/editor/blocks/classic.test.js @@ -45,14 +45,17 @@ describe( 'Classic', () => { await page.keyboard.type( 'test' ); // Click the image button. - await page.waitForSelector( 'div[aria-label^="Add Media"]' ); - await page.click( 'div[aria-label^="Add Media"]' ); + const addMediaButton = await page.waitForSelector( + 'div[aria-label^="Add Media"]' + ); + await addMediaButton.click(); await page.click( '.media-menu-item#menu-item-gallery' ); // Wait for media modal to appear and upload image. - await page.waitForSelector( '.media-modal input[type=file]' ); - const inputElement = await page.$( '.media-modal input[type=file]' ); + const inputElement = await page.waitForSelector( + '.media-modal .moxie-shim input[type=file]' + ); const testImagePath = path.join( __dirname, '..', @@ -91,6 +94,7 @@ describe( 'Classic', () => { // Check that you can undo back to a Classic block gallery in one step. await pressKeyWithModifier( 'primary', 'z' ); + await page.waitForSelector( 'div[aria-label="Block: Classic"]' ); expect( await getEditedPostContent() ).toMatch( /\[gallery ids=\"\d+\"\]/ ); @@ -102,7 +106,7 @@ describe( 'Classic', () => { } ); it( 'Should not fail after save/reload', async () => { - // Might move to utils if this becomes useful enough for other tests + // Might move to utils if this becomes useful enough for other tests. const runWithoutCache = async ( cb ) => { try { await page.setCacheEnabled( false ); @@ -124,7 +128,7 @@ describe( 'Classic', () => { // Move focus away. await pressKeyWithModifier( 'shift', 'Tab' ); - // Save + // Save. await saveDraft(); // Reload diff --git a/packages/e2e-tests/specs/editor/blocks/code.test.js b/packages/e2e-tests/specs/editor/blocks/code.test.js deleted file mode 100644 index 3747afec5e632..0000000000000 --- a/packages/e2e-tests/specs/editor/blocks/code.test.js +++ /dev/null @@ -1,48 +0,0 @@ -/** - * WordPress dependencies - */ -import { - insertBlock, - clickBlockAppender, - getEditedPostContent, - createNewPost, - setClipboardData, - pressKeyWithModifier, -} from '@wordpress/e2e-test-utils'; - -describe( 'Code', () => { - beforeEach( async () => { - await createNewPost(); - } ); - - it( 'can be created by three backticks and enter', async () => { - await clickBlockAppender(); - await page.keyboard.type( '```' ); - await page.keyboard.press( 'Enter' ); - await page.keyboard.type( ' { - await insertBlock( 'Code' ); - await page.keyboard.type( 'a' ); - - await page.keyboard.press( 'Backspace' ); - await page.keyboard.press( 'Backspace' ); - - // Expect code block to be deleted. - expect( await getEditedPostContent() ).toBe( '' ); - } ); - - it( 'should paste plain text', async () => { - await insertBlock( 'Code' ); - - // Test to see if HTML and white space is kept. - await setClipboardData( { plainText: '\n\t
' } ); - - await pressKeyWithModifier( 'primary', 'v' ); - - expect( await getEditedPostContent() ).toMatchSnapshot(); - } ); -} ); diff --git a/packages/e2e-tests/specs/editor/blocks/columns.test.js b/packages/e2e-tests/specs/editor/blocks/columns.test.js index da30710f5c43c..bbbbc58708905 100644 --- a/packages/e2e-tests/specs/editor/blocks/columns.test.js +++ b/packages/e2e-tests/specs/editor/blocks/columns.test.js @@ -7,6 +7,7 @@ import { insertBlock, openGlobalBlockInserter, closeGlobalBlockInserter, + getListViewBlocks, } from '@wordpress/e2e-test-utils'; describe( 'Columns', () => { @@ -19,10 +20,9 @@ describe( 'Columns', () => { await closeGlobalBlockInserter(); await page.click( '[aria-label="Two columns; equal split"]' ); await page.click( '.edit-post-header-toolbar__list-view-toggle' ); + const columnBlockMenuItem = ( - await page.$x( - '//button[contains(concat(" ", @class, " "), " block-editor-list-view-block-select-button ")][text()="Column"]' - ) + await getListViewBlocks( 'Column' ) )[ 0 ]; await columnBlockMenuItem.click(); await openGlobalBlockInserter(); diff --git a/packages/e2e-tests/specs/editor/blocks/comments.test.js b/packages/e2e-tests/specs/editor/blocks/comments.test.js new file mode 100644 index 0000000000000..e68d23f34fb7d --- /dev/null +++ b/packages/e2e-tests/specs/editor/blocks/comments.test.js @@ -0,0 +1,131 @@ +/** + * WordPress dependencies + */ +import { + activateTheme, + createNewPost, + insertBlock, + pressKeyTimes, + publishPost, + setOption, + trashAllComments, +} from '@wordpress/e2e-test-utils'; + +describe( 'Comments', () => { + let previousPageComments, + previousCommentsPerPage, + previousDefaultCommentsPage; + beforeAll( async () => { + await activateTheme( 'emptytheme' ); + previousPageComments = await setOption( 'page_comments', '1' ); + previousCommentsPerPage = await setOption( 'comments_per_page', '1' ); + previousDefaultCommentsPage = await setOption( + 'default_comments_page', + 'newest' + ); + } ); + it( 'We show no results message if there are no comments', async () => { + await trashAllComments(); + await createNewPost(); + await insertBlock( 'Comments' ); + await page.waitForXPath( '//p[contains(text(), "No results found.")]' ); + } ); + it( 'Pagination links are working as expected', async () => { + await createNewPost(); + await insertBlock( 'Comments' ); + await publishPost(); + // Visit the post that was just published. + await page.click( + '.post-publish-panel__postpublish-buttons .is-primary' + ); + + // TODO: We can extract this into a util once we find we need it elsewhere. + // Create three comments for that post. + for ( let i = 0; i < 3; i++ ) { + await page.waitForSelector( 'textarea#comment' ); + await page.click( 'textarea#comment' ); + await page.type( + `textarea#comment`, + `This is an automated comment - ${ i }` + ); + await pressKeyTimes( 'Tab', 1 ); + await Promise.all( [ + page.keyboard.press( 'Enter' ), + page.waitForNavigation( { waitUntil: 'networkidle0' } ), + ] ); + } + + // We check that there is a previous comments page link. + expect( + await page.$( '.wp-block-comments-pagination-previous' ) + ).not.toBeNull(); + expect( + await page.$( '.wp-block-comments-pagination-next' ) + ).toBeNull(); + + await Promise.all( [ + page.click( '.wp-block-comments-pagination-previous' ), + page.waitForNavigation( { waitUntil: 'networkidle0' } ), + ] ); + + // We check that there are a previous and a next link. + expect( + await page.$( '.wp-block-comments-pagination-previous' ) + ).not.toBeNull(); + expect( + await page.$( '.wp-block-comments-pagination-next' ) + ).not.toBeNull(); + + await Promise.all( [ + page.click( '.wp-block-comments-pagination-previous' ), + page.waitForNavigation( { waitUntil: 'networkidle0' } ), + ] ); + + // We check that there is only have a next link + expect( + await page.$( '.wp-block-comments-pagination-previous' ) + ).toBeNull(); + expect( + await page.$( '.wp-block-comments-pagination-next' ) + ).not.toBeNull(); + } ); + it( 'Pagination links are not appearing if break comments is not enabled', async () => { + await setOption( 'page_comments', '0' ); + await createNewPost(); + await insertBlock( 'Comments' ); + await publishPost(); + // Visit the post that was just published. + await page.click( + '.post-publish-panel__postpublish-buttons .is-primary' + ); + + // Create three comments for that post. + for ( let i = 0; i < 3; i++ ) { + await page.waitForSelector( 'textarea#comment' ); + await page.click( 'textarea#comment' ); + await page.type( + `textarea#comment`, + `This is an automated comment - ${ i }` + ); + await pressKeyTimes( 'Tab', 1 ); + await Promise.all( [ + page.keyboard.press( 'Enter' ), + page.waitForNavigation( { waitUntil: 'networkidle0' } ), + ] ); + } + // We check that there are no comments page link. + expect( + await page.$( '.wp-block-comments-pagination-previous' ) + ).toBeNull(); + expect( + await page.$( '.wp-block-comments-pagination-next' ) + ).toBeNull(); + } ); + afterAll( async () => { + await trashAllComments(); + await activateTheme( 'twentytwentyone' ); + await setOption( 'page_comments', previousPageComments ); + await setOption( 'comments_per_page', previousCommentsPerPage ); + await setOption( 'default_comments_page', previousDefaultCommentsPage ); + } ); +} ); diff --git a/packages/e2e-tests/specs/editor/blocks/cover.test.js b/packages/e2e-tests/specs/editor/blocks/cover.test.js index cd737f77a3702..8381958221d06 100644 --- a/packages/e2e-tests/specs/editor/blocks/cover.test.js +++ b/packages/e2e-tests/specs/editor/blocks/cover.test.js @@ -1,3 +1,11 @@ +/** + * External dependencies + */ +import path from 'path'; +import fs from 'fs'; +import os from 'os'; +import { v4 as uuid } from 'uuid'; + /** * WordPress dependencies */ @@ -5,18 +13,115 @@ import { insertBlock, createNewPost, openDocumentSettingsSidebar, + transformBlockTo, } from '@wordpress/e2e-test-utils'; +async function upload( selector ) { + const inputElement = await page.waitForSelector( + `${ selector } input[type="file"]` + ); + const testImagePath = path.join( + __dirname, + '..', + '..', + '..', + 'assets', + '10x10_e2e_test_image_z9T8jK.png' + ); + const filename = uuid(); + const tmpFileName = path.join( os.tmpdir(), filename + '.png' ); + fs.copyFileSync( testImagePath, tmpFileName ); + await inputElement.uploadFile( tmpFileName ); + await page.waitForSelector( `${ selector } img[src$="${ filename }.png"]` ); + return filename; +} + describe( 'Cover', () => { beforeEach( async () => { await createNewPost(); } ); + it( 'can set overlay color using color picker on block placeholder', async () => { + await insertBlock( 'Cover' ); + // Get the first color option from the block placeholder's color picker. + const colorPickerButton = await page.waitForSelector( + '.wp-block-cover__placeholder-background-options .components-circular-option-picker__option-wrapper:first-child button' + ); + // Get the RGB value of the picked color. + const pickedColor = await colorPickerButton.evaluate( + ( node ) => node.style.backgroundColor + ); + // Create the block by clicking selected color button. + await colorPickerButton.click(); + // Get the block's background dim element. + const backgroundDim = await page.waitForSelector( + '.wp-block-cover .has-background-dim' + ); + // Get the RGB value of the background dim. + const dimColor = await backgroundDim.evaluate( + ( node ) => node.style.backgroundColor + ); + + expect( pickedColor ).toEqual( dimColor ); + } ); + + it( 'can set background image using image upload on block placeholder', async () => { + await insertBlock( 'Cover' ); + // Create the block using uploaded image. + const sourceImageFilename = await upload( '.wp-block-cover' ); + // Get the block's background image URL. + const blockImage = await page.waitForSelector( '.wp-block-cover img' ); + const blockImageUrl = await blockImage.evaluate( ( el ) => el.src ); + + expect( blockImageUrl ).toContain( sourceImageFilename ); + } ); + + it( 'dims background image down by 50% by default', async () => { + await insertBlock( 'Cover' ); + // Create the block using uploaded image. + await upload( '.wp-block-cover' ); + // Get the block's background dim color and its opacity. + const backgroundDim = await page.waitForSelector( + '.wp-block-cover .has-background-dim' + ); + const [ + backgroundDimColor, + backgroundDimOpacity, + ] = await page.evaluate( ( el ) => { + const computedStyle = window.getComputedStyle( el ); + return [ computedStyle.backgroundColor, computedStyle.opacity ]; + }, backgroundDim ); + + expect( backgroundDimColor ).toBe( 'rgb(0, 0, 0)' ); + expect( backgroundDimOpacity ).toBe( '0.5' ); + } ); + + it( 'can have the title edited', async () => { + await insertBlock( 'Cover' ); + // Click first color option from the block placeholder's color picker. + const colorPickerButton = await page.waitForSelector( + '.wp-block-cover__placeholder-background-options .components-circular-option-picker__option-wrapper:first-child button' + ); + await colorPickerButton.click(); + // Click the title placeholder to put the cursor inside. + const coverTitle = await page.waitForSelector( + '.wp-block-cover .wp-block-paragraph' + ); + await coverTitle.click(); + // Type the title. + await page.keyboard.type( 'foo' ); + const coverTitleText = await coverTitle.evaluate( + ( el ) => el.innerText + ); + + expect( coverTitleText ).toEqual( 'foo' ); + } ); + it( 'can be resized using drag & drop', async () => { await insertBlock( 'Cover' ); - // Close the inserter + // Close the inserter. await page.click( '.edit-post-header-toolbar__inserter-toggle' ); - // Open the sidebar + // Open the sidebar. await openDocumentSettingsSidebar(); // Choose the first solid color as the background of the cover. await page.click( @@ -26,7 +131,7 @@ describe( 'Cover', () => { // Select the cover block.By default the child paragraph gets selected. await page.click( '.edit-post-header-toolbar__list-view-toggle' ); await page.click( - '.block-editor-list-view-block__contents-container button' + '.block-editor-list-view-block__contents-container a' ); const heightInput = ( @@ -35,7 +140,7 @@ describe( 'Cover', () => { ) )[ 0 ]; - // Verify the height of the cover is not defined + // Verify the height of the cover is not defined. expect( await page.evaluate( ( { value } ) => value, heightInput ) ).toBeFalsy(); @@ -87,4 +192,33 @@ describe( 'Cover', () => { ) ).toBeGreaterThan( 100 ); } ); + + it( 'dims the background image down by 50% when transformed from the Image block', async () => { + await insertBlock( 'Image' ); + // Upload image and transform to the Cover block. + const filename = await upload( '.wp-block-image' ); + await page.waitForSelector( + `.wp-block-image img[src$="${ filename }.png"]` + ); + + // Focus the block wrapper before trying to convert to make sure figcaption toolbar is not obscuring + // the block toolbar. + await page.focus( '.wp-block-image' ); + await transformBlockTo( 'Cover' ); + + // Get the block's background dim color and its opacity. + const backgroundDim = await page.waitForSelector( + '.wp-block-cover .has-background-dim' + ); + const [ + backgroundDimColor, + backgroundDimOpacity, + ] = await page.evaluate( ( el ) => { + const computedStyle = window.getComputedStyle( el ); + return [ computedStyle.backgroundColor, computedStyle.opacity ]; + }, backgroundDim ); + + expect( backgroundDimColor ).toBe( 'rgb(0, 0, 0)' ); + expect( backgroundDimOpacity ).toBe( '0.5' ); + } ); } ); diff --git a/packages/e2e-tests/specs/editor/blocks/gallery.test.js b/packages/e2e-tests/specs/editor/blocks/gallery.test.js index e44e7ddf17b5e..0ca66f2b97758 100644 --- a/packages/e2e-tests/specs/editor/blocks/gallery.test.js +++ b/packages/e2e-tests/specs/editor/blocks/gallery.test.js @@ -14,6 +14,8 @@ import { getEditedPostContent, createNewPost, clickButton, + openListView, + getListViewBlocks, } from '@wordpress/e2e-test-utils'; async function upload( selector ) { @@ -47,7 +49,7 @@ describe( 'Gallery', () => { const filename = await upload( '.wp-block-gallery input[type="file"]' ); const regex = new RegExp( - `\\s*